Sympy运行报float与Equality类型无法相乘的TypeError如何解决
报错原因
sympy 执行dsolve求解微分方程后返回的是Equality(等式)类型对象,格式为待求解函数 = 求解结果表达式,比如你代码中的ivN是类似n(x) = 关于x的求解表达式的等式,不是表达式本身。
你调用ivN.subs(x,0)得到的仍然是n(0) = 具体数值的等式对象,不是数值本身,因此和q、E这类float类型变量做乘法时,就会触发类型不匹配的报错。
解决方法
你只需要通过Equality对象的.rhs属性取等式右侧的求解结果即可,修改以下两行代码:
# .rhs表示取等式右侧的内容 N_at_0 = ivN.rhs.subs(x, 0) P_at_0 = ivP.rhs.subs(x, 0)
修改后N_at_0、P_at_0就会是可运算的数值/符号表达式,和float类型做乘法不会再报错。
可选优化
如果你需要直接得到Python原生的float类型数值,可以额外做一层类型转换:
N_at_0 = float(ivN.rhs.subs(x, 0)) P_at_0 = float(ivP.rhs.subs(x, 0))
内容的提问来源于stack exchange,提问作者Soumik Chakraborty
相关产品推荐
相关产品推荐

