我正在创建一个符号变量矩阵(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
是非常昂贵的操作。出于我的需要,多次这样做是不可能的。
答案 0 :(得分:1)
每当您在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
答案 1 :(得分:1)
您可以使用索引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