可以利用MATLAB的fmincon函数进行求解。假设我们要求解如下的拉格朗日乘子法的问题:
minx,yz2 + 2xy - 5x - 6y - 2z, s.t. x + 2yz = 6
其拉格朗日函数为
L(x,y,z,λ) = xz^2 + 2xy - 5x - 6y - 2z + λ(x + 2yz - 6)
可以用MATLAB的fmincon函数求解此问题。首先定义目标函数和约束函数:
function [f, g] = lagrange_fun(x) f = x(3)^2 + 2x(1)x(2) - 5x(1) - 6x(2) - 2x(3); g = x(1) + 2x(2)*x(3) - 6; end
然后使用fmincon函数进行求解:
x0 = [0, 0, 0]; options = optimoptions('fmincon','Display','iter'); [x,fval,exitflag,output,lambda,grad,hessian] = fmincon(@lagrange_fun,x0,[],[],[],[],[],[],@lagrange_constraint,options);
其中lagrange_constraint为约束函数,定义为:
function [c, ceq] = lagrange_constraint(x) c = []; ceq = x(1) + 2x(2)x(3) - 6; end
运行以上代码即可得到优化结果。
完整代码如下:
function [f, g] = lagrange_fun(x) f = x(3)^2 + 2x(1)x(2) - 5x(1) - 6x(2) - 2x(3); g = x(1) + 2x(2)*x(3) - 6; end
function [c, ceq] = lagrange_constraint(x) c = []; ceq = x(1) + 2x(2)x(3) - 6; end
x0 = [0, 0, 0]; options = optimoptions('fmincon','Display','iter'); [x,fval,exitflag,output,lambda,grad,hessian] = fmincon(@lagrange_fun,x0,[],[],[],[],[],[],@lagrange_constraint,options);