【问题标题】:How to use "fmincon" to solve matrix minimization如何使用“fmincon”解决矩阵最小化
【发布时间】:2017-04-29 13:02:16
【问题描述】:

问题:如何使用“fmincon”解决以下最小化矩阵问题?

我正在尝试找到这样的 f

a * ( b – ( inv(a) * inv(inv(a) + transpose(c)*inv(f)*c) * (inv(a)*d + transpose(c) * inv(f) ) * e) ) )^2

最小化受:

f > 0

++++变量:

  • a 是已知的 (8x8) 矩阵。
  • b 是已知的 (8x1) 列向量。
  • c 是已知的 (1x8) 列向量。
  • d 是已知的 (8x1) 标量。
  • e 是已知的 (1x1) 标量。 和
  • f 是一个标量并且是未知的。

【问题讨论】:

  • 您的实际问题是什么?你应该取绝对值还是不取(代码和问题陈述不同)?
  • 我不同意你的观点,即由于 2 的幂,你的问题应该有两种解决方案。y = x^2 - 1 只有一个最小值(x = 0)。我认为您将它与此函数的零点混淆了(x=1x=-1)。
  • 你看过fmincon examples`吗?
  • @m7913d,问题陈述是正确的。我的问题是如何在 MatLab 中编码这个问题,你是对的。我删除了绝对值。
  • @m7913d 是的,我明白你的意思。你是绝对正确的。我的问题不应该返回两个解决方案。我在上面更正了它,但我认为它应该返回“V”的(8x1)行向量。我对吗?如果是这样,我该如何相应地更正代码?

标签: matlab matrix optimization minimization


【解决方案1】:

感谢@m7913d,我通过 Isqnonlin 解决了代码:

clc;
clear all;

% random inputs A, B, C, D and E
a = rand(8,8)'*rand(8,8);
b = 2*rand(8,1) - 1;
c = 2*rand(1,8) - 1;
d = 2*rand(8,1) - 1;
e = 2*rand(1,1) - 1;

 % minimization term
 fun = @(f) a * ( b - ( inv(a) * inv(inv(a)+c'*inv(f)*c) * (inv(a)*d+c' * inv(f) * e)  ) );

f = lsqnonlin(fun,0.1,0,+inf)

【讨论】:

    猜你喜欢
    • 2016-08-31
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2021-07-26
    相关资源
    最近更新 更多