Практические / Пр №8.Обработка матриц
.odtПрактическое занятие №8. Обработка матриц.
//Решение СЛУ методом Гаусса
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main()
{
const int n=4, m=4;
float c,M,max,s,a[n][m],b[n],x[n];
int i,j,k,r;
printf("vvesti matrizu 3*3\n");
for(i=0; i<n; i++)
for(j=0;j<m; j++)
scanf("%f",&a[i][j]);
printf("vvesti pravye thasty\n");
for(i=0; i<n; i++)
scanf("%f",&b[i]);
for (k=0;k<n;k++)
{
max=fabs(a[k][k]);
r=k;
for (i=k+1;i<n;i++)
if(fabs(a[i][k])>max)
{
max=fabs(a[i][k]);
r=i;
}
for (j=0;j<n;j++)
{
c=a[k][j];
a[k][j]=a[r][j];
a[r][j]=c;
}
c=b[k];
b[k]=b[r];
b[r]=c;
for (i=k+1;i<n;i++)
{
for(M=a[i][k]/a[k][k],j=k;j<n;j++)
a[i][j]-=M*a[k][j];
b[i]-=M*b[k];
}
}
for (i=n-1;i>=0;i--)
{
for (s=0,j=i+1;j<n;j++)
s+=a[i][j]*x[j];
x[i]=(b[i]-s)/a[i][i];
}
printf("\n massiv a\n");
for(i=0; i<n; i++){
for(j=0;j<m; j++)
printf("%f ",a[i][j]);
printf("\n");
}
for(i=0;i<n; i++)
printf("%f ",b[i]);
printf("\n");
printf("\n RESHENIE \n");
for(i=0;i<n; i++)
printf("%f ",x[i]);
printf("\n");
system("pause");
return 0;
}
//4 4
// 7.9X1+5.6X2+5.7X3-7.2X4=6.68
// 8.5X1-4.8X2+0.8X3+3.5X4=9.95
// 4.3X1+4.2X2-3.2X3+9.3X4=8.6
// 3.2X1-1.4X2-8.9X3+3.3X4=1.0
//
//X1= 0.967 X2=0.125 X3=0.426 x4=0.568
Домашнее задание.
162. Написать профамму, которая вычисляет определитель квад ратной матрицы второго порядка. Рекомендуемый вид экрана во время работы программы приведен ниже (введенные пользова телем данные выделены полужирным шрифтом). Введите матрицу второго порядка. После ввода элементов строки нажимайте <Enter> -> 5 -7 -> 1 3 Определитель матрицы 5.00 -7.00 1.00 3.00 Равен 22.00