Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Moy_otchyot2.docx
Скачиваний:
8
Добавлен:
25.03.2015
Размер:
269.22 Кб
Скачать

Изученные теоретические вопросы: Метод отражений

Этот метод основан на разложении матрицы системы в произведение унитарной матрицы на верхнюю треугольную. Матрицаназывается унитарной, если она удовлетворяет уравнению, где- матрица, сопряженная с. Вещественные унитарные матрицы называются ортогональными.

По своей структуре метод отражений близок к методу Гаусса, но исключение проводится с помощью матриц отражения, которые являются унитарными и эрмитовыми. Достоинством метода отражений является единая схема вычислительного процесса, не зависящая от структуры матрицы.

Пусть ипроизвольные вектор-столбцы, причем векторимеет единичную длину. Тогда найдется такой вектор, что построенная по нему матрица отраженияпереведет векторв вектор, коллинеарный вектору, т.е..

Вектор строится по правилу

,

где ,,.

Будем преобразовывать расширенную матрицу систему по правилу

,

с помощью умножения слева на последовательность матриц отражения . Для построения матрицына первом шаге метода в качестве вектораберется первый столбец расширенной матрицы, а в качестве вектора- координатный вектор. В силу выбора векторовивсе координаты первого столбца расширенной матрицы, кроме первой, после выполнения первого шага метода будут равны нулю.

Пусть уже построена матрица , у которой,,. Теперь в качествеиберутся вектора

, ,

где в векторе единица стоит на-ом месте. После выполнения-го шага метода отражений получим матрицу, у которой все элементы, стоящие ниже главной диагонали, в первых-ом столбцах будут равны нулю. Невозможность выполнения очередного шага связана только с равенством нулю вектора, а это невозможно, так как матрицаявляется невырожденной.

После - шага получим матрицу, первыестолбцов которой образуют верхнюю треугольную матрицу. Система уравнений, соответствующая полученной расширенной матрице, равносильна исходной системе (4.1). Значения неизвестных находятся аналогично обратному ходу метода Гаусса

, ,

Решение:

void main(){

printf("vvedite razmernost matrix\n");

int n;

scanf("%d",&n);

printf("vveddite matrix\n");

float A[3][4];

for(int i=0;i<n;i++)

for(int j=0;j<n;j++)

scanf("%f",&A[i][j]);

printf("vvedite svobodnie chleni\n");

for(int i=0;i<n;i++)

scanf("%f",&A[i][n]);

float s[10],l[10],fabsa,scala=0,a,p;

float U[10][10],A2[10][10],w[10];

for(int k=0;k<n-1;k++){

for(int i=0;i<n;i++){

s[i]=A[i][k];

l[i]=0;

}

for(int i=0;i<k;i++)

s[i]=0;

l[k]=1;

fabsa=0;

for(int i=0;i<n;i++)

fabsa+=s[i]*s[i];

fabsa=pow(fabsa,0.5);

scala=0;

for(int i=0;i<n;i++)

scala+=s[i]*l[i];

if(scala>0) a=-fabsa;

else a=fabsa;

p=pow(2*pow(fabsa,2)+2*fabsa*fabs(scala),0.5);

for(int i=0;i<n;i++)

w[i]=(s[i]-a*l[i])/p;

for(int i=0;i<n;i++)

for(int j=0;j<n;j++)

U[i][j]=0;

for(int i=0;i<n;i++)

U[i][i]=1;

for(int i=0;i<n;i++)

for(int j=0;j<n;j++)

U[i][j]-=2*w[i]*w[j];

for(int i=0;i<n;i++)

for(int j=0;j<n+1;j++)

A2[i][j]=0;

for(int i=0;i<n;i++)

for(int j=0;j<n+1;j++)

for(int r=0;r<n;r++)

A2[i][j]+=U[i][r]*A[r][j];

for(int i=0;i<n;i++)

for(int j=0;j<n+1;j++)

A[i][j]=A2[i][j];

for(int i=k+1;i<n;i++)

A[i][k]=0;

}

float x[10];

float sum=0;

int i;

for(i=n-1;i>-1;i--){

sum=0;

for(int k=i;k<n;k++)

sum+=A[i][k]*x[k];

x[i]=(A[i][n]-sum)/A[i][i];

}

printf("poluchenue korni\n");

for(int i=0;i<n;i++)

printf("%.2f\n", x[i]);

getch();

}

Результат:

Введенные данные

Полученный результат

Проверка

-8.30

0.17

-2.76

-2,7

1,5

-1.20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]