我有一个优化的函数,比如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!
答案 0 :(得分:0)
我担心你实际上没有提出问题,但这是一个答案:
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"即使您想保存坐标,输出矩阵也是一个非常糟糕的名称。它甚至可能会导致错误,因为它用于表示目标函数的输入,而不是最佳坐标。使用不同的名称来表示最佳坐标或最佳函数值,这反映出这些是结果。
第三,每次更改参数时,都不需要不断重新分配输出矩阵/单元阵列。你基本上试图清除每次迭代的结果,如果你想保存它们就行不通。
我还将你的目标函数拆分为一个函数,并将该函数的优化分解为另一个函数。
我希望这会有所帮助。将来,请尝试在Stack Overflow上定义一个明确的问题。