Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
Wolfram mathematica 如何将NMaximize/nmminimize与函数和变量列表一起使用_Wolfram Mathematica_Mathematica 8 - Fatal编程技术网

Wolfram mathematica 如何将NMaximize/nmminimize与函数和变量列表一起使用

Wolfram mathematica 如何将NMaximize/nmminimize与函数和变量列表一起使用,wolfram-mathematica,mathematica-8,Wolfram Mathematica,Mathematica 8,我创建了这个函数,用于计算所获取数据的价值值。加载变量为论坛提供一些随机数。在现实生活中,我有真实的数据 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[{

我创建了这个函数,用于计算所获取数据的价值值。加载变量为论坛提供一些随机数。在现实生活中,我有真实的数据

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来查看它。输出是一些我不理解的值,它来自哪里

如果我允许两个变量,那就是同一个故事。如果我放第三个,它就不工作了

如果有人能帮我度过这件事,我会非常高兴


通过定义TimeSwapFunction,使其仅接受数值参数,可以解决此问题:

 Clear[TimeSwapFunction]
 TimeSwapFunction[lst_ /; (And @@ ( NumericQ /@ lst))] :=  (*the rest the same*)


 NMaximize[TimeSwapFunction[{c, b, a}], {c, b, a}]                
{0.804359,{c->7.35047,b->-4.85534,a->3.51407}

这是N个数值函数NIntegrate等的常见问题

顺便说一句,您不应该使用以大写字母开头的变量,以避免与内置变量发生冲突。不过,在本例中,这显然不是一个问题


另一方面,请注意,使用这种高度非线性的函数,您可能会找到局部极值,而不是全局极值。

如果您包含足够的lst样本数据,则可能有人能够重现问题,诊断问题,甚至提供解决方案。@Bill:您是对的。我添加数据样本。我的lst是一个可以调整的变量列表,以便最大化我的函数。我有太多的可能性,所以我想在最后使用遗传算法来实现差分进化。谢谢。我刮你的DD=20;。。。,将其粘贴到MMA中,附加TimeSwapFunction[{120,0,0}]并点击。它的响应是关于未定义数据的错误流。我知道你有无限的可能性。你能把它简化成一个简单完整的例子吗,人们可以跑,得到和你一样的垃圾,阅读你的解释,为什么这个具体的答案是垃圾,答案应该是什么?然后我会试着诊断你哪里出了问题,看看我能不能让它给出你说你应该得到的答案。注意:Hold[lst]在做什么?“什么都没有?”比尔:我在休假日远离我的电脑。为了清晰起见,我改进了内容并添加了一张图片。谢谢!我知道大写字母,我总是检查。一个想法,以使它平行?我知道它是高度非线性的。