当前位置:首页>开发>正文

如何用matlab求多元函数的极值 matlab求多元函数最值在线等

2023-05-21 21:14:42 互联网 未知 开发

 如何用matlab求多元函数的极值 matlab求多元函数最值在线等

如何用matlab求多元函数的极值

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,00,1]
b=[158]
x0=[11]
[x,feval]=fmincon(z,x0,A,b)
得到局部极小值的坐标和函数值:
x =
15.0000
6.699feval =
231.9944

matlab求多元函数最值在线等

由于函数变量比较多,所以初始值的取值可能对结果影响很大
甚至有时会不收敛
这里采取了随机数作为初始值,知道收敛位置的做法
的到一个极值,521.820我试了一下,在比较大的范围内,极值都是收敛于这个值
但是在某些范围是不能够得到收敛的极值的
实际上你的这个函数是没有最值的,只是在某区域有个极值

fun=@(x) -15.3954*x(1) 0.1630*x(2) 0.1133*x(3) 0.1679*x(1)^2-0.0002*x(2)^2-0.0004*x(3)^2-0.0004*x(1)^3
flag=0
while (flag~=1)
[x,fval,flag] = fminsearch(@(x) -fun(x),1000*rand(1,4))
end
disp([当x1-x4的取值 num2str(x) 时])
disp([函数有极大值 num2str(-fval)])

结果:

当x1-x4的取值222.0579 407.4999 141.625 199.4355时
函数有极大值521.8202

matlab 求解三元函数。


像这种问题Matlab库函数直接可以求解。
编写三个m文件,一个主程序,两个function
主程序main.m
p0=[0 0 0]
A=[]b=[]Aeq=[]beq=[]vlb=[-2-2-2]vub=[222]
[x,fval]=fmincon(fun_u,p0,A,b,Aeq,beq,vlb,vub,confun_u)

fun_u.m子函数即目标函数u
function y=fun_u(x)
y= (x(1)-0.1).^2 (x(2) - 0.4).^2 (x(3) - 0.3).^2

约束条件confun_u.m文件,由于本问题无约束条件,所以该函数这样来写
function [g,ceq]=confun_u(x)
g=-1
ceq=-1

执行的时候直接运行main程序即可。当然你可以把main.m也改为一个function,输入参数为目标函数名‘fname’,这时你需要自己定义fname的内容。要是不清楚的地方可以继续追问

最新文章