最小化多变量约束函数Matlab

时间:2013-06-12 11:18:13

标签: matlab

如何最小化此功能请告诉我MATLAB

中的代码
Minimize Ra = (0.237 − 0.00175v + 8.693f − 0.00159z)
subjected to 124.53 ≤ v ≤ 167.03 
             0.025 ≤ f ≤ 0.083 
             6.2 ≤ z ≤ 14.8

3 个答案:

答案 0 :(得分:1)

你正在看(非常堕落)linear program 您的未知向量x = [v; f; z],目标系数向量为c = [-0.00175; 8.693; -0.00159] 在您的特定情况下,您没有相等或不等式约束,只有下限和上限lb = [124.53; 0.025; 6.2]ub = [167.03; 0.083; 14.8]

您正在尝试最小化

argmin c^T x
  s.t. lb <= x <= ub

使用linprog

x = linprog( c, [], [], [], [], lb, ub );

请注意,常数系数0.237未参与优化,因为它对argmin没有影响。

答案 1 :(得分:1)

您可以使用fmincon。让我们说v = x(1)f = x(2)z = x(3),以便tehy都在一个向量中。首先,您将函数的句柄定义为:

h = @(x)(0.237 - − 0.00175*x(1) + 8.693*x(2) − 0.00159*x(3))

您需要以A*x ≤ b的形式定义约束。在您的示例中,我们重写约束,因为它们都小于某个函数:

v ≤ 167.03
-v ≤ -124.53 
f ≤ 0.083
-f ≤ -0.025 
z ≤ 14.8
-z ≤ -6.2

现在,您可以将上述内容转换为矩阵形式A*x ≤ b

A = [1,  0,  0;
     -1, 0,  0;
     0,  1,  0;
     0, -1,  0;
     0,  0,  1;
     0,  0, -1]
b = [167.03; -124.53; 0.083; -0.025; 14.8; -6.2]

最后,您为变量x0定义初始猜测x,并通过调用fmincon进行优化:

xOpt = fmincon(h, x0, A, b)

初始猜测可以是约束中的任何值,因此x0 = [167; 0.08; 14]可以起作用。

编辑:您还可以将下限和上限矢量定义为lb = [124.53; 0.025; 6.2]ub = [167.03; 0.083; 14.8],并使用以下方式调用fmincon

xOpt = fmincon(h, x0, [], [], [], [], lb, ub)

注意:如果您想将初始猜测随机化,可以使用lbub向量与x0 = lb + (ub - lb)*rand()进行对比。

这个工具比你需要的这个问题更强大,但是嘿,教一个人钓鱼。

答案 2 :(得分:0)

嗯,这很简单:

>> Min_Ra = 0.237 − 0.00175*167.03 + 8.693*0.025 − 0.00159*14.8

ans = 
    0.1384905

:)

(只需减去最大允许金额,同时加上最小允许金额)