Matlab 为符号数组中特定索引中的符号赋值
我正在创建一个符号变量矩阵(Matlab 为符号数组中特定索引中的符号赋值,matlab,symbolic-math,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
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;
>> X = subs(X, A(1,1), 11)
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
中的索引:
X =
11*X2_2 + 110
>> 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
中的所有符号变量执行此操作,甚至不必使用循环。只要打一个电话就行了:
>> Avalues = [11 0; 1 10]; % The values corresponding to symbolic variables in A
>> X = subs(X, A, Avalues)
X =
220
谢谢,但这不是我的选择。再次定义X非常昂贵。我需要将许多不同的值设置为A(*,*)
,而X是一个非常昂贵的操作。X实际上是在计算一个大矩阵的特征值,所以我不应该执行太多次。