【问题标题】:Matlab: finding polar coordinates from cartesian coordinatesMatlab:从笛卡尔坐标中找到极坐标
【发布时间】:2015-06-17 13:15:29
【问题描述】:

我是 Matlab 和一般编程的新手。我写的笛卡尔到极坐标的转换函数不起作用。

syms x y
function [r,theta]=something[x,y] 
  r=(x^2+y^2)^.5
  theta=atan(x/y)
end

【问题讨论】:

  • @RyanK,请不要对非代码内容使用内联代码语法,例如产品名称。

标签: matlab function multiple-variable-return


【解决方案1】:

复数非常容易。具体来说,如果给定的笛卡尔坐标被解释为复数的实部和虚部,那么极坐标就是 ma​​gnitude (abs) 和 argument (@ 987654322@) 的那个复数:

>> z = x+1j*y;
>> r = abs(z);
>> theta = angle(z);

【讨论】:

    【解决方案2】:

    您要做的是创建一个函数脚本文件,但文件开头有一个非函数声明语句。你不能这样做。因此,您需要删除代码开头的 syms x y 语句。此外,您没有正确声明您的功能。您需要使用 round 大括号,而不是方括号来定义您的输入参数。

    我也会使用atan2 而不是atan,因为它会找到笛卡尔坐标的正确四象限反正切。另外,使用sqrt 而不是^.5 来取平方根。它更稳定。此外,要正确处理向量输入,您需要确保 xyr 计算中使用 .^2 而不是 ^2。因此,改为这样做:

    function [r,theta]=something(x,y) %// Change
    r=sqrt(x.^2 + y.^2); %// Change
    theta=atan2(y, x); %// Change
    end
    

    将其放入名为something.m 的文件中,然后您可以进入命令提示符并执行以下操作:

    [r,theta] = something(x,y);
    

    xy 是笛卡尔坐标的 xy 值。很棒的是xy可以是单个值、向量或任意大小的矩阵。

    【讨论】:

      【解决方案3】:

      你可以使用cart2pol函数:

      [theta, rho] = cart2pol(x, y)
      

      或者这样做:

        theta = atan2(y, x)     % use atan2() instead of atan()
        rho = sqrt(x.^2 + y.^2) % use sqrt() instead of .^5
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多