Как исправить / обойти NotImplemented ошибку в функции sympy dsolve? - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь решить систему из 4 дифференциальных уравнений в Sympy. Я получаю "NotImplementedError". Есть ли обходной путь?

Множество од, которые я пытаюсь решить:

! [ODE]: https://imgur.com/Xa5fwlt

Я попытался подставить числовые значения для символов от 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"

1 Ответ

0 голосов
/ 05 апреля 2019

Ваш синтаксис для создания ваших уравнений неверен. Eq необходимо принять два аргумента: левый и правый.

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))

Я сделал это, и dsolve требуется время, чтобы вычислить решение. Он должен возводить в степень символьную матрицу 4x4, которая включает в себя поиск символических собственных значений, то есть решение квартики, которая в общем случае очень сложна .

Возможно, SymPy можно улучшить здесь. Замена символических параметров на числовые должна ускорить процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...