Python 如何修复/解决sympy dsolve函数中未实现的错误?

Python 如何修复/解决sympy dsolve函数中未实现的错误?,python,numpy,sympy,Python,Numpy,Sympy,我试着在辛相中解一个由4个微分方程组成的系统。我得到一个“未实现错误”。有解决办法吗 我试图解决的一组ode是: !![颂歌]: 我试着用数值代替R12到R45符号。我继续收到相同的错误 import sympy as sp import numpy as np import matplotlib.pyplot as plt # Define symbols m1, m2, m3, m4 = sp.symbols('m1 m2 m3 m4', real = True, positive=Tr

我试着在辛相中解一个由4个微分方程组成的系统。我得到一个“未实现错误”。有解决办法吗

我试图解决的一组ode是:

!![颂歌]:

我试着用数值代替R12到R45符号。我继续收到相同的错误

import sympy as sp
import numpy as np
import matplotlib.pyplot as plt

# Define symbols

m1, m2, m3, m4 = sp.symbols('m1 m2 m3 m4', real = True, positive=True)
c1, c2, c3, c4 = sp.symbols('c1 c2 c3 c4', real = True, positive=True)
R12, R25, R23, R34, R45 = sp.symbols('R12 R25 R23 R34 R45', real = True, positive=True) #0.2, 0.1, 2.7, 0.5, .6 
T1, T2, T3, T4 = sp.symbols('T1 T2 T3 T4', cls=sp.Function)
qp, qel = sp.symbols('qp qel')

T5 = 25 # ambient temperature

# Define equations
eq1 = -sp.Eq(sp.Derivative(T1(t), t)) + - (T1(t)-T2(t)) / (R12 * m1 * c1)
eq2 = -sp.Eq(sp.Derivative(T2(t), t)) + 1 / (m2 * c2) * ((T1(t) - T2(t))/R12 + (T5-T2(t))/R25 - (T2(t)-T3(t))/R23)
eq3 = -sp.Eq(sp.Derivative(T3(t), t)) + 1 / (m3 * c3) * ((T2(t) - T3(t))/R23 + (T4(t)-T3(t))/R34 - qp)
eq4 = -sp.Eq(sp.Derivative(T4(t), t)) + 1 / (m4 * c4) * (qp - (T4(t) - T3(t))/R34 + (T4(t)-T5)/R45)

eq = (eq1, eq2, eq3, eq4)
funct = (T1(t), T2(t), T3(t), T4(t))  

# Solve

sp.dsolve(eq, funct)

我希望得到这组微分方程的符号解。
结果是“NotImplementedError”

您创建公式的语法不正确
Eq
需要接受两个参数,左侧和右侧

eq1=sp.Eq(sp.导数(T1(t),t),+-(T1(t)-T2(t))/(R12*m1*c1))
eq2=sp.Eq(sp.导数(T2(t),t),+1/(m2*c2)*((T1(t)-T2(t))/R12+(T5-T2(t))/R25-(T2(t)-T3(t))/R23))
eq3=sp.Eq(sp.导数(T3(t),t),+1/(m3*c3)*((T2(t)-T3(t))/R23+(T4(t)-T3(t))/R34-qp))
eq4=sp.Eq(sp.导数(T4(t),t),+1/(m4*c4)*(qp-(T4(t)-T3(t))/R34+(T4(t)-T5)/R45))
我这样做了,dsolve需要一段时间来计算解决方案。它必须对4x4符号矩阵求幂,这涉及到找到符号特征值,即求解四次矩阵,即


SymPy可能在这里得到改进。将符号参数替换为数字参数应该可以加快速度

创建公式的语法不正确
Eq
需要接受两个参数,左侧和右侧

eq1=sp.Eq(sp.导数(T1(t),t),+-(T1(t)-T2(t))/(R12*m1*c1))
eq2=sp.Eq(sp.导数(T2(t),t),+1/(m2*c2)*((T1(t)-T2(t))/R12+(T5-T2(t))/R25-(T2(t)-T3(t))/R23))
eq3=sp.Eq(sp.导数(T3(t),t),+1/(m3*c3)*((T2(t)-T3(t))/R23+(T4(t)-T3(t))/R34-qp))
eq4=sp.Eq(sp.导数(T4(t),t),+1/(m4*c4)*(qp-(T4(t)-T3(t))/R34+(T4(t)-T5)/R45))
我这样做了,dsolve需要一段时间来计算解决方案。它必须对4x4符号矩阵求幂,这涉及到找到符号特征值,即求解四次矩阵,即


SymPy可能在这里得到改进。将符号参数替换为数字参数应该可以加快速度

多谢各位。您能告诉我将参数(eq和函数)传递给dsolve的语法吗?当我尝试
eq=[eq1,eq2,eq3,eq4]
funct=[T1(t),T2(t),T3(t),T4(t)]
sp.dsolve(eq,funct)
`它会导致错误
'Tuple'对象没有属性“expand”
。我试图传递
funct=[T1,T2,T3,T4]
导致“property”类型的对象没有len()。我对sympy的语法越来越糊涂了。它适用于列表、元组等吗?T1(t)等是正确的。对于另一个错误,您可能意外地在某处创建了一个元组。检查
type(eq1)
等是否为
eq1.lhs
eq1.rhs
的类型是否为
Derivative
Add
Mul
。非常感谢。您能告诉我将参数(eq和函数)传递给dsolve的语法吗?当我尝试
eq=[eq1,eq2,eq3,eq4]
funct=[T1(t),T2(t),T3(t),T4(t)]
sp.dsolve(eq,funct)
`它会导致错误
'Tuple'对象没有属性“expand”
。我试图传递
funct=[T1,T2,T3,T4]
导致“property”类型的对象没有len()。我对sympy的语法越来越糊涂了。它适用于列表、元组等吗?T1(t)等是正确的。对于另一个错误,您可能意外地在某处创建了一个元组。检查
type(eq1)
等是否为
eq1.lhs
eq1.rhs
的类型是否为
派生
Add
Mul