为什么在MATLAB中无法替代符号矩阵?

时间:2017-03-16 01:05:14

标签: matlab

我创建了一个矩阵(或矢量),其成员是符号表达式(其名称为A)。当我尝试替换x0 = [500 550 500 500 450 500 555 450]'而不是x = [x3 x4 x5 x6 y3 y4 y5 y6]'时,没有任何反应。 x0的等级为doublex的等级为sym。 这是我的代码:

      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

我该怎么办?

2 个答案:

答案 0 :(得分:0)

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

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]

答案 1 :(得分:0)

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

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