「矩陣接近奇異值,或者縮放錯誤」解決方法

2020-12-05 平凡的科研

對矩陣求逆或者求解線性方程組時,若出現「矩陣接近奇異值,或者縮放錯誤。結果可能不準確。Matrix is close to singular or badly scaled. Results may be inaccurate.」報錯信息,可能是選取的求逆函數不合適導致的,可使用求解最小範數最小二乘解的方法進行解決。

Matlab中一般有四種求解線性方程組的方法,下面依次進行簡單介紹,具體函數使用方法可查詢MATLAB官方文檔。

假設有線性方程組

Ax=b

其中A為係數矩陣,x為待求解未知量列向量。

MATLAB中有4種方法常用來進行求解:

1. 直接求逆

使用函數x=inv(A)*b,此方法等價於x=A^(-1)*b,但這種方法是通過構造顯式逆矩陣,如果A接近奇異或奇異,會返回不準確的結果。並且實際很少需要知道矩陣求逆結果,一般求解線性方程組時很少使用此種方法。

2. 使用反斜槓求解

即x=A\b,這種方法使用的是高斯消元法,不需構造矩陣求解,就求解速度和精度而言,這種方法比方法1要好。

3. 求偽逆

使用函數x=pinv(A)*b。即Moore-Penrose偽逆矩陣,相關概念可見官方文檔。此方法主要用於求解沒有唯一解的線性方程組,適用於A接近或者就是奇異矩陣的情況,若A非奇異求解成本要高於使用inv(),可使用rcond()函數求解條件數,判斷A是否奇異。

4. 求最小範數最小二乘解

使用函數x=lsqminnorm(A,b)。此方法在矩陣接近奇異或者奇異時,相比pinv()這種方法更加有效,因此最小範數最小二乘解不僅會使||Ax-b||最小,還會使||x最小。

因此,若產生「矩陣接近奇異值,或者縮放錯誤。結果可能不準確。」報錯信息,可使用方法3和方法4來解決,其中方法4會更加有效。

相關焦點

  • 矩陣的奇異值與特徵值有什麼相似之處與區別之處?
    一個線性變換的作用可以包含旋轉、縮放和投影三種類型的效應。奇異值分解正是對線性變換這三種效應的一個析構。
  • 強大的矩陣奇異值分解(SVD)及其應用
    特徵值和奇異值在大部分人的印象中,往往是停留在純粹的數學計算中。而且線性代數或者矩陣論裡面,也很少講任何跟特徵值與奇異值有關的應用背景。奇異值分解是一個有著很明顯的物理意義的一種方法,它可以將一個比較複雜的矩陣用更小更簡單的幾個子矩陣的相乘來表示,這些小矩陣描述的是矩陣的重要的特性。
  • 奇異值、奇異矩陣、SVD分解、正交矩陣
    定義:設A為m*n階矩陣,A'表示A的轉置矩陣,A'*A的n個特徵值的非負平方根叫作A的奇異值。記為σi(A)。如果把A『*A的特徵值記為λi(A『*A),則σi(A)=sqrt(λi(A』*A))。奇異矩陣:奇異矩陣是線性代數的概念,就是對應的行列式等於0的矩陣。奇異矩陣的判斷方法:首先,看這個矩陣是不是方陣(即行數和列數相等的矩陣。若行數和列數不相等,那就談不上奇異矩陣和非奇異矩陣)。
  • 奇異值分解及其應用
    特徵值和奇異值在大部分人的印象中,往往是停留在純粹的數學計算中。而且線性代數或者矩陣論裡面,也很少講任何跟特徵值與奇異值有關的應用背景。奇異值分解是一個有著很明顯的物理意義的一種方法,它可以將一個比較複雜的矩陣用更小更簡單的幾個子矩陣的相乘來表示,這些小矩陣描述的是矩陣的重要的特性。
  • 奇異值分解和矩陣分解傻傻分不清楚?一文幫你理清兩者差異!
    在推薦系統的相關研究中,我們常常用到兩個相關概念:矩陣分解和奇異值分解。這兩個概念是同一種算法嗎?兩者到底有什麼差別?在本文中,作者梳理了兩種算法的概念、來源和內容,並進行了比較。通過對相關內容的梳理,作者提出,矩陣分解是推薦系統中最初使用的概念,奇異值分解是對該方法的進一步發展。在現在的討論中,一般將兩種方法統一成為奇異值分解。
  • 幾何角度理解奇異值分解SVD
    一、左乘矩陣的幾何意義 向量左乘對角矩陣,幾何上相當對這個向量的長度進行縮放,此處坐標軸保持不變; 向量左乘對稱矩陣,幾何上相當於對這個向量的長度進行縮放,並且對坐標軸也進行旋轉; 給向量左乘普通矩陣,總能找到一組正交的坐標軸來表示該向量,這組坐標軸是由原來的坐標軸通過縮放和旋轉而得到。
  • 奇異值分解(SVD) 的 幾何意義
    但實際上,這並非是求解奇異值的方法,效率會非常低。這裡也主要不是討論如何求解奇異值,為了演示方便,採用的都是二階矩陣。應用實例(Another example)現在我們來看幾個實例。實例一經過這個矩陣變換後的效果如下圖所示在這個例子中,第二個奇異值為 0,因此經過變換後只有一個方向上有表達。
  • 通俗易懂的講解奇異值分解(SVD)和主成分分析(PCA)
    因此對於一個m×n維的矩形矩陣,我們能夠使用下面的方法對其進行特徵分解——即奇異值分解:其中,矩陣U和V是正交矩陣,Σ表示一個包含有奇異值的對角陣。其實SVD的主要目標就是為了找到三個參數:矩陣v,矩陣u和奇異值σ,其中矩陣v和u都是正交向量且滿足下面等式:一個n維的列向量v經過矩陣A的變換等於一個m維的行向量u經過奇異值σ的縮放
  • 奇異值分解簡介:從原理到基礎機器學習應用
    矩陣分解在機器學習應用中的重要性無需多言。本文對適用範圍很廣的奇異值分解方法進行了介紹,並通過代碼演示說明了其工作方式、計算方法及其常見的幾種基礎應用。矩陣分解也叫矩陣因子分解,涉及到用給定矩陣的組成元素描述該矩陣。
  • 推薦系統 | 矩陣分解(SVD)原理和實戰
    站在特徵向量的角度,特徵向量的幾何含義是:特徵向量x通過方陣A變換,只縮放,方向不變。1.2 標準化:一般我們會把U的這n個特徵向量標準化(可使用施密特正交化方法),即滿足||𝑤𝑖||2=1, 或者說𝑤𝑖𝑇𝑤𝑖=1。標準化後∑的𝑛個特徵向量為標準正交基,滿足∑𝑇∑=𝐼,即∑𝑇=∑−1, 也就是說∑為酉矩陣。
  • 數據科學中需要知道的5個關於奇異值分解(SVD)的應用
    奇異值分解(SVD)的應用我們將在此處遵循自上而下的方法並首先討論SVD應用。如果你對它如何工作感興趣的,我在下面會講解SVD背後的數學原理。現在你只需要知道四點來理解這些應用:SVD是將矩陣A分解為3個矩陣--U,S和V。S是奇異值的對角矩陣。將奇異值視為矩陣中不同特徵的重要性值矩陣的秩是對存儲在矩陣中的獨特信息的度量。
  • 矩陣分解 (乘法篇)
    所以LU分解只用到了三角矩陣。 當然更進一步, 可以要求是一個稍微特殊點的三角矩陣, 就是下三角矩陣L對角線全1, 或者上三角矩陣U對角線元素全部為1. 這也很容易去解釋, 為什麼LU分解可以寫成對角線全1的三角矩陣, 因為可以提取出一個對角矩陣, 然後乘到左邊下三角矩陣或者右邊上三角矩陣去。
  • 論文推薦| 林東方:顧及截斷偏差影響的TSVD截斷參數確定方法
    函數模型的病態性體現在觀測方程係數矩陣中出現較小甚至接近於零的奇異值,導致參數估值的方差被小的奇異值嚴重擴大,造成估值精度的降低。為了提高估值的穩定性和精度,學者們提出了一系列改善估計質量的有偏估計方法,如Tikhonov正則化法、嶺估計法、截斷奇異值法(truncated singular value decomposition,TSVD)。
  • 另一個角度看矩陣分析
    如果我們僅僅是將問題採用矩陣表示,的確是簡潔了,但不會求解(求導)又有什麼用呢?而從就矩陣僅僅問題的一種表示方法而言,矩陣的運算不應該是一種全新的運算法則,而應和數的計算相契合。 先考慮一個最簡單的,如下所示
  • 線性降維方法(理論篇)| 機器學習你會遇到的「坑」
    但是在高維空間,距離的計算會變得非常困難,而我們關心的問題可能在低維空間就會得到很好的解決。但這不意味著低維空間只是對高維空間的近似,有些問題中,高維空間會增加很多噪聲,而在低維空間中會得到比高維空間更好的性能。
  • 基於多個特徵分塊貝葉斯分類器融合策略的人臉識別方法
    基於奇異值特徵的人臉識別方法是由 Hong[1][4]首先提出來的。該方法將人臉特徵分為視覺特徵、統計特徵、變換係數特徵以及代數特徵四類,代數特徵反映了圖像的本質屬性。因為圖像本身的灰度分布描述了圖像的內在信息,故可以將圖像作為矩陣看待,進行各種代數和矩陣變換後提取的代數特徵是人臉的表徵。
  • UGNX許可證錯誤的解決方法
    NX 許可證錯誤:無法連結許可證伺服器系統伺服器(lmgrd)尚未啟動,或者UGS_LICENSE_SERVER 被設為錯誤的 port@host.[-15]UG安裝錯誤問題(四)此問題總結一句話:你的UG許可服務沒有啟動,如果你裝了許可,但是許可證卻又沒有啟動
  • 「CAD」縮放命令的兩種使用方法
    縮放命令是修改工具欄裡面一個使用頻率非常高的命令。在繪製圖形的過程中,經常需要把一個圖形放大或者縮小,此時縮放命令就派上用場啦!縮放的時候一般有兩種方法,一種是按比例縮放,另一種是按參照來縮放。兩種縮放方法都是經常要用的,所以有必要全部掌握。
  • 教孩子寫遊戲:矩陣在3D遊戲編程中是如何被使用的?
    「學」的部分通過上一節的內容,我們已經知道關於矩陣的兩個重要知識點:矩陣的由來和矩陣的乘法。這個時候,大部分人腦子裡估計都會有個疑問:矩陣只不過是數學家換一種方式的「戲法」罷了,具體有什麼作用?我一直把某一個道理信奉為真理:如果你覺得某個問題難以解決,不妨好好去學一學數學,沒準兒,數學家在好幾百年前就已經有了解決方法了。矩陣就是這樣,當時被發明出來的時候很多人並不理解,一個快速計算方法有什麼用?直到有了計算機,直到程式設計師在處理計算機3D問題時遇到了非常大困難的時候,大家才發現矩陣的真正用處——它能大大提高3D問題中複雜計算的效率。