1.2 题目 雅可比法解方程组
方程组为:
1.2.1 雅可比迭代法算法
设方程组Ax=b的系数矩阵的对角线元素 为容许误差。
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 输出结果