轉載於:https://www.cnblogs.com/AndyJee/p/3846455.html
主要內容:
1、QR分解定義
2、QR分解求法
3、QR分解與最小二乘
4、Matlab實現
一、QR分解
定義:
實數矩陣 A 的 QR 分解是把 A 分解爲Q、R,這裏的 Q 是正交矩陣(意味着 QTQ = I)而 R 是上三角矩陣。類似的,我們可以定義 A 的 QL, RQ 和 LQ 分解。
更一般的說,我們可以因數分解複數 m×n 矩陣(有着 m ≥ n)爲 m×n 酉矩陣(在 Q∗Q = I 的意義上)和n×n 上三角矩陣的乘積。
如果 A 是非奇異的,則這個因數分解爲是唯一,當我們要求 R 的對角是正數的時候。
二、QR分解的求法
QR分解的實際計算有很多方法,例如Givens旋轉、Householder變換,以及Gram-Schmidt正交化等等。每一種方法都有其優點和不足。
三、QR分解與最小二乘
最小二乘:
對給定數據點{(Xi,Yi)}(i=0,1,…,m),在取定的函數類Φ 中,求p(x)∈Φ,使誤差的平方和E^2最小,E^2=∑[p(Xi)-Yi]^2。從幾何意義上講,就是尋求與給定點 {(Xi,Yi)}(i=0,1,…,m)的距離平方和爲最小的曲線y=p(x)。函數p(x)稱爲擬合函數或最小二乘解,求擬合函數p(x)的方法稱爲曲線擬合的最小二乘法。
最小二乘的矩陣形式:Ax=b,其中A爲nxk的矩陣,x爲kx1的列向量,b爲nx1的列向量。如果n>k(方程的個數大於未知量的個數),這個方程系統稱爲Over Determined System,如果n<k(方程的個數小於未知量的個數),這個系統就是Under Determined System。
最小二乘與QR分解:
正常來看,這個方程是沒有解的,但在數值計算領域,我們通常是計算 min ||Ax-b||,解出其中的x。比較直觀的做法是求解A'Ax=A'b,但通常比較低效。其中一種常見的解法是對A進行QR分解(A=QR),其中Q是nxk正交矩陣(Orthonormal Matrix),R是kxk上三角矩陣(Upper Triangular Matrix),然後min ||Ax-b|| = min ||QRx-b|| = min ||Rx-Q'b||,用MATLAB命令x=R\(Q'*b)可解得x。
最小二乘的Matlab實現:
① 一次函數使用polyfit(x,y,1)
②多項式函數使用 polyfit(x,y,n),n爲次數
擬合曲線
x=[0.5,1.0,1.5,2.0,2.5,3.0],
y=[1.75,2.45,3.81,4.80,7.00,8.60]。
解:MATLAB程序如下:
x=[0.5,1.0,1.5,2.0,2.5,3.0];
y=[1.75,2.45,3.81,4.80,7.00,8.60];
p=polyfit(x,y,2)
x1=0.5:0.5:3.0;
y1=polyval(p,x1);
plot(x,y,'*r',x1,y1,'-b')
計算結果爲:
p =0.5614 0.8287 1.1560
即所得多項式爲y=0.5614x^2+0.8287x+1.15560
③非線性函數使用 lsqcurvefit(fun,x0,x,y)
四、QR分解的Matlab實現
- [Q,R]=qr(A) or [Q,R]=qr(A,0) (二者的區別自行help或doc一下)
- 其中Q代表正規正交矩陣,
- 而R代表上三角形矩陣。
此外,原矩陣A不必爲正方矩陣; 如果矩陣A大小爲n*m,則矩陣Q大小爲n*m,矩陣R大小爲m*m。
五、參考文獻:
http://www.360doc.com/content/13/1015/09/12712639_321543226.shtml