Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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 Mathematica中的最小化函数_Wolfram Mathematica_Mathematical Optimization - Fatal编程技术网

Wolfram mathematica Mathematica中的最小化函数

Wolfram mathematica Mathematica中的最小化函数,wolfram-mathematica,mathematical-optimization,Wolfram Mathematica,Mathematical Optimization,我尝试使用NMinimize函数来查找以下函数的全局最小值 f={s1-Log[1000/{Norm[{2.83,0,2}-{u,v,w}]}^3]}^2+{s2- Log[1000/{Norm[{0,2.83,-2}-{u,v,w}]}^3]}^2+{s3- Log[1000/{Norm[{-2.83,0,2}-{u,v,w}]}^3]}^2+{s4- Log[1000/{Norm[{0,-2.83,-2}-{u,v,w}]}^3]}^2; n最小化[f,{u,v,w},方法->{“差分进化”

我尝试使用NMinimize函数来查找以下函数的全局最小值

f={s1-Log[1000/{Norm[{2.83,0,2}-{u,v,w}]}^3]}^2+{s2-
Log[1000/{Norm[{0,2.83,-2}-{u,v,w}]}^3]}^2+{s3-
Log[1000/{Norm[{-2.83,0,2}-{u,v,w}]}^3]}^2+{s4-
Log[1000/{Norm[{0,-2.83,-2}-{u,v,w}]}^3]}^2;
n最小化[f,{u,v,w},方法->{“差分进化”}]。
该优化是一种无约束优化。下面是我每次运行它时得到的错误

NMinimize::nnum:“函数值{{2.67476}}不是当前的数字。” {u,v,w}={0.673558,0.659492,0.0861047}”

我不确定哪里出了问题。还有一种方法可以设置停止规则,并在出现此类错误时从NMINIMIMIZE输出中提取值。 请帮我调试这段代码。 提前谢谢你的帮助
Kum.

大括号在Mathematica中表示列表,因此您的函数输出的是一个单元素矩阵,而不是标量。请更改用于分组到普通括号中的
{}
对。事实上,您得到的是双大括号,这表明有两个级别的大括号需要转换

f = (s1 - Log[1000./(Norm[{2.83, 0, 2} - {u, v, w}])^3])^2 + (s2 - 
      Log[1000./(Norm[{0, 2.83, -2} - {u, v, w}])^3])^2 + (s3 - 
      Log[1000./(Norm[{-2.83, 0, 2} - {u, v, w}])^3])^2 + (s4 - 
      Log[1000./(Norm[{0, -2.83, -2} - {u, v, w}])^3])^2;
作为进一步说明,我将把
整数
值(
1000
)更改为实数(
1000.
),因为其余的输入是机器精度的实数。正如Brett在评论中提醒我的那样,输出不会有任何不同,但是如果你做了大量重复计算,你可能会注意到性能的小幅度提高,如果你想进一步提高性能,你可以更轻松地使用该函数


(当我意识到这是一个1*1的矩阵输出,而不是矢量输出时编辑。)

1000
1000相比。
在这里不应该有任何区别——反正都会被强制到机器精度上。@BrettChampion-你说得很对,输出将是相同的,但会有一个小的性能提升,这是我的意思,但我设法在编辑中省去了。我会在回答中更清楚。Using
1000。
而不是
1000
在我的机器上加速了大约0.2%(使用s1、s2、s3、s4的随机值)。而如果我使用
h=Simplify[f,Element[u | v | w,Reals]
来去除规范和相关的绝对值(它们被平方化了……),速度会快35%@Verbeia,非常感谢您的帮助!!!!更改为普通括号确实帮助了它现在的工作:)@BrettChampion,如前所述,simplify函数真的让事情进展得更快了。:)再次感谢您。@rcollyer-您真的进入了语法突出显示,我明白了:)@Verbeia,我想如果我还是要编辑它,我会的它不是完美的,但已经足够有效了。