Python 使用sybols解决问题:不支持*:';符号';和';平等';

Python 使用sybols解决问题:不支持*:';符号';和';平等';,python,equation,solver,symbolic-math,Python,Equation,Solver,Symbolic Math,我在使用solve时遇到问题。我试图用合成数学来解决问题,它只适用于2个方程和2个变量,见第一个输入和输出 当我用4个方程和4个变量求解时,我得到了第二个输入中显示的误差 输入:用于2个方程和2个变量 from sympy import * import numpy as np import math import matplotlib.pyplot as plt import scipy.linalg as la a, a0, a1, a2, a3 = symbols('a, a_0, a_

我在使用solve时遇到问题。我试图用合成数学来解决问题,它只适用于2个方程和2个变量,见第一个输入和输出

当我用4个方程和4个变量求解时,我得到了第二个输入中显示的误差

输入:用于2个方程和2个变量

from sympy import *
import numpy as np
import math
import matplotlib.pyplot as plt
import scipy.linalg as la

a, a0, a1, a2, a3 = symbols('a, a_0, a_1, a_2, a_3')
b, b0, b1, b2, b3 = symbols('b, b_0, b_1, b_2, b_3')
u1, u2 = symbols('u_1, u_2')

a = Eq(0,a0+a1*0+a2*0+a3*0*0)
b = Eq(0,a0+a1*0+a2*b+a3*0*b)

sol = solve((a, b),(a0,a2))
pprint(sol)
from sympy import *
import numpy as np
import math
import matplotlib.pyplot as plt
import scipy.linalg as la
a, a0, a1, a2, a3 = symbols('a, a_0, a_1, a_2, a_3')
b, b0, b1, b2, b3 = symbols('b, b_0, b_1, b_2, b_3')
u1, u2 = symbols('u_1, u_2')

a = Eq(0,a0+a1*0+a2*0+a3*0*0)
b = Eq(0,a0+a1*0+a2*b+a3*0*b)
c = Eq(u1,a0+a1*a+a2*0+a3*a*0)

sol = solve((a,b,c),(a0,a1,a2))
输出

{a₀: 0, a₂: 0}
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-268-eb18268f41f0> in <module>
      6 a = Eq(0,a0+a1*0+a2*0+a3*0*0)
      7 b = Eq(0,a0+a1*0+a2*b+a3*0*b)
----> 8 c = Eq(u1,a0+a1*a+a2*0+a3*a*0)
      9 d = Eq(u2,a+0+a1*a+a2*b+a3*a*b)
      10 

 TypeError: unsupported operand type(s) for *: 'Symbol' and 'Equality'
输入:对于4个等式4个变量

from sympy import *
import numpy as np
import math
import matplotlib.pyplot as plt
import scipy.linalg as la

a, a0, a1, a2, a3 = symbols('a, a_0, a_1, a_2, a_3')
b, b0, b1, b2, b3 = symbols('b, b_0, b_1, b_2, b_3')
u1, u2 = symbols('u_1, u_2')

a = Eq(0,a0+a1*0+a2*0+a3*0*0)
b = Eq(0,a0+a1*0+a2*b+a3*0*b)

sol = solve((a, b),(a0,a2))
pprint(sol)
from sympy import *
import numpy as np
import math
import matplotlib.pyplot as plt
import scipy.linalg as la
a, a0, a1, a2, a3 = symbols('a, a_0, a_1, a_2, a_3')
b, b0, b1, b2, b3 = symbols('b, b_0, b_1, b_2, b_3')
u1, u2 = symbols('u_1, u_2')

a = Eq(0,a0+a1*0+a2*0+a3*0*0)
b = Eq(0,a0+a1*0+a2*b+a3*0*b)
c = Eq(u1,a0+a1*a+a2*0+a3*a*0)

sol = solve((a,b,c),(a0,a1,a2))
输出

{a₀: 0, a₂: 0}
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-268-eb18268f41f0> in <module>
      6 a = Eq(0,a0+a1*0+a2*0+a3*0*0)
      7 b = Eq(0,a0+a1*0+a2*b+a3*0*b)
----> 8 c = Eq(u1,a0+a1*a+a2*0+a3*a*0)
      9 d = Eq(u2,a+0+a1*a+a2*b+a3*a*b)
      10 

 TypeError: unsupported operand type(s) for *: 'Symbol' and 'Equality'
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在里面
6a=等式(0,a0+a1*0+a2*0+a3*0*0)
7b=等式(0,a0+a1*0+a2*b+a3*0*b)
---->8c=等式(u1,a0+a1*a+a2*0+a3*a*0)
9d=等式(u2,a+0+a1*a+a2*b+a3*a*b)
10
TypeError:不支持*:“Symbol”和“Equality”的操作数类型

我无法理解这个错误消息,我的意思是,我在版本中也使用了带有2个变量的符号。

python中的错误往往是相当描述性的。
TypeError
提示您试图对不支持它的对象类型执行某些操作,例如,将数字除以字符串。如果你遇到过这样一个错误,开始将有问题的行分解成更小的部分,并调用
type()
查看它产生的类型,直到找到错误的类型。然后你就能明白为什么这不是你所期望的

在这种情况下,错误表示不能将符号和等式相乘。你从这一行开始

a, a0, a1, a2, a3 = symbols('a, a_0, a_1, a_2, a_3')
其中,
a
是一个符号。但你确实是这样

a = Eq(0,a0+a1*0+a2*0+a3*0*0)
您已将
a
重新分配给一个等式。因此,当需要在下一行中执行
a1*a

c = Eq(u1,a0+a1*a+a2*0+a3*a*0)
您得到了上面提到的错误。如果将等式分配给其他对象,例如
A
B
C
,则不会出现任何问题。假设
a
b
c
作为符号是正确的。这完全取决于你想表达什么样的方程


在第一个例子中,你实际上遇到了同样的问题,但它并没有表达出来,因为你没有对等式和符号进行任何数学运算

b = Eq(0,a0+a1*0+a2*b+a3*0*b)

它工作的原因是,首先计算RHS,然后将结果分配给LHS。因此,等式中的
b
仍指符号,且表达式是合法的。但是在变量
b
被重新分配之后,您就不能再将其用作符号了。

python中的错误往往是相当描述性的。
TypeError
提示您试图对不支持它的对象类型执行某些操作,例如,将数字除以字符串。如果你遇到过这样一个错误,开始将有问题的行分解成更小的部分,并调用
type()
查看它产生的类型,直到找到错误的类型。然后你就能明白为什么这不是你所期望的

在这种情况下,错误表示不能将符号和等式相乘。你从这一行开始

a, a0, a1, a2, a3 = symbols('a, a_0, a_1, a_2, a_3')
其中,
a
是一个符号。但你确实是这样

a = Eq(0,a0+a1*0+a2*0+a3*0*0)
您已将
a
重新分配给一个等式。因此,当需要在下一行中执行
a1*a

c = Eq(u1,a0+a1*a+a2*0+a3*a*0)
您得到了上面提到的错误。如果将等式分配给其他对象,例如
A
B
C
,则不会出现任何问题。假设
a
b
c
作为符号是正确的。这完全取决于你想表达什么样的方程


在第一个例子中,你实际上遇到了同样的问题,但它并没有表达出来,因为你没有对等式和符号进行任何数学运算

b = Eq(0,a0+a1*0+a2*b+a3*0*b)

它工作的原因是,首先计算RHS,然后将结果分配给LHS。因此,等式中的
b
仍指符号,且表达式是合法的。但是在变量
b
重新分配后,您不能再将其用作符号。

感谢您的帮助和宝贵建议。我对python有点陌生,所以每一个小提示都有帮助:)谢谢你的帮助和宝贵的建议。我对python有点陌生,所以每一个小提示都有帮助:)