Displaying (small number)*(syms variable) as 0

6 Ansichten (letzte 30 Tage)
Mike
Mike am 15 Feb. 2021
Beantwortet: Steven Lord am 16 Feb. 2021
This is an arbitrary example representing my problem
syms x;
a=0;
b=pi/2;
c=x;
R=[cos(a)*cos(b)*cos(c) sin(a)*sin(b)*sin(c)];
vpa(R)
This outputs:
ans =
[ 6.1e-17*cos(x), 0]
Because pi isn't exact in Matlab, then cos(pi/2) isn't exactly zero as sin(0) is, which leads to the first element in ans to be written as such, and the second element to be written exactly 0;
I've tried "digits" before vpa, "format long", changed format in preferences, but none works.
How can I edit my code such that the first element is displayed as exactly 0?

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 15 Feb. 2021
syms x;
a=0;
b=sym(pi)/2;
c=x;
R=[cos(a)*cos(b)*cos(c) sin(a)*sin(b)*sin(c)];
vpa(R)
ans = 

Weitere Antworten (1)

Steven Lord
Steven Lord am 16 Feb. 2021
Another solution, if you know one of the quantities involved is a multiple of π:
syms x;
a=0;
b=1/2;
c=x;
R=[cos(a)*cospi(b)*cos(c) sin(a)*sinpi(b)*sin(c)];
vpa(R)
ans = 
cospi computes the cosine of pi times its input without actually computing pi times its input.

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by