Matlab:将符号表达式转换为数字时遇到问题

时间:2015-02-23 12:45:51

标签: matlab symbolic-math

我注意到在符号矩阵中替换了数字'float'之后,转换是一个具有非常大值的小数形式,我想避免这种情况:

A=(uvw(1,:)-bMat(1,:)).^2+(uvw(2,:)-bMat(2,:)).^2+(uvw(3,:)-bMat(3,:)).^2-legStroke.^2;
A=subs(A,[x,y,z,phi,theta,psi],...
         [1.37,0.0,0.0,degtorad(0.0),degtorad(-1.32),degtorad(0.0)]);
A=simplify(A)

我得到以下结果:

A=[((9004809005642893*p1x)/9007199254740992 - b1x + 137/100)^2-l1^2 +(44086462975326147772185208371001*p1x^2)/83076749736557242056487941267521536 + ...

我尝试使用sym(A,'d')或类似的,遵循网络上的一些提示,但我收到此错误消息:

  

sym中的错误> tomupad(第2232行)
  假设(S,x.s,一个);

1 个答案:

答案 0 :(得分:0)

如果sym(A,'d')已经是符号表达式(即,根据未知符号变量,类Asym),则无法应用symfunsym(A,'d')的目的是将数值和数组转换为符号形式。

您有两种选择。

1。使用sym(A,'d')之类的内容将数值转换为不精确的符号十进制格式,然后将它们合并到符号表达式中。在某些情况下,这会导致准确性下降。

2。使用variable precision arithmetic将您的确切符号表达式转换为最终的浮点格式,即vpa(A)。此方法应该更准确,因为您的符号计算将完全完成(但是,您仍然需要小心如何将初始转换为符号)。