我想找出使函数A(p)
最大化的向量p
(即p(1),p(2),p(3),...
)的值。
我正在使用MatLab来做这件事,我找到了fsolve
,我认为它可以帮助我。因此,我创建了函数A
:
function A = myfun(p)
R = 0.1;
u1 = 500;
u2 = 400;
u3 = 300;
A = ( (p(1)+p(2)+p(3)) * (1/u1+1/u2+1/u3)) * ...
(1 + R*(p(1)^2+p(2)^2+p(3)^2) * (1/u1+1/u2+1/u3) );
然后我需要解一个方程系统,它将是:
diff(A,p(1))==0
diff(A,p(2))==0
diff(A,p(3))==0
其中得到的p
向量将是我的问题的解决方案。fsolve
如何解这个方程组(p0=[1 1 1]
)?
1条答案
按热度按时间4dc9hkyq1#
以下是如何使用符号工具箱执行此操作的示例:
但我不建议这样做(它完全不可读,而且容易出现错误)。
您可以编写一个适当的函数并使用符号工具箱计算上面的
dAdp
,但我也不建议这样做(只是非常慢)。我是一个喜欢计算的人,因为我只信任计算机的功能:计算。我在纸上做推导,除了非常简单,但冗长而乏味的推导(你可以争辩说,情况就是这样,我仍然*喜欢在纸上做,因为我也喜欢锻炼我的大脑:)。
我建议你这样做,和/或使用符号工具箱不断检查自己。我的意思是,你应该把它当作一种辅助工具,而不是作为主引擎。
所以,我们开始吧。这又是你的函数,这一次是以不同的形式,应用了稍微多一点的大脑:
所以,你想要解∇A(p)=0。最好的方法是运用更多的大脑。您可以验证向量导数是否等于:
你可以用更多的大脑来解决这个问题:
VECTOR==标量:这意味着p中的所有元素都相等。
代入q=p1=p2=p3,然后
⇒q=⅓·√(-1/(CR))
(表示有问题),或者在
fsolve
中如下所示:这将立即导致
解算完成,因为初始点处的函数值向量按函数公差的缺省值衡量接近于零,并且问题按梯度衡量看起来是规则的。
这确实意味着有麻烦了。
由于您已经表示您对最大值感兴趣,并且该函数似乎没有驻点,因此唯一的结论是该函数没有最大值也没有最小值,除非您在p上施加界限。事实上,如果你将维度降低到2,并制作一个曲线图:
...没有极值。