odbo1984 发表于 2005-10-9 16:02

急问一个问题

我编了一个高斯塞得尔的程序:
function x=gs(A,b)
%高斯塞德尔迭代法
%A*x=b
numer=length(A);
D=zeros(numer);
L=zeros(numer);
U=zeros(numer);
x0=zeros(numer,1);
for i=1:numer
D(i,i)=A(i,i);%对角矩阵
x0(i,1)=1;%初始迭代向量
end
for i=2:3
for j=1:i-1
U(j,i)=-A(j,i);%U上半部矩阵
end
for j=1:i-1
L(i,j)=-A(i,j); %L下半部矩阵
end
end
errs=1;
while errs>0.001
x1=inv(D-L)*(U*x0+b);
errs=norm(x1-x0);
x0=x1;
end
x=x0;
但是结果却是:>> a=;
>> b=;
>> x=gs(a,b)

x =

NaN
Inf
-Inf
为什么呢?急!

AaronSpark 发表于 2005-10-9 16:40

回复:(odbo1984)急问一个问题

没太看懂你的程序,下面是C语言写的,可以参考一下

#include<iostream.h>
#include<math.h>
const int m=10;

void main()
{
int choice=1;

while(choice==1)
{

double a,b,e,x,y,w,se,max;
int n,i,j,N,k;
cout<<"\n请输入方程的个数:";
cin>>n;cout<<endl;
for(i=1;i<=n;i++)
{
cout<<"请输入第"<<i<<"个方程的各项系数:";
for(j=1;j<=n;j++)
cin>>a;
}
cout<<"\n请输入各个方程等号右边的常数项。\n";
for(i=1;i<=n;i++)
{
cin>>b;
}
cout<<"\n请输入最大迭代次数:";
cin>>N;
cout<<"\n请输入最大偏差:";
cin>>e;
for(i=1;i<=n;i++)
{
x=0;
y=x;
}
k=0;
while(k!=N)
{
k++;
for(i=1;i<=n;i++)
{
w=0;
for(j=1;j<=n;j++)
{
if(j!=i)
w=w+a*y;
}
y=(b-w)/double(a);
}

max=fabs(x-y);
for(i=1;i<=n;i++)
{
se=fabs(x-y);
if(se>max)
max=se;
}
if(max<e)
{
cout<<endl;
for(i=1;i<=n;i++)
cout<<"x"<<i<<"="<<y<<endl;
break;
}
for(i=1;i<=n;i++)
{
x=y;
}

}
if(k==N)
cout<<"迭代失败!!"<<endl;
cout<<endl;
cout<<"--------------------------------------------------------------"<<endl;
cout<<endl;
cout<<" 1、继续运算。"<<endl;

cout<<" 2、结束运算,退出本程序。"<<endl;
cout<<endl;
cout<<"请输入你的选择:";
cin>>choice;

}
}

suffer 发表于 2005-10-9 21:49

回复:(odbo1984)急问一个问题

形成LU矩阵的时候错了

不想飞的鸟 发表于 2005-10-10 07:01

不是太明白
页: [1]
查看完整版本: 急问一个问题