声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1764|回复: 3

[编程技巧] 急问一个问题

[复制链接]
发表于 2005-10-9 16:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我编了一个高斯塞得尔的程序:
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=[2 -1 1;-1 -2 3;1 3 1];
>> b=[4;5;6];
>> x=gs(a,b)

x =

NaN
Inf
-Inf
为什么呢?急!
回复
分享到:

使用道具 举报

发表于 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[m][m],b[m],e,x[m],y[m],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[j];
}
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[j]*y[j];
}
y=(b-w)/double(a);
}

max=fabs(x[1]-y[1]);
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;

}
}
发表于 2005-10-9 21:49 | 显示全部楼层

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

形成LU矩阵的时候错了
1.gif
发表于 2005-10-10 07:01 | 显示全部楼层
不是太明白
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-14 10:35 , Processed in 0.075119 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表