2016-06-30 4 views
1

私はRを初めて使い、統合を使って助けが必要です。 r1r2は定数で、複数の変数と関数を統合する

b <- function(t,x) { a(t-x)* exp(-(1-exp(-r2*x))) } 

:私はこの機能を使用してのように定義される他の機能を有する

a <- function(t) { exp(-r1*t) } 

: Iは、として定義された関数を有しています。

0からtの範囲の値の場合、b(t,x)の値をxの値に統合する必要があります。 x <= tを指定します。

これを進める方法がわかりません。私は次のことを試しましたが、Rに「x」でなく「t」ではなく、どのように積分するかについてはわかりません。

c <- integrate(b, lower=0, upper=10) 

私はこれを実行すると、私はエラーと言っ取得:なしデフォルト

おかげで、引数 "t" が欠落しています(トンの-x)で

エラー
-S

+1

があなたのB関数1で 'Nd_theta()'と ')何である' – Ravi

+1

を欠いていることはあなたがこれをチェックしましたか? http://stackoverflow.com/questions/8913603/calculating-double-integrals-in-r-quickly – user5249203

+0

@Ravi不器用な投稿を申し訳ありません。理解の便宜のために方程式とオブジェクト名を修正しました。私は今質問を編集しました。今はっきりしたいと思っています。 – VitalSigns

答えて

3

例としてr1 = r2 = 1を使用しています。

は、あなたがしたいので二重積分:

\int_{t=0}^{t=10} \int_{x=0}^{x=t} b(x,t) 

最も基本的なアプローチは、二回integrate()を適用することです。

まず、あなたが内側の積分を評価するベクトル化機能を定義する必要があります。

z <- function(t) sapply(t, function (t_i) integrate(b, lower = 0, upper = t_i, t = t_i)$value) 

我々はそれを確認することができます。

z(1:3) 
# [1] 0.4225104 0.4440731 0.4150334 

今、私たちは、zに外側の積分を適用します。

integrate(z, lower = 0, upper = 10) 
# 3.795567 with absolute error < 6.2e-06 

私の答えちょうどあなたに出発点を与えることを目指しています。リンクされたポスト:calculating double integrals in R quicklyは、二重積分を行うためのより良いアプローチを提供します。

+0

お返事ありがとうございます。問題を解決しましたが、なぜt_iを使用したのか理解できません。 – VitalSigns

+0

ああ、ちょうどプレースホルダーですか? – VitalSigns

0

最初のことは、実際には必要ない場合は、まずは解析されない関数でパラメータを使用しないことです。だから私はa <- function(t, r1) { exp(-r1*t) }b <- function(t, x, r2) { a(t-x)* exp(-(1-exp(-r2*x))) }と書いています(閉じ括弧もありませんでした)。 2番目のこと、私は結果(および他のオブジェクト)cこれは既にRの関数名であるので名前をつけません。 3番目のことは、あなたの質問はだと仮定します。 先に述べたように、関数Nd_thetaintegrateに解析し、結果はNd_theta(...)ではありません。関連する次のこと:integrateのためにエラーメッセージが表示されませんが、Nd_thetaには2つの引数(おそらくxt)が必要なので、Nd_theta()をコーディングするときに指定しないでください。これは、コンソールにNd_theta()と入力するだけで確認できます。あなたは次のように追加パラメータをspecifiyすることができます:あなたの実際の質問について

r1 <- 1 
r2 <- 1 
Nd_theta <- b 
integrate(Nd_theta, lower = 0, upper = 10, x = 5) 

しかし?integrateにどのようなヘルプページを気づかは言う:Nd_theta最初引数は統合のために使用されます。定義をb <- function(t, x){...}からb <- function(x, t){...}に変更する必要があります。

関連する問題