我正在尝试对 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:函数值 blah blah 不是实数),因此最小化失败。
如何确定评估顺序,以便用数值评估 comb 的子功能?