2016-05-07 4 views
2

Я пытаюсь создать символическую матрицу, но я хочу исправить некоторые ее элементы до 0, чтобы уменьшить размер проблемы. Я также хочу, чтобы все значения были положительными. Я попытался это:символическая матрица с фиксированными элементами

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

где Xf является пхп матрица с нулями, где я хочу иметь фиксированные значения и те, где я хочу, чтобы иметь переменные в матрице.

Когда я решаю проблему, используя fminunc, я получаю отрицательные значения, а также значения, отличные от нуля, для значений, которые я хотел исправить.

п в моем случае 30 и ее решение с fmincon не удалось

+0

Не могли бы вы дать некоторое представление о своего рода проблемы, которую вы пытаетесь решить? Я не совсем понимаю, почему вы хотите использовать fminunc с символической матрицей. –

+0

Я пытаюсь оптимизировать матрицу переменных, так что различия между ее элементами и некоторыми базовыми матричными элементами, а также разница между суммой столбцов и строк и двумя базовыми векторами минимизируются. @ LucaCiti – user2042145

ответ

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

Не могли бы вы объяснить, как вы включаете ограничения X> 0 и элементы, которые вынуждены быть нулевыми в матрице? – user2042145

+0

Я не заставлял элементы быть нулевыми, а быть произвольной константой (например, одной). Я отредактировал пример, так что теперь он равен нулю. Что касается положительности, можно попробовать использовать функцию exp. См. Отредактированный ответ. –

Смежные вопросы