冬季无雪 发表于 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);%求相关系数矩阵%
=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(:,);
=rotatefactors(am,'method', 'varimax')%am旋转变换,bm为旋转后的载荷阵
bt=)];  %旋转后全部因子的载荷矩阵,前两个旋转,后面不旋转
con2=sum(bt.^2) %%计算因子贡献
check=%该语句是领会旋转意义,con1是未旋转前的贡献率
rate=con2(1:num)/sum(con2) %计算因子贡献率
coef=inv(r)*bm          %计算得分函数的系数
score=x*coef           %计算各个因子的得分
weight=rate/sum(rate)  %计算得分的权重
Tscore=score*weight'   %对各因子的得分进行加权求和,即求各位选手的综合得分
=sort(Tscore,'descend')      %对各位选手进行排序
display= %显示排序结果

小星真没用! 发表于 2012-9-9 08:54

{:3_42:}{:3_42:}{:3_42:}

小星真没用! 发表于 2012-9-9 08:54

{:3_42:}{:3_42:}{:3_42:}

吴建宏 发表于 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 static/image/common/back.gif
楼主这个是奇异矩阵,其中这个矩阵的条件数太小了。所以就类似于分母为0.会报错。解决的办法是:设置条件或 ...

说的有道理。

大笨象 发表于 2012-9-9 23:40

吴建宏 发表于 2012-9-9 09:51 static/image/common/back.gif
对了,还有一个更简单的方法,eps

也是个好方法,用一个小量,免得出现零的情况。
页: [1]
查看完整版本: 谁能解答我就嫁给他