矩阵内的 Matlab 替换未按预期工作

Matlab substitution within matrices not working as intended

下面的matlab代码哪里出错了?

C=sym('a',[2,1]);
A=sym('aa',2);

A(1,1)=C(1)-10*C(2)*C(2);
A(2,2)=C(2);

subs(A(1,1),C(1),solve(trace(A)==1,C(1)));

disp(A);

据我了解,A的对角线元素设置为a1和a2的函数。然后,在位置 A(1,1) 的表达式中,将 C(1)(即 a1)替换为变量 C(1) 的 trace(A)==1 的解。但是当你显示矩阵 A 时,它似乎没有变化。

错误是什么?为什么潜艇没有按预期工作?以上是大型代码的最小非工作示例。

据我了解,您尝试用求解方程式的结果替换 A(1,1) 处的元素。在这种情况下,您应该这样做:

C = sym('a',[2,1]);
A = sym('aa',2);
A(1,1) = C(1);
A(2,2) = C(2);
A(1,1) = subs(C(1),solve(trace(A) == 1, C(1)));
disp(A);

这将显示以下内容:

[ 1 - a2, aa1_2]
[  aa2_1,    a2]

代码没有错误。根据定义,subs = subs(s, old, new) 函数 returns 是 s 的一个副本,在所有出现的 old 都替换为 new 之后,然后计算 s

您的代码所做的是:定义 A,调用 subs,然后显示 A。由于 subs 不会影响 A 的条目,根据上述解释,您会显示 "old" A

因此,如果您想用 subs 为您创建的表达式替换值 A(1, 1),您应该例如使用

A(1, 1) = subs(C(1) , solve(trace(A) == 1, C(1)));