繁体   English   中英

通过函数句柄传递其他参数以在Matlab中进行优化

[英]Passing additional arguments through function handle to do optimization in Matlab

我有一个要优化的函数,例如f,在matlab中,该函数取决于我要优化的变量x = {x(1),x(2))和两个不需要优化的参数n和c ,换句话说,我有一个n和c值矩阵,我想为每个n和c找到最佳x值。 这是我的代码:

clear all;
clc;
close all;
f=@(x,n,c)n*x(1)+(x(2)+3*c)/(x(1)+c);
for n=1:10
    for c=1:20
        x=zeros(length(n),length(c));
        fun{n,c}=@(x)f(x,n,c);
        options=optimset('Algorithm','interior-point')
        x(n,c)=fmincon(fun{n,c},[0;0],[1 0;-1 0;0 1;0 -1],[40;0;40;0],[],[],[],[],[],options);
    end
end

??? Subscripted assignment dimension mismatch.

Error in ==> forloop2 at 10
        x(n,c)=fmincon(fun{n,c},[0;0],[1 0;-1 0;0 1;0
        -1],[40;0;40;0],[],[],[],[],[],options); 
Any helps? Thank you so much!

恐怕您实际上没有提出问题,但这是一个答案:

function myOptimization
clear all;
clc;
close all;

results=cell(10,20);
for n=1:10
    for c=1:20
        options=optimset('Algorithm','interior-point');
        fmincon(@(x)fun(x,n,c),[0;0],[1 0;-1 0;0 1;0 -1],[40;0;40;0],[],[],[],[],[],options);
        resultingCoordinates=fmincon(@(x)fun(x,n,c),[0;0],[1 0;-1 0;0 1;0 -1],[40;0;40;0],[],[],[],[],[],options);
        results{n,c}=resultingCoordinates;
    end
end
results
end

function f=fun(x,n,c)
f=n*x(1)+(x(2)+3*c)/(x(1)+c);
end

您在原始代码中至少犯了3个错误。

首先,x(n,c)= fmincon ...不起作用,因为fmincon返回具有最佳坐标的向量作为第一个输出参数。 因此,您试图将向量分配给矩阵“ x”中的单个位置,这是错误的来源。 我将最佳坐标放在单元格数组中,以便可以存储所有输出坐标。 如果希望将最佳“ f值”作为矩阵分配给结果,则可以使用[〜,f(n,c)] = fmincon ...。

其次,即使您想要保存坐标,“ x”对于您的输出矩阵来说也是一个非常糟糕的名字。 这甚至可能会导致您出错,因为它只是用来表示目标函数的输入,而不是最佳坐标。 对于最佳坐标或最佳函数值,请使用其他名称,以反映这些是结果。

第三,您不需要在每次更改参数时连续重新分配输出矩阵/单元格数组。 您实质上是在尝试清除每次迭代的结果,如果您要保存结果,则该方法将无效。

我还将目标函数拆分为一个函数,并将该函数的优化拆分为另一个。

我希望这有帮助。 将来,请尝试对堆栈溢出定义一个明确的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM