MATLAB三元函数求极值怎么做呢

(275257*cos(b - pi/2))/8000 - (1993803*cos(c))/50000 - (585179*cos(a - pi/2 + b))/25000
这个函数 a在0-pi b在0-5pi/36 c在pi/4-pi2 范围内

可以考虑用 fmincon(),具体用法见 doc fmincon,记 a = x(1), b = x(2), c = x(3):

fun = @(x)(275257*cos(x(2) -pi/2))/8000 ...
    - 1993803*cos(x(3))/50000 ...
    - 585179*cos(x(1) - pi/2 + x(2))/25000;
 
lb = [0, 0, pi/4];
ub = [pi, 5*pi/36, pi/2];
 
x0 = [0, 0, pi/4];
x = fmincon(fun,x0,[],[],[],[],lb,ub)

结果:

x =
       1.5708   5.8188e-08       0.7854

其实你也可以先分析一下,比如你这里 c 和 a, b 是独立的那么可以分解成两个极值问题。画个图就很容易看出来了,在 c 和 b 的方向上都是单调的(所以肯定 b 取 0, c 取 pi/4 = 0.7854),最后就是一个关于 a 的一元极值问题(从图中也大概可以估出极小值点大约是 1.5 左右)。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-08-14
on来求解。写成向量形式,约束A*x<=b,初始值x0附近可以搜出出局部极小值。输入:
z=@(x)7.2*sqrt(25+(15-x(1))^2)+(7.2+(107/(20-x(1))))*sqrt((8-x(2))^2+(20-x(1))^2)+7.2*x(2);
A=[1,0;0,1];
b=[15;8];
x0=[1;1];
[x,feval]=fmincon(z,x0,A,b)
得到局部极小值的坐标和函数值:
x =
15.0000
6.6994
feval =
231.9944
第2个回答  推荐于2018-04-24
on来求解。写成向量形式,约束A*x<=b,初始值x0附近可以搜出出局部极小值。输入:
z=@(x)7.2*sqrt(25+(15-x(1))^2)+(7.2+(107/(20-x(1))))*sqrt((8-x(2))^2+(20-x(1))^2)+7.2*x(2);
A=[1,0;0,1];
b=[15;8];
x0=[1;1];
[x,feval]=fmincon(z,x0,A,b)
得到局部极小值的坐标和函数值:
x =
15.0000
6.6994
feval =
231.9944本回答被网友采纳
第3个回答  2015-05-01
用fminunc求。
至于怎样用,可以看看这个页面:
http://zhidao.baidu.com/question/394970251.html追问

我需要求最大值 那个不行的

本回答被提问者和网友采纳
相似回答