亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

為什么 expm(2*A) != expm(A) @ expm(A)

為什么 expm(2*A) != expm(A) @ expm(A)

慕絲7291255 2021-08-11 19:57:10
根據規則exp(A+B) = exp(A)exp(B),這適用于通勤矩陣A和B時,即AB = BA,我們有exp(2A) = exp(A)exp(A)。但是,當我在 Python 中運行以下命令時:import numpy as npfrom scipy.linalg import expmA = np.arange(1,17).reshape(4,4)print(expm(2*A))[[ 306.63168024  344.81465009  380.01335176  432.47730444] [ 172.59336774  195.36562731  214.19453937  243.76985501] [ -35.40485583  -39.87705598  -42.94545895  -50.01324379] [-168.44316833 -190.32607875 -209.76427134 -237.72069322]]print(expm(A) @ expm(A))[[1.87271814e+30 2.12068332e+30 2.36864850e+30 2.61661368e+30] [4.32685652e+30 4.89977229e+30 5.47268806e+30 6.04560383e+30] [6.78099490e+30 7.67886126e+30 8.57672762e+30 9.47459398e+30] [9.23513328e+30 1.04579502e+31 1.16807672e+31 1.29035841e+31]]我得到兩個截然不同的結果。請注意,這@只是矩陣乘積。我也在Matlab中嘗試過,兩個結果和預期的一樣。我在這里缺少什么?編輯:我有 NumPy 1.15.3、SciPy 1.1.0、Python 3.6.4、Windows 7 64 位正如Warren Weckesser在評論中所建議的,使用A = A.astype(np.float64)可以解決問題。
查看完整描述

1 回答

?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

簡而言之:scipy 1.1.0 中有一個 bug,它似乎已在 1.2.0 中修復。


安裝最新的scipy(1.2.1),下面通過就好了:


import numpy as np

from scipy.linalg import expm


A = np.arange(1,17).reshape(4,4)


assert (expm(A) @ expm(A) == expm(2 * A)).all()


查看完整回答
反對 回復 2021-08-11
  • 1 回答
  • 0 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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