我正在嘗試學習 Python 以完成線性代數的基本作業。我用一個簡單的線性方程組遇到了以下問題:
import scipy.linalg as la
import numpy as np
A = np.array([[186/450, 54/21, 30/60],
[12/450, 6/21 , 3/60],
[9/450, 6/21 , 15/60]])
l = np.array([18/450, 12/21, 30/36])
b = np.array([2, 0, 1/6])
y = np.array([180, 0, 30])
x = la.inv(np.eye(3) - A) @ y
lam = np.transpose(l) @ la.inv(np.eye(3) - A)
這回傳
array([0.21212121, 2.12121212, 1.39393939])
這是不正確的。在 Julia 中執行相同的操作,
A = [186/450 54/21 30/60;
12/450 6/21 3/60;
9/450 6/21 15/60]
l = [18/450, 12/21, 30/60]
b = [2, 0, 1/6]
y = [180, 0, 30]
λ = l' * inv(I - A)
產生正確的結果,即
1×3 adjoint(::Vector{Float64}) with eltype Float64:
0.181818 1.81818 0.909091
我在這里想念什么?我想我可能在不透明的 numpy 陣列語法中遺漏了一些東西。
uj5u.com熱心網友回復:
您的 python 代碼中的“l”實體化有一個錯字。(30/36 應該是 30/60)。
修復了錯字的這段代碼產生了與 Julia 中相同的結果。
import scipy.linalg as la
import numpy as np
A = np.array([[186/450, 54/21, 30/60],
[12/450, 6/21 , 3/60],
[9/450, 6/21 , 15/60]])
l = np.array([18/450, 12/21, 30/60]) #typo fixed here
b = np.array([2, 0, 1/6])
y = np.array([180, 0, 30])
x = la.inv(np.eye(3) - A) @ y
lam = np.transpose(l) @ la.inv(np.eye(3) - A)
給予:
array([0.18181818, 1.81818182, 0.90909091])
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/471421.html
