这里做这样那样的问题,通过简单地解决了全套由方程和吉文斯表示方程的一个稍微更普遍的方式。我已经将等式转换成必须等于零的表达式:
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:这个被修改,以将其粘贴到计算器:) –