是否可以将优化函数fmincon
与Matlab定义的函数一起使用?
我编写了一个函数,其中给出的常数参数(实数或复数)很少,而现在,每次更改这些参数时,结果都会改变(您不必说)。
[output1, output2] = my_function(input1,input2,input3,input4)
我看到fmincon
函数允许在给定约束下找到最佳结果。假设我想找到仅作用于input1
的最佳输出,并使所有其他输入保持不变。是否可以定义类似
fmincon(@(input1)my_function,[1,2],[],mean)
对于input1
,其最佳值mean
从1变为2,其中平均值是其他一些结果的平均值。
我知道这是一个非常模糊的问题,但是由于function
可以做出很多事情,因此我无法给出一个最小的例子
具有多个输出的第一个尝试给了我错误Only functions can return multiple values.
然后我尝试只输出一个,如果我使用
output1 = @(input1)function(input2,input3);
fmincon(@output1,[1,2],[],mean)
我得到了错误
错误:“ output1”以前用作变量,与此处用作函数或命令的名称存在冲突。 有关详细信息,请参见MATLAB文档中的“ MATLAB如何识别命令语法”。
有了fmincon(@my_function,[1,2],[],mean)
,我得到Not enough input arguments.
答案 0 :(得分:2)
该输入应在函数定义中使用-阅读anonymous functions的编写方式。您不必使用匿名函数来定义实际的目标函数(下面的myFunction
),您可以在其自己的文件中使用函数。关键是目标函数应返回要最小化的标量。
这是一个非常简单的示例,基于初始猜测fmincon
,使用myFunction
在[1.5,1.5]
中找到最小值。
% myFunction is min when x=1,y=2
myFunction = @(x,y) (x-1).^2 + (y-2).^2;
% Define the optimisation function.
% This should take one input (can be an array)
% and output a scalar to be minimised
optimFunc = @(P) myFunction( P(1), P(2) );
% Use fmincon to find the optimum solution, based on some initial guess
optimSoln = fmincon( optimFunc, [1.5, 1.5] );
% >> optimSoln
% optimSoln =
% 0.999999990065893 1.999999988824129
% Optimal x = optimSoln(1), optimal y = optimSoln(2);
您可以看到计算出的最优值并非完全[1,2]
,但在默认的最优容差范围内。您可以更改fmincon
求解器的选项-阅读documentation。
如果您想将y=1
保持不变,则只需更新函数定义:
% We only want solutions with y=1
optimFunc_y1 = @(P) myFunction( P(1), 1 ); % y=1 always
% Find new optimal solution
optimSoln_y1 = fmincon( optimFunc_y1, 1.5 );
% >> optimSoln_y1
% optimSoln_y1 =
% 0.999999990065893
% Optimal x when y=1 = optimSoln(1)
您可以使用A
的{{1}},B
,Aeq
和Beq
输入来添加不等式约束,但这在这里太宽泛了,请参阅文档。
请注意,您使用的关键字fmincon
的语法无效。我在演示中为函数使用了有效的变量名。