【问题标题】:Is there symbolic ODE solver in R ? (ODE = ordinary differential equation)R 中是否有符号 ODE 求解器? (ODE = 常微分方程)
【发布时间】:2018-05-08 10:09:34
【问题描述】:

问题: 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(非符号)求解器:

我知道有像 library(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 求解器 (((

【问题讨论】:

  • 我不确定是否偏导但尝试:?D .... deriv 是具有默认值和公式方法的通用函数。它同时返回计算 expr 及其(部分)导数的调用。它使用所谓的算法导数。如果 function.arg 是一个函数,它的参数可以有默认值,参见下面的 fx 示例。
  • @TonyHellmuth 谢谢你的评论,但是我不太明白......你能提供任何细节吗?如果我的问题不清楚,让我再说一遍:我需要得到常微分方程的解......
  • 你最好的选择可能是找到一个好的 C++ 库,然后使用 rcpp 将它挂钩到 R
  • 我不知道 R 的符号 ODE 求解器。一种解决方法可能是调用类似 Wolfram Alpha from R 的东西。
  • 你列出了rSymPy 并且因为SymPy seems to include ODE solvers 这算不算...?

标签: r differential-equations


【解决方案1】:

我玩过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 时也会发生同样的情况。

【讨论】:

  • 非常感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多