matlab 解大型稀疏线性方程组

请问在matlab中怎样求Ax=b这个线性方程组比较快?A是大于30000*30000的稀疏方阵。我用A\b直接算的时候要花半分钟。试用gmres(A,b),bicgst... 请问在matlab中怎样求Ax=b这个线性方程组比较快?A是大于30000*30000的稀疏方阵。我用A\b直接算的时候要花半分钟。试用gmres(A,b),bicgstab(A,b)的时候时间短了一半,但是算出来的结果是错的。有没有更快的方法?自己写的函数也可以 展开
 我来答
电灯剑客
科技发烧友

2011-04-19 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:1.2万
采纳率:83%
帮助的人:4697万
展开全部
这个问题不好直接回答,因为N=30000和稀疏性其实基本上不携带任何有价值的信息。
根据需求应该先搞清楚几件事,然后才能选择算法
1.是否具有对称性,如果有的话是否还有正定
2.需要解一次还是解很多次(相同的A不同的b),或是矩阵还会变(不同的A)
3.对A的条件数或是部分特征值是否有已知信息或廉价的近似估计
4.A的非零元的分布特征
第1条通常决定了是否有相对廉价且高效的算法,2,3也是比较重要的参考信息,4则决定了稀疏直接法或者预条件的难度。

A\b采用的是稀疏直接法,是否可接受取决于第2条。
gmres和bicgstab都是针对非对称矩阵的Krylov子空间方法,默认参数可能不足以收敛,要用复杂的调用方式,自己指定参数,并且还要检查输出信息。这个你自己help一下用法。
一般来讲Krylov子空间迭代法需要预条件作为辅助,如果没有太多信息可以考虑用luinc来产生预条件。

楼上列的那篇paper不用看,基本没用。
追答
如果只解一次的话半分钟也算不了什么。已知条件只能用于估计A的非零元分布,没有过多信息。
GMRES的help看不懂说明你不知道GMRES的原理,如果经常要用的话最好先去学一下。
给你一个比较简单的例子
[L,U] = luinc(A,1e-3); %luinc(A,'0')也可以试一下,是一种完全不同的ILU
tol=1e-10; %残量的精度要求
restart=30; % 30-50之间吧,不要过小
maxit=100; %看情况,如果不收敛就适当调大
[x,flag]=gmres(A,b,restart,tol,maxit,L,U);
最后检查一下flag。
江苏华简晟01
2024-10-21 广告
色谱检测服务热线18721007633, 江苏华简晟检测科技是研究性测试服务机构,基于多年的分析表征专业技术积累和辐射全国的服务网络,每年出具数万分技术报告,累计服务客户数千万家。... 点击进入详情页
本回答由江苏华简晟01提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式