gpt4 book ai didi

wolfram-mathematica - NMinimize 似乎在破解

转载 作者:行者123 更新时间:2023-12-04 00:50:56 26 4
gpt4 key购买 nike

说我有一个疯狂的功能,f ,定义如下:

util[x_, y_, c_] := 0.5*Log[c-x] + 0.5*Log[c-y]
cost[x_, y_, l_] := c /. First[NSolve[util[x, y, c+l] == Log[10+l], c]]
prof[x_, y_] := 0.01*Norm[{x,y}, 2]
liquid[x_, y_] := 0.01*Norm[{x,y}, 2]
f[x_, y_, a_, b_] := cost[a, b, liquid[x,y] + liquid[a-x, b-y]] - Max[a,b]
- cost[0,0,0] + prof[x,y] + liquid[x,y] + prof[a-x, b-y] + liquid[a-x, b-y]

现在我打电话 NMinimize像这样:
NMinimize[{f[50, 50, k, j], k >= 49, k <= 51, j >= 49, j <= 51}, {j, k}]

这告诉我:
{-21.0465, {j -> 51., k -> 49.}}

但是如果我真的检查了什么 f[50,50,49,51]是的,是这样的:
0.489033

这与 NMinimize 所说的 -21.0465 大不相同。
这是 NMinimize 类(class)的标准吗?
浮点错误复合还是诸如此类?
击败 NMinimize(或某些此类功能)提交的任何想法?

最佳答案

它肯定似乎与您的功能有关 f不限于数字参数,加上由 NMinimize 执行的符号预处理.一旦您将签名更改为

f[x_?NumericQ, y_?NumericQ, a_?NumericQ, b_?NumericQ]:=...

结果正如预期的那样,尽管获得它需要更长的时间。

编辑

我们可以深入挖掘以揭示真正的原因。首先,请注意您的 f (原始的, args 不受限制)是一个相当大的功能:
In[1423]:= f[50,50,49.,51.]
Out[1423]= 0.489033

In[1392]:= f[50,50,k,j]/.{j->51.`,k->49.`}
Out[1392]= -21.0465

真正的罪魁祸首是 NSolve ,这给出了两个有序的解决方案:
In[1398]:= NSolve[util[x,y,c+l]==Log[10+l],c]
Out[1398]= {{c->0.5 (-2. l+1. x+1. y-2. Sqrt[100.+20. l+1. l^2+0.25 x^2-0.5 x y+0.25 y^2])},
{c->0.5 (-2. l+1. x+1. y+2. Sqrt[100.+20. l+1. l^2+0.25 x^2-0.5 x y+0.25 y^2])}}

问题是,顺序是什么。事实证明, NSolve 的符号和数字参数是不同的。 ,因为在后一种情况下,我们周围没有任何符号。这可以看作:
In[1399]:= 
Block[{cost},
cost[x_,y_,l_]:=c/.Last[NSolve[util[x,y,c+l]==Log[10+l],c]];
f[50,50,k,j]/.{j->51.,k->49.}]

Out[1399]= 0.489033

因此,您真的必须确定什么是适合您的正确订购方式,以及您真正想要选择哪种解决方案。

关于wolfram-mathematica - NMinimize 似乎在破解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7368663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com