超松弛迭代法(SOR)

来源:互联网 发布:c语言左移右移 编辑:程序博客网 时间:2024/05/01 09:51
c.txt4 -2 -4 10-2 17 10 3-4 10 9 -7

#include<stdio.h>#include<math.h>#define M 3main(){    FILE *f;    double a[M][M],b[M];    double x[M]={0,0,0};    double y[M];    int i,j,k,n=100;    f=fopen("c.txt","r");    for(i=0;i<M;i++)    {        for(j=0;j<M;j++)            fscanf(f,"%lf",&a[i][j]);        fscanf(f,"%lf",&b[i]);    }    fclose(f);    double s,max,eps=0.0001,w=1.46;    k=1;    while(k<n)    {        max=0;        for(i=0;i<M;i++)        {            s=0;            for(j=0;j<M;j++)                if(j!=i)                    s+=a[i][j]*x[j];                    /// 下面的部分高斯迭代法的做法。                    ///用一个数组就行了,没必要加个y[M]数组。                y[i]=(b[i]-s)/a[i][i];                y[i]=(1-w)*x[i]+w*y[i];                if(max<fabs(x[i]-y[i])) max=fabs(x[i]-y[i]);                x[i]=y[i];        }        if(max<eps) break;        printf("k=%d \n",k);        for(i=0;i<M;i++)            printf("x[%d]=%lf  \n",i,x[i]);        k++;    }    if(k==n)    {    printf("ERROR!\n");    return 0;    }    printf("k=%d \n",k);    for(i=0;i<M;i++)        printf("x[%d]=%lf  \n",i,x[i]);}

原创粉丝点击