代码之家  ›  专栏  ›  技术社区  ›  Utku Türer

当符号数组更新时,无法再更新使用第一个数组元素的另一个变量

  •  1
  • Utku Türer  · 技术社区  · 7 年前

    为了简化我的实际问题,让我们定义以下符号表达式。

    a=sym('a',[1,3]);
    b=a(1);
    

    如果我把一个新东西分配给 a b 更新。正确的做法是什么?

    示例1:

    a=sym('a',[1,3]);
    b=a(1);
    a=sym([1,2,3]);
    b
    subs(b)
    subs(b,a(1),100)
    

    b =
    
    a1
    
    
    ans =
    
    a1
    
    
    ans =
    
    a1
    

    示例2:

    a=sym('a',[1,3]);
    b=a(1);
    a=subs(a,a(1),3);
    b
    subs(b)
    subs(b,a(1),100)
    

    示例2输出:

    b=
    
    a1
    
    
    ans公司=
    
    a1
    
    
    
    a1
    

    例3:

    a=sym('a',[1,3]);
    b=a(1);
    a(1)=sym(3);
    b
    subs(b)
    subs(b,a(1),100)
    

    示例3输出:

    b=
    
    a1
    
    
    
    a1
    
    
    ans公司=
    
    

    我的实际问题如下。我有 N 未知数

    a=sym('a',[1,N]);
    

    方程。

    EQN=sym('EQN',[1,N]);
    

    N .

    % some code here such as b = [2*a(1),3*a(2),..] etc.
    

    % some code here to derive EQN(1), EQN(2), ... EQN(N).
    SOL=solve(EQN,a);
    

    并将解替换为

    SOL = struct2cell(SOL);
    SOL = [SOL{:}];
    a=subs('a',a,SOL);
    

    现在我想去掉 b

    1 回复  |  直到 7 年前
        1
  •  0
  •   m7913d    7 年前

    问题是您正在覆盖 a 而不是给 a1 a2 a3 . 因此,您应该更改基础变量,而不是

    a=sym('a',[1,3]);
    b = a(1)
    a1 = 1; 
    subs(b) % returns 1
    subs(b, 'a1', a1) % returns 1
    subs(a) % [ 1, a2, a3]
    

    如果要使用它替换 solve 操作时,最好的解决方案是使用 subs with the output structure of solve as input :

    sol = solve(a == [1 2 3], a);
    subs(b, sol) % returns 1
    

    sol.(char(a(1))) = 1 % sol.a1 = 1;