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

Лабораторная работа №4

Постановка задачи:

Решить систему линейных алгебраических уравнений методом квадратного корня

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

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

Будем искать разложение действительной матрицы системы в виде

,

где

,

- диагональная матрица с элементами .

После перемножения матриц получаем

, ,

, .

Потребуем, чтобы элементы были положительными числами. Тогда получим

Таким образом, разложение существует. Тогда решение системы сводится к решению двух систем с треугольными матрицами

, .

Первая система имеет вид

и ее решение находится по формулам

, ,.

Вторая система

дает решение исходной системы

, ,.

Решение:

void main (){

int i,j,j1,jj,n,p;

float A[10][10],D[10][10],D1[10][10],S[10],L[10],X[10],q,r,t,y,k,W[10],U[10][10],V[10][10];

printf("Vvedite razmernost kvadratnoi matrici:\n");

scanf("%d",&n);

printf("\nVvedite elementi matrici:\n");

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

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

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

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

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

D[i][j]=A[i][j];

j1=0;

while(j1<n){

if(j1==0){

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

S[i]=D[i][j1];

if(i!=j1) L[i]=0;

else L[i]=1;

}

}

else{

for(i=0;i<j1;i++){

S[i]=0;

L[i]=0;

}

for(i=j1;i<n;i++){

S[i]=D[i][j1];

if(i!=j1) L[i]=0;

else L[i]=1;

}

}

r=0;

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

r+=S[i]*S[i];

q=sqrt(r);

r=0;

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

r+=S[i]*L[i];

y=r;

if (y>=0) q*=-1;

k=sqrt(2*(fabs(q))*(fabs(q))+2*fabs(q)*fabs(y));

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

W[i]=(S[i]-q*L[i])/k;

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

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

V[i][j]=2*W[i]*W[j];

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

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

if (i==j) U[i][i]=1-V[i][j];

else U[i][j]=-V[i][j];

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

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

t=0;

for(jj=0;jj<n;jj++)

t+=U[i][jj]*D[jj][j];

D1[i][j]=t;

}

}

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

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

D[i][j]=D1[i][j];

j1++;

}

X[n-1]=D[n-1][n]/D[n-1][n-1];

for(i=n-2;i>=0;i--){

t=D[i][n];

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

t-=D[i][j]*X[j];

X[i]=t/D[i][i];

}

printf("\nPolychennii korni:");

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

printf("\n%3.2f",X[i]);

getch();

}

Результат:

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

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

Проверка

-8.30

0.17

-2.76

-2,7

1,5

-1.20

Лабораторная работа №5

Постановка задачи:

Решить систему линейных алгебраических уравнений методом отражений.

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