我有一個由 6 個線性方程組組成的系統,其中有 4 個變數(a4、a5、a6、a7)。我嘗試使用sympy linsolve為這些變數解決系統問題,但是輸出為空。這是我的作業示例:
from sympy import symbols, linsolve, Eq, sqrt
b4, b5, b6, b7, b8, b9 = symbols('b4,b5,b6,b7,b8,b9')
a4,a5,a6,a7 = symbols('a4,a5,a6,a7',real=True)
eq4 = Eq(b4, a5 a6/4 a7/4)
eq5 = Eq(b5, a4 a6/4 a7/4)
eq6 = Eq(b6, a7 a4/4 a5/4)
eq7 = Eq(b7, a6 a4/4 a5/4)
eq8 = Eq(b8, 3*(a4 a5 a6 a7)/4)
eq9 = Eq(b9, sqrt(3)/4*(a4 a5 - a6 - a7))
display(eq4,eq5,eq6,eq7,eq8,eq9)
eqs = (eq4,eq5,eq6,eq7,eq8,eq9)
sol = linsolve(eqs, a4,a5,a6,a7)
display(sol)
sol正如我所說,顯示輸出為空。我的代碼有什么錯誤嗎?提前致謝。
uj5u.com熱心網友回復:
這是作為梯形矩陣方程的方程組:
In [5]: A, b = linear_eq_to_matrix(eqs, [a4, a5, a6, a7])
In [6]: Matrix.hstack(A, b)
Out[6]:
? 0 -1 -1/4 -1/4 -b??
? ?
? -1 0 -1/4 -1/4 -b??
? ?
?-1/4 -1/4 0 -1 -b??
? ?
?-1/4 -1/4 -1 0 -b??
? ?
?-3/4 -3/4 -3/4 -3/4 -b??
? ?
?-√3 -√3 √3 √3 ?
?──── ──── ── ── -b??
? 4 4 4 4 ?
In [7]: Matrix.hstack(A, b).echelon_form()
Out[7]:
?-1 0 -1/4 -1/4 -b? ?
? ?
?0 -1 -1/4 -1/4 -b? ?
? ?
? b? b? ?
?0 0 1/8 -7/8 ── ── - b? ?
? 4 4 ?
? ?
? b? b? 7?b? b? ?
?0 0 0 -3/4 ── ── - ──── - ── ?
? 4 4 8 8 ?
? ?
? 3?b? 3?b? 3?b? 3?b? 3?b??
?0 0 0 0 - ──── - ──── - ──── - ──── ────?
? 64 64 64 64 32 ?
? ?
?0 0 0 0 0 ?
倒數第二行全為零,然后非零,這意味著方程組是不一致的,除非b引數的組合恰好等于零。
回傳的解決方案linsolve適用于引數的“通用”值,即幾乎所有可能的b1,等值b2。此運算式將不等于零:
In [10]: e = Matrix.hstack(A, b).echelon_form()[4,4]
In [11]: e
Out[11]:
3?b? 3?b? 3?b? 3?b? 3?b?
- ──── - ──── - ──── - ──── ────
64 64 64 64 32
換句話說,對于符號引數的幾乎所有值,您的方程組都是不一致的,因此linsolve回傳空集。
如果您想假設引數采用系統一致的值,那么您可以使用此梯形形式,丟棄最后兩行:
In [13]: Maug = Matrix.hstack(A, -b).echelon_form()[:4,:]
In [14]: Maug
Out[14]:
?-1 0 -1/4 -1/4 b? ?
? ?
?0 -1 -1/4 -1/4 b? ?
? ?
? b? b? ?
?0 0 1/8 -7/8 - ── - ── b? ?
? 4 4 ?
? ?
? b? b? 7?b? b??
?0 0 0 -3/4 - ── - ── ──── ──?
? 4 4 8 8 ?
In [15]: linsolve(Maug)
Out[15]:
?? b? 7?b? b? b? 7?b? b? b? b? b? b? b? 7?b? b? b? 7?b? b???
??- ── - ──── ── ──, - ──── - ── ── ──, ── ── - ── - ────, ── ── - ──── - ──??
?? 6 6 3 3 6 6 3 3 3 3 6 6 3 3 6 6 ??
或者使用原始方程,您可以簡單地允許將一些b符號視為未知數而不是引數:
In [19]: linsolve(eqs, [a4, a5, a6, a7, b4, b7])
Out[19]:
?? b? √3?b? 5?b? √3?b? 5?b? √3?b? b? √3?b? √3?b? √3?b???
??b? - ── ─────, -b? ──── ─────, -b? ──── - ─────, b? - ── - ─────, -b? b? ─────, -b? b? - ─────??
?? 6 6 6 2 6 2 6 6 3 3 ??
為這些引數選擇值的額外自由度使得找到方程的一致解成為可能。使用此方法,您選擇的引數(即b4及b7以上)將從解決方案的運算式中洗掉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/504159.html
標籤:Python python-3.x 数学 同情 符号数学
