声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2282|回复: 8

[综合讨论] 为什么矩阵求逆就出现问题了

[复制链接]
发表于 2007-5-18 21:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
矩阵求逆后就有:            Warning: Matrix is close to singular or badly scaled.
                                             Results may be inaccurate. RCOND = 3.631628e-022

代码(求逆那我标明了):

load orl_faces  %加载orl数据库faces
a=faces; %644*400



%取出所有训练图像y 是644*200
y=[];
for i=1:40
    for j=1:5    %相当于 for(i=0;i<mm;i++)
        y=[y a(:,(i-1)*10+j)];  %a(:,(i-1)*10+j)是一个列向量     y=[y a(:,(i-1)*10+j)]就是很多列向量组成一个矩阵x
    end
end


%估计总体的协差阵ST
a2=y'; %转置
yy=mean(a2); %求均值,yy:1*644
xmean=[];
for i=1:5*40
    xmean=[xmean; a2(i,:)-yy];  
end
xmean= xmean';
M= xmean* xmean';
M=(1/5*40)*M;  % M为总体协差阵   M是ST



%求SB
x=[];
ymean=[];
for i=1:40
for j=1:5    %相当于 for(i=0;i<5;i++)
  x=[x a(:,(i-1)*10+j)];  %a(:,(i-1)*10+j)是一个列向量      x=[x a(:,(i-1)*10+j)]就是很多列向量组成一个矩阵x
end
a1=x'; %转置
xx=mean(a1); %求均值,xx:1*644
ymean=[ymean;a1(i,:)-xx];  
end
ymean= ymean';
N= ymean* ymean';
N=(1/40)*N;%N是SB
S=M-N;%S是SW
   

a3=[];
f=inv(S);%算矩阵SW的逆矩阵
a3=f*N;%SW的逆乘以SB
[v,d]=eig(a3);
l=orth(v);
Y=sort(l);
Z=[];
for i=1:39
    Z=[Z Y(:,i)];
end
w=Z;
B=w'*x;%将644维的X投影到39维的Y上





%输入查询图像p
  accu=0;
for m=1:40
    for n=6:10
       p=a(:,(m-1)*10+n);
%计算查询图象p的投影坐标
Q=w'*p;
  % 计算出p与所有样本图象X间的欧几里得距离
        distance=[];
        for  k=1:size(B,2)
             e=Q-B(:,k);
             temp=sqrt(sum(e.^2));
             mag=temp;
             distance=[distance mag]; %数组distance存放距离
        end
                [dist index2]=sort(distance);
             %最近邻域判别法  
      class=ceil(index2(1)/5); % ceil向正取整,class:距离最近的类别
         if class==m;
           accu=accu+1; %记录识别成功次数
         end        
end
end
accuracy=(accu/200)*100
回复
分享到:

使用道具 举报

发表于 2007-5-18 21:35 | 显示全部楼层
矩阵为奇异了,建议自己编程序求逆。
  比如消去法。
发表于 2007-5-18 21:44 | 显示全部楼层
哦,我也学学
 楼主| 发表于 2007-5-18 21:45 | 显示全部楼层

啊? 不太会呢?能再帮我讲解详细点么?

发表于 2007-5-18 21:47 | 显示全部楼层
 楼主| 发表于 2007-5-18 22:21 | 显示全部楼层
谢谢了,你告诉我,我就知道查什么资料了
 楼主| 发表于 2007-5-18 22:22 | 显示全部楼层
好象要求伪逆了
发表于 2007-5-19 08:29 | 显示全部楼层
S矩阵不是方阵的话,需要求伪逆。
  matlab中 pinv 就可以了。

评分

1

查看全部评分

发表于 2007-5-19 13:33 | 显示全部楼层

有直接语句"/"

有直接语句"/"
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-19 04:23 , Processed in 0.065324 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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