![](/img/trans.png)
[英]How to do interval algorithms based integration using "IntervalArithmetic" package in Julia?
[英]How to find a Jacobian matrix of a vector function in Julia using "IntervalArithmetic.jl" package?
您能否提供一個解決方案,使用 Julia 中的“IntervalArithmetic.jl”package為向量 function 查找雅可比矩陣? function 表示和所需的雅可比矩陣如下所示。
f = [f1(x,y,z), f2(x,y,z), f3(x,y,z)]
Jacobian = [df1/dx, df1/dy, df1/dz; df2/dx, df2/dy, df2/dz; df3/dx, df3/dy, df3/dz]
給你go:
(這段代碼的解釋留給這段代碼的用戶作為自我練習,應該可以做到,否則使用這段代碼有點冒險——它沒有經過很好的測試)
using IntervalArithmetic, FiniteDiff, Optim
function interval_jacobian(F, x)
x0 = mid.(x)
F0 = F(x0)
dummy = zero(eltype(x0))/one(eltype(F0))
restype = typeof(dummy)
M = length(F0)
N = length(x0)
lows = fill(dummy, M, N)
highs = fill(dummy, M, N)
xlo = getproperty.(x, :lo)
xhi = getproperty.(x, :hi)
inner_optimizer = GradientDescent()
for i in 1:M
for j in 1:N
ff = (x -> FiniteDiff.finite_difference_derivative(t -> F(Base.setindex(tuple(x...), t, j))[i], x[j]))
gg! = ((G, x) -> ( G .= FiniteDiff.finite_difference_hessian(x -> F(x)[i], x)[:, j]))
res = optimize(ff, gg!, xlo, xhi, x0, Fminbox(inner_optimizer))
lows[i,j] = res.minimum
ff2 = (x -> -ff(x))
gg2! = ((G, x) -> (gg!(G, x); G .= -G))
res = optimize(ff2, gg2!, xlo, xhi, x0, Fminbox(inner_optimizer))
highs[i,j] = -res.minimum
end
end
return [l..h for (l,h) in zip(lows, highs)]
end
有了這個定義:
# defining a function taking a single tuple parameter
g((x,y)) = [ 3x^2 + 4y^3 + x*y^2, 2x + y^4, x^2 + y^2 ]
# g (generic function with 1 method)
# and another one:
g2((x,y)) = [ 3sin(x)^4*cos(y), 2cos(x)^5+y^3 ]
# g2 (generic function with 1 method)
# some intervals as inputs:
xintervals = [1.0..2.0, 2.0..3.0]
# 2-element Vector{Interval{Float64}}:
# [1, 2]
# [2, 3]
# the interval Jacobian calculated:
interval_jacobian(g, xintervals)
# 3×2 Matrix{Interval{Float64}}:
# [10, 21] [52, 120]
# [1.99999, 2] [32, 108]
# [2, 4] [4, 6]
interval_jacobian(g2, xintervals)
# 2×2 Matrix{Interval{Float64}}:
# [-3.85812, 3.71688] [-2.7279, -0.212259]
# [-0.717112, 0] [12, 27]
這並不意味着性能或象征性。 無窮大的問題沒有處理,或者只是函數對於Optim
優化器來說太不穩定等問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.