Mathematica用符号而不是数字来调用NMinimize?

San*_*tia 7 optimization wolfram-mathematica

NMinimize在Mathematica中使用时,我注意到以下行为.目标函数的第一次调用是使用变量名,而不是像空间中的点那样.

因此,例如,如果我的目标函数是一个模块,则该模块仅被调用一次,以符号方式进行计算,然后在进一步的迭代中,使用来自变量空间的点来评估该符号表达式.

对于大表达式,此行为可能会显着减慢计算速度.有没有办法解决这个问题?还有其他人经历过这个吗?有没有办法加快NMinimize呢?

例:

dummy[x_] := Module[
  {},
  Print["x=", x ];
  4 x^4 - 4 x^2 + 1
  ]

In: NMinimize[dummy[x], x]
Out:x=x
{0., {x -> 0.707107}}
Run Code Online (Sandbox Code Playgroud)

Mr.*_*ard 4

您是否尝试过将函数定义为仅评估数字输入?

dummy[x_?NumericQ] := ...
Run Code Online (Sandbox Code Playgroud)

  • 原因是“NMinimize”不保存任何参数,因此“dummy[x]”在进入“NMinimize”特定代码之前就可以正常计算。 (3认同)