【发布时间】:2011-08-09 00:51:34
【问题描述】:
我正在尝试对 Mathematica 中的“黑盒”函数进行数值优化。示意图如下:
NMinimize[{comb[x,y,z], x > 0}, {x,y,z}]
comb[x,y,z] 的定义与此类似:
comb[x_,y_,z_] := Module[{},
Print[x,y,z];
M = FindMaximum[SkewNormal[a,x,y,z], {a,x}] // First;
val = f[x,y,z,M];
Return[val];
];
但是,我尝试过的所有最小化函数似乎都没有立即为 comb[x,y,z] 提供数值,它最终尝试使用 x,y,z 的符号值来评估 FindMaximum(其中很容易验证,因为 Print[x,y,z] 也象征性地计算)。 Findmaximum 因此失败(FindMaximum::nrnum: The function value blah blah is not a real number),因此最小化失败。
如何确定评估顺序,以便用数值评估 comb 的子函数?
【问题讨论】:
-
另一个(更微妙的)问题是由于
NMinimize中的符号预处理,最近由 Daniel Lichtblau 在 other thread 中解决。 -
嗯,好的,谢谢,我会检查一下。我也刚刚注意到 Mathematica 8 中没有出现这个问题(我之前运行的是 7)。
标签: optimization wolfram-mathematica black-box operator-precedence