声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2064|回复: 11

[应用数学] 线性病态方程的求解

[复制链接]
发表于 2013-11-29 09:23 | 显示全部楼层 |阅读模式

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

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

x
我有一个线性方程Ax=b 其中矩阵A是个m*n大矩阵(m>n),且是奇异阵,条件数非常大,我用求广义逆矩阵的最小二乘法求出的解还可以,我想对着个矩阵A与向量b加噪声,然后求解,但是误差特别大,查资料后,有一个求病态问题的工具箱,是Hansen教授的,里面的函数很多,用Tikhonov正则化求解可以改善解的误差,为什么的出来的解还是很大?请大侠们指导
回复
分享到:

使用道具 举报

发表于 2014-3-7 09:24 | 显示全部楼层
对于病态方程首选方案还是想办法消除病态,比如从量纲等角度考虑。实不可解的时候再在数值解法上想办法
 楼主| 发表于 2014-3-7 09:59 | 显示全部楼层
gghhjj 发表于 2014-3-7 09:24
对于病态方程首选方案还是想办法消除病态,比如从量纲等角度考虑。实不可解的时候再在数值解法上想办法

可能是我对病态方程的概念没有搞清楚,弄了好长时间,到底怎样才算病态方程?
发表于 2014-3-8 16:42 | 显示全部楼层
本帖最后由 mxlzhenzhu 于 2014-3-8 16:47 编辑
寂寞的部落 发表于 2014-3-7 09:59
可能是我对病态方程的概念没有搞清楚,弄了好长时间,到底怎样才算病态方程?


这是你要的结果么?我用gsvd做的,二阶Tikhonov Regularization, 正则参数随便取的,0.618。
参考资料:Parameter Estimation and Inverse Problem.下载地址:http://ishare.iask.sina.com.cn/f/23664378.html

gsvd solution,nameda=0.618

gsvd solution,nameda=0.618

评分

1

查看全部评分

发表于 2014-3-11 09:33 | 显示全部楼层
寂寞的部落 发表于 2014-3-7 09:59
可能是我对病态方程的概念没有搞清楚,弄了好长时间,到底怎样才算病态方程?

简单来说就是对于线性方程组,如果初始数据小小的扰动就会导致其计算结果严重失真,那么这种方程组就称为病态方程组
下面的文章说的挺清楚的,可以看看

病态线性方程组的判定方法.pdf

183.13 KB, 下载次数: 12

评分

1

查看全部评分

发表于 2014-6-17 19:58 | 显示全部楼层
mxlzhenzhu 发表于 2014-3-8 16:42
这是你要的结果么?我用gsvd做的,二阶Tikhonov Regularization, 正则参数随便取的,0.618。
参考资料 ...

请教,有什么好的建议吗?最近我也遇到这个问题,看了一些文献,提出了很多方法,现在一头雾水,不知道哪种比较好
发表于 2014-6-17 23:41 | 显示全部楼层
song0404 发表于 2014-6-17 19:58
请教,有什么好的建议吗?最近我也遇到这个问题,看了一些文献,提出了很多方法,现在一头雾水,不知道哪 ...

额,呵呵,这个可不好说;你得自己总结,看到上面那个连接的书籍了吗,这本书还不错;
发表于 2014-6-18 15:51 | 显示全部楼层
mxlzhenzhu 发表于 2014-6-17 23:41
额,呵呵,这个可不好说;你得自己总结,看到上面那个连接的书籍了吗,这本书还不错;

爱问最近不能下载,我尝试了一些方法,包括不完全LU分解矩阵预处理之后用bicgstab方法,最后求解的精度跟直接在matlab里面左除精度一样。当然左除本来精度就很高了,结果已经很好了;但是即使用bicgstab方法,matlab还是会warning,说Matrix is close to singular or badly scaled.Results may be inaccurate. RCOND = 9.618563e-108之类的,但是结果确实是收敛的。所以想请教一下你们怎么处理才能彻底消除这种问题
发表于 2014-6-18 16:30 | 显示全部楼层
song0404 发表于 2014-6-18 15:51
爱问最近不能下载,我尝试了一些方法,包括不完全LU分解矩阵预处理之后用bicgstab方法,最后求解的精度跟 ...

这种数值问题,奇异值分解理论说,当奇异值较小的时候,会引入较大数值噪声;引入正则方程进行求解,所有基于正则化分析求解的也只是一种近似,包含一定噪声,同时人为引入了噪声;

左除在matlab里面,就是基于svd的伪逆运算,内部自动识别左伪逆或者右伪逆算法选择;最小二乘理论说,伪逆结果是某些MP逆的最优结果,因此通常情况下可以直接使用;

工程中应用较多的,有TSVD,即设定一个阈值,剔除较小奇异值,计算伪逆;
也有使用一定的值替换较小奇异值,部分正则化的解就是这个原理,比如L-Curve算法;
也有搞得更复杂的,你自己选择吧,没有标准答案。

另外建议,对于部分解不合理,可以考虑带约束的罚函数法,详细理论比较复杂,请参考Golub等的教材;




评分

1

查看全部评分

发表于 2014-6-18 16:46 | 显示全部楼层
mxlzhenzhu 发表于 2014-6-18 16:30
这种数值问题,奇异值分解理论说,当奇异值较小的时候,会引入较大数值噪声;引入正则方程进行求解,所有 ...

原来如此,难怪左除结果就很好了,看来我是直接可以用左除的结果了。看来没有perfect的方法,我看了一些论文,都说了各种方法都有优劣势,很难找到一个perfect的方法了。受教!
 楼主| 发表于 2015-9-15 12:04 | 显示全部楼层
gghhjj 发表于 2014-3-7 09:24
对于病态方程首选方案还是想办法消除病态,比如从量纲等角度考虑。实不可解的时候再在数值解法上想办法

量纲角度是什么意思?
发表于 2015-9-16 08:55 | 显示全部楼层
寂寞的部落 发表于 2015-9-15 12:04
量纲角度是什么意思?

量纲分析应该知道吧,gghhjj的意思估计就是让你调整调整量纲,看是否能将条件数降下来
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-4-30 00:29 , Processed in 0.067290 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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