我正在尝试制作一个将笛卡尔坐标转换为极坐标的程序。
我的计算器会将arctan(1)
作为pi/4
返回。
另一方面,MATLAB将atan(1)
作为0.7854
返回。
如何让MATLAB将这样的数字作为pi
的表达式返回?
答案 0 :(得分:1)
对于pi
的某些特定值,您可以使用symbolic
个数字,例如:
atan(sym(1))
ans =
pi/4
asin(sym(3^.5/2))
ans =
pi/3
请注意,这需要符号数学工具箱。
希望这有帮助,
Qapla'
答案 1 :(得分:1)
正如你所说,这仅仅是为了快速目视检查,我只想用pi来划分:
n = 0.7854;
disp(['n in terms of pi: ', num2str(n/pi), '*pi']);
>> n in terms of pi: 0.25*pi
如果您经常这样做,我会在local path上定义一些功能,如此
function [val, str] = wrtpi(n)
% Returns the value of n with respect to pi
val = n/pi;
% Could include some rounding checks here if you wanted to complicate things
% ... *checks* ...
str = ['n in terms of pi: ', num2str(n/pi), '*pi'];
end
然后
n = 0.7854;
[val, str] = wrtpi(n)
>> val = 0.25
str = n in terms of pi: 0.25*pi
你还说这只是用于识别弧度象限,除了学习它们之外,你还可以只有一个简单的函数
function q = quadrant(n)
Qs = pi*[0, 1/2, 1, 3/2]; % Quadrants
q = find(Qs <= mod(n,2*pi), 1, 'last'); % Index within the quadrants
% You could make this accept vector inputs using:
% q = arrayfun(@(x) find(Qs <= mod(x,2*pi), 1, 'last'), n)
end
然后
quadrant(2*pi - 0.0001) % >> 4
quadrant(0.2) % >> 1
quadrant(1.6) % >> 2
请注意,使用符号数学工具箱来处理这么简单的事情可能会导致更多的复杂性和减速而不是它有帮助!