Вот есть решение СЛАУ методом гауса и простых итераций для матрицы размером 3 на 3:
| Код | #include<iostream.h> #include<conio.h> #include<math.h> #include<stdlib.h> void main() { double x1,x2,x3; double a[3][3]={{2.7, 0.9, -1.5}, {4.5, -2.8, 6.7}, {5.1, 3.7, -1.4}}; double a1[3][3]={{2.7, 0.9, -1.5}, {4.5, -2.8, 6.7}, {5.1, 3.7, -1.4}}; double b[3]={3.5,2.6,-0.14},c[3],d[3],a2[3][3]; int j,i,method; cout<<"\t\t PRIMARY DATE:\n"<<endl; cout<<"Matrix A:"; cout<<"\t Vector B:"<<endl; for( i=0;i<=2;i++) { cout<<"\n"; for( j=0;j<=2;j++) cout<<a[i][j]<<" "; cout<<"\t"; cout<<b[i]<<endl; } cout<<"\n\nPlease select method: Gauss(1) or Easy iteratios(2)"<<endl; cin>>method; switch(method) { case 1: cout<<"Congratulation you select method of Gauss!!!\n"<<endl; for( i=0;i<=2;i++) d[i]=b[i]; for( i=1;i<=2;i++) for( j=1;j<=2;j++) a[i][j]=a[i][j]-(1/a[0][0])*a[i][0]*a[0][j]; for( i=1;i<=2;i++) for( j=1;j<=2;j++) a2[i][j]=a[i][j]; for( j=2,i=2;j<=2;j++) a[i][j]=a[i][j]-(1/a[1][1])*a[i][1]*a[1][j]; for( i=1;i<=2;i++) { b[i]=b[i]-(1/a[0][0])*a[i][0]*b[0]; c[i]=b[i]; } for( i=2;i<=2;i++) b[i]=b[i]-(1/a[1][1])*a[i][1]*b[1]; x3=b[2]/a[2][2]; x2=((1)/a2[1][1])*(c[1]-a2[1][2]*x3); x1=((1)/a1[0][0])*(d[0]-a1[0][2]*x3-a1[0][1]*x2); cout<<"x1="<<x1<<endl; cout<<"x2="<<x2<<endl; cout<<"x3="<<x3<<endl; break; case 2: cout<<"Congratulation you select method of Easy iteratios!!!"<<endl; double x[3],x1[3],e,km=20,k=1,s; cout<<"Please enter the E:"; cin>>e; for(i=0;i<3;i++) x[i]=b[i]; for(k=0;k<km;k++) { for(i=0;i<=2;i++) { s=0; for(j=0;j<=2;j++) { if(i!=j) s+=a[i][j]*x[j]; } x1[i]=(b[i]-s)/a[i][i]; } for(i=0;i<=2;i++) { int t=i+1; cout<<"x["<<t<<"]="; cout<<x1[i]<<endl; } cout<<"\n"; for(i=0;i<=0;i++) { if((fabs(x1[i]-x[i]))>e) { for(j=0;j<=2;j++) x[j]=x1[j]; } else { cout<<"Number of iteratios:"<<k<<endl; getch(); exit(0); } } } break; } getch(); }
|
Нужно переделать его под матрицу размером 4 на 4, 2 день делаю - не получается =( помогите пожалуйста Я чет не рублю в метод Гауса =\ |