Symbolic acos( cos(theta) ) does not return theta.
6 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Stephen Pope
am 31 Mär. 2023
Beantwortet: Paul
am 31 Mär. 2023
While cos(acos(x)) correctly returns x, acos(cos(theta)) does not return theta.
syms theta real
assume( theta >-1 & theta < 1)
a = simplify( acos(cos(theta)) )
1 Kommentar
Akzeptierte Antwort
Walter Roberson
am 31 Mär. 2023
syms theta real
assume( theta >-1 & theta < 1)
a = simplify( acos(cos(theta)) )
fplot(a, [-1 1])
If the identity holds then you would expect a straight line, not two lines.
But cos(-theta) = cos(theta) so cos(-1) = cos(1) and so acos(cos(-1)) = acos(cos(1)) rather than being able to distinguish -1 and 1
0 Kommentare
Weitere Antworten (2)
John D'Errico
am 31 Mär. 2023
Bearbeitet: John D'Errico
am 31 Mär. 2023
Is it true, that acos(cos(theta)) ALWAYS returns theta? TRY AN EXAMPLE.
acos(cos(10))
So it is not true. It works the other way of course. at least it is mathematically true.
But the range of acos is [0,pi) for real arguments, so it cannot return a number outside that interval.
fplot(@acos,[-1,1])
And so then acos(cos(theta)) is possibly best written as
abs(pi - mod(theta - pi,2*pi))
At least, that is the best I can find for an approximation.
fplot(@(theta) acos(cos(theta)),[-20,20],'r--')
hold on
fplot(@(theta) abs(pi - mod(theta - pi,2*pi)),[-20,20],'b:')
You can see the curves overlay on top of each other.
We can try syms, but simplify won't find that solution, even if I push it pretty hard, harder than what I did below:
syms T
simplify(acos(cos(T)),'steps',10,'all',true)
Anyway, the point is, MATLAB will not return the result you expect there, because it is not true.
0 Kommentare
Siehe auch
Kategorien
Find more on Special Values in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!