這裏做這樣那樣的問題,通過簡單地解決了全套由方程和吉文斯表示方程的一個稍微更普遍的方式。我已經將等式轉換成必須等於零的表達式:
eqs = [
c - (b/100) * a,
e - (d/100) * a,
g - (f/100) * a,
i - (a + c + e + g) * (h/100),
l - (a + c + e + g + i + j) * (k/100),
m - (a + c + e + g + i + j + l),
o - m * (n/100),
p - (m + o),
s - w * (r/100),
v - (p + q + s + t) * (u/100),
w - (p + q + s + t + v),
]
這就是等式。現在,我們需要指定吉文斯:
givens = [a - 1727305.7,
b - 27,
d - 1.13,
f - 0,
h - 2,
j - 23909.68,
k - 0.027,
n - 0,
q - 1000,
r - 3.5,
t - 1988.77,
u - 13.13]
最後我們就可以解決的全套式的
solve(eqs + givens)
結果是這樣做的這樣
[{f: 0.0,
g: 0.0,
i: 44263.9358682000,
j: 23909.6800000000,
u: 13.1300000000000,
q: 1000.00000000000,
d: 1.13000000000000,
a: 1727305.70000000,
e: 19518.5544100000,
p: 2281986.37928871,
l: 615.970010505114,
w: 2691566.29981462,
s: 94204.8204935118,
k: 0.0270000000000000,
b: 27.0000000000000,
n: 0.0,
m: 2281986.37928871,
o: 0.0,
v: 312386.330032405,
h: 2.00000000000000,
r: 3.50000000000000,
c: 466372.539000000,
t: 1988.77000000000}]
的好處事情是,我們不需要提前區分哪些事情將由.subs
處理,哪些是平等的。唯一的缺點是如果沒有封閉的表單解決方案。 Excel中的迭代方法仍然可以工作,但這會失敗。
如果速度是重要的,你知道,這是考慮到事情不會改變,這是更快,更簡單隻有解決了最後一個等式:
c,e,g,i,j,l,m,o,p,s,u = symbols('c,e,g,i,j,l,m,o,p,s,u')
a = 1727305.7
b = 27
d = 1.13
f = 0
h = 2
j = 23909.68
k = 0.027
n = 0
q = 1000
r = 3.5
t = 1988.77
u = 13.13
c = (b/100) * a
e = (d/100) * a
g = (f/100) * a
i = (a + c + e + g) * (h/100)
l = (a + c + e + g + i + j) * (k/100)
m = a + c + e + g + i + j + l
o = m * (n/100)
p = m + o
s = w * (r/100)
v = (p + q + s + t) * (u/100)
現在,
solve(w - (p + q + s + t + v), w)
收益率
[2691566.29981462]
最後,如果您預先求解方程,則會得到一個表達式您可以稍後替換:
sol = solve(w - (p + q + s + t + v), w)[0]
sol.subs({a : 1727305.7, b: 27, d : 1.13, f: 0, h : 2, j: 23909.68, k : 0.027, n : 0, q: 1000, r : 3.5, t: 1988.77, u : 13.13 })
提示:在第一行中,您還可以使用'from sympy.abc import *'。 – Wrzlprmft
@Wrzlprmft:這個被修改,以將其粘貼到計算器:) –