📄 sor.cpp
字号:
#include "stdio.h"
#include "math.h"
double *x,*temp;
int Sor(int *a,int *b,int n,double w,double e)
{
int i,j,m=0;
double d,sum,max=e+1;
while(max>e)
{
for(i=0;i<n;i++)
{
j=0;
sum=0;
temp[i]=x[i];
while(j<i)
{
sum=sum+x[j]*a[i*n+j];
j++;
}
for(j=i+1;j<n;j++)
sum=sum+x[j]*a[i*n+j];
x[i]=(1-w)*x[i]+w*(b[i]-sum)/a[i*n+i];
}
max=fabs(x[0]-temp[0]);
for(i=1;i<n;i++)
{
d=fabs(x[i]-temp[i]);
if(d>max) max=d;
}
m++;
}
return m;
}
void main()
{
int a[81]={31,-13,0,0,0,-10,0,0,0,
-13,35,-9,0,-11,0,0,0,0,
0,-9,31,-10,0,0,0,0,0,
0,0,-10,79,-30,0,0,0,-9,
0,0,0,-30,57,-7,0,-5,0,
0,0,0,0,-7,47,-30,0,0,
0,0,0,0,0,-30,41,0,0,
0,0,0,0,-5,0,0,27,-2,
0,0,0,-9,0,0,0,-2,29};
int b[9] ={-15,27,-23,0,-20,12,-7,7,10};
int m,n=9;
double w;
double e=0.5*pow(10,-5);
double x1[9],x2[9];
FILE *fp=fopen("SOR.txt","w");
x=x1;
temp=x2;
for(int i=1;i<100;i++)
{
w=0.02*i;
for(int j=0;j<n;j++)
x1[j]=0;
m=Sor(a,b,n,w,e);
fprintf(fp,"松弛因子为%.2f时\n迭代次数:%d\n解向量:\n",w,m);
for(j=0;j<n;j++)
fprintf(fp,"%9f\n",x[j]);
fprintf(fp,"\n");
}
printf("运行结果保存至文件SOR.txt\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -