第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Scipy LDL分解返回意外結果

Scipy LDL分解返回意外結果

ibeautiful 2022-07-26 16:31:49
我生成了一個隨機的 5*5 矩陣x,如下所示:>>> x = np.random.randn(5,5)并使用如下分解對其進行scipy.linalg.ldl分解:>>> l, d, p = la.ldl(x)使用l,d我p想返回 x。我以為我可以做到以下幾點:>>> l[p,:] @ d @ l[p,:].transpose() - x但這并沒有像我預期的那樣給我零。誰能解釋我哪里出錯了?我的目標是獲得下對角矩陣L,這樣x = LDL^T就不需要行置換矩陣p,但我對 scipy 給出的輸出感到非常困惑。
查看完整描述

1 回答

?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

LDL 分解算法僅適用于 Hermitian/對稱矩陣。您正在向它傳遞一個具有隨機值的矩陣,該矩陣不太可能是對稱的。此外,矩陣乘法應該在不將置換矩陣應用于下三角矩陣的情況下進行。


將非對稱矩陣傳遞給 時scipy.linalg.ldl,僅引用矩陣的下三角部分或上三角部分,具體取決于lower關鍵字參數的值,默認為True。我們可以看到這樣做的效果np.isclose():


>>> x = np.random.randn(5,5)

>>> l, d, p = la.ldl(x)

>>> np.isclose(l.dot(d).dot(l.T) - x, 0)

[[ True False False False False]

 [ True  True False False False]

 [ True  True  True False False]

 [ True  True  True  True False]

 [ True  True  True  True  True]]

在這里,我們看到矩陣的上三角部分被假定為對稱的,因此算法返回的值在這種情況下是正確的。


下面,我們傳遞la.ldl一個實際的對稱矩陣,得到預期的結果。


>>> x = np.array([[1, 2, 3],

                  [2, 4, 5],

                  [3, 5, 6]])

>>> l, d, p = la.ldl(x)

>>> print(np.isclose(l.dot(d).dot(l.T) - x, 0))

[[ True  True  True]

 [ True  True  True]

 [ True  True  True]]

如果您正在尋找一般的 LDL^T 分解,而沒有 permutations,這將進一步減少矩陣的域。您的矩陣也需要是正定的。


下面是一個這樣的矩陣示例:


>>> x = np.array([[2, -1, 0],

                  [-1, 3, -1],

                  [0, -1, 4]])

>>> l, d, p = la.ldl(x)

>>> l

array([[ 1. ,  0. ,  0. ],

       [-0.5,  1. ,  0. ],

       [ 0. , -0.4,  1. ]])

>>> d

array([[2. , 0. , 0. ],

       [0. , 2.5, 0. ],

       [0. , 0. , 3.6]])

>>> p

array([0, 1, 2], dtype=int64)

如您所見,排列p是[0, 1, 2],并且l已經是下三角形。


查看完整回答
反對 回復 2022-07-26
  • 1 回答
  • 0 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號