How to fix the large and mad fractions when dealing with symbolic vars
129 ビュー (過去 30 日間)
古いコメントを表示
Mohd Aaquib Khan
2022 年 9 月 18 日
コメント済み: Mohd Aaquib Khan
2022 年 9 月 19 日
Hi guys,
I face this often, as you can see below that cos(phi) and cos(psi) are decent entities, but when they are used with a symbolic variable (kn here), it shows huge fractions. Is there an easy way to make the coefficients of k1 k2 and k3 in the short format or some decent fractions.

Even something as trivial as k1*cos(pi/2) is not evaluated to be 0 as shown below. I fear that this leads to truncation errors.
Thanks in advance.
cos(pi/2)
syms a
a*cos(pi/2)
4 件のコメント
Torsten
2022 年 9 月 18 日
I could only see your screenshots after I opened your contribution using "Edit".
採用された回答
Walter Roberson
2022 年 9 月 19 日
The answer you are looking for is
digits(4)
sympref('FloatingPointOutput',true);
However, I do not recommend this.
その他の回答 (2 件)
Paul
2022 年 9 月 18 日
In this expression
syms a
a * cos(pi/2)
the cos() is evaluated numerically and the result converted to a sym to multiply with a. The numerical cos(pi/2) is not zero.
Force the cos to be evaluated symbolically
a * cos(pi/sym(2))
or
a * cos(sym(pi)/2)
3 件のコメント
Torsten
2022 年 9 月 19 日
For phi = 30 and phi = 90, cos(phi) is correctly simplified.
What would you expect for cos(50) and cos(25) ? I don't see a simple representation.
Walter Roberson
2022 年 9 月 19 日
You should never eval() a symbolic expression. eval() of a symbolic expression is not documented by Mathworks. In practice it is treated as eval(char()) of the expression. However, char() of a symbolic expression is written in a mix of MATLAB, English, and the internal MuPAD programming language, and is not generally something that can be computed.
参考
カテゴリ
Help Center および File Exchange で Number Theory についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!