还有s=o 这里s应该是等于 0 吧
其他就没什么问题了
如还有编译上的问题就是你编译器的环境变量没设置好
给你一个正确的程序,你自己参考一下吧!function [x,k]=Jacobimethod(A,b,x0,N,emg)
% A:线性方程组左端矩阵
% b:线性方程组右端向量
% x0:迭代初值
% N:迭代次数上界,若迭代次数大于n,则迭代失败
% emg:精度指标
% k:迭代次数
% x:用迭代法求得的线性方程组的近似解
n=length(A)
x1=zeros(n,1)x2=zeros(n,1)
x1=x0k=0
r=max(abs(b-A*x1))
while r>emg
for i=1:n
sum=0
for j=1:n
if i~=j
sum=sum+A(i,j)*x1(j)
end
end
x2(i)=(b(i)-sum)/A(i,i)
end
r=max(abs(x2-x1))
x1=x2
k=k+1
if k>N
disp('迭代失败,返回');
return
end
end
祝朋友好运!
#include<stdio.h>#include<conio.h>
#include<malloc.h>
#include<math.h>
#define EPS 1e-6
#define MAX 100
float *Jacobi(float a[3][4],int n)
{
float *x,*y,s
double epsilon
int i,j,k=0
x=(float *)malloc(n*sizeof(float))
y=(float *)malloc(n*sizeof(float))
for(i=0i<ni++) x[i]=0
while(1)
{
epsilon=0
k++
for(i=0i<ni++)
{s=0
for(j=0j<nj++)
{if(j==i) continue
s+=a[i][j]*x[j]
}
y[i]=(a[i][n]-s)/a[i][i]
epsilon += fabs(y[i]-x[i])
}
if(epsilon <EPS)
{
printf("µ¸¥˙¥Œ ˝Œ™:%d\n",k)
return y
}
if(k>=MAX)
{printf("The Method is disconvergent")return y}
for(i=0i<ni++) x[i]=y[i]
}
}
main()
{int i,jfloat a[3][4]
float *x
for(i=0i<3i++)
{
for(j=0j<4j++)
scanf("%f",&a[i][j])
}
x=(float *)malloc(3*sizeof(float))
x=Jacobi(a,3)
//clrscr()
for(i=0i<3i++)printf("x[%d]=%f\n",i,x[i])
getch()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)