Присвоение значения символу в определенном индексе в символьном массиве - PullRequest
0 голосов
/ 06 декабря 2018

Я создаю матрицу символических переменных (A), а затем создаю выражение, используя переменные в этой матрице (X).Я намереваюсь установить значение символа в определенном индексе в A (например, в моем коде я делаю A(1,1) = 11), и затем я хочу, чтобы это было отражено в выражении.Однако, когда я делаю subs(X), я обнаруживаю, что символ не заменяется.Есть ли способ, которым я могу достичь этого?

Ниже я пытаюсь сделать следующее:

>> A = sym('X', [2 2])

A =

[ X1_1, X1_2]
[ X2_1, X2_2]

>> X = A(1,1)*10 + A(2,2)*11

X =

10*X1_1 + 11*X2_2

>> A(1,1)=11

A =

[   11, X1_2]
[ X2_1, X2_2]

>> subs(X)

ans =

10*X1_1 + 11*X2_2

Я, конечно, могу сделать X1_1 = 2.Моя проблема в том, что это не поддается зацикливанию.Я хотел бы установить значения в цикле.Очевидно, что A(*,*)=* поддается зацикливанию.Есть ли способ установить значение X1_1 косвенно?

Редактировать: Для этого я могу переопределить X после установки значения A(*,*).Однако это не вариант для меня.Определение X является очень дорогостоящей операцией.Делать это несколько раз не может быть и речи о моих потребностях.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вместо обновления индекса в A значением можно использовать символическую переменную в индексе A для замены этого значения в X:

>> A = sym('X', [2 2]);
>> X = A(1,1)*10 + A(2,2)*11;
>> X = subs(X, A(1,1), 11)

X =

11*X2_2 + 110

И если выЕсли вы хотите сделать это для всех символических переменных в A, вам даже не нужно использовать цикл.Будет работать только один звонок на subs:

>> Avalues = [11 0; 1 10];  % The values corresponding to symbolic variables in A
>> X = subs(X, A, Avalues)

X =

220
0 голосов
/ 06 декабря 2018

Всякий раз, когда вы устанавливаете значение в определенном индексе в A, просто сделайте X = A(1,1)*10 + A(2,2)*11 еще раз, что поддается циклу.

Например:

A = sym('X', [2 2]);
X = A(1,1)*10 + A(2,2)*11;
A(1,1) = 11;
X = A(1,1)*10 + A(2,2)*11

Это будетобновление X:

X =

11*X2_2 + 110

Пример цикла:

A = sym('X', [2 2]);
X = A(1,1)*10 + A(2,2)*11;

for i = 1:2
    for j = 1:2
        A(i,j) = 11;
        X = A(1,1)*10 + A(2,2)*11
    end
end

Выход:

X =

11*X2_2 + 110


X =

11*X2_2 + 110


X =

11*X2_2 + 110


X =

231
...