2015-02-23 85 views
1

我注意到,数字'float'值的符号矩阵的置换后,转换是在分数形式具有非常大的值,即我想避免:Matlab的:麻烦转换符号表达为数字

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')或类似的,以下从网上的一些技巧,但我得到这个错误信息:

错误符号> tomupad(线2232)
       假设(S,x.s,一个);

+0

您的代码无法运行。请修改您的问题以定义所有值,数字或符号以及您指定的任何假设,以便我们可以复制您的问题。它不需要是你正在使用的准确的代码,只是简短的展示了相同的问题。另外,你用的是什么'版本'的Matlab?此外,FYI,'degtorad'是矢量化的,因此您可以简单地执行'degtorad([0.0 -1.32 0.0]]'。 – horchler 2015-02-23 19:57:21

回答

0

不能sym(A,'d')如果A已经是一个象征性的表达应用(即,在未知的符号变量,类symsymfun而言)。 sym(A,'d')的目的是将数值和数组转换为符号形式。

您有两种选择。

使用类似sym(A,'d')转换您的数字值不准确的符号小数形式他们被纳入到你的符号表达式之前。这在某些情况下会导致精度的下降。

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