非线性矩阵输入到MATLAB的fmincon:如何

时间:2014-05-22 15:09:52

标签: matlab matrix mathematical-optimization

我有一个定义以下函数的myfun.m文件:

f = 0.5 * (norm(C*x - d))^2;

并在主脚本中通过以下方式调用:

[x, fval] = fmincon(@myfun, x0, -A, b, Aeq, beq, lb, ub);

C是170x72矩阵,d是170x1向量,因此x是72x1向量。这部分效果很好。

现在我想将C的每个元素乘以一个常数提升到幂,然后求解该幂。因此,代替C(1,1)= 4,现在它应该是=(2 ^ p)* 4。但是,我希望在优化中也能解决p,所以p = x(73)。我意识到增加x矩阵意味着我必须将x0,A,b,Aeq,beq,lb,ub更新为所有包括73个元素,我已经完成了。当我定义C矩阵的元素如C(1,1)=(2 ^ x(73))* 4时出现问题,我得到: "指数超过矩阵维度" 每次运行代码时都会出错。

新的x(73)元素没有与之关联的约束或边界(下限和上限是-inf和inf)。有关为什么这不起作用或如何解决它的任何想法?在C中使用x的元素在某种程度上是无效的,然后像我在成本函数中那样乘以x?

注意:我意识到这个成本函数看起来就像最小二乘法。我之前使用过fmincon,因为我有多个目标,并且在我解决这个问题后会继续使用它,因为我需要添加非线性约束。

更新:我在错误中采取了一些小步骤:首先,我增加了x0,A,Aeq,lb,ub和C矩阵/向量以包含第73列,但实际上并没有在C中的任何地方使用x(73),并且上面的矩阵/向量中相应的元素乘以x(73)为0.这实际上现在工作正常,但是当我打印x向量时,它只有72个元素长!不知道为什么当所有其他输入现在都是73时。我的想法是,一旦我弄明白,我可以尝试再次在C矩阵中使用x(73)。

0 个答案:

没有答案