科学编程与优化:Julia 中的技术与应用
1. 符号求导与自动求导
在科学编程中,求导是一项重要的操作。可以使用 differentiate
函数输出导数的符号版本,例如:
julia> differentiate("sin(x)*cos(x)", :x)
:((1 * cos(x)) * cos(x) + sin(x) * (1 * -(sin(x))))
使用 simplify
函数可以对结果进行一定程度的简化:
julia> simplify(differentiate("sin(x)*cos(x)", :x))
:(cos(x) * cos(x) + sin(x) * -(sin(x)))
这些技术不仅适用于单变量函数,对于多变量函数同样有效:
julia> simplify(differentiate("x*exp(-x)*sin(y)", [:x, :y]))
2-element Array{Any,1}:
:(1*exp(-x)*sin(y) + x*(-1*exp(-x)) * sin(y) + x*exp(-x)*0)
:(0*exp(-x)*sin(y) + x*0*sin(y) + x*exp(-x)*(1*cos(y)))
这里得到了一个对应偏导数的二维数组,并且可以忽