数值分析与实验(2)

时间:2017-06-11 我要投稿

  1.2  题目  雅可比法解方程组

  方程组为:

  1.2.1  雅可比迭代法算法

  设方程组Ax=b的系数矩阵的对角线元素 (i=1,2,…,n),M为迭代次数容许的最大值 为容许误差。

  1 取初始向量 令k=0.

  2 对i=1,2,…,n计算

  3 如果 则输出 结果;否则执行4

  4 如果 则不收敛,终止程序;否则 ,转2

  1.2.2   程 序

#include <stdio.h>

#include <math.h>

#define eps 1e-6

#define max 100

void Jacobi(float *a,int n,float x[])

{

  int i,j,k=0;

  float epsilon,s;

  float *y= new float [n];

  for(i=0;i<n;i++) x[i]=0;

  while(1)

{

  epsilon=0;

  k++;

  for(i=0;i<n;i++)

  {

  s=0;

  for(j=0;j<n;j++)

  {

   if(j==i)continue;

   s+=*(a+i*(n+1)+j)*x[j];

  }

  y[i]=(*(a+i*(n+1)+n)-s)/(*(a+i*(n+1)+i));

  epsilon+=fabs(y[i]-x[i]);

}

for(i=0;i<n;i++)x[i]=y[i];

if(epsilon<eps)

{printf("die dai ci shu wei:%d\n",k);return;}

if(k>=max)

{printf("die dai fa san");return;}

}

delete y;

}

void main()

{s

int i;

 float a[4][5]={10,-1,2,0,-11,0,8,-1,3,-11,2,-1,10,0,6,-1,3,-1,11,25};

 float x[4];

 Jacobi(a[0],4,x);

 for(i=0;i<4;i++)printf("x[%d]=%f\n",i,x[i]);

}

  1.2.3  输出结果

  

数值分析与实验(2)相关推荐
最新推荐
热门推荐