MATLAB fmincon 约束向量元素
MATLAB fmincon constraining vector elements
感谢阅读本文,我有一个 matlab 函数 'myfun',它 returns 是给定输入向量 X 的标量。现在我正尝试使用 fmincon 最小化此函数,但我在约束方面遇到了麻烦我的输出向量元素。
X0=1:1:10;
fhandle = @myfun;
lb=X0(1)*ones(length(X0),1);
ub=X0(end)*ones(length(X0),1);
[X]=fmincon(fhandle,X0,[],[],[],[],lb,ub);
首先,元素不能小于X0(1)或大于X0(end)。
到目前为止,我认为一切都很好,但是我的输出向量还有两个限制条件,我无法在此处找到搜索问题的解决方案。第一个是
X(1)=X0(1)
and
X(end)=X0(end)
所以第一个和最后一个元素必须设置为常量。
我的最终约束与从元素 i 到 i+1 的值变化有关,它必须限制为某个值 A 并且元素 i 必须始终小于或等于元素 i+1
X(i)<=X(i+1)
X(i+1)-X(i)<=E
具有以下输入 X0 和 A 的示例输出 X 将是
X0=1:1:10;
E=3;
X=[1 1.1 1.2 1.4 1.7 2.0 2.7 4.7 7 10]
如果有人知道可以使用 parts/functions 的 fmincon 或 Matlab 中的其他最小化函数,非常感谢!
PS:当我再次阅读完整的 post 时,我意识到我正在寻找的 2 个约束将暗示第一个
您的问题由两部分组成:
对设计变量应用等式约束:
将下限和上限设置为相同的值:
ub(1) = lb(1)
lb(end) = ub(end);
应用不等式约束(X(i+1)-X(i)<=E
):
用以下矩阵形式重新表述您的方程式:
A*X <= B
和
A = zeros(9, 10);
A(:, 1:9) = -eye(9)
A(:, 2:10) = A(:, 2:10) + eye(9)
B = ones(9, 1)*E;
然后你可以调用fmincon
如下:
[X]=fmincon(fhandle,X0,A,B,[],[],lb,ub);
感谢阅读本文,我有一个 matlab 函数 'myfun',它 returns 是给定输入向量 X 的标量。现在我正尝试使用 fmincon 最小化此函数,但我在约束方面遇到了麻烦我的输出向量元素。
X0=1:1:10;
fhandle = @myfun;
lb=X0(1)*ones(length(X0),1);
ub=X0(end)*ones(length(X0),1);
[X]=fmincon(fhandle,X0,[],[],[],[],lb,ub);
首先,元素不能小于X0(1)或大于X0(end)。 到目前为止,我认为一切都很好,但是我的输出向量还有两个限制条件,我无法在此处找到搜索问题的解决方案。第一个是
X(1)=X0(1)
and
X(end)=X0(end)
所以第一个和最后一个元素必须设置为常量。
我的最终约束与从元素 i 到 i+1 的值变化有关,它必须限制为某个值 A 并且元素 i 必须始终小于或等于元素 i+1
X(i)<=X(i+1)
X(i+1)-X(i)<=E
具有以下输入 X0 和 A 的示例输出 X 将是
X0=1:1:10;
E=3;
X=[1 1.1 1.2 1.4 1.7 2.0 2.7 4.7 7 10]
如果有人知道可以使用 parts/functions 的 fmincon 或 Matlab 中的其他最小化函数,非常感谢!
PS:当我再次阅读完整的 post 时,我意识到我正在寻找的 2 个约束将暗示第一个
您的问题由两部分组成:
对设计变量应用等式约束:
将下限和上限设置为相同的值:
ub(1) = lb(1) lb(end) = ub(end);
应用不等式约束(
X(i+1)-X(i)<=E
):用以下矩阵形式重新表述您的方程式:
A*X <= B
和
A = zeros(9, 10); A(:, 1:9) = -eye(9) A(:, 2:10) = A(:, 2:10) + eye(9) B = ones(9, 1)*E;
然后你可以调用fmincon
如下:
[X]=fmincon(fhandle,X0,A,B,[],[],lb,ub);