Как мне построить свою функцию для меша? - PullRequest
1 голос
/ 05 января 2012

Я новый пользователь MATLAB и пытаюсь построить функцию:

function [ uncertainty ] = uncertain(s1, s2, p)
%UNCERTAIN calculates the measurement uncertainty of a triangulation
% provide two coordinates of known stations and a target coordinate 
% of another point, then you get the uncertainty 
 [theta1, dist1] = cart2pol(p(1)-s1(1), p(2)-s1(2));
 [theta2, dist2] = cart2pol(p(1)-s1(1), p(2)-s2(2));
 theta=abs(pi-theta2-theta1);
 uncertainty = dist1*dist2/abs(sin(theta));
end

, вызываемую с помощью:

uncertain([0 0],[8 0],[4 4])

Я получаю один результат.Но я хочу целую поверхность и назвал:

x=-2:.1:10;
y=-2:.1:10;
z = uncertain([0 0],[8 0],[x y]);
mesh(x,y,z)

Я получаю ошибку: «Z должен быть матрицей, а не скаляром или вектором».что моя функция рисует поверхность?

Заранее спасибо.Ralf.

1 Ответ

1 голос
/ 05 января 2012

Сначала я думаю, что в вашей функции есть ошибка: ваш [theta2, dist2] = cart2pol(p(1)-s1(1), p(2)-s2(2)); должен иметь th первый s1, являющийся s2.

Далее, чтобы получить векторный ответ для ваших векторных входов, вынужно изменить p(i) (который выбирает i-й элемент из p) на p(i,:), что выберет первую i-ю строку из p.

После этоговы меняете умножение (*) на поэлементное умножение (.*).

В итоге:

function [ uncertainty ] = uncertain(s1, s2, p)
%UNCERTAIN calculates the measurement uncertainty of a triangulation
% provide two coordinates of known stations and a target coordinate 
% of another point, then you get the uncertainty
% target coordinates p are 2xn
% output uncertainty is 1xn
 [theta1, dist1] = cart2pol(p(1,:)-s1(1), p(2,:)-s1(2));
 [theta2, dist2] = cart2pol(p(1,:)-s2(1), p(2,:)-s2(2));
 theta=abs(pi-theta2-theta1);
 uncertainty = dist1.*dist2./abs(sin(theta));
end

Единственные изменения p(i) -> p(i,:)* -> .* и / -> ./.

Чтобы получить поверхность, вы используете meshgrid, чтобы получить все наборы (x,y) координат в сетке, сгладить ихв матрицу 2xn для uncertain, а затем разверните их обратно в сетку для построения графика.Пример:

x=-2:.1:10;  % 121 elements
y=-2:.1:10;  % 121 elements
[xs,ys]=meshgrid(x,y); % xs and ys are each 121 x 121
zs = uncertain([0 0],[8 0],[xs(:) ys(:)]'); %get zs, being 1x(121*121) ie 1x14641
% Reshape zs to be 121x121 in order to plot with mesh
mesh(xs,ys,reshape(zs,size(xs)))

Примечание: вы получите много действительно больших чисел, потому что когда theta равно 0 или pi (или очень близко), потому что тогда вы делитесь на (почти)0.

...