爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9273|回复: 8

[求助] 关于IDL求特征向量的问题

[复制链接]

新浪微博达人勋

发表于 2014-3-11 21:54:34 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
我在用IDL进行EOF分析时,需要求特征向量,用的语句是: lamta=EIGENQL(s, EIGENVECTORS=vq)
可是当资料阵s大小为248*248的矩阵时,报错  “TRIQL: Too many iterations in tqli.”
用同样的资料时间维数取小一点,s为50*50的时候,计算出来的特征向量和特征值都是正确的。

求问大神这是什么原因?该怎么解决呢?
万分感谢!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-12 09:11:15 | 显示全部楼层
本帖最后由 longlivehj 于 2014-3-12 09:16 编辑

根据错误提示,我查看了一下tqli的c源码,里面有一句是这样的:
if (iter++ == 30) nerror("Too many iterations in tqli")
迭代次数过多了,就会报错。

tqli的c源码的说明中这样写到:“该程序在实践中运行良好,对于前几个特征值的迭代次数可能4或5次,后面的特征值就只需很少的计算量就可以求出”。所以,30的限制也应该足够了。

我尝试随机生成了一个248大小的对称矩阵,用eigenql求特征值,没有出现那样的错误!所以,跟矩阵大小关系不大。反而,我用一个元素全部为1的248大小的对称矩阵就会出现那样的错误。

因此,你看看你的对称矩阵是不是“过于特殊”了?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-3-12 14:29:59 | 显示全部楼层

非常感谢你的回答,
可是我看了一下我的数据,是海平面气压减去一个长期平均再减去一个5年的滑动平均后得到的,看起来也挺随机的,不是很特殊啊。

后来我又试了一下,把减去长期平均的海平面气压进行求特征向量是可以的,再减去5年的滑动平均后就不行了,看来真的是数组的原因啊。

呜呜,可是我现在就要对海平面气压进行那样的去趋势处理啊,怎么办呢……
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-12 15:39:32 | 显示全部楼层
这个数值计算方面的问题有时候真心没法很好解决。
建议用商业软件,比如spss里面的因子分析工具,或者ncl里面的eof相关函数做一下。不同工具的实现方法有差别,结果可能会有所改善。

另外,有个问题问你,仔细看你问题里面有这么一句话,“……用同样的资料时间维数取小一点,s为50*50的时候……”。这里s应该已经是对称阵了(协方差 or 相关系数),那么s的大小应该是等于变量的个数,而不是你说的时间维数。除非,因为变量数远大于样本数,经过“时空转换”,s的大小才应该与时间维数相等。如果真是这样,“时空转换”也许可以解决你的问题。

嘿嘿,就是小小的探讨一下!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-3-12 16:49:38 | 显示全部楼层
longlivehj 发表于 2014-3-12 15:39
这个数值计算方面的问题有时候真心没法很好解决。
建议用商业软件,比如spss里面的因子分析工具,或者ncl里 ...

我是已经做了时空转换了,要对248个月的海平面气压做EOF,格点数有144*29呢……

你之前说了可能是数据的原因嘛,我就只取了其中50个月进行,这样s就是50*50了,发现是可以的。

此外,我也试了一下元素全为1的对称矩阵,发现当矩阵大小是200*200的时候还是能求特征向量的,好像到210*210就不行了……
看来只能换个软件试一下了

总之,非常感谢啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-12 16:52:27 | 显示全部楼层
pancy 发表于 2014-3-12 16:49
我是已经做了时空转换了,要对248个月的海平面气压做EOF,格点数有144*29呢……

你之前说了可能是数据 ...

o(∩∩)o...哈哈,果然是这样!
也没帮上你,祝好运!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-6-6 08:38:47 | 显示全部楼层
你好,最近我最近用IDL在做海温EOF分解,第一,计算距平场的协方差矩阵
matrix = (1/ntime-1) * (Double(sst_anomalies) ## Transpose(sst_anomalies))
第二,计算特征值、特征向量
eigenvalues = EIGENQL(matrix, EIGENVECTORS = evecs, RESIDUAL = residual)
第三,   。。。。第四,。。。再需要怎么做  在IDL中每一步都用哪些函数。要求计算,第一模态,第二模态,第三模态,时间系数,各模态方差贡献率。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-4-24 17:59:48 | 显示全部楼层
你好,请问你eof的pro还在不,不知可否分享学习一下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-5-30 13:48:30 | 显示全部楼层
我用idl做eof分析也是出了一堆问题
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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