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);