如何在R中求解和绘制微分方程

ECI*_*CII 3 r calculus differential-equations

摘自可汗学院的Sal Khan讲座https://www.youtube.com/watch?v=oiDvNs15tkE,如果我知道dN/dt = rN(1-(N/K))(逻辑微分方程)

如何求解N并用R绘制N = f(t)?

谢谢

alk*_*989 9

该逻辑方程具有解析解(例如,参见此处),因此您可以直接绘制它.另一个选择是使用一个可用的求解器以数字方式求解它(见这里)

## Using the `deSolve` package
library(deSolve)

## Time
t <- seq(0, 100, 1)

## Initial population
N0 <- 10

## Parameter values
params <- list(r=0.1, K=1000)

## The logistic equation
fn <- function(t, N, params) with(params, list(r * N * (1 - N / K)))

## Solving and plotin the solution numerically
out <- ode(N0, t, fn, params)
plot(out, lwd=2, main="Logistic equation\nr=0.1, K=1000, N0=10")

## Ploting the analytical solution
with(params, lines(t, K * N0 * exp(r * t) / (K + N0 * (exp(r * t) - 1)), col=2, lwd=2))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 两个问题:(1)你在解析表达式中使用`Y0`而不是'N0`.(2)为了使你的解析和数值解对齐,你需要从t = 0而不是t = 1开始ODE解决方案(例如`t < - 0:100`) (2认同)