找回密码
 注册
Simdroid-非首页
查看: 152|回复: 12

eigs精度提高帮助

[复制链接]
发表于 2010-6-24 11:31:11 | 显示全部楼层 |阅读模式 来自 重庆沙坪坝区
本帖最后由 swinder 于 2010-6-24 16:21 编辑

解的矩阵值大的不多,
它解出的特征值不可靠,
144*144的矩阵为例,如下,两次解出的第二大特征值不同,两者绝对误差与特征值的大小的在一个数量级上,都是10^-6~10^-7,设置了opt.tol=10-30也不行.(附件里就是这样一个矩阵)
如果矩阵维数变大,精度会更差,两次解会差10^-3---10^-4,
解部分本征值用eigs要怎么设才能达到精度(10-10)
或者有其他的解部分本征值的好函数么.

谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2010-6-24 13:59:49 | 显示全部楼层 来自 浙江杭州
Simdroid开发平台
没有看明白lz到底想问什么?
精度提高?特征值的精度还是特征向量的精度?ARPACK采用的隐式重启Arnold/Lanczos算法中,特征向量的计算精度如果是10^(-s),个么特征值的精度就是10^(-2s)
“两次解会差很多”?这个不是精度问题是收敛性问题,“差10-6~10-7”相对值还是绝对值?
又,lz提供的矩阵条件数是1.2496e+038,已经属于病态矩阵了!

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-6-24 15:28:51 | 显示全部楼层 来自 重庆沙坪坝区
本帖最后由 swinder 于 2010-6-24 15:31 编辑

谢谢
是第二大特征值的差,差的绝对值
我想知道如果是病态矩阵怎么解
发现我要算的都是这样的的矩阵,我需要得到高点的精度
回复 不支持

使用道具 举报

 楼主| 发表于 2010-6-24 16:17:25 | 显示全部楼层 来自 重庆沙坪坝区
用eig全部解出可以,svd和svds也可以用,但是用eigs得到的最大的几个本征值与eig解出的最大的几个差较大,且每次都不同。我想得到最大的几个特征值和对应特征向量,不能全部解出,因为会处理很大的矩阵,如果全解出来太耗时。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-6-26 18:36:00 | 显示全部楼层 来自 重庆沙坪坝区
希望有回答的……
回复 不支持

使用道具 举报

发表于 2010-6-27 08:39:56 | 显示全部楼层 来自 黑龙江哈尔滨
估计是矩阵接近奇异,将矩阵归一化处理后再试试
回复 不支持

使用道具 举报

发表于 2010-8-17 09:02:52 | 显示全部楼层 来自 北京交通大学
4# swinder
lz说eig与eigs计算的结果差距较大,能否具体说明一下,矩阵的阶数多大,绝对误差或者相对误差会有多大
回复 不支持

使用道具 举报

发表于 2010-8-23 15:52:25 | 显示全部楼层 来自 江苏南京
我遇到的问题与楼主非常相似。
我也用了eigs命令求解矩阵的前n阶特征值与特征向量,以此来求一个悬臂板的固有频率与模态。
同一个命令计算两次,得到的固有频率是一致的,但是模态却不一致。
回复 不支持

使用道具 举报

发表于 2010-8-23 16:00:53 | 显示全部楼层 来自 江苏南京
第一次计算得到的前8阶固有频率值:1.298639289779048;8.126272421734084;15.28008827609312;22.584161578061735;43.62939531892819;46.374236202254444;69.67330848282322;79.10678864753467。
第二次计算得到的前8阶固有频率值:1.298639289779047;8.126272421734082;15.280088276093121;22.584161578061764;43.62939531892817;46.374236202254444;69.67330848282333;79.1067886475347。
从结果上看,两次计算的固有频率很接近,但是模态却不一致(其中3、4阶模态互相调换了)!
(点“高级回复”总是没反应,所以就无法把模态图贴上来了,请各位谅解!)
回复 不支持

使用道具 举报

发表于 2010-8-23 18:26:14 | 显示全部楼层 来自 江苏南京
附:模态结果图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2010-8-23 18:30:14 | 显示全部楼层 来自 江苏南京
我用的命令是[eigVector eigValue]=eigs(K,M,8,'sm');其中K的条件数是8.262610858449316e+008,M的条件数是1.677760106929301e+005。是否也是因为它们是病态矩阵而导致这种结果呢?
回复 不支持

使用道具 举报

发表于 2010-8-24 08:40:12 | 显示全部楼层 来自 浙江杭州
第一次计算得到的前8阶固有频率值:1.298639289779048;8.126272421734084;15.28008827609312;22.584161578061735;43.62939531892819;46.374236202254444;69.67330848282322;79.10678864753467。
第二次计算得 ...
icejoan242 发表于 2010-8-23 16:00

1、换eig命令,对照一下;
2、再用商业软件算一下,对照一下
回复 不支持

使用道具 举报

发表于 2010-8-24 09:45:13 | 显示全部楼层 来自 江苏南京
非常感谢pasuka的建议。
1.eig命令能得到前n阶的特征值和特征向量吗?我的矩阵是1000*1000的,甚至更高,将1000个特征值和相应的特征向量都算出来要是不现实的,也没必要。
2.对于简单的情况的话用商业软件确实很容易验证,但是我考虑了复杂的工况,目前大部分商业软件算不了,有的即使能算我也怀疑它是否算得准(毕竟对它内部的算法不清楚),因此我才自己编程求解。
现在的问题是,matlab的eigs命令是不稳定的,它的结果已经不可信了(至少特征向量结果是不可信了)。请问各位matlab还有别的命令可以更好地计算前n阶特征值和特征向量么?
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-6 19:19 , Processed in 0.066443 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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