2012-01-05 5 views
1

Я новый пользователь 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

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

Далее, чтобы получить вектор ответить на ваши векторы входов, вы должны изменить ваш p(i) (который выбирает й элемент p) в p(i,:), который будет выбирать первый Ith ряда из 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.

+0

Спасибо за ваш ответ. Я стараюсь понять ваши изменения. Но результат довольно неожиданный, так как углов должны быть около 90 ° и, следовательно, грех (угла) должно быть около 1. У меня есть уродливый Java код получения изображения, как это: HTTP: // pastehtml .com/view/bjowk6rbg.html –

+0

Но мой код matlab еще не имеет предела 100, как: неопределенность = max (неопределенный, 100) координата wise И границы должны быть сужены. –

+0

Я нашел еще одну ошибку в моем коде: три угла должны быть на 180 °, потому что они должны быть тремя внутренними углами треугольника (s1, s2, p). –