MATLAB 优化问题求解:使用 fmincon 函数和自定义约束函数
function [c, ce] = c2f1a(x) ce = []; c = [4*x(1)^2 + x(2)^2 - 4]; end
f = inline('x(1)^2 - 2*x(1) + x(2)', 'x'); x = fmincon(f, [1; 2], [], [], [], [], [0; 0], [], 'c2f1a');
这段代码演示了如何使用 MATLAB 的 fmincon 函数求解带约束的优化问题。
函数 c2f1a
函数 c2f1a 是自定义的约束函数,它接受一个向量 x 作为输入,并返回一个向量 c,表示约束条件。在本例中,约束条件为 4*x(1)^2 + x(2)^2 - 4 <= 0。
函数 f
函数 f 是目标函数,它接受一个向量 x 作为输入,并返回一个标量值,表示目标函数的值。在本例中,目标函数为 x(1)^2 - 2*x(1) + x(2)。
fmincon 函数
fmincon 函数用于求解带约束的优化问题。该函数的语法如下:
[x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
其中:
fun:目标函数。x0:初始点。A、b:线性不等式约束条件。Aeq、beq:线性等式约束条件。lb、ub:变量的下界和上界。nonlcon:非线性约束函数。options:优化选项。
在本例中,fmincon 函数的调用方式如下:
x = fmincon(f, [1; 2], [], [], [], [], [0; 0], [], 'c2f1a');
该语句将调用 fmincon 函数,以求解目标函数 f 在约束条件 c2f1a 下的最小值。初始点为 [1; 2],下界为 [0; 0]。
代码解释
ce = [];:创建一个空的向量ce,用于存储等式约束条件。c = [4*x(1)^2 + x(2)^2 - 4];:计算约束函数c2f1a的值,并将结果存储在向量c中。f = inline('x(1)^2 - 2*x(1) + x(2)', 'x');:定义目标函数f,它接受一个向量x作为输入,并返回一个标量值,表示目标函数的值。x = fmincon(f, [1; 2], [], [], [], [], [0; 0], [], 'c2f1a');:调用fmincon函数,以求解目标函数f在约束条件c2f1a下的最小值。初始点为[1; 2],下界为[0; 0]。
总结
本文介绍了如何使用 MATLAB 的 fmincon 函数求解带约束的优化问题,并演示了如何定义自定义约束函数。通过使用这些函数,您可以轻松地解决各种优化问题。
原文地址: http://www.cveoy.top/t/topic/pghw 著作权归作者所有。请勿转载和采集!