6

問題に遭遇したとき、私はRで微分方程式を解いていました。プロットにアイソクラインと方向フィールドを追加する必要がありましたが、その方法がわかりませんでした。どのパッケージをインストールする必要がありますか/どの関数を呼び出す必要がありますか/すべて手動で実行する必要がありますか?

4

3 に答える 3

2

ここに答えはありませんが、コメントで与えられた答えの要約です:

  • LVCompGamesin パッケージはprimerこのプロットを与えます:

ここに画像の説明を入力してください

  1. これは@BenBolkerによって与えられた解決策です。graphicsこのソリューションは、パッケージとfilled.contour機能に基づいています。

ここに画像の説明を入力してください

  • 次に、@JoshO'Brienが関数付きのrasterVisパッケージを提案しますvectorplot

ここに画像の説明を入力してください

出力として欲しいものについてもっと情報を提供していただければ、すべての回答をカスタマイズできると思います。

于 2013-01-07T14:37:12.033 に答える
1

phaseRと呼ばれる素晴らしいパッケージがあります。パッケージdeSolveのODEソルバーを使用しており、ヌルクラインや軌道などを簡単に追加できます。ODE関数のパラメーターには、必ず「t」、「y」、「parameters」という名前を付けてください。そうしないと、phaseR関数でエラーが発生します。

deriv(t = 0、y = c(x [i]、y [j])、パラメーター=パラメーター)のエラー:
未使用の引数(y = c(x [i]、y [j])、パラメーター=パラメーター)

Lotka-Volterra捕食者-被食者システムの実用的なコード例を次に示します。

require(deSolve) 
require(phaseR)

model.LV <- function(t, y, parameters){
  with(as.list(parameters),{

    N<-y[1] 
    P<-y[2]
    dN <- a*N - b*N*P  
    dP <- c*N*P -d*P

    list(c(dN,dP))
  })
}

params.LV<-c(a=0.4, b=0.3, c=0.1, d=0.2)

data.LV<-as.data.frame(lsoda(c(N=1,P=1),seq(1,250,by=0.5), model.LV, params.LV))
# plot the time series of both populations
plot(data.LV$time,data.LV$N, main="Time series of L-V equations", xlab="time", 
     ylab="Population densities N, P",
     type="l", col="green", 
     ylim=c(0,max(data.LV$N,data.LV$C)))
lines(data.LV$time,data.LV$P,col="red")

# plot the trajectories of the system
plot(data.LV$N, data.LV$P, type="l", col="blue", main="Trajectory of L-V equations",
     xlab="Prey density N", ylab="Predator density P", xlim=c(0,5), ylim=c(0,3))
#add Nullclines
nullclines(model.LV, x.lim=c(0.1,5),y.lim=c(0.1,3), parameters=params.LV, system="two.dim", colour=c("green","red"), add=TRUE)
于 2015-06-05T09:29:12.980 に答える
0

TeachingDemosパッケージのmy.symbols関数を使用すると、既存のプロットに追加する独自のシンボルを定義できます。サポート関数ms.arrowsは、プロットに追加する基本的な矢印をすでにコーディングしています。追加する別のシンボルを作成するために、それ(または他のms。関数)を簡単に変更できます。

于 2013-01-07T20:56:31.070 に答える