【问题标题】:How can I get MATLAB to display radians in terms of pi?如何让 MATLAB 以 pi 显示弧度?
【发布时间】:2017-08-18 14:24:30
【问题描述】:

我正在尝试制作一个将笛卡尔坐标转换为极坐标的程序。

我的计算器将arctan(1) 返回为pi/4

另一方面,MATLAB 将 atan(1) 返回为 0.7854

如何让 MATLAB 将这样的数字作为 pi 的表达式返回?

【问题讨论】:

  • 您是否有特殊原因希望它以pi 的形式表达? pi/4 = 0.7854。如果您的目标是在数值计算中使用 arctan(1),那么您不应该关心它是如何以数字形式表示的——无论是在您的个人计算器还是 MATLAB 上。物理量是等价的。例如,如果您想在图表或图形上显示它,那就不同了。请说明最终目标是什么。
  • 主要是让我更容易确定我的答案属于哪个象限
  • 象限被分成pi/2 = 1.57的倍数。因此,介于 0 和 1.57 之间的值将是第一象限,介于 1.57 和 3.14 之间的值将是第四象限,介于 -1.57 和 0 之间的值将是第二象限,最后是介于 -3.14 和 -1.57 之间的值是第三象限。我建议您使用数字范围而不是依赖转换来了解它属于哪个象限,例如下面提供的答案。如果您计划长时间运行代码,依靠下面的答案会给您带来性能损失。
  • 谢谢,我会努力学习的

标签: matlab math polar-coordinates radians


【解决方案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  

请注意,将符号数学工具箱用于这么简单的事情可能会导致更多的复杂性和速度变慢!

【讨论】:

  • 干杯,不确定这是否是找到象限的最优雅的方法,但这是我想到的第一个逻辑!
【解决方案2】:

对于pi 的某些特定值,您可以使用symbolic 数字,例如:

atan(sym(1))
ans =
pi/4

asin(sym(3^.5/2))
ans =
pi/3

请注意,这需要符号数学工具箱。

【讨论】:

  • *如果您有符号数学工具箱,请注意这将导致性能下降
猜你喜欢
  • 2018-04-29
  • 1970-01-01
  • 2018-01-04
  • 2022-12-04
  • 2017-07-07
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
相关资源
最近更新 更多