R中是否有符号ODE求解器? (ODE =常微分方程)

时间:2018-05-08 10:09:35

标签: r differential-equations

问题: R中是否有符号ODE求解器? (ODE = ordinary differential equation

恐怕没有......但是让我向专家证实......

例如,解决:

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

这里:y - 未知功能,y' - 它的衍生物

(很容易用手解决:y = 1 /(5(5x-6))+ C *(5x-6),但我想从R)得到答案。

我所知道的:

1)有NUMERICAL(非符号)求解器:

我知道有像库(deSolve)这样的数字ODE求解器, 看到答案: Can R language find a generic solution of the first order differential equation?

2)有符号包:(但它们似乎不包含ODE解算器)

R中有符号包 看看Ryacas和rSymPy以及基础R中的一些基本符号计算,请参阅: https://stats.stackexchange.com/questions/4775/symbolic-computation-in-r/4778

3)R 的各种微分方程求解器的简要概述: https://cran.r-project.org/web/views/DifferentialEquations.html

然而,我无法找到sumbolic ODE求解器((

1 个答案:

答案 0 :(得分:2)

我与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 online demo

  4. 时也会发生同样的情况