为什么在 MATLAB 中不能替换符号矩阵?

  • 本文关键字:符号 替换 不能 MATLAB matlab
  • 更新时间 :
  • 英文 :


我创建了一个矩阵(或向量(,它的成员是符号表达式(它的名字是A(。 当我尝试替换x0 = [500 550 500 500 450 500 555 450]'而不是x = [x3 x4 x5 x6 y3 y4 y5 y6]'什么也没发生时.class x0 doublexsym。这是我的代码:

      A =                                               conj(((x3 - 500)^2 + (y3 - 300)^2)^(1/2))
                                                        conj(((x4 - 500)^2 + (y4 - 300)^2)^(1/2))
                                                        conj(((x5 - 500)^2 + (y5 - 300)^2)^(1/2))
 conj(((y3 - 8623888390675025/17592186044416)^2 + (x3 - 1591228181075565/4398046511104)^2)^(1/2))
 conj(((y4 - 8623888390675025/17592186044416)^2 + (x4 - 1591228181075565/4398046511104)^2)^(1/2))
 conj(((y5 - 8623888390675025/17592186044416)^2 + (x5 - 1591228181075565/4398046511104)^2)^(1/2))
                                                        conj(((x3 - x4)^2 + (y3 - y4)^2)^(1/2))
                                                        conj(((x3 - x5)^2 + (y3 - y5)^2)^(1/2))
                                                        conj(((x4 - x5)^2 + (y4 - y5)^2)^(1/2))
                                                        conj(((x6 - 500)^2 + (y6 - 300)^2)^(1/2))
 conj(((y6 - 8623888390675025/17592186044416)^2 + (x6 - 1591228181075565/4398046511104)^2)^(1/2))
                                                        conj(((x3 - x6)^2 + (y3 - y6)^2)^(1/2))
                                                        conj(((x4 - x6)^2 + (y4 - y6)^2)^(1/2))
                                                        conj(((x5 - x6)^2 + (y5 - y6)^2)^(1/2))

    for j = 1:length(x)
        A = subs(A,x(j),x0(j))
    end

我该怎么办?

你不能以这种方式为符号矩阵赋值,

syms a b c 
x=[a b c]
x=
  [a, b, c]

当您为 x 设置值时,只有 x 本身会更改:

x=[1,2,3]
x=
  [1,2,3]

测试:

eval(a)
ans=
   a

所以当你改变X值时,只是X本身的值会改变(不是B和C(

必须分别为 B 和 C 赋值

a=1; b=2; c=3;
eval(x)
ans=
  [1, 2, 3]

感谢您的所有答案,我找到了答案。 我正在使用下面的循环,它运行良好。 注意:为了避免在所有代码中'conj',我使用了.'而不是'来转置矩阵。这个链接非常有用:simbolic-toolbox-how-to-avoid-conj-in-matrix

    for i = 1:numel(A)
            A(i) = subs(A(i),x,x0);
    end

最新更新