Matlab: поиск полярных координат по декартовым координатам

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

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

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 может быть одним значением, вектором или матрицей любого размера.

Вы можете использовать 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

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

>> z = x+1j*y;
>> r = abs(z);
>> theta = angle(z);
Другие вопросы по тегам