ArcCosine function
18 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Zelda Luxenburry
il 6 Feb 2012
Commentato: John D'Errico
il 13 Gen 2021
this is the code i have so far. i need to write a function m-file that can solve the arc cosine function for [0, 2pi]. it is giving me an error when i try acosfull(0,0), it does not give me the error....what am i missing?
function [theta] = acosfull(x,y)
%acossfull: find output angle of arccos over 0<theta<2*pi
% find value of acos(z) in the correct quadrant over the full range [0
% 2pi]
if y==x==0
theta=0
disp('Error.')
else r=sqrt(x^2 + y^2);
z=x/r;
acos(z)
end
2 Commenti
Walter Roberson
il 29 Ott 2020
Not at all. MATLAB does not have any implicit multiplication, not anywhere, so there is no danger that acos(z) might be interpreted as a*cos(z)
Risposta accettata
Walter Roberson
il 6 Feb 2012
y==x==0
is parsed as
((y==x)==0)
So it compares x to y to give 0 (false) or 1 (true), and then it compares that 0 or 1 to 0. Effectively what you coded is
if y ~= x
Try
if y == x && y == 0
Più risposte (2)
Wolfgang Garn
il 8 Ago 2013
Modificato: Wolfgang Garn
il 8 Ago 2013
In short theta = acos(x./sqrt(x.*x+y.*y)) + (y<0)*pi or below with a couple of tests.
function theta = acosfull(x,y)
%acossfull: find output angle of arccos over 0<theta<2*pi
% find value of acos(z) in the correct quadrant over the full range [0 2pi];
% acosfull requires as input x and y coordinates (length of x and y side of a rectangular triangle).
if nargin<1 % then give examples
disp('A series of examples:');
disp('45° = acosfull(2,2) radians: '); acosfull(2,2)
disp('90° = acosfull(0,3) radians: '); acosfull(0,3)
disp('135° = acosfull(-2,2) radians: '); acosfull(-2,2)
disp('180° = acosfull(-2,0) radians: '); acosfull(-2,0)
disp('225° = acosfull(-3,-3) radians: '); acosfull(-3,-3)
disp('270° = acosfull(0,-4) radians: '); acosfull(0,-4)
disp('315° = acosfull(2,-2) radians: '); acosfull(2,-2)
disp('360° = acosfull(2,-0.001) radians: '); acosfull(2,-0.001)
disp('NaN = acosfull(0,0): '); acosfull(0,0)
acosfull([2 -2 -2 -2 0], [2 2 -2 -2 0])
end
if nargin<2 % then display warning (and attempt original acos)
warning('acosfull requires as input x and y coordinates (or length of x and y side of a rectangular triangle).');
if nargin>0, theta = acos(x); end
else
theta = acos(x./sqrt(x.*x+y.*y)) + (y<0)*pi;
end
3 Commenti
Steven Lord
il 13 Gen 2021
Can you show us the code you ran and describe specifically what about the answers didn't work?
- Do you receive warning and/or error messages? If so the full and exact text of those messages (all the text displayed in orange and/or red in the Command Window) may be useful in determining what's going on and how to avoid the warning and/or error.
- Does it do something different than what you expected? If so, what did it do and what did you expect it to do?
- Did MATLAB crash? If so please send the crash log file (with a description of what you were running or doing in MATLAB when the crash occured) to Technical Support using the telephone icon in the upper-right corner of this page so we can investigate.
Danay Rosh
il 7 Apr 2019
arccos(pi/2)
4 Commenti
John D'Errico
il 13 Gen 2021
I might also add that the number acos(pi/2) will not even be a real number, but imaginary.
acos(pi/2)
ans =
0 + 1.0232i
The set of inputs for which acos will produce REAL results is limited to the interval [-1,1].
Vedere anche
Categorie
Scopri di più su Startup and Shutdown in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!