谁能解答我就嫁给他
在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= %显示排序结果 {:3_42:}{:3_42:}{:3_42:} {:3_42:}{:3_42:}{:3_42:} 楼主这个是奇异矩阵,其中这个矩阵的条件数太小了。所以就类似于分母为0.会报错。解决的办法是:设置条件或者判断,分离开,当这个矩阵行列式为0时候,单独进行处理,看对你结果是否有影响;当不为0的时候,进行inv运算。 对了,还有一个更简单的方法,eps lihai !!!!!!!! 吴建宏 发表于 2012-9-9 09:43 static/image/common/back.gif
楼主这个是奇异矩阵,其中这个矩阵的条件数太小了。所以就类似于分母为0.会报错。解决的办法是:设置条件或 ...
说的有道理。 吴建宏 发表于 2012-9-9 09:51 static/image/common/back.gif
对了,还有一个更简单的方法,eps
也是个好方法,用一个小量,免得出现零的情况。
页:
[1]