У меня есть некоторые значения от wifi-маршрутизаторов для пола. Теперь я пытаюсь интерполировать эти значения с помощью закона обратного квадрата, чтобы предсказать некоторые значения в некоторых известных точках и сравнить их с полученными значениями и реальным значением. Я использую Matlab, как я могу написать функцию.?Как предсказать значения с использованием обратного квадратного закона с использованием matlab
ответ
Если у вас есть один роутер, и сигнал падает со скоростью 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)
У меня есть несколько маршрутизаторов с некоторыми известными другими ориентирами. а затем хотите вычислить значения, которые должны быть предсказаны. –
Ну, это шаблон для этого. Я точно не знаю, какую формулу вы пытаетесь использовать. –
Я пытаюсь поставить F = power/r^2 –
Если вам нужно только интерполировать, что означает, что все ваши точки запроса лежат в выпуклой оболочке ваших выборочных точек, я бы предложил использовать scatteredInterpolant
https://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
Спасибо за помощь. Я хочу спросить одну вещь: почему мы используем вспомогательную функцию, почему она здесь важна? –
Просто для того, чтобы помочь в построении графика, 'ezsurf' не может обрабатывать функции типа" рассеянныйInterpolant ".Но не нужно запрашивать точки, достаточно использовать 'foo' прямо –
спасибо, это была полная помощь –
Итак, у вас есть матрица декартовых координат? Это 2D? 3D? –
Я рассматриваю x, y для диапазона от 1 до 100 –