当前位置:文档之家› SOR迭代法

SOR迭代法

#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;
}

相关主题
文本预览
相关文档 最新文档