我正在使用Optim.jl库来使用BFGS算法最小化Julia中的函数.今天,我问了一个关于同一个图书馆的问题,但为了避免混淆,我决定把它分成两部分.
我想在优化后得到负逆Hessian的估计值,以便进一步计算.
在Optim库的GitHub网站上,我找到了以下工作示例:
using Optim
rosenbrock(x) = (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2
result = optimize(rosenbrock, zeros(2), BFGS())
Run Code Online (Sandbox Code Playgroud)
从结果优化后,如何得到负逆Hessian ?它中是否有任何字段可以识别Hessian,Inverse Hessian或负Hessian?
编辑
感谢您的评论.你认为编辑"optimize.jl"会更有效率,这样函数也会返回逆Hessian吗?请参阅下面的工作示例 - 编辑已在第226行引入:
if state.method_string == "BFGS"
return MultivariateOptimizationResults(state.method_string,
initial_x,
f_increased ? state.x_previous : state.x,
f_increased ? state.f_x_previous : state.f_x,
iteration,
iteration == options.iterations,
x_converged,
options.x_tol,
f_converged,
options.f_tol,
g_converged,
options.g_tol,
f_increased,
tr,
state.f_calls,
state.g_calls,
state.h_calls), state.invH
else
return MultivariateOptimizationResults(state.method_string,
initial_x,
f_increased ? state.x_previous : state.x,
f_increased ? state.f_x_previous : state.f_x,
iteration, …
Run Code Online (Sandbox Code Playgroud) 我最近开始在朱莉娅编程用于研究目的.通过它我开始喜欢语法,我在这里积极体验社区,现在我正在考虑从其他编程语言移植一些代码.
使用高度计算的昂贵的预测模型,将它们全部用强大的现代语言作为Julia将是很好的.
我想创建一个项目,我想知道我应该如何设计它.从性能和语言的角度来看,我都很关心(即:创建模块会更好 - 子模块 - 函数或其他东西会更受欢迎吗?使用字典或自定义类型会更好吗?).
我在我的领域中查看了不同的GitHub项目,但我还没有真正找到一个共同的标准.因此,我想知道:朱莉娅语言和哲学的精神是什么?
编辑:
有人指出,这个问题可能过于笼统.因此,我想集中讨论如何更好地构建模块(即主要功能和子程序与模块和子模块的单独模块等).我相信这对我来说已经足够了解朱莉娅语言和哲学的精神.当然,非常欢迎其他示例和参考.
我是Swift的新手,我正在尝试创建一个非常简单的应用程序,当你按下一个圆形按钮时执行root shell命令.
我在网上找到了以下链接,它解释了如何在swift上执行具有用户权限的shell命令,但它没有说明如何使用root权限执行此操作:http://practicalswift.com/2014/06/25/如何对执行壳的命令从-斯威夫特/
我该怎么做?
我正在尝试从Visual C ++中的SAFEARRAY(作为函数的输出返回)获取元素。
我以前从未使用过SAFEARRAY,所以我不知道该如何处理。我应该将SAFEARRAY转换为长数组(如何?),还是可以简单地使用SAFEARRAY内部值的索引?
我正在尝试创建一个函数来更新 Float64 参数。下面的示例应该能够阐明我想要实现的目标。
a=1.2
function fun!(a)
a=3.4;
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,a
仅在本地范围内更新。有没有办法做到这一点?我认为传递一个指向函数的指针会有所帮助,但我不知道如何在 Julia 中做到这一点。
我刚开始使用Julia.我试图使用eval(在Julia中)来定义函数中的一组变量.假设我想将v1设置为2:
function fun_test(varargs...)
v1 = 0;
if length(varargs) > 0
j = collect(linspace(1,length(varargs)-1,length(varargs)/2));
for i in j
expr_vargs = parse("$(varargs[i]) = $(varargs[i+1]);");
eval(expr_vargs);
end
end
println(v1)
end
Run Code Online (Sandbox Code Playgroud)
将该功能称为:
fun_test("v1", "2");
Run Code Online (Sandbox Code Playgroud)
它不起作用,因为println返回0(v1的初始值).但是,如果我在Julia的终端中运行类似的eval调用,那么它可以工作.
您能否澄清一下为什么它不起作用以及如何解决它?
我正在尝试使用BFGS算法最小化具有Optim.jl库的多个参数的函数.
在Optim库的GitHub网站上,我找到了以下工作示例:
using Optim
rosenbrock(x) = (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2
result = optimize(rosenbrock, zeros(2), BFGS())
Run Code Online (Sandbox Code Playgroud)
让我们说我的目标函数是:
fmin(x, a) = (1.0 - x[1])^a + 100.0 * (x[2] - x[1]^2)^(1-a)
Run Code Online (Sandbox Code Playgroud)
我怎样才能通过额外的-常-参数一个采用优化?
我正在尝试拆分功能
function my_fun(A::MyStruct)
if typeof(A.X) <: Nothing
println("Case 1");
else
println("Case 2");
end
end
Run Code Online (Sandbox Code Playgroud)
根据 的类型分为两种方法A.X
,其中
mutable struct MyStruct
t::Int64
X::Union{Float64, Nothing}
end
Run Code Online (Sandbox Code Playgroud)
最有效的方法是什么?