SOR迭代法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
#include
int main()
{
int n,i,j,m,k;
float x[10],w,s0,s1,d;


/* printf("输入A的元素\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%f",&a[i][j]);


printf("输入b的元素\n");
for(i=1;i<=n;i++)
scanf("%f",&b[i]);

printf("输入x0\n");
for(i=1;i<=n;i++)
scanf("%f",&x0[i]);
*/


float a[10][10]={{0,0,0,0,0},{0,5,-1,-1,-1},{0,-1,10,-1,-1},{0,-1,-1,5,-1},{0,-1,-1,-1,10}};
float b[10]={0,-4,12,8,34};
float x0[10]={0,0,0,0,0};

n=4;
w=1.2;

printf("输入迭代次数m\n");
scanf("%d",&m);

for(k=1;k<=m;k++)

{

for(i=1;i<=n;i++)
{
s0=0;
for(j=1;j<=i-1;j++)
s0=s0+a[i][j]*x[j];


s1=0;
for(j=i+1;j<=n;j++)
s1=s1+a[i][j]*x0[j];

x[i]=(1-w)*x0[i]+w*(b[i]-s0-s1)/a[i][i];


}


d=0;
{
for(i=1;i<=n;i++)
{
d=fabs(x[i]-x0[i])+d;
}


if(d<1e-2)
{
for(i=1;i<=n;i++)
printf("%f\n",x[i]);
printf("最大迭代次数k=%d\n",k);
break;
}
}
for(i=1;i<=n;i++)
x0[i]=x[i];


}


return 0;
}

相关文档
最新文档