簡體   English   中英

R中符號衍生物的平等

[英]Equality of symbolic derivatives in R

我想用R來驗證復雜的導數計算。 這是迄今為止我在一個簡單函數上的最佳嘗試:

f <- expression(a*log(x^2))
df.dx <- deriv(f, 'x')
(df.dx)
df.dx.byHand <- expression(2*a/x) # The derivative of f calculated by hand
(df.dx.byHand)
all.equal(df.dx, df.dx.byHand) 

以上的輸出是

> (df.dx)
 expression({
.expr1 <- x^2
.value <- a * log(.expr1)
.grad <- array(0, c(length(.value), 1L), list(NULL, c("x")))
.grad[, "x"] <- a * (2 * x/.expr1)
attr(.value, "gradient") <- .grad
.value

> (df.dx.byHand)
expression(2 * a/x)

[1] "Component 1: target, current do not match when deparsed"

我已經檢查過了

R中的顯式公式與符號導數

http://stat.ethz.ch/R-manual/R-patched/library/stats/html/deriv.html

R的符號導數和簡化

並且

http://stat.ethz.ch/R-manual/R-patched/library/base/html/expression.html

因為核心問題似乎是我不知道如何從'df.dx'中提取表達式的'grad [,'x']'部分。

由於IT問題,Sage和YACAS都不適用於我。

非常感謝您的建議!

問題中的問題不僅僅是提取表達式,還包括表達式需要簡化的事實。

1)如果“IT問題”意味着您在安裝Ryacas時遇到問題,請查看Ryacas主頁以查找故障提示並嘗試以下操作:

library(Ryacas)
x <- Sym("x")
a <- Sym("a")
identical(Eval(Simplify(deriv(a*log(x^2), x))), 2 * a / x) # TRUE

如果你得到FALSE,那么如果簡化沒有將它減少到與手工生成的形式相同的形式它們仍然可能是相同的,所以你可能想要在任何情況下嘗試下一個方法。

2)如果“IT問題”意味着您不允許安裝軟件包,那么只需在網格上進行比較:

df.dx.byHand <- function(x) 2*a/x

df.dx <- function(x) {}
body(df.dx) <- D(f,'x')

a <- 3
all.equal(df.dx.byHand(1:100), df.dx(1:100)) # TRUE

更新提供Ryacas解決方案

暫無
暫無

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

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