Having problems with function theta = acosfull(x,y) command
1 次查看(过去 30 天)
显示 更早的评论
Consider the inverse (arc) cosine function cos−1(z), where z = x / r, r = (x2 + y2 )1/2 in the x-y Cartesian coordinate plane and −1≤ z ≤ +1 . The MATLAB inverse sine function acos(z) returns values only in the range 0 ≤ cos−1(z) <π (i.e., only in the first and second quadrants); however, we want to have the value in the correct quadrant over the full range 0 ≤ cos−1(z) < 2π . Write a MATLAB function m-file to solve this problem. Your function must be defined as follows:
function theta = acosfull(x,y)
in which the x and y coordinates are the input arguments and theta is the output angle in radians in the correct quadrant over the range 0 < theta < 2*pi. You may assume that the values of the input arguments passed to your function are double precision real numbers. Your program should include trapping for invalid computation cases (e.g., x=y=0), in which event it should assign a value of 0 to theta and display an appropriate error message on the screen.
(NOTE: You may use the MATLAB built-in acos function in your code.)
This is the code I have so far:
function [theta] = acosfull(x,y)
if r==sqrt(x^2 + y^2);
z=x/r;
acos(z);
else y == x && y == 0
theta=0
disp('Error.')
end
I keep receiving the error message:
Undefined function 'acosfull' for input
arguments of type 'double'.
0 个评论
回答(3 个)
Roger Stafford
2013-9-12
编辑:Roger Stafford
2013-9-12
In your code as it stands the variable 'r' is never defined, but matlab is asked to make computations with it. No wonder it gets upset.
Consider what it is about your inputs x and y that distinguishes between the first or second quadrants on the one hand and the fourth and third quadrants on the other hand. What aspect of the variable 'y' allows you to make this distinction - hint, hint!
As a side remark, matlab has a function 'atan2' which almost does everything being asked for, but I would imagine your teacher would frown on its use in this problem. You are clearly expected to use 'acos' but to use it in an appropriate way.
0 个评论
Jan
2013-9-12
编辑:Jan
2013-9-12
While there are problems inside the function also, as Roger has explained already, the message:
Undefined function 'acosfull' for input arguments of type 'double'
means, that the corresponding M-file is neither found in the folders contains in Matlab's path nor in the current folder. Where did you save the M-file and how is it called?
Btw., due to the limited numerical precision, it is very unlikely that the condition r==sqrt(x^2 + y^2) is ever met. Better use a certain interval, e.g.:
if abs(r - sqrt(x^2 + y^2)) < 10 * eps(r)
theodore panagos
2018-10-28
编辑:Walter Roberson
2018-10-28
For acos(x,y) you can use the formula :
f(x,y)=pi-pi/2*(1+sgn(x))*(1-sgn(y^2))-pi/4*(2+sgn(x))*sgn(y) -sgn(abs(x)-abs(y))*sgn(x*y)*acos((abs(x)+abs(y))/sqrt(2*x^2+2*y^2))
x=x2-x1 and y=y2-y1
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!