?? 高斯賽德爾迭代.cpp
字號(hào):
//高斯-賽德爾迭代的C語言實(shí)現(xiàn)
#include<iostream.h>
#include<stdio.h>
#include<math.h>
#define T 100
void main()
{int n,N,i,j,k;
float a[T][T],b[T],x0[T],x[T],sum,sum1,sum2,sum3,e;
double max;
cout<<"//高斯賽德爾迭代程序?qū)嵗?/"<<endl;
md:printf("輸入維數(shù),最大迭數(shù)以及精確度:\n");
scanf("%d %d %f",&n,&N,&e);
cout<<"輸入矩陣A的值"<<endl;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
cin>>a[i][j];
}
cout<<"請(qǐng)輸入矩陣b的值"<<endl;
for(i=1;i<=n;i++)
cin>>b[i];
cout<<"請(qǐng)輸入初值x0"<<endl;
for(j=1;j<=n;j++)
cin>>x0[j];
k=1;
while(k<=N)
{sum=sum3=0;
for(j=2;j<=n;j++)
sum+=a[1][j]*x0[j];
x[1]=(b[1]-sum)/a[1][1];
for(i=2;i<=n-1;i++)
{sum1=sum2=0;
for(j=1;j<=i-1;j++)
sum1+=a[i][j]*x[j];
for(j=i+1;j<=n;j++)
sum2+=a[i][j]*x0[j];
x[i]=(b[i]-sum1-sum2)/a[i][i];
}
for(j=1;j<=n-1;j++)
sum3+=a[n][j]*x[j];
x[n]=(b[n]-sum3)/a[n][n];
max=fabs(x[1]-x0[1]);
for(i=1;i<=n;i++)
{if(fabs(x[i]-x0[i])>max)
max=fabs(x[i]-x0[i]);
}
if(max<e)
{cout<<"經(jīng)過"<<k<<"次高斯-賽德爾迭代,結(jié)果為:"<<endl;
for(i=1;i<=n;i++)
{ printf("x%d=%-6.10f\n",i,x[i]);
}
cout<<endl<<endl;
goto md;
k=N+1;
}
else if(k<N) { k++;
for(i=1;i<=n;i++)
x0[i]=x[i];
}
else {
cout<<"迭代次數(shù)太少,達(dá)不到此精確度!"<<endl<<endl;
goto md;
k=N+1;
}
}
}
//鄭重聲明:此程序解釋權(quán)歸吳賀,任何人不得將其用于其它領(lǐng)域。//
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -