首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用‘Madness`计算偏导数

用‘Madness`计算偏导数
EN

Stack Overflow用户
提问于 2021-11-08 14:43:40
回答 1查看 40关注 0票数 1

正如前面提到的heremadness包非常适合R中的autodiff。

现在我想计算一个导数wrt x的导数。

$\frac{\partial}{\partial x}\frac{\partial}{\partial y}xy$

如何使用madness完成此操作

更新:实际上在这里我猜它的因素..也许只要把两个导数相乘就可以了?也许只有当x是y的函数时,这才是困难的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-10 14:53:41

下面是在madness中使用numderiv函数的一种方法

代码语言:javascript
复制
library(madness)

dxdy <- function(x, y, f) {
  dy <- function(x, y) {
    dvdx(f(x, y))
  }
  
  numderiv(dy, x, y = y)
}

x <- matrix(1:3, nrow = 1)
y <- matrix(3:1, ncol = 1)
# identity matrix, as expected
dvdx(dxdy(madness(x), madness(y), function(x, y) x%*%y))
#>      [,1] [,2] [,3]
#> [1,]    1    0    0
#> [2,]    0    1    0
#> [3,]    0    0    1
x <- matrix(2, ncol = 1)
y <- matrix(3, ncol = 1)
dvdx(dxdy(madness(x), madness(y), function(x, y) y^x))
#>          [,1]
#> [1,] 9.591674
# compare to analytical solution
y^(x-1)*(x*log(y) + 1)
#>          [,1]
#> [1,] 9.591674
x <- matrix(1:3, ncol = 1)
y <- matrix(3:1, ncol = 1)
dvdx(dxdy(madness(x), madness(y), function(x, y) sum(y^x)))
#>          [,1]     [,2] [,3]
#> [1,] 2.098612 0.000000    0
#> [2,] 0.000000 4.772589    0
#> [3,] 0.000000 0.000000    1
# compare to analytical solution
y^(x-1)*(x*log(y) + 1)
#>          [,1]
#> [1,] 2.098612
#> [2,] 4.772589
#> [3,] 1.000000
x <- matrix(1:3, ncol = 1)
y <- matrix(3:1, ncol = 1)
dvdx(dxdy(madness(x), madness(y), function(x, y) sum(sin(x*y))))
#>           [,1]     [,2]      [,3]
#> [1,] -1.413352 0.000000  0.000000
#> [2,]  0.000000 2.373566  0.000000
#> [3,]  0.000000 0.000000 -1.413353
# compare to analytical solution
cos(x*y) - x*y*sin(x*y)
#>           [,1]
#> [1,] -1.413353
#> [2,]  2.373566
#> [3,] -1.413353

请注意,madness导数是每个列( x )相对于每个行( y )的列分项( xy )的分项。

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

https://stackoverflow.com/questions/69885348

复制
相关文章

相似问题

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