Julia求导咨询:如何计算向量形式函数的偏导数
Julia计算偏导数并兼容hcubature的方案
方案1:用Symbolics.jl生成显式偏导表达式
如果你需要得到20x[1]^3这种简洁的显式结果,Symbolics.jl是最优选择,还能转换成适配hcubature的数值函数。
- 安装并加载包:
using Pkg Pkg.add("Symbolics") using Symbolics
- 定义符号变量和目标函数:
@variables x[1:2] f(x) = 5x[1]^4 - 2x[2]^2
- 计算对x[1]的偏导:
df_dx1 = Symbolics.derivative(f(x), x[1])
执行后会直接得到20x₁^3的显式表达式,完全符合你的要求。
- 转成可调用的数值函数(支持向量输入):
df_dx1_func = Symbolics.build_function(df_dx1, x, expression=Val{false})[1]
测试一下:df_dx1_func([2, 3])会返回160,完美适配后续的hcubature调用。
方案2:用ForwardDiff.jl做数值自动微分
你之前用ForwardDiff出错应该是用法问题,它完全支持向量输入,且和hcubature兼容。
- 安装并加载包:
using Pkg Pkg.add("ForwardDiff") using ForwardDiff
- 定义接受向量参数的目标函数:
f(x) = 5x[1]^4 - 2x[2]^2
- 两种方式求x[1]的偏导:
- 求梯度后取第一个元素:
grad_f(x) = ForwardDiff.gradient(f, x)[1] - 直接指定求第1个变量的偏导:
df_dx1(x) = ForwardDiff.partialderivative(f, x, 1)
grad_f([2,3])返回160。 - 求梯度后取第一个元素:
和hcubature结合的示例
不管用哪种方法得到的偏导函数,都能直接传入hcubature做二重积分。比如计算偏导在[0,1]×[0,1]上的积分:
using Pkg Pkg.add("HCubature") using HCubature # 以Symbolics生成的函数为例 integral, err = hcubature(df_dx1_func, [0,0], [1,1])
内容的提问来源于stack exchange,提问作者L_J
相关产品推荐
相关产品推荐

