matlab实现Gauss-seridel 高斯-塞德尔迭代法求解线性方程组?矩阵是10000*10000.怎么设计?请高手给看看。

blueink_200451 2008-11-15 08:50:12
matlab实现Gauss-seridel 高斯-塞德尔迭代法求解线性方程组?矩阵是10000*10000.怎么设计。请高手给看看。

简单画一个图:

| 2 -1 |
| -1 2 -1 |
A=| -1 ... ... |
| ... ... -1|
| -1 2 | 10000*10000

|1 |
|0 |
b=|...|
|0 |
|1 |

用Gauss-seridel 迭代计算这个10000*10000的A矩阵。
求Ax=b的近似解?

在matlab下如何实现。有问题就写在这里。谢谢您。
附上一段C代码.如果在matlab环境下可以调用需要的请使用下面的这段代码?注意 #define N 10000 。N大于400就要挂,别说10000了。
/* 利用高斯-塞德尔迭代法求解线性方程组 */ 

#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <iomanip.h>

#define N 200

int main()
{
double A[N][N]; //系数矩阵
double b[N]; //方程为Ax=b
double x[N];
int A_m;
int i,j;
double omaxx,nmaxx;
int precision=0;
double jingdua; //精度

cout<<"请输入矩阵(方阵)的行数:";
cin>>A_m;

for(i=0;i<A_m;i++)
{ for(j=0;j<A_m;j++)
{
if (i==j) A[i][j]=2;
else if((i-j==-1)||(i-j==1)) A[i][j]=-1;
else A[i][j]=0;

}
}
cout<<"向量A:";
for(i=0;i<A_m;i++)
{ for(j=0;j<A_m;j++)
{
cout<<A[i][j];
if(j==(A_m-1))
cout<<endl;

}
}
cout<<"结果向量B:";
for(i=0;i<A_m;i++)
{
if((i==0||(i==(A_m-1))))b[i]=1;
else b[i]=0;
}
for(i=0;i<A_m;i++)
{
cout<<b[i]<<" ";
}

cout<<"请输入精度(1--32):";
cin>>precision;
jingdua=pow(10,-precision);
while(1)
{
omaxx=nmaxx;
nmaxx=0;
for(i=0;i<A_m;i++)
{
x[i]=b[i];
for(j=0;j<A_m;j++)
if(j!=i)
x[i]+=-A[i][j]*x[j];

x[i]/=A[i][i];
if(fabs(x[i])>fabs(nmaxx))
nmaxx=x[i];
}
if(fabs(nmaxx-omaxx)<jingdua)
break;
}
cout<<"方程的解为:";
cout.precision(precision);
for(i=0;i<A_m;i++)
cout<<x[i]<<" ";
cout<<endl;
return 1;
}


有问题就请留言。谢谢您们。
...全文
1716 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
LX224314 2009-12-10
  • 打赏
  • 举报
回复
fsffffffffffffffffffffffffffffffffffffafa
ZKM_ZHANG 2008-11-25
  • 打赏
  • 举报
回复
接分
blueink_200451 2008-11-15
  • 打赏
  • 举报
回复
我是楼主:

关于matlab计算矩阵这里有一个例子:
http://zhidao.baidu.com/question/54361440.html?si=1

就是想问这个10000*10000的矩阵怎么在matlab下实现。怎么在matlab下调用这个c程序?
谢谢大家。

3,423

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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