2015-02-23 97 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)。這種方法應該更準確,因爲符號計算將完全準確完成(但是,您仍然需要小心如何將您的初始轉換爲符號)。