数学建模社区-数学中国

标题: 谁能解答我就嫁给他 [打印本页]

作者: 冬季无雪    时间: 2012-9-9 07:52
标题: 谁能解答我就嫁给他
在matlab编程中总是出现下面的错误:
Warning: Matrix is close to singular or badly scaled.
         Results may be inaccurate. RCOND = 1.020463e-018.
意思是出现奇异矩阵了,简单讲就是类似于除以0的感觉
上述问题是在使用inv()函数时,出现的问题。
于是,我换了一种方式,先在在原矩阵后面加上eye(),再使用rref()这个函数,但是达不到要求,不知为何?

请求哪位高人,谢谢!!!以下是程序
clc,clear
load HPTLH.txt;
n=size(HPTLH,1);
m=size(HPTLH,2);
x=HPTLH(:,:); %读取HPTLH性质指标%
x=zscore(x);%对x进行标准化处理%
r=corrcoef(x);%求相关系数矩阵%
[vec1,val,con1]=pcacov(r)%主成分分析%
f1=repmat(sign(sum(vec1)),size(vec1,1),1);
vec2=vec1.*f1; %特征向量正负号转化%
f2=repmat(sqrt(val)',size(vec2,1),1);
a=vec2.*f2 %荷载系数矩阵%
num=input('请选择主因子的个数:');
am=a(:,[1:num]);
[bm,t]=rotatefactors(am,'method', 'varimax')%am旋转变换,bm为旋转后的载荷阵
bt=[bm,a(:,[num+1:end])];  %旋转后全部因子的载荷矩阵,前两个旋转,后面不旋转
con2=sum(bt.^2) %%计算因子贡献
check=[con1,con2'/sum(con2)*100]%该语句是领会旋转意义,con1是未旋转前的贡献率
rate=con2(1:num)/sum(con2) %计算因子贡献率
coef=inv(r)*bm          %计算得分函数的系数
score=x*coef           %计算各个因子的得分
weight=rate/sum(rate)  %计算得分的权重
Tscore=score*weight'   %对各因子的得分进行加权求和,即求各位选手的综合得分
[STscore,ind]=sort(Tscore,'descend')      %对各位选手进行排序
display=[score(ind,:)';STscore';ind'] %显示排序结果
作者: 小星真没用!    时间: 2012-9-9 08:54

作者: 小星真没用!    时间: 2012-9-9 08:54

作者: 吴建宏    时间: 2012-9-9 09:43
楼主这个是奇异矩阵,其中这个矩阵的条件数太小了。所以就类似于分母为0.会报错。解决的办法是:设置条件或者判断,分离开,当这个矩阵行列式为0时候,单独进行处理,看对你结果是否有影响;当不为0的时候,进行inv运算。
作者: 吴建宏    时间: 2012-9-9 09:51
对了,还有一个更简单的方法,eps
作者: hbdkfk2    时间: 2012-9-9 14:57
lihai !!!!!!!!
作者: 大笨象    时间: 2012-9-9 23:39
吴建宏 发表于 2012-9-9 09:43
楼主这个是奇异矩阵,其中这个矩阵的条件数太小了。所以就类似于分母为0.会报错。解决的办法是:设置条件或 ...

说的有道理。
作者: 大笨象    时间: 2012-9-9 23:40
吴建宏 发表于 2012-9-9 09:51
对了,还有一个更简单的方法,eps

也是个好方法,用一个小量,免得出现零的情况。




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5