Есть ли символический ODE решатель в R? (ODE = обыкновенное дифференциальное уравнение) - PullRequest
0 голосов
/ 08 мая 2018

Вопрос: Есть ли символический решатель ODE в R? (ODE = обыкновенное дифференциальное уравнение )

Боюсь, что НЕТ ... но позвольте мне подтвердить это от экспертов ...

Например, решить:

> (5x-6)^2 y' = 5(5x-6) y - 2

Здесь: y - неизвестная функция, y '- ее производная

(это легко решить руками: y = 1 / (5 (5x-6)) + C * (5x-6), но я хочу получить этот ответ от R).


Что я знаю:

1) Есть числовые (не символические) решатели:

Я знаю, что есть числовые решатели ODE, такие как библиотека (deSolve), см ответ здесь: Может ли язык R найти общее решение дифференциального уравнения первого порядка?

2) Существуют символические пакеты: (но, похоже, они не содержат решателей ODE)

В R есть символические пакеты см. Ryacas и rSymPy, а также некоторые базовые символьные вычисления в базе R, см .: https://stats.stackexchange.com/questions/4775/symbolic-computation-in-r/4778

3) Краткий обзор различных решателей дифференциальных уравнений для R : https://cran.r -project.org / веб / просмотров / DifferentialEquations.html

Однако мне не удалось найти сумболовные решатели ОДУ (((

1 Ответ

0 голосов
/ 09 мая 2018

Я потренировался с Ryacas, и вы можете получить символические решения для некоторых простых ODE без особой работы. К сожалению, YACAS не может найти решение для вашего примера ODE. Однако, в зависимости от исследуемых ODE, это может быть полезно. Если нет, я с удовольствием удалю этот пост.

В качестве начального простого примера давайте рассмотрим следующий ODE: y'' + y = 0:

  1. Загрузить библиотеку

        library(Ryacas);
    
  2. Поскольку Ryacas является просто интерфейсом к YACAS, мы можем использовать YACAS 'OdeSolve для решения ODE

    yacas("OdeSolve( y\'\' + y == 0 )")
    #expression(C70 * exp(x * complex_cartesian(0, -1)) + C74 * exp(x *
    #    complex_cartesian(0, 1)))
    

    Это дает правильное решение const * exp(- ix) + const * exp(+ ix).

  3. К сожалению, при использовании вашего конкретного примера, OdeSolve не может найти решение:

    yacas("OdeSolve( y\'\' == (5 * (5 * x - 6) * y - 2) / (5 * x - 6)^2 )")
    #expression(y(2) - (5 * ((5 * x - 6) * y(0)) - 2)/(5 * x - 6)^2)
    

    То же самое происходит, когда мы используем онлайн-демонстрацию YACAS .

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