我一直在尝试解决数值问题。我使用sympy创建了符号方程,例如:
a = symbols('a0:8')
b = symbols('b0:8')
c = symbols('c0:8')
d = symbols('d0:8')
然后我创建了仅由这些符号组成的33个方程。当我尝试线性地解决所有这些符号时。我只是继续被空置为结果。
我在列表中收集了所有符号,为:
symbollist=[]
for i in a:
symbollist.append(i)
for i in b:
symbollist.append(i)
for i in c:
symbollist.append(i)
for i in d:
symbollist.append(i)
print(symbollist)
输出是:
[a0, a1, a2, a3, a4, a5, a6, a7, b0, b1, b2, b3, b4, b5, b6, b7, c0, c1, c2, c3, c4, c5, c6, c7, d0, d1, d2, d3, d4, d5, d6, d7]
我的总方程式列表是:
[a0 - 3.0, a1 - 3.7, a2 - 3.9, a3 - 4.2, a4 - 5.7, a5 - 6.6, a6 - 7.1, a7 - 6.7, b0 - b1 + 2*c0 + 3*d0, b1 - b2 + 6*c1 + 27*d1, b2 - b3 + 2*c2 + 3*d2, b3 - b4 + 2*c3 + 3*d3, b4 - b5 + 2*c4 + 3*d4, b5 - b6 + 4*c5 + 12*d5, b6 - b7 + 6*c6 + 27*d6, 2*c0 - 2*c1 + 6*d0, 2*c1 - 2*c2 + 18*d1, 2*c2 - 2*c3 + 6*d2, 2*c3 - 2*c4 + 6*d3, 2*c4 - 2*c5 + 6*d4, 2*c5 - 2*c6 + 12*d5, 2*c6 - 2*c7 + 18*d6, a0 - a1 + b0 + c0 + d0, a1 - a2 + 3*b1 + 9*c1 + 27*d1, a2 - a3 + b2 + c2 + d2, a3 - a4 + b3 + c3 + d3, a4 - a5 + b4 + c4 + d4, a5 - a6 + 2*b5 + 4*c5 + 8*d5, a6 - a7 + 3*b6 + 9*c6 + 27*d6, 2*c0, 2*c7, b0 - 1, b7 + 0.67]
您能告诉我如何求解这些方程并获得每个A,B,C,D的值?
以下将有所帮助:
from sympy import *
var('a:8 b:8 c:8 d:8')
eq=[a0 - 3.0, a1 - 3.7, a2 - 3.9, a3 - 4.2, a4 - 5.7, a5 - 6.6, a6 - 7.1, a7 - 6.7, b0 - b1 + 2*c0 + 3*d0, b1 - b2 + 6*c1 + 27*d1, b2 - b3 + 2*c2 + 3*d2, b3 - b4 + 2*c3 + 3*d3, b4 - b5 + 2*c4 + 3*d4, b5 - b6 + 4*c5 + 12*d5, b6 - b7 + 6*c6 + 27*d6, 2*c0 - 2*c1 + 6*d0, 2*c1 - 2*c2 + 18*d1, 2*c2 - 2*c3 + 6*d2, 2*c3 - 2*c4 + 6*d3, 2*c4 - 2*c5 + 6*d4, 2*c5 - 2*c6 + 12*d5, 2*c6 - 2*c7 + 18*d6, a0 - a1 + b0 + c0 + d0, a1 - a2 + 3*b1 + 9*c1 + 27*d1, a2 - a3 + b2 + c2 + d2, a3 - a4 + b3 + c3 + d3, a4 - a5 + b4 + c4 + d4, a5 - a6 + 2*b5 + 4*c5 + 8*d5, a6 - a7 + 3*b6 + 9*c6 + 27*d6, 2*c0, 2*c7, b0 - 1, b7 + 0.67]
reps={}
do=True
while do:
do=False
for i in eq:
i=i.subs(reps)
f=i.free_symbols
if len(f)==1:
reps[f.pop()]=solve(i)[0]
do=True
for i in ordered(reps):
print(i,reps[i].n(2))
for i in eq:
if i.subs(reps).free_symbols:print(i)
打印输出将显示除D7以外的所有变量的解决方案,这必须意味着方程过度指定。