SOR迭代_C语言代码
数值分析课程设计 SOR 迭代法
代码运行可用
# include <stdio.h>
# include <math.h>
#include<stdlib.h>
float **a; /*存放 A 矩阵*/
float *b; /*存放 b 矩阵*/
float *x; /*存放 x 矩阵*/
float p; float w; int n; int c;
for(i=1;i<n+1;i++)
{
t=0.0;
tt=0.0;
for(j=1;j<i;j++)
t=t+a[i][j]*xl[j];
for(j=i;j<n+1;j++)
tt=tt+a[i][j]*xk[j];
xl[i]=xk[i]+w*(b[i]-t-tt)/a[i][i];
}
t=0.0; for(i=1;i<n+1;i++) {
printf("%f\n",x[i]); }
tt=fabs(xl[i]-xk[i]); tt=tt*tt; t+=tt; } t=sqrt(t);
for(i=1;i<n+1;i++) xk[i]=xl[i];
if(k+1<=c&&t>p)
{ k++; SOR(xk);
} } void main() {
int i,j; printf("输入矩阵维数 N:\n"); scanf("%d",&n); a=(float **)malloc(sizeof(float)*(n+1)); for(i=0;i<n+1;i++)
a[i]=(float*)malloc(sizeof(float)*(n+1)); printf("输入矩阵 A:\n"); for(i=1;i<n+1;i++)
for(j=1;j<n+1;j++) scanf("%f",&a[i][j]); for(i=1;i<n+1;i++) for(j=1;j<n;j++) if(a[i][j]==0) printf("a[%d][%d]不能为 0\n",i,j); b=(float *)malloc(sizeof(float)*(n+1)); printf("输入矩阵 b:\n"); for(i=1;i<n+1;i++) scanf("%f",&b[i]); x=(float *)malloc(sizeof(float)*(n+1));
printf("输入矩阵 x:\n"); for(i=1;i<n+1;i++)
scanf("%f",&x[i]); printf("输入精确值:\n"); scanf("%f",&p); printf("输入最大迭代次数:\n"); scanf("%d",&c); printf("输入松弛因子 w(0<w<2):\n"); scanf("%f",&w); SOR(x); for(i=1;i<n+1;i++)
/*精确度*/ /*松弛因子*/ /*未知数个数*/ /*最大迭数*/
void SOR(float xk[])
{
int i,j;
float t=0.0;
float tt=0.0;
float *xl;
xl=(float *)malloc(sizeof(float)*(n+1));