Julia极小单标量函数
如何使用牛顿方法最小化Julia中的简单标量函数?或任何其他合适的优化方案Julia极小单标量函数,julia,Julia,如何使用牛顿方法最小化Julia中的简单标量函数?或任何其他合适的优化方案 using Optim # Function to optimize function g(x) return x^2 end x0 = 2.0 # Initial value optimize(g, x0, Newton()) 上面的方法似乎不起作用,而且会返回 ERROR: MethodError: no method matching optimize(::typeof(g), ::Float64
using Optim
# Function to optimize
function g(x)
return x^2
end
x0 = 2.0 # Initial value
optimize(g, x0, Newton())
上面的方法似乎不起作用,而且会返回
ERROR: MethodError: no method matching optimize(::typeof(g), ::Float64, ::Newton{LineSearches.InitialStatic{Float64},LineSearches.HagerZhang{Float64,Base.RefValue{Bool}}})
“优化”功能需要一个时间间隔,而不是一个起点:
optimize(g, -10, 10)
返回
浏览源代码时,您将看到:
function optimize(f,
lower::Union{Integer, Real},
upper::Union{Integer, Real},
method::Union{Brent, GoldenSection};
kwargs...)
T = promote_type(typeof(lower/1), typeof(upper/1))
optimize(f,
T(lower),
T(upper),
method;
kwargs...)
end
因此,我认为一维极小化只有两种方法:Brent和Goldension
举例来说,您可以尝试:
Optim是为向量问题而设计的,而不是像您的示例中那样的标量问题。您可以将示例调整为具有一个变量的向量问题,但:
julia> using Optim
julia> function g(x) # <- g accepts x as a vector
return x[1]^2
end
julia> x0 = [2.0] # <- Make this a vector
1-element Vector{Float64}:
2.0
julia> optimize(g, x0, Newton())
* Status: success
* Candidate solution
Final objective value: 0.000000e+00
function optimize(f,
lower::Union{Integer, Real},
upper::Union{Integer, Real},
method::Union{Brent, GoldenSection};
kwargs...)
T = promote_type(typeof(lower/1), typeof(upper/1))
optimize(f,
T(lower),
T(upper),
method;
kwargs...)
end
julia> optimize(g, -10, 10, GoldenSection())
Results of Optimization Algorithm
* Algorithm: Golden Section Search
* Search Interval: [-10.000000, 10.000000]
* Minimizer: 1.110871e-16
* Minimum: 1.234035e-32
* Iterations: 79
* Convergence: max(|x - x_upper|, |x - x_lower|) <= 2*(1.5e-08*|x|+2.2e-16): true
* Objective Function Calls: 80
julia> using Optim
julia> function g(x) # <- g accepts x as a vector
return x[1]^2
end
julia> x0 = [2.0] # <- Make this a vector
1-element Vector{Float64}:
2.0
julia> optimize(g, x0, Newton())
* Status: success
* Candidate solution
Final objective value: 0.000000e+00