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

时间:2018-12-06 02:55:34

标签: matlab symbolic-math

我正在创建一个符号变量矩阵(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 :(得分: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