Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization 用Julia中的NLsolve求扭结函数的根_Optimization_Julia_Nonlinear Optimization_Nonlinear Functions - Fatal编程技术网

Optimization 用Julia中的NLsolve求扭结函数的根

Optimization 用Julia中的NLsolve求扭结函数的根,optimization,julia,nonlinear-optimization,nonlinear-functions,Optimization,Julia,Nonlinear Optimization,Nonlinear Functions,我目前正在尝试使用Julia中NLsolve包的mcpsolve()函数解决一个具有向下不连续性的函数的互补性问题。针对特定参数再现该功能,下面的数字指的是图中的三个面板 不幸的是,算法并不总是返回内部解,即使它存在: 在(1)中,当从0开始时,算法保持在0,认为边界约束绑定 在(2)中,当从0开始时,算法在向下跳跃之前停止,即使解位于该点的右侧 无论采用何种方法——信赖域法或牛顿法,都会出现这些问题。理想情况下,算法会在停止之前在整个集合中寻找潜在的解决方案 我想知道你们中的一些人是否使用

我目前正在尝试使用Julia中
NLsolve
包的
mcpsolve()
函数解决一个具有向下不连续性的函数的互补性问题。针对特定参数再现该功能,下面的数字指的是图中的三个面板

不幸的是,算法并不总是返回内部解,即使它存在:

  • 在(1)中,当从0开始时,算法保持在0,认为边界约束绑定
  • 在(2)中,当从0开始时,算法在向下跳跃之前停止,即使解位于该点的右侧
无论采用何种方法——信赖域法或牛顿法,都会出现这些问题。理想情况下,算法会在停止之前在整个集合中寻找潜在的解决方案

我想知道你们中的一些人是否使用过类似的功能,并找到了一个巧妙的解决方案来绕过这些问题。注意

  • 从解决方案的右边开始并不能解决这些问题,因为其他参数化也会出现这些问题-参见(3)这一次
  • 在参数空间中,具体情况发生在何处是未知的

作为一个说明性的例子,考虑下面的代码。请注意,函数更平滑,但这里的算法也无法找到解决方案

function f!(x,fvec)
  if x[1] <= 1.8
    fvec[1] = 0.1 * (sin(3*x[1]) - 3)
  else 
    fvec[1] = 0.1 * (x[1]^2 - 7)
  end 
end

NLsolve.mcpsolve(f!,[0.], [Inf], [0.], reformulation = :smooth, autodiff = true)
函数f!(x,fvec)

如果x[1]您是否尝试过从
root
软件包中选择
fzero
?对于类似的函数
f(x)=如果x感谢您的回答!我没有,因为我实际上是在试图解决一个互补性问题,我认为
root
包没有为此提供任何算法。我将编辑我的问题!如果可能的话,也许你可以包括一个小的代码示例,这样每个人都可以尝试一些东西。当然,现在就编辑这个问题。如果问题不是太大,可能你可以使用全局解算器(例如Baron或Couenne),否则可以使用带有局部MCP解算器的多部分方法。