更新符号数组时,无法再更新使用第一个数组元素的另一个变量
When symbolic array gets updated, another variable that uses an element of the first array cannot be updated anymore
为了简化我的实际问题,让我们定义以下符号表达式。
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)
示例 1 输出:
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
ans =
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
ans =
a1
ans =
a1
我的实际问题如下。我有 N
个未知数
a=sym('a',[1,N]);
和N
方程。
EQN=sym('EQN',[1,N]);
N
是根据用户输入定义的,我事先不知道它会是什么。我还有其他依赖于 a
.
的变量
% 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
中的未知数,但由于我在开始时试图解释的原因,我做不到。
问题是您正在覆盖 a
,而不是为 a1
、a2
和 a3
分配新值。因此,您应该更改基础变量而不是 a
本身。
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;
为了简化我的实际问题,让我们定义以下符号表达式。
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)
示例 1 输出:
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
ans =
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
ans =
a1
ans =
a1
我的实际问题如下。我有 N
个未知数
a=sym('a',[1,N]);
和N
方程。
EQN=sym('EQN',[1,N]);
N
是根据用户输入定义的,我事先不知道它会是什么。我还有其他依赖于 a
.
% 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
中的未知数,但由于我在开始时试图解释的原因,我做不到。
问题是您正在覆盖 a
,而不是为 a1
、a2
和 a3
分配新值。因此,您应该更改基础变量而不是 a
本身。
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;