具有固定元素的符号矩阵

时间:2016-05-07 09:27:30

标签: matlab optimization

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

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

其中Xf是一个带零的nxn矩阵,其中我想要固定值,而我希望在矩阵中有变量。

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

n在我的情况下是30并且用fmincon解决它是不可能的

1 个答案:

答案 0 :(得分:0)

在阅读了我的问题的答案后,我认为你不需要使用符号变量。假设您想最小化平方差异,您可以尝试以下方法:

    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);