为符号数组中特定索引中的符号赋值

Assigning value to symbol in particular index in symbolic array

我正在创建一个符号变量矩阵 (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的值?

编辑:为此,我可以在设置 A(*,*) 的值后重新定义 X。但是,这对我来说不是一个选择。定义 X 是一个非常昂贵的操作。多次执行是不可能满足我的需求的。

每当您在 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

您可以使用 A 索引中的符号变量替换 X 中的值,而不是用值更新 A 中的索引:

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