2017-01-31 1 views
0

J'ai quelques valeurs de routeurs wifi pour un étage. Maintenant, j'essaie d'interpoler ces valeurs en utilisant la loi du carré inverse pour prédire certaines valeurs à certains points connus et je veux comparer avec les valeurs obtenues et la valeur réelle. J'utilise Matlab, comment je peux écrire la fonction.?comment prédire des valeurs en utilisant la loi de l'inverse carré en utilisant matlab

+0

Ainsi vous avez une matrice de voiture tesian coordonnées? Est-ce 2D? 3D? –

+0

Je considère x, y pour la gamme de 1 à 100 –

Répondre

0

Si vous avez un seul routeur et que le signal tombe à un taux de c/||r||^2, où c est une constante et r est un vecteur dans l'espace 2D ou 3D représentant la distance au routeur, vous pouvez créer une ligne simple fonction de calculer que ...

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

Si vous avez le x, y, z composantes de la distance, la fonction ressemble

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

Si vous avez une 2D ou 3D matrice de valeurs, puis utilisez

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

Enfin, si vous avez seulement la position r du r0 objet et la position du routeur, vous pouvez ensuite utiliser une des options suivantes

% 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

J'ai plusieurs routeurs avec un autre point de référence connu. et ensuite vouloir calculer les valeurs à prédire. –

+0

Eh bien, ce qui précède est un modèle pour le faire. Je ne sais pas exactement quelle formule vous essayez d'utiliser. –

+0

J'essaie de mettre F = puissance/r^2 –

0

Si vous avez seulement besoin d'interpoler, ce qui signifie que tous vos points de recherche se trouvent dans la coque convexe de vos points échantillonnés, je suggère d'utiliser scatteredInterpolanthttps://www.mathworks.com/help/matlab/ref/scatteredinterpolant-class.html. Son utilisation et sa visualisation est très facile.

%%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'); 

A ce stade, la fonction foo interpole une valeur dans la zone interpolable comme foo(x,y)

foo(50,50) 
%% ans = 24.6063 

Il est possible de visualiser cette fonction en traçant est comme une surface

[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

merci pour votre aide. je veux demander une chose: pourquoi nous utilisons la fonction auxiliaire, pourquoi c'est important ici. –

+0

Pour faciliter le traçage, 'ezsurf' ne peut pas gérer les fonctions de type' scatteredInterpolant'.Mais il n'est pas nécessaire d'interroger les points, en utilisant 'foo' directement est assez –

+0

merci, c'était aide complète –