我创建了这个函数来计算获得的数据的品质因数。 Loading变量是一个带有一些随机数的论坛。在现实生活中,我有真实的数据。
DD = 20; Days = 3; Peak = 1;
Loading = Table[Table[{RandomReal[{-1500, 1500}], RandomReal[{-1, 1}/100]}, {i, 1, 150}], {j, 1, Days}];
coo = Loading[[All, All, 1]];
TimeSwapFunction[lst_] :=
Norm[{Temp =
Sort[Partition[
Flatten[Riffle[
Flatten[Table[coo[[i]] + lst[[i]], {i, 1, Days}]],
Flatten[Loading[[1 ;; Days, All, Peak + 1]]]]],
2], #1[[1]] < #2[[1]] &];
Mean[Select[
Partition[
Riffle[Mean[Transpose[Partition[Temp[[All, 1]], DD]]],
Abs[Mean[
Transpose[
Partition[Temp[[All, 2]], DD]]]/(StandardDeviation[
Transpose[Partition[Temp[[All, 2]], DD]]]/Sqrt[DD])]],
2], #1[[1]] > 0 &][[All, 2]]]}]
该功能现在正在运行。 如您所见,如果我们绘制TimeSwapFunction(见下文),则会有一些最大值。目的是使用NMaximize来查找已经在mathematica中编码的算法(如遗传算法)的最大值。
但如果我直接使用NMaximize(只有一个变量),它就无法正常工作。您可以通过查看输入19和21来查看它。输出是一些值,我不知道它来自何处。
如果我允许两个变量,那就是同一个故事(输入第25个)。如果我把第三个,它就不再工作了。
如果有人可以帮助我完成这件事,我会很高兴。
答案 0 :(得分:1)
这可以通过定义TimeSwapFunction来修复,这样它只需要数字参数:
Clear[TimeSwapFunction]
TimeSwapFunction[lst_ /; (And @@ ( NumericQ /@ lst))] := (*the rest the same*)
NMaximize[TimeSwapFunction[{c, b, a}], {c, b, a}]
{0.804359,{c - &gt; 7.35047,b - &gt; -4.85534,a - &gt; 3.51407}}
这是许多N
数字函数(NIntegrate
等)常见的问题
顺便说一下,你不应该使用以大写字母开头的变量,以避免与内置插件发生冲突(但在这种情况下显然不是问题)
另外另外要注意这种高度非线性的功能,你可能会发现局部而非全局的极端情况。