2015-04-12 5 views
0

Я новичок в Matlab и программирование в целом. Моя декартово-полярная функция преобразования, которую я написал, не работает.Matlab: поиск полярных координат из декартовых координат

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

@RyanK, пожалуйста, не используйте встроенный синтаксис кода для вещей, которые не являются кодом, например названиями продуктов. – gunr2171

ответ

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 
3

То, что вы пытаетесь сделать, это создать файл функции сценария, но у вас не -функция в начале вашего файла. Вы не можете этого сделать. Таким образом, вам нужно удалить оператор syms x y в начале вашего кода. Кроме того, вы не заявляете свою функцию должным образом. Вы должны использовать раунд брекеты, а не квадратные фигурные скобки, чтобы определить ваши входные параметры.

Я бы также использовал atan2 вместо atan, потому что он находит правильный четырехквадрантный дуготанген декартовых координат. Кроме того, используйте sqrt не ^.5, чтобы взять квадратный корень. Это более стабильно. Кроме того, чтобы правильно обрабатывать векторные входы, вам необходимо убедиться, что x и y используют .^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); 

x и y являются x и y значения ваши декартовы координаты. Замечательно то, что x и y могут быть единственным значением, вектором или матрицей любого размера.

0

Это очень легко с комплексных номеров. В частности, если данные декартовы координаты интерпретируются как действительные и мнимые части комплексного числа, то полярные координаты являются величины (abs) и аргументом (angle) этого комплексного числа:

>> z = x+1j*y; 
>> r = abs(z); 
>> theta = angle(z); 
Смежные вопросы