为符号数组中特定索引中的符号赋值
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
我正在创建一个符号变量矩阵 (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