相当于Matlab中的Excel求解器?

Mr.*_*inn 4 matlab

编辑:我已经编辑了我的问题更具体,因为霍希勒的评论帮助我开始.

我有excel中的数据,我用它来进行优化分析.在excel中,使用求解器很简单:我可以选择带公式的单元格,然后选择需要更改的单元格并添加约束,然后最小化.但是,当谈到Matlab的优化过程时,我迷失了方向.文档似乎只提供了分析简单单行函数的优化问题示例,如f(x)= - (x1)(x2)(x3).我无法弄清楚如何在我自己的情况下应用这些例子.

我试图最大化的功能相对复杂.作为输入,它采用了许多标量变量以及包含计算中使用的数据的多个结构.

我的问题是我试图通过改变三个标量变量来最大化函数的值,同时保持其他输入变量不变(因为它们是数据).更具体地说,我的函数看起来像:

function x = NameOfFunction (w1, w2, w3, a, b, c, Structure1, Structure2, Structure3)
Run Code Online (Sandbox Code Playgroud)

我想通过仅改变变量w1,w2和w3来最大化x.换句话说,我想让Matlab告诉我最大化x的w1,w2和w3的值,同时保留所有其他变量.非常感谢任何见解.

Eng*_*ero 5

没有约束

您可能最终会在MATLAB中fminconfminunc在MATLAB中找到解决方案.例如,使用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.
Run Code Online (Sandbox Code Playgroud)

请注意,fminunc类似的将尝试最小化此成本函数.如果您需要最大化它,那么只需将最终成本乘以最后-1.接下来,在主文件中创建函数句柄:

h = @(w)NameOfFunction(w, a, b, c, Structure1, Structure2, Structure3);
Run Code Online (Sandbox Code Playgroud)

w您想要优化的变量的向量在哪里:

w = [w1, w2, w3];
Run Code Online (Sandbox Code Playgroud)

这基本上掩盖你的所有的其输入的只是一个要优化什么功能功能,w,尽可能fminunc关注.这使您可以通过您的参数a,b,c,Structure,Structure2,和Structure3你的成本函数NameOfFunction没有fminunc触及他们.您现在可以fminunc通过对矢量的初始猜测来调用您的句柄w:

w0 = [w1_init, w2_init, w3_init];
[w, fval] = fminunc(h, w0);
Run Code Online (Sandbox Code Playgroud)

并且fminunc应该为您的w向量找到最小值(注意,它会找到最小值)您的成本函数.

有约束力

在这种情况下,您fmincon最有可能使用.如果您的约束是在您正在优化的每个参数的上限和下限的形式,那么将它们放入向量:

ub = [w1_upper, w2_upper, w3_upper];
lb = [w1_lower, w2_lower, w3_lower];
Run Code Online (Sandbox Code Playgroud)

并调用与之前相同的句柄fmincon:

[w, fval] = fmincon(h, w0, [], [], [], [], lb, ub);
Run Code Online (Sandbox Code Playgroud)

上面的四个[]只是您没有使用的参数的占位符.fmincon也可以处理更复杂的约束; 查看文档(在本讨论开始时链接)以获取更多详细信息.

  • 你先生是绅士和学者.非常感谢! (2认同)