Ran He老師講他CVPR 2012公式20不是用inv求的,他和學(xué)生說過能不用inv,盡量不用,用左除或者右除,解線性方程組。不能受我matlab教材影響,左除或者右除和求inv是不等價(jià)的。Feiping Nie的NIPS 2010公布代碼L21R21第45行
實(shí)現(xiàn)一個(gè)矩陣的逆乘以另外一個(gè)矩陣,也用右除。類似實(shí)現(xiàn)一個(gè)矩陣乘以另外一個(gè)矩陣的逆,用左除,不用invhttp://zhidao.baidu.com/question/308277515.html
左除要不要求矩陣可逆?為什么一個(gè)不可逆的矩陣a在matlaB中用inv(a)*y不可計(jì)算,用a\y就可以計(jì)算了?
答:左除不要求矩陣可逆,在matlab中inv(a)*y與a\y并不等同,左除命令有更深的內(nèi)涵,當(dāng)a為方陣且可逆時(shí),二者都能得到正確結(jié)果,但
左除精度更高,運(yùn)算數(shù)度快(我實(shí)驗(yàn)下來,確實(shí)是這樣),特別當(dāng)A為病態(tài)矩陣時(shí),inv(A)*y的計(jì)算結(jié)果不可靠(不過這種矩陣出現(xiàn)的概率很低),但用左除計(jì)算出的結(jié)果卻很可靠,因?yàn)樽蟪莔atlab設(shè)計(jì)的一個(gè)智能算符,他可以智能地選擇算法;當(dāng)方程為矛盾方程(也就是獨(dú)立方程個(gè)數(shù)多余未知數(shù)個(gè)數(shù))時(shí),此時(shí)顯然沒有精確解,但很多時(shí)候我們需要x在最小二乘意義下的解,此時(shí)用A\y就能得到x的最小二乘解。
Haiqing Li說他從來不看這些中文的,有些人可能回答得不專業(yè)或誤解,到matlab幫助搜索arithmetic operators有左除或者右除詳細(xì)解釋
測試?yán)樱?br />
第一個(gè)matlab的m文件% 生成數(shù)據(jù)
rand('state',0);
n = 10000;% 也可設(shè)置為1000
A = randn(n,n);
B = randn(n,1);
save MyFile1 A B;
第二個(gè)matlab的m文件
% 測試求逆時(shí)間
tic;
load MyFile1;
n = size(A,1);
C1 = inv(A'*A+0.01*eye(n))*B;
save MyFile2 C1;
toc;
第三個(gè)matlab的m文件
% 測試左除時(shí)間
tic;
load MyFile1;
n = size(A,1);
C2 = (A'*A+0.01*eye(n))\B;
save MyFile3 C2;
toc;