用C++算法如何实现高斯塞得尔算法,并且以图形的方式显示结果
提问人:郭秀娟 回答:5 浏览:3064 提问时间:2010/4/29 8:38:34 到期时间:2010/5/9 8:38:34 悬赏分:15+5+20
主要是C++的图形问题
不会哎。。呵呵。。你学c++?
回答者:郑晓明 2010/4/29 14:08:47
|
先说如何调用的,用高斯消元法做的
//By JJ,2008 #include<iostream.h> #include"01.h" void main() { equation a; a.InputData(); a.solve_eqution(); cin.get(); cin.get(); } 下面是以前写的类,可能要你自己修改一下 #include<iomanip.h> const int Max_Number=20; class equation { private: int number; //方程个数 char value[Max_Number]; //未知量 double modulus[Max_Number][Max_Number]; //方程系数 double constant[Max_Number]; //右端常数 public: equation(int _number=0); //构造函数 void InputData(); //输入数据 void solve_eqution(); //高斯全主元消去 void gauss_all_valueiaoqu(); //Gauss全主元消去法 void gauss_calculate(); //高斯消去法以后计算未知量的结果 void evaluechange_hang(int m,int n); void evaluechange_a_lie(int m,int n); void evaluechange_value(int m,int n); }; equation::equation(int _number) { number=_number; } //----------------------------初始化数据为0 void equation::InputData() { int i,j; if(number==0) { cout<<"输入方程的个数:"; cin>>number; } //--------------初始化变量符号为默认的a,b,c.. for(i=0;i<number;i++) value[i]='a'+i; //---------输入数据------01.提示如何输入 cout<<"====================================================\n"; cout<<"请在每个方程里输入"<<number<<"系数和一个常数:\n"; cout<<"例:\n方程:a"; for(i=1;i<number;i++) { cout<<"+"<<i+1<<value[i]; } cout<<"=10\n"; cout<<"应输入:"; for(i=0;i<number;i++) cout<<i+1<<" "; cout<<"10\n"; cout<<"==============================\n"; //---------02.输入每个方程 for(i=0;i<number;i++) { cout<<"输入方程"<<i+1<<":"; for(j=0;j<number;j++) cin>>modulus[i][j]; cin>>constant[i]; } } //高斯全主元排列求解方程 void equation::solve_eqution() { int i,j; gauss_all_valueiaoqu(); if(modulus[number-1][number-1]!=0) { gauss_calculate(); for(i=0;i<number;i++) //输出结果 { for(j=0;value[j]!='a'+i&&j<number;j++); cout<<value[j]<<"="<<constant[j]<<endl; } } else cout<<"系数行列式等于零,方程没有唯一的解.\n"; } void equation::gauss_all_valueiaoqu() //Gauss全主元消去法 { int i,j,k,mavaluei,mavaluej;double lik; cout<<"用Gauss全主元消去法结果如下:\n"; for(k=0;k<number-1;k++) { for(mavaluei=mavaluej=i=k;i<number;i++) { for(j=k;j<number;j++) if(modulus[i][j]>modulus[mavaluei][ mavaluej]) { mavaluei=i; mavaluej=j; } } if(mavaluei!=k) evaluechange_hang(k,mavaluei); if(mavaluej!=k) { evaluechange_a_lie(mavaluej,k); //交换两列 evaluechange_value(mavaluej,k); } for(i=k+1;i<number;i++) { lik=modulus[i][k]/modulus[k][k]; for(j=k;j<number;j++) modulus[i][j]=modulus[i][j]-modulus[k][j]*lik; constant[i]=constant[i]-constant[k]*lik; } } } void equation::gauss_calculate() //高斯消去法以后计算未知量的结果 { int i,j;double sum_avalue; constant[number-1]=constant[number-1]/modulus[number-1][number-1]; for(i=number-2;i>=0;i--) { for(j=i+1,sum_avalue=0;j<number;j++) sum_avalue+=modulus[i][j]*constant[j]; constant[i]=(constant[i]-sum_avalue)/modulus[i][i]; } } void equation::evaluechange_hang(int m,int n) //交换a[][]中和b[]两行 { int j; double temp; for(j=0;j<number;j++) { temp=modulus[m][j]; modulus[m][j]=modulus[n][j]; modulus[n][j]=temp; } temp=constant[m]; constant[m]=constant[n]; constant[n]=temp; } void equation::evaluechange_a_lie(int m,int n) //交换a[]中的两列 { double temp;int i; for(i=0;i<number;i++) { temp=modulus[i][m]; modulus[i][m]=modulus[i][n]; modulus[i][n]=temp; } } void equation::evaluechange_value(int m,int n) //交换未知量x[m]与x[n] { char temp; temp=value[m]; value[m]=value[n]; value[n]=temp; } 回答者:李林 2010/4/30 19:11:51
|
搞死赛尔 算法 没学过 虽然我学了c++
回答者:李健 2010/5/1 9:38:17
|
tainanle
回答者:史建平 2010/5/1 15:16:57
|
去csdn和pudn上搜搜源码
回答者:陈雪 2010/5/6 17:05:53
|