如何使用matlab使用平方反比定律预测值

时间:2017-01-31 05:48:50

标签: matlab curve-fitting

我有一些来自wifi路由器的值。现在我试图使用平方反比定律对这些值进行插值,以预测某些已知点的某些值,并希望与获得的值和实际值进行比较。 我正在使用Matlab,我如何编写函数。

2 个答案:

答案 0 :(得分:0)

如果您有一个路由器,并且信号的速率为c/||r||^2,其中c是某个常量,r是2D或3D空间中的矢量,表示到路由器的距离,那么您可以创建一个简单的内联函数来计算...

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

如果您有距离的x,y,z分量,则该函数看起来像

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 

最后,如果你只有对象的位置r和路由器的位置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)

答案 1 :(得分:0)

如果您只需要插值,这意味着您的所有查询点都位于采样点的凸包内,我建议使用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

可以通过绘制is as a surface

来显示此功能
foos=@(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