求解线性方程组——超松弛迭代法(c)
- 格式:doc
- 大小:31.00 KB
- 文档页数:4
求解线性方程组——超松弛迭代法
#include
#include
using namespace std;
float *one_array_malloc(int n); //一维数组分配float **two_array_malloc(int m,int n); //二维数组分配
float matrix_category(float* x,int n);
int main()
{
const int MAX=100;//最大迭代次数
int n,i,j,k;
float** a;
float* x_0; //初始向量
float* x_k; //迭代向量
float precision; //精度
float w; //松弛因子
cout<<"输入精度e:";
cin>>precision;
cout< cin>>n; a=two_array_malloc(n,n+1); cout< for(i=0;i { for(j=0;j { cin>>a[i][j]; } } x_0=one_array_malloc(n); cout< for(i=0;i { cin>>x_0[i]; } x_k=one_array_malloc(n); cout<<"输入松弛因子w (1 float temp; //迭代过程 for(k=0;k { for(i=0;i { temp=0; for(j=0;j { temp=temp+a[i][j]*x_k[j]; } x_k[i]=a[i][n]-temp; temp=0; for(j=i+1;j { temp=temp+a[i][j]*x_0[j]; } x_k[i]=(x_k[i]-temp)/a[i][i]; x_k[i]=(1-w)*x_0[i]+w*x_k[i]; } //求两解向量的差的范数 for(i=0;i { x_0[i]=x_k[i]-x_0[i]; } if(matrix_category(x_0,n) break; } else { for(i=0;i { x_0[i]=x_k[i]; } } } //输出过程 if(MAX==k) { cout<<"迭代不收敛\n"; } cout<<"迭代次数为:"< cout<<"解向量为:\n"; for(i=0;i { cout<<"x"< } return 0; } float *one_array_malloc(int n) //一维数组分配 { float *a; a=(float *)malloc(sizeof(float)*n); return a; } float **two_array_malloc(int m,int n) //二维数组分配{ float **a; int i; a=(float **)malloc(m*sizeof(float *)); for (i=0;i { a[i]=(float *)malloc(n*sizeof(float)); } return a; } float matrix_category(float* x,int n) { int i; float temp=0; for(i=0;i { temp=temp+fabs(x[i]); } return temp; }