首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中符号导数的等式

R中符号导数的等式
EN

Stack Overflow用户
提问于 2014-05-13 09:57:39
回答 1查看 156关注 0票数 0

我想用R来验证复杂的导数计算。到目前为止,我对一个简单函数的最佳尝试如下:

代码语言:javascript
复制
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) 

上面的输出是

代码语言:javascript
复制
> (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对我来说都是不可用的。

非常感谢您的建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-13 10:19:26

问题中的问题不仅仅是提取表达式,还在于表达式需要简化。

1)如果"IT问题“意味着您在安装Ryacas时遇到了问题,请参阅Ryacas主页中的故障排除提示,并尝试如下:

代码语言:javascript
复制
library(Ryacas)
x <- Sym("x")
a <- Sym("a")
identical(Eval(Simplify(deriv(a*log(x^2), x))), 2 * a / x) # TRUE

如果您得到假,那么它们仍然可能是相同的,如果简化没有将其简化为与手工生成的相同的形式,那么您可能希望在任何情况下尝试下一个方法。

2)如果"IT问题“意味着不允许您安装软件包,那么只需在网格上比较它们:

代码语言:javascript
复制
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解决方案

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23628122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档