1. 程式人生 > >求解線性方程組(SVD,QR,Gauss,LU)

求解線性方程組(SVD,QR,Gauss,LU)

曲線擬合過程中,需要求解線性方程組,下面談談線性方程組的求解方法:

1)svd求解

對於齊次線性方程 A*X =0; 當A的行數大於列數時,就需要求解最小二乘解,在||X||=1的約束下,其最小二乘解為矩陣A'A最小特徵值所對應的特徵向量。求解方法有兩種(matlab):
1.  [ V D] =eig(A' *A); D為A' *A的特徵值對角矩陣,V為對應的特徵向量。找到最小特徵值對應的V中的特徵向量即為最小二乘解。
2. 使用SVD分解矩陣A,[U S V] = svd(A); 因為根據馬毅的書中的附錄介紹,U 由 A*A'的 特徵向量組成,V 由 A'*A的 特徵向量組成,因此,奇異值矩陣S中最小的奇異值對應的V中的奇異向量即為最小二乘解。

    對於超定方程(非齊次線性方程的一種)

的最小二乘解的情況。 A*X =b ;  當A的行數大於列數時,就需要求解最小二乘解,具體的數學原理不清楚,在matlab中使用一個左除命令就可以得到最小二乘意義下的解。這個解沒有模製的限制,就是實際的解。  matlab: A\b

3. SVD

任意矩陣A (mxn), 都能被奇異值分解為:

 

A = U *Σr *V

其中, Umxm的正交矩陣, Vnxn的正交矩陣,Σr是由r個沿對角線從大到小排列的奇異值組成的方陣.r就是矩陣A的秩.

4. Moore-Pseudo逆

任意矩陣A, 若存在矩陣X, 使得:

AXA = A    ; XAX = X;  (AX) ^T = AX;    (XA)^T = XA

則稱XA的Moore-Pseudo逆, 簡稱廣義逆, 記為A+.

矩陣A的廣義逆是唯一的, 並且可以利用A的SVD分解進行計算. 令A的SVD分解為:


不難驗證

5. 線性最小二乘問題

考慮線性方程組Ax=b, 求其最小二乘解.

如果A的秩是n, 則其唯一解是A+b; 如果秩小於n, 則有無窮多解, 其中的最小范數解仍然是A+b. 我們通常關心的也就是這個解.

2)QR求解

QR分解主要針對上海森伯格陣的全部特徵值問題和計算對稱三對角矩陣的全部特徵值問題

任意矩陣A(m * n)

QR分解後A = QR, 其中Q是M*M正交陣,R是M*N陣,當M》N時,R陣是三角陣,是矩陣A的特徵值,通過特徵值進而求解特徵向量。

延伸一下,QR分解也用於求解最小二乘問題。

3)Gauss消去法求解線性方程組

這個不多說了,找本線性代數書看看就懂

4)LU分解求線性方程組

 

相關推薦

求解線性方程組SVDQRGaussLU

曲線擬合過程中,需要求解線性方程組,下面談談線性方程組的求解方法: 1)svd求解 對於齊次線性方程 A*X =0; 當A的行數大於列數時,就需要求解最小二乘解,在||X||=1的約束下,其最小二乘解為矩陣A'A最小特徵值所對應的特徵向量。求解方法有兩種(matlab):

高斯消元法求解線性方程組分數精確表示

原理可以參考 https://zh.wikipedia.org/wiki/%E9%AB%98%E6%96%AF%E6%B6%88%E5%8E%BB%E6%B3%95 這裡給出使用分數表示計算過程的高斯消元法寫法 github地址:https://github.com/YIWANFEN

採用GAUSS列主消元法求解線性方程組MATLAB

%%求解任意線性方程組的解 clc; clear all; format long e disp('線性方程組求解,請輸入引數'); n=input('維數n='); A=input('矩陣A='); b=input('右端項b='); eps=input('控制精度eps='); b=b';   %%變為列

列主元消去法求解線性方程組C++實現

接著上次的繼續,上次使用了高斯消元法http://blog.csdn.net/qq_26025363/article/details/53027926,但是,在消元過程中,無法使主元素a(ii)≠0,但是很小時,用其做除數,會導致其他元素數量級的嚴重增長,舍入誤

迭代法求解線性方程組C++實現

本系列是數值分析相關演算法的文章,這次用迭代法求解線性方程組,不同於上次用高斯消元法之類的求解。迭代法對於稀疏矩陣方程組的運算,會大大提高。而如果用高斯相關的演算法求解,會浪費大量資源計算無用的東西,所以有必要研究此演算法。 本文章主要使用了3個演算法,分別是

如何使用拓展歐幾裏得算法求解線性方程組詳解

得出 bsp 次方 及其 根據 約數 www 求解 回退   式子a≡b(mod n)稱為a和b關於模n同余,它的充要條件是a-b是n的整數倍,即a-b=zn(其中z取整數)。 而模線性方程組ax≡b(mod n)可以寫成ax-b=zn(其中z取整數),移項可得 ax-zn

中國剩餘定理求解同餘線性方程組模數互素和非互素的情況

中國剩餘定理      中國剩餘定理是中國古代求解一次同餘方程組的方法,是數論中的一個重要定理。      設m1,m2,m3,...,mk是兩兩互素的正整數,即gcd(mi,mj)=1,i!=j,i,j=1,2,3,...,k. 則同餘方程組: x = a1

SVD線性方程組非齊次

    對於任一給定的矩陣A(m * n),都存在這樣的分解:        其中, U是一個m * m的酉矩陣,S是一個m * n的矩陣,除了主對角線上的元素以外全為0,主對角線上的每個元素都稱為奇異值, V是一個n * n的酉矩陣。求解解線性方程組    Ax=b   

基於matlab的Guass-Seidel(高斯--賽德爾) 迭代法求解線性方程組

演算法解釋見此:https://blog.csdn.net/zengxyuyu/article/details/53056453   原始碼在此: main.m clear clc A = [8 -3 2;4 11 -1;6 3 12]; b = [20;33;36]; [

基於matlab的jacobi(雅可比)迭代法求解線性方程組

說明推導見此部落格:https://blog.csdn.net/zengxyuyu/article/details/53054880 原始碼見下面: main.m clear clc A = [8 -3 2;4 11 -1;6 3 12]; b = [20;33;36]; [x, n]

【模板】合併模線性方程組POJ2891

Description   給定\(n\)組同餘關係,求解最小的非負整數\(x\),滿足\(x \mod a_i = r_i\) Input   第一行一個整數\(n\)   接下來\(n\)行,每行兩個整數,分別表示\(a_i\) 和 \(r_i\) Output   一個正整數\(x\)即最小正

使用裴蜀公式來求解線性方程組的第一個大於零的解

1. 假設方程組為ax + by = m ​在數論中,裴蜀定理是一個關於最大公約數(或最大公約式)的定理。裴蜀定理得名於法國數學家艾蒂安·裴蜀,說明了對任何整數a、b和它們的最大公約數d,關於未知數x和y的線性丟番圖方程(稱為裴蜀等式): ax + by = m 有解當且僅當m是d的倍數

高斯-塞德爾迭代法求解線性方程組

高斯-塞德爾迭代法也是求解線性方程組解的一種方法,與雅可比不同之處在於,求解某個未知數的某代值時,直接使用上一未知數在該代的值。 C++程式碼如下: #include<stdio.h> #include<math.h> using namespa

matlab中求解線性方程組的rref函式

matlab中怎麼求解線性方程組呢? matlab中求解線性方程組可應用克拉默法則(Cramer’s Rule)即通過det()函式計算各個矩陣的行列式來求,也可以用高斯消元法來求解。 matlab中的rref()函式可以將矩陣化成行最簡形式,用法如下: 假如有一線性方程組為: 16 x1 + 2 x2

高斯消元求解線性方程組_BZOJ4004_裝備購買

點此開啟題目頁面 思路分析:     考慮求解所有n個裝備的屬性對應的n個長度為m的向量的基底, 使用高斯消元時, 每次選擇當前對應列非零, 且價格最低的行(裝備)進行消元, 具體實現如下AC程式碼所示: //BZOJ4004_裝備購買 #include <

【原創】開源Math.NET基礎數學類庫使用(06)直接求解線性方程組

  在前幾篇關於Math.NET的部落格中(見上面連結),主要是介紹了Math.NET中主要的數值功能,並進行了簡單的矩陣向量計算例子,接著使用Math.NET的矩陣等物件,對3種常用的矩陣資料交換格式的讀寫。一方面可以瞭解Math.NET的使用,另一方面以後也可以直接讀取和儲存資料為這兩種格式,給大家的

線性方程組poj2115

#include<cstdio> #define ll long long ll d; ll x,y; void exgcd(ll a,ll b){ if(b==0){ d=a; x=1; y=0; return ; } exgcd(b,a%b); ll t=x;

雅可比迭代法解線性方程組matlab程式

A=[4,3,0;3,4,-1;0,-1,4]; b=[24,30,-24]; x=jokebi(A,b); function  x2=jokebi(B,c) D=diag(diag(B)); U=D-triu(B); L=D-(triu(B))'; x1=(rand(1,

數值分析 Gauss-Seidel迭代法求解線性方程組 MATLAB程式實現

Gauss-Seidel迭代法 參考數值分析第四版 顏慶津著 P39 執行輸入為: 執行結果為: 以下是函式內容(儲存為gauss.m檔案,在MATLAB中執行): %function [G,d,x,N]=gauss(A,b) %Gauss-Seidel迭代

線性方程組中國剩餘定理

《孫子算經》裡有這樣一個問題,“今有物不知其數,三三數之剩二(除以3餘2),五五數之剩三(除以5餘3),七七數之剩二(除以7餘2),問物幾何?”,解決這個問題的方法稱為中國剩餘定理,也叫孫子定理。中國古代還有一個叫做“韓信點兵”的問題,和這個問題本質是一樣的。 很明顯這個物