Matlab:从笛卡尔坐标中找到极坐标

时间:2015-04-12 01:04:54

标签: matlab function multiple-variable-return

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

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

3 个答案:

答案 0 :(得分:3)

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

我还会使用atan2代替atan,因为它会找到笛卡尔坐标的正确四象限反正切。另外,使用sqrt而不是^.5来取平方根。它更稳定。另外,要正确处理矢量输入,您需要确保xy.^2计算中使用r,而不是^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可以是单个值,向量或任何大小的矩阵。

答案 1 :(得分:2)

您可以使用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

答案 2 :(得分:0)

复数非常容易。具体来说,如果给定的笛卡尔坐标被解释为复数的实部和虚部,那么极坐标是幅度abs)和参数angle)那个复数:

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