R语言能否找到一阶微分方程的通用解?

时间:2018-05-08 08:40:08

标签: r differential-equations

R语言能否找到一阶微分方程的通用解?

例如:

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

PS:
这可以很容易地手工解决,即特定的解决方案是:

y = 1/(5(5x-6))

和通用

C*(5x-6)

我需要了解R是否可以做到这一点?

1 个答案:

答案 0 :(得分:4)

我们可以使用R库deSolve来获得ODE的数值解。有关详细信息,请参阅?deSolve

以下是基于ODE的已完成示例。

  1. 加载R库

    library(deSolve);
    
  2. 定义微分方程

    # Define the function
    f <- function(x, y, params) list((5 * (5 * x - 6) * y - 2) / (5 * x - 6)^2)
    
  3. 设置要解决的x值和初始条件

    # x values for which to solve
    x <- seq(2, 10, length.out = 100);
    
    # Initial value y(x=2) = 1/20
    y0 <- 1/20
    
  4. 解决ODE

    # Solve ODE
    df <- as.data.frame(ode(y0, x, f, parms = NULL));
    
  5. deSolve

    绘制理论(代数)解和数值解
    # Plot
    library(ggplot2);
    ggplot(df, aes(time, `1`)) +
        stat_function(
            fun = function(x) 1/(5 * (5 * x - 6)),
            aes(colour = "Theoretical"),
            size = 4) +
        geom_line(aes(colour = "deSolve"), size = 2) +
        labs(x = "x", y = "y")
    
  6. enter image description here