簡體   English   中英

R 中的 ODE function

[英]ODE function in R

R 和 R 中的 ODE 建模相對較新。 我想知道是否有人可以幫助我用外行術語解釋此代碼中的術語的含義。 我知道 output 是什么,但是我不能簡單地解釋“with”、“as.list”和“list(c(dY))”代表什么。

test = function(timepoint, state , parameters) {
  with(as.list(c(state, parameters)), {
    dX = a * X
    list(c(dX))
  })
}

as.list將命名向量轉換為列表,例如:

``` r
state = c(X=1)
parameters = c(a=3,b=4)

# Create a named vector
c(state,parameters)
#> X a b 
#> 1 3 4

# Convert to list
as.list(c(state,parameters))
#> $X
#> [1] 1
#> 
#> $a
#> [1] 3
#> 
#> $b
#> [1] 4

with計算 LHS 環境中的 RHS 表達式。
在下面的示例中,它使abX可用於評估:

with(as.list(c(state, parameters)), {dX = a*X; dX})
[1] 6

要回答您問題的第三部分,提供stateparameters的示例將很有用。

這里有一個比較完整的例子,使用原貼的function test

library("deSolve")
test <- function(timepoint, state , parameters) {
  with(as.list(c(state, parameters)), {
    dX <- a * X
    list(c(dX))
  })
}

test2  <- function(timepoint, state , parameters) {
    dX <- parameters["a"] * state["X"]
    list(dX)
}

state0 <- c(X = 1)
pars   <- c(a = 0.5)
times  <- seq(0, 10, 0.1)

out <- ode(state0, times, test, pars)

out2 <- ode(state0, times, test2, pars)

plot(out, out2)

在這里,函數testtest2做的完全一樣,但是等式在版本test中更容易閱讀。 with(as.list(...)) - 構造只是解包 state 和參數的內容,因此可以用更少的技術編寫微分方程,即類似於數學符號。 在具有多個方程的較大模型中,這種好處更為明顯。

test的返回值是一個包含兩個元素的列表,如deSolve文檔中所定義。 ode的幫助頁面告訴我們:

func的返回值應該是一個列表,其第一個元素是一個向量,其中包含y關於時間的導數,其下一個元素是每個時間點所需的全局值。 必須按照與 state 變量y相同的順序指定導數。

這意味着它可能包含一個或多個元素,其中第一個是導數的向量,另一個是要存儲的 ODE model 的可選其他內部值。 在這里的例子list(dX)就足夠了。 list(c(dX))符號經常用於教學原因,以指示列表的第一個元素(向量)可能包含更多元素,與初始 state state0中給出的狀態數一樣多。 例如,它可以是: list(c(dX, dY, dZ)) ,假設 model 具有三個 states 或者如果我們想從 model 保存內部或“全局”變量,它可能是list(c(dX, dY, dZ), a, b, c)

最后的 plot 只是為了表明testtest2給出相同的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM