编辑:由于霍奇勒的评论帮助我开始,我已经编辑了我的问题,使之更加具体。
我在excel中有数据,我用这些数据进行优化分析在excel中,使用解算器很容易:我可以选择一个带有公式的单元格,然后选择需要更改的单元格并添加约束,然后最小化但是,说到Matlab的优化过程,我就不知所措了文档似乎只提供了一些优化问题的示例,这些优化问题分析了简单的单行函数,如f(x)=-(x1)(x2)(x3)我不知道如何将这些例子应用到我自己的案例中。
我试图最大化的功能是比较复杂的。作为输入,它接受许多标量变量以及包含计算中使用的数据的多个结构。
我的问题是,我试图通过改变三个标量变量来最大化函数的值,而剩下的输入变量是常数(因为它们是数据)。更具体地说,我的功能类似于:
function x = NameOfFunction (w1, w2, w3, a, b, c, Structure1, Structure2, Structure3)
我想通过只改变变量W1、W2和W3来最大化X。换句话说,我想用Matlab告诉我W1、W2和W3的最大X值,而只剩下其他变量。任何见解都是非常值得赞赏的。
最佳答案
没有限制
你可能最终会在MATLAB中找到fmincon
或fminunc
的解例如,使用fminunc
因为它的语法不那么混乱,您可以从在一个名为“NameOfFunction.m”的单独文件中定义成本函数开始:
function cost = NameOfFunction(w, a, b, c, Structure1, Structure2, Structure3)
% Your code goes here, just remember that you return a scalar-valued cost from
% this function.
请注意,
fminunc
和类似的方法会尽量减少这个成本函数如果你需要最大化它,那么就把你的最终成本乘以结尾。接下来,在主文件中创建函数的句柄:h = @(w)NameOfFunction(w, a, b, c, Structure1, Structure2, Structure3);
其中
-1
是要优化的变量向量:w = [w1, w2, w3];
这基本上用它的所有输入屏蔽了你的函数,就
w
而言,它只是你想要优化的函数这允许您将参数w
、fminunc
、a
、b
、c
、Structure
和Structure2
传递到成本函数Structure3
,而不必触摸它们现在可以调用句柄上的NameOfFunction
,并对向量进行初始猜测:w0 = [w1_init, w2_init, w3_init];
[w, fval] = fminunc(h, w0);
并且
fminunc
应该为您的fminunc
向量找到使您的成本函数最小化(注意,它寻找最小值)的最佳值。有限制的
在这种情况下,最有可能使用
w
如果约束的形式是要优化的每个参数的上界和下界,则将它们放入向量中:ub = [w1_upper, w2_upper, w3_upper];
lb = [w1_lower, w2_lower, w3_lower];
并调用与使用
fminunc
之前相同的句柄:[w, fval] = fmincon(h, w0, [], [], [], [], lb, ub);
上面的四个
w
只是您不使用的参数的占位符fmincon
还可以处理更复杂的约束;查看文档(在本讨论开始时链接)以了解更多详细信息。