📄 iterative.c
字号:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <iomanip>
using namespace std;
//SOR迭代法解线性方程组
double* SOR_FA(double** a,double* x,double* b,int n)
{const int max=1000;
int i,j,k;
double w,c;
double* y;
y= new double[n];
//跌代过程
for(w=0.1;w<2;w+=0.1)
{ for(k=0;k<max;k++)
{ for(i=0;i<n;i++)
y[i]=x[i];
for(i=0;i<n;i++)
{ for(j=0,c=0;j<n;j++)
if(j!=i)
c+=a[i][j]*x[j];
x[i]=(b[i]-c)/a[i][i];
}
for(i=0,c=0;i<n;i++)
c+=fabs(x[i]-y[i]);
if(c<0.000001)
{ delete []y;
return x;
}
for(i=0;i<n;i++)
x[i]=w*x[i]+(1-w)*y[i];
}
}
delete []y;
cout<<"this method isn't good\n";
exit(1);
}
void main()
{int i,k,n;
double c;
double** a;
double* x;
double* b;
cout<<"enter the value of n\n";
cin>>n;
a=new double*[n];
x=new double[n];
b=new double[n];
for(i=0;i<n;i++)
a[i]=new double[n];
for(i=0;i<n;i++)
for(k=0;k<n;k++)
cin>>a[i][k];
for(i=0;i<n;i++)
cin>>b[i];
//赋初值
for(i=0;i<n;i++)
cin>>x[i];
x=SOR_FA(a,x,b,n);
for(i=0;i<n;i++)
cout<<setw(15)<<setprecision(10)<<x[i];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -