2017-01-31 5 views
0

У меня есть некоторые значения от wifi-маршрутизаторов для пола. Теперь я пытаюсь интерполировать эти значения с помощью закона обратного квадрата, чтобы предсказать некоторые значения в некоторых известных точках и сравнить их с полученными значениями и реальным значением. Я использую Matlab, как я могу написать функцию.?Как предсказать значения с использованием обратного квадратного закона с использованием matlab

+0

Итак, у вас есть матрица декартовых координат? Это 2D? 3D? –

+0

Я рассматриваю x, y для диапазона от 1 до 100 –

ответ

0

Если у вас есть один роутер, и сигнал падает со скоростью c/||r||^2, где c - некоторая константа, а r - вектор в 2D или 3D пространстве, представляющий расстояние до маршрутизатора, то вы можете создать простой встроенный функция для расчета, что ...

f = @(r) c ./ norm(r)^2 

Если у вас есть х, у, г компонента расстояния, функция выглядит

f = @(x,y,z) c ./ (x.^2 + y.^2 + z.^2) 

Если у вас есть 2D или 3D матрицы значений, затем используйте

f = @(r) c ./ sum(r.^2); % if r = 2xn or 3xn 
f = @(r) c ./ sum(r.^2,2); % if r = nx2 or nx3 

Наконец, если у вас есть только позиция г объекта и позиции r0 маршрутизатора, то вы должны использовать один из следующих

% If router position is fixed for all test points... 
f = @(x,y,z) c ./ ((x-x0).^2 + (y-y0).^2 + (z-z0).^2) 

% If you want to test multiple router positions... 
f = @(x,y,z,x0,y0,z0) c ./ ((x-x0).^2 + (y-y0).^2 + (z-z0).^2) 
+0

У меня есть несколько маршрутизаторов с некоторыми известными другими ориентирами. а затем хотите вычислить значения, которые должны быть предсказаны. –

+0

Ну, это шаблон для этого. Я точно не знаю, какую формулу вы пытаетесь использовать. –

+0

Я пытаюсь поставить F = power/r^2 –

0

Если вам нужно только интерполировать, что означает, что все ваши точки запроса лежат в выпуклой оболочке ваших выборочных точек, я бы предложил использовать scatteredInterpolanthttps://www.mathworks.com/help/matlab/ref/scatteredinterpolant-class.html. Его использование и визуализация очень просты.

%%Create 10 random points as example 
x=rand(10,1)*100; 
y=rand(10,1)*100; 
strenght=rand(10,1)*100; 

%% Use these data to create an interpolant function 
foo=scatteredInterpolant(x,y,strenght,'natural','none'); 

В этой точке функция foo будет интерполировать любое значение в пределах интерполяция области как foo(x,y)

foo(50,50) 
%% ans = 24.6063 

можно визуализировать эту функцию путем построения графика как поверхности

[email protected](a,b) foo(a,b) %% Auxiliar function 
ezsurf(foos,[0 100 0 100]) %% Plot the function 
hold on 
scatter3(x,y,strenght,'ro','filled') %% Add original points to see how it was calculated 

enter image description here

+0

Спасибо за помощь. Я хочу спросить одну вещь: почему мы используем вспомогательную функцию, почему она здесь важна? –

+0

Просто для того, чтобы помочь в построении графика, 'ezsurf' не может обрабатывать функции типа" рассеянныйInterpolant ".Но не нужно запрашивать точки, достаточно использовать 'foo' прямо –

+0

спасибо, это была полная помощь –