2017-05-17 1 views
0

J'ai défini un vecteur [0.11,1,3,4.5,7]. J'ai aussi une fonction f qui ont les valeurs [f(0.11),f(1),f(3),f(4.5),f(7)]. En même temps, j'ai un autre vecteur qui peut ne pas avoir de longueur fixe. Sa valeur et sa longueur sont déterminées par l'utilisateur. Pour simplifier, supposons que le vecteur soit [4,4.5,5,6]. Je voudrais faire comme suit en programmation:Des suggestions pour trouver les valeurs approximatives sans utiliser for-loop?

Obtenir les valeurs approximatives f(4), f(4.5), f(5) and f(6) à partir de l'entrée de données donnée en utilisant une approximation linéaire. Je comprends que je peux utiliser la boucle for pour résoudre le problème; mais je me demande si for-loop est nécessaire. Quelqu'un pourrait-il penser à une méthode sans utiliser for-loop?

+1

ne peut pas vous utilisez juste 'f' pour évaluer' [4, 4.5, 5, 6] '? Si vous avez écrit 'f' vous-même, pourrait-il accepter une entrée vectorielle? – Steve

+0

Vous pouvez supposer que je sais ce que f est, par ex. f = t.^2 si vous voulez. Je peux calculer f ([4,4,5,5,6]) –

Répondre

5

Nous pouvons le faire de cette façon:

  1. Nous pouvons le faire en évitant de boucle (et toutes les autres boucles trop :)):

    x = [0.11 1 3 4.5 7]' 
    f_values = [1 5 3 15 0]' 
    xnew = [4 4.5 5 6]' 
    fnew = interp1q(x,f_values,xnew) 
    
  2. Mais il est deuxième façon intéressante : pour s'adapter à vos données. Matlab a un outil de montage fort. For example this one. Si vous l'adaptez, vous remplissez les fonctions suivantes: myf = @(x) here+some+formula. Donc, vous pouvez obtenir n'importe quelle valeur de f pour tout x en tout temps sans aucun calcul supplémentaire.

  3. Si vous connaissez la valeur réelle de f il suffit de créer une fonction anonyme:

    f = @(x) x.^2 
    

    Et maintenant, vous pouvez simplement mettre vos [4,4.5,5,6] valeurs et obtenir le résultat:

    xnew = [4 4.4 5 6] 
    result = f(xnew)