#python #higher-order-functions #differential-equations
#python #функции высшего порядка #дифференциальные уравнения
Вопрос:
Я хотел бы решить нелинейное дифференциальное уравнение третьего порядка с помощью Python.
В моем случае это :
d ^ 3f / dx ^ 3 = (1-f) / (f ^ 3)
Я написал следующую программу, но у меня проблема с решателем, поэтому я не знаю, верен ли метод, который я использовал с scipy.
from sympy.interactive import printing
printing.init_printing(use_latex=True)
from sympy import *
import sympy as sp
x = sp.symbols('x')
f = sp.Function('f')(x)
diffeq = Eq(f.diff(x,x,x),(1-f)/(f**3))
display(diffeq)
dsolve(diffeq,f)
Я получил эту ошибку :
NotImplementedError: solve: Cannot solve -(1 - f(x))/f(x)**3 Derivative(f(x), (x, 3))
Не могли бы вы помочь мне, пожалуйста, возможно, использовать другую стратегию решения?
Спасибо
Ответ №1:
Это то, что есть, для лечения этого случая не реализовано никакого метода. Символическое решение имеет только очень узкий набор ODE, даже небольшие изменения в уравнении могут разрушить этот символ. sympy.dsolve
находится в спорадическом развитии и, таким образом, распознает еще меньше случаев, например, Wolfram Mathematica.
В основном, sympy имеет методы, которые могут обрабатывать, если распознаются, скалярные линейные DE первого порядка, скалярные линейные DE с постоянными коэффициентами, Бернулли и Риккати, некоторые линейные системы первого порядка (особенно с постоянными коэффициентами), еще меньше линейных систем второго порядка (опять же с постоянными коэффициентами), выбор второго порядкаупорядочите линейные DE, которые имеют нормальную форму, дающую специальные функции в качестве решений. И, возможно, некоторые экзотики. Вы можете найти их в документации. Затем добавьте к этому некоторую эвристику, чтобы свести данное уравнение к одному из этих случаев, что является еще более экспериментальным процессом.
Маловероятно, что вы сможете преобразовать свое уравнение, даже вручную, в одну из этих форм, отсюда и ошибка NotImplementedError:
.
Комментарии:
1. Благодарю вас за ваш ответ, я постараюсь сделать это, потому что я не использовал никакого другого решателя, отличного от просто прошлого… Если у вас есть какие-либо дополнительные советы по преобразованию этого уравнения, это было бы очень полезно. Еще раз спасибо вам.