求解线性方程组——超松弛迭代法(c)

  • 格式:doc
  • 大小:31.00 KB
  • 文档页数:4

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

求解线性方程组——超松弛迭代法

#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>w;

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;

}