【问题标题】:symbolic matrix with fixed elements具有固定元素的符号矩阵
【发布时间】:2016-05-07 09:27:30
【问题描述】:

我正在尝试创建一个符号矩阵,但我想将其中的一些元素修复为 0,以减少问题的大小。我也想发送所有的价值观是积极的。我试过这个:

X   = sym ('x',[n,n]);
X = sym(X,'positive');
X=times(X,Xf);

其中 Xf 是一个 nxn 矩阵,其中我希望具有固定值的零和希望在矩阵中具有变量的零。

当我使用 fminunc 解决问题时,我得到了一些负值,并且我想要修复的值也有非零值。

在我的例子中,n 是 30,用 fmincon 解决它是不可能的

【问题讨论】:

  • 您能否就您要解决的问题提供一些见解?我不太明白您为什么要将 fminunc 与符号矩阵一起使用。
  • 我试图优化一个变量矩阵,使其元素与一些基本矩阵元素之间的差异以及其列和行之和与两个基本向量之间的差异最小化。@LucaCiti

标签: matlab optimization


【解决方案1】:

阅读您对我的问题的回答后,我认为您不需要使用符号变量。假设您想最小化 squared 差异,您可以尝试以下操作:

    n = 30;
    sumc = (10:n+9)'; % example target sum along columns
    sumr = 15:n+14; % example target sum along rows
    Xtarget = magic(n);  % example target matrix
    Xf = fliplr(eye(n)); % example masking matrix
    X = zeros(n); % example matrix with constant values for masked inputs

    if 0 % easy test case
        X = Xtarget;
        sumc = sum(X, 2);
        sumr = sum(X, 1);
    end

    ix = find(Xf);
    cost = @(A) norm(A(:) - Xtarget(:)) + ...
                norm(sum(A,1) - sumr) + ...
                norm(sum(A,2) - sumc);

    x = fminunc(@(x) cost(subsasgn(X, substruct('()', {ix}), exp(x))), rand(length(ix), 1)); %#ok<SUBSASGN>
    X(ix) = exp(x);

【讨论】:

  • 请您解释一下您是如何在矩阵中包含 X>0 的约束和强制为零的元素的?
  • 我没有强制元素为零,而是任意常数(例如一)。我编辑了这个例子,所以它现在为零。关于积极性,可以尝试使用 exp 函数。请参阅编辑后的答案。
猜你喜欢
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多