【问题标题】:Matlab substitution within matrices not working as intended矩阵中的 Matlab 替换未按预期工作
【发布时间】:2020-06-02 05:46:53
【问题描述】:

下面的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 时,它似乎没有改变。

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

【问题讨论】:

    标签: matlab substitution


    【解决方案1】:

    代码中没有错误。在所有出现的old 都被new 替换后,subs = subs(s, old, new) 函数根据定义返回s 的副本,然后计算s

    您的代码所做的是:定义A,调用subs,然后显示A。由于subs 不会影响A 的条目,因此您会看到“旧”A 显示。

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

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

    【讨论】:

      【解决方案2】:

      据我了解,您尝试用求解方程的结果替换 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]
      

      【讨论】:

      • 谢谢,但我必须使用潜艇。 A 的元素可能是 C 变量中的复杂函数,我希望在求解方程后能够替换它们。我将编辑问题以适应我的要求。
      猜你喜欢
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 2012-10-31
      • 2011-04-05
      • 2013-03-26
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      相关资源
      最近更新 更多