Уважаемые програмеры я написал програму реализ. метод гауса(реш.системы лин.уравнений) Оформить в виде функции Оцените...Что можно сделать лучше,даите пару советов и рекомендаций... что не рационально+т.п.д. заранее благодарен... уравнене |3 2 1| |s0| |1| |3 6 1|*|s1|=|3| |3 2 1| |s2| |4| p.s.Только начал программировать на C++
| Код | //Gauss' Method
#include <iostream.h> const int n=3; double a1[n][n+1]={ 1,2,1,0, 3,6,1,0, 3,2,1,0 }; double b1[n]={1,3,4}; double s[n];
int x[n+1]={0,1,2,3};//y[i],x[j] Endex' coordinates int y[n]={0,1,2}; // after transformation
void mmax(double a[][n+1],int n1);//Functin searching max element void show(double a[][n+1]); //Function showing transformed matrix void coor_ini(int x[],int y[]); //Initial condition void fgaus(double a[][n+1],double v[],double b[]);
void main() { int l; fgaus(a1,s,b1); for(l=0;l<n;l++) cout<<" "<<s[l]; cout<<endl;
}
void fgaus(double a[][n+1],double v[],double b[]) { register int i,j,k; double r[n],d=0,sum; //r[n]vector_solutin(mixed order)
coor_ini(x,y); for(i=0;i<n;i++) //Getting extended matrix a[i][n]=b[i]; //Direct course++++++++++++++++++++++++++++++++++++++++++++++++ for(k=0;k<n-1;k++){ mmax(a,k); show(a); for(i=k+1;i<n;i++){ d=a[y[i]][x[k]]/a[y[k]][x[k]]; for(j=k;j<(n+1);j++) a[y[i]][x[j]]=a[y[i]][x[j]]-(d*a[y[k]][x[j]]); } show(a); } //Return course++++++++++++++++++++++++++++++++++++++++++++++++ r[n-1]=a[y[n-1]][x[n]]/a[y[n-1]][x[n-1]]; for(k=n-2;k>-1;k--){ sum=0; for(j=k+1;j<n;j++){ sum=sum+a[y[k]][x[j]]*r[j]; } r[k]=(a[y[k]][x[n]]-sum)/a[y[k]][x[k]]; }
//vector_solution[correct order] for(i=0;i<n;i++) v[x[i]]=r[i];
}
void coor_ini(int x0[],int y0[]){ int i; for (i=0;i<n;i++) y0[i]=i; for (i=0;i<n+1;i++) x0[i]=i; }
void mmax(double a[][n+1], int n1)//Functin searching max element { register int i,j; int mi,mj,v; double max=0; for (i=n1;i<n;i++) for(j=n1;j<n;j++) if(a[y[i]][x[j]]>=max){ max=a[y[i]][x[j]]; mi=i;mj=j; } v=x[n1]; x[n1]=x[mj]; x[mj]=v; v=y[n1]; y[n1]=y[mi]; y[mi]=v; }
void show(double a[][n+1]) //Function showing transformed matrix { register int i,j; for(i=0;i<n;i++){ for(j=0;j<n+1;j++) cout<<" "<<a[y[i]][x[j]]; cout<<"\n"; } cout<<"\n"; }
|
|