Rの関数fの高階導関数を評価したいと思います。私には2つの可能性があります。
- fのk次導関数であるf (k)の一般式を決定し(これは私の特定の場合に実行できます)、それを評価します。
- または、 Rの能力を利用して、シンボリック導関数(関数D())を実行します。
1対2の利点は何ですか?f (k)は再帰式ではないとしましょう。f (k)が再帰的である場合はどうなりますか?
ヒントをいただければ幸いです。
Rの関数fの高階導関数を評価したいと思います。私には2つの可能性があります。
1対2の利点は何ですか?f (k)は再帰式ではないとしましょう。f (k)が再帰的である場合はどうなりますか?
ヒントをいただければ幸いです。
シンボリック微分は、手動で行うよりもエラーが発生しにくいです。
低次の場合、シンボリック微分に多くのコンピューター時間がかかるとは思いませんが、proc.time、system.time、またはrbenchmarkパッケージを使用して、特定の状況を簡単に判断できます。これらの例も参照してください。
チェックとして、シンボリックとハンドの両方の差別化を試してみることをお勧めします。
Rの導関数(およびRyacasパッケージなどの関連関数D
)とRyacasパッケージについては、後者はユーザーが自分で繰り返す必要なしに繰り返し微分を行う機能があり(の3番目の引数はderiv
順序を指定します)、Simplify
対応するものが存在しない関数がありますRではRyacasを注意深くチェックする必要がありますが、yacasは時々少しバグがある可能性があるためです。
次に例を示します。
> library(Ryacas)
> x <- Sym("x")
> y <- (x^2+x)^2
> dy <- deriv(y, x, 2) # 2nd deriv
> dy
expression(2 * (2 * x + 1)^2 + 4 * (x^2 + x))
> Simplify(dy)
expression(2 * (6 * x^2 + 6 * x + 1))
編集:例に追加:
> Eval(dy, list(x = 3))
[1] 146
> Eval(Simplify(dy), list(x = 3))
[1] 146
>
> f <- function(x) {}
> body(f) <- yacas(Simplify(dy))[[1]]
> f
function (x)
2 * (6 * x^2 + 6 * x + 1)
> f(3)
[1] 146
>
> # double check
> w <- 3
> eval(D( D(expression((w^2+w)^2), "w"), "w"))
[1] 146
また、試してみてくださいdemo("Ryacas-Function")
。
編集2:エラーを修正し、例にさらに追加しました。