📄 diedaifa.htm
字号:
lang=EN-US>高斯-赛德尔迭代</SPAN></SPAN></span></span></font></p>
<p>#include <iostream> <BR>
#include <cmath> <BR>
using namespace std; <BR>
int a,b,m; <BR>
double *x0; <BR>
void Jacobi(double **c,double *d,int n,double eps); <BR>
void Gauss(double **c,double *d,int n,double eps); <BR>
void main() <BR>
{ <BR>
int n; <BR>
double **A,*B; <BR>
double e; <BR>
cout<<"请选择求方程组的迭代方法!雅可比选0,高斯-赛德尔选1!"<<endl; <BR>
cin>>n; <BR>
cout<<"输入方程组的变量的个数以及方程的个数!"<<endl; <BR>
cin>>a>>b; <BR>
A=new double*[b]; <BR>
for(int i=0;i<b;i++) <BR>
{ <BR>
A[i]=new double[a]; <BR>
} <BR>
B=new double[b]; <BR>
x0=new double[a]; <BR>
cout<<"输入每个方程组的变量的系数以及方程右端的值!"<<endl; <BR>
for(int k=0;k<b;k++) <BR>
{ <BR>
for(int j=0;j<a;j++) <BR>
{ <BR>
cin>>A[k][j]; <BR>
cout<<"A["<<k<<j<<"]="<<A[k][j]<<endl; <BR>
} <BR>
cin>>B[k]; <BR>
cout<<"B["<<k<<"]="<<B[k]<<endl; <BR>
} <BR>
cout<<"输入方程组迭代的次数及所要求的精度!"<<endl; <BR>
cin>>m>>e; <BR>
cout<<"输入方程组迭代的初值!"<<endl; <BR>
for(int j=0;j<a;j++) <BR>
{ <BR>
cin>>x0[j]; <BR>
} <BR>
switch (n) <BR>
{ <BR>
case 0:Jacobi(A,B,m,e); <BR>
break; <BR>
case 1:Gauss(A,B,m,e); <BR>
break; <BR>
default:cout<<"你没有选择求解方程组的一种方法!!"<<endl; <BR>
break; <BR>
} <BR>
} <BR>
<BR>
void Jacobi(double **c,double *d,int n,double eps) <BR>
{ <BR>
int k,i; <BR>
double *y = new double[a],*x=new double[a],s,temp=0.0; <BR>
k=1; <BR>
while(1) <BR>
{ <BR>
temp = 0.0; <BR>
for(i=0;i<a;i++) <BR>
{ <BR>
s=0.0; <BR>
for(int j=0;j<a;j++) <BR>
{ <BR>
if(j!=i) <BR>
{ <BR>
s+=c[i][j]*x0[j]; <BR>
} <BR>
} <BR>
s=(d[i]-s)/c[i][i]; <BR>
y[i]=s; <BR>
if(fabs(x0[i]-s)>temp) <BR>
{ <BR>
temp=fabs(x0[i]-s); <BR>
} <BR>
} <BR>
if(temp<eps) <BR>
{ <BR>
cout<<"迭代成功!迭代结果为:"<<endl; <BR>
for(i=0;i<a;i++) <BR>
{ <BR>
cout<<"y["<<i<<"] ="<<y[i]<<endl; <BR>
} <BR>
break; <BR>
} <BR>
if(k==m) <BR>
{ <BR>
cout<<"迭代失败!!"<<endl; <BR>
break; <BR>
} <BR>
k+=1; <BR>
for(i=0;i<a;i++) <BR>
{ <BR>
x0[i]=y[i]; <BR>
} <BR>
} <BR>
} <BR>
void Gauss(double **c,double *d,int n,double eps) <BR>
{ <BR>
int k,i; <BR>
double *y=new double[a],*x=new double[a],s,temp=0.0; <BR>
for(i=0;i<a;i++) <BR>
{ <BR>
x[i]=x0[i]; <BR>
y[i]=x[i]; <BR>
} <BR>
k=1; <BR>
while(1) <BR>
{ <BR>
temp=0.0; <BR>
for(i=0;i<a;i++) <BR>
{ <BR>
s=0.0; <BR>
for(int j=0;j<a;j++) <BR>
{ <BR>
if(j!=i) <BR>
{ <BR>
s+=c[i][j]*y[j]; <BR>
} <BR>
} <BR>
s=(d[i]-s)/c[i][i]; <BR>
y[i]=s; <BR>
if(fabs(x[i]-s)>temp) <BR>
{ <BR>
temp=fabs(x[i]-s); <BR>
} <BR>
} <BR>
if(temp<eps) <BR>
{ <BR>
cout<<"迭代成功!迭代结果为:"<<endl; <BR>
for(i=0;i<a;i++) <BR>
{ <BR>
cout<<"y["<<i<<"] ="<<y[i]<<endl; <BR>
} <BR>
break; <BR>
} <BR>
if(k==m) <BR>
{ <BR>
cout<<"迭代失败!!"<<endl; <BR>
break; <BR>
} <BR>
k+=1; <BR>
for(i=0;i<a;i++) <BR>
{ <BR>
x[i]=y[i]; <BR>
} <BR>
} <BR>
}<BR>
</p>
</DIV>
</DIV>
?
<BR> <P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 20pt; mso-char-indent-count: 2.0; mso-char-indent-size: 12.0pt; mso-line-height-rule: exactly"> </P>
<SPAN class=addtime>
<P class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 20pt; mso-line-height-rule: exactly"> </P>
</SPAN></td>
<td width="1"> </td>
<td width="11" rowspan="2" valign="top" background="images/右边界.jpg"><!--DWLayoutEmptyCell--> </td>
</tr>
<tr>
<td height="3268"> </td>
<td> </td>
</tr>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -