Решение нелинейного дифференциального уравнения третьего порядка с использованием Python

#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. Благодарю вас за ваш ответ, я постараюсь сделать это, потому что я не использовал никакого другого решателя, отличного от просто прошлого… Если у вас есть какие-либо дополнительные советы по преобразованию этого уравнения, это было бы очень полезно. Еще раз спасибо вам.