R语言使用Deriv包对函数向量自变量求导的问题咨询
Deriv包向量自变量求导解决方案
报错原因
Deriv默认将输入参数按标量处理,微分时把向量x当作长度为1的标量代入%*%运算,因此触发维度不匹配错误。
可行方案(无需拆分向量为独立参数)
方案1:声明向量参数属性
调用Deriv时通过vectorize.args指定目标参数为向量类型,配合combine参数合并导数结果:
library(Deriv) h = function(x) as.vector(c(1,2)%*%x) # 将矩阵乘法输出转为向量,避免格式报错 dh = Deriv(h, x = 'x', vectorize.args = "x", combine = "cbind") dh(c(1,2)) # 运行输出: # [,1] [,2] # [1,] 1 2
参数说明:
vectorize.args = "x":告知Deriv参数x是向量类型,而非单个标量combine = "cbind":将各分量的导数按列合并为矩阵,规避向量运算时的长度不匹配问题
方案2:函数定义使用向量索引
在定义目标函数时直接使用向量的分量索引写法,Deriv可自动识别向量结构,无需额外参数:
library(Deriv) h = function(x) 1*x[1] + 2*x[2] dh = Deriv(h, x = 'x') dh(c(1,2)) # 运行输出: # [1] 1 2
该方案适配任意自定义向量函数,只需要把向量运算的逻辑按分量展开即可,无需修改Deriv的调用参数。
内容的提问来源于stack exchange,提问作者Samuel Weisenthal
相关产品推荐
相关产品推荐

