- •Учреждение образования
- •Лабораторная работа №1 Тема: «Прямые методы решения систем линейных алгебраических уравнений»
- •Изученные теоретические вопросы: Метод Гаусса
- •Решение:
- •Лабораторная работа №2
- •Изученные теоретические вопросы:
- •Лабораторная работа №3
- •Изученные теоретические вопросы:
- •Лабораторная работа №4
- •Изученные теоретические вопросы: Метод квадратного корня
- •Лабораторная работа №5
- •Изученные теоретические вопросы: Метод отражений
- •Лабораторная работа №6 Решить систему линейных алгебраических уравнений методом вращений.
- •Изученные теоретические вопросы:
- •Решение:
- •Лабораторная работа№7 Тема: «Прямые методы решения систем линейных алгебраических уравнений»
- •Изученные теоретические вопросы: Метод ортогонализации
- •Лабораторная работа №8
- •Изученные теоретические вопросы: Метод сопряженных градиентов
- •Лабораторная работа № 9
- •Лабораторная работа № 10
- •Решение:
Лабораторная работа №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
Постановка задачи:
Решить систему линейных алгебраических уравнений методом отражений.