我想解决一个约束最小化问题,并且我正在寻求关于如何构造代码的一些帮助。
我理解fmincon
是我应该使用的论点@mycon
,但我正在努力使其适应我的情况。任何建议都将非常感激。
这些是我的文件(a
和b
是预定义参数):
f1.m
function [y1, y2, y3]=f1(x1, x2, a)
...
end
f2.m
function w1=f2(x1, x2, y2, y3, b)
...
end
我想编码的问题:
min
y1
w.r.tx1
,x2
y1<=w1
答案 0 :(得分:2)
您可以按如下方式使用fmincon
:
std::map<std::string, std::string> interpolate_map;
interpolate_map.insert(std::make_pair("F", "a && b && c" ));
interpolate_map.insert(std::make_pair("H", "p ^ 2 + w" ));
interpolate_map.insert(std::make_pair("K", "H > 10 || e < 5" ));
interpolate_map.insert(std::make_pair("J", "F && !K" ));
for (const std::pair<const std::string, std::string> & i : interpolate_map)
/* ??? */
将x = fmincon(@(x) f1(x(1), x(2), a), [x1_start x2_start], [], [], [], [], [], [], @(x) mycon(x(1), x(2), a, b));
x1 = x(1)
x2 = x(2)
定义为:
mycon
和% C <= 0 and Ceq == 0
function [C, Ceq] = mycon(x1, x2, a, b)
[y1, y2, y3] = f1(x1, x2, a);
C = y1 - f2(x1, x2, y2, y3, b);
Ceq = [];
end
以及x1_start
Matlab使用的迭代求解器中x2_start
和x1
的起始值。
请查看matlab文档和示例以获取更多信息。