大哥大姐们帮帮忙!!jacobi迭代法和guass-seidel迭代的问题!!

蓝色記憶 2008-10-21 01:20:22

#include"stdio.h"
#include"math.h"
#define N 4
void main(void)
{
static float a[N][N+1]={ {9,15,3,-2,7},{7,2,1,-2,4},{1,3,2,13,0},{-2,-2,11,5,-1} };
float x[N]={0},e=0.000001;
float r,t,q;
int i,j,k,lm=100;
for(k=0;k<lm;k++)
{
r=0;
for(i=0;i<N;i++)
{
t=x[i];
q=0;
for(j=0;j<N;j++)
{ if(j!=i)
q=q+a[i][j]*x[j];
}
x[i]=(a[i][N]-q)/a[i][i];
if(fabs(x[i]-t)>r) r=fabs(x[i]-t);
}
if(r<e) break;
}
if(k==lm)
printf("Overflow!\n");
else
for(i=0;i<N;i++)
printf("x(%d)=%f\n",i,x[i]);
}


#include"stdio.h"
#include"stdlib.h"
#include"math.h"
#define N 4
double x[N]={0};
double max_xy(double a[N],double b[N])
{
double max=0;
int i;
for(i=0;i<N;i++)
{
if(max<fabs(a[i]-b[i]))
max=fabs(a[i]-b[i]);
}
return max;
}

void jacobi(double a[N][N],double b[N],double d)
{

int i,j,k,lm=50;
double y[N]={0},sum=0,max=0;
for(k=0;k<lm;k++)
{

for(i=0;i<N;i++)
{
sum=0;
for(j=0;j<N;j++)
{
if(j!=i)
sum=sum+a[i][j]*y[j];
}
x[i]=(b[i]-sum)/a[i][i];

}
printf("\n");
for(i=0;i<N;i++)
printf("y(%d)=%f ",i,y[i]);
printf("\n");
for(i=0;i<N;i++)
printf("x(%d)=%f ",i,x[i]);
printf("\n");
max=max_xy(x,y);
if(max<d) break;
printf("max=%f\n",max);
for(i=0;i<N;i++)
y[i]=x[i];
}
if(k==lm) printf("Overfllow!!\n");
for(i=0;i<N;i++)
printf("x(%d)=%f\n",i+1,x[i]);
}

void main()
{
int i,j;
double d=0.0000001;
static double a[N][N]={ {9,15,3,-2},{7,2,1,-2},{1,3,2,13},{-2,-2,11,5} };
static double b[N]={7,4,0,-1};
jacobi(a,b,d);
for(i=0;i<N;i++)
printf("x(%d)=%lf\n",i+1,x[i]);
}


两个程序的结果都不正确啊!!
这个方程组的结果为
x1=0.497931
x2=0.144494
x3=0.00628581
x4=-0.0813176
书上的作业题,就是不知道哪里出错了啊,算法也是应该没有问题的吧!
自己认为是没有考虑收敛性的问题,但是却不知道如何判断收敛性,希望
大家帮忙改一下,不甚感激!!


...全文
336 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
pingzi_1119 2008-10-21
  • 打赏
  • 举报
回复
不懂,帮顶

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧