Ricerca di un valore

di il
10 risposte

Ricerca di un valore

Ciao!! Ho una funzione y=f(x) che assume un numero finito di valori (ad esempio 10 valori da 1 a 10). Io ho un preciso valore di y, per esempio 5.5 e devo trovare il corrispondente valore di x però può capitare che 5.5 non sia un valore assunto dalla funzione y. Per questo devo utilizzare un'interpolazione. Cosa mi consigliate di fare??

10 Risposte

  • Re: Ricerca di un valore

    Il consiglio è... usare l'interpolazione... te lo sei dato da solo.
    La funzione si chiama interp1.
  • Re: Ricerca di un valore

    Ok grazie! In realtà non sapevo quale funzione usare. Adesso provo...
  • Re: Ricerca di un valore

    Non riesco ad usare la funzione interp1. Supponiamo devo trovare il valore di x in corrispondenza di y=6. Come devo scrivere?
  • Re: Ricerca di un valore

    Ecco un esempio. Ho modificato leggermente un esempio dell'help di matlab:
    definisci le x e le y:
    x = 0:10; 
    y = x.^2; 
    definisci un vettore di x molto fitto. Se devi recuperare numeri con una sola cifra dopo la virgola vai a passi di 0.1 altrimenti meno.
    xi = 0:0.1:10; 
    Usi interp1 per crearti un vettore di y altrettanto fitto. Matlab unisce i puntini con tratti di retta, altrimenti puoi passargli delle opzioni tipo "cubic" per unire con dei tratti di curva. Guarda sull'help che ci sono gli esempi.
    yi = interp1(x,y,xi);
    A questo punto per trovare la y che corrisponde a x=6 puoi fare così:
    yi(find(xi==6))
  • Re: Ricerca di un valore

    Ho provato ma non vengonon fuori i valori desiderati. Un esempio di codice è:

    x=[1,2,5,8,14,16,22];
    y=[5,8,10,12,18,23,26];
    xi=x(1):0.01:x(length(x));
    yy=interp1(x,y,xi);
    a=xi(find(yy==19.2))

    Io conosco y=19.2 e devo trovare il valore corrispondente di x però in questo caso non mi restituisce niente. Perchè?
  • Re: Ricerca di un valore

    Allora, in questo caso puoi scrivere così:
    a=xi(find(round(yy*100)/100==19.2))
    (bisogna troncare i valori di yy che nell'interpolazione non sono "esatti")
  • Re: Ricerca di un valore

    Non si potrebbe creare il vettore xi con un passo più piccolo (ad esempio 0.0001) per avere più valori e un'interpolazione più "esatta"?
  • Re: Ricerca di un valore

    Certo, puoi fare il passo piccolo quanto vuoi... ovviamente xi diventerà molto grande e di conseguenza yy.
    invece che 100 nell'espressione di prima devi aumentare a 10000 o a quello che ti serve.
  • Re: Ricerca di un valore

    Ok però ho controllato nel vettore yy è presente il valore 19.2 e quindi in teoria dovrebbe esserci anche il valore corrispondente di x che nel mio caso è 14.88. Quando vado ad eeguire mi restituisce un valore "empty" invece di quello desiderato. Devo cmq usare la funzione che mi hai consigliato???
  • Re: Ricerca di un valore

    A me non restituisce empty:
    x=[1,2,5,8,14,16,22];
    y=[5,8,10,12,18,23,26];
    xi=x(1):0.0001:x(length(x));
    yy=interp1(x,y,xi);
    a=xi(find(round(yy*10000)/10000==19.2))
Devi accedere o registrarti per scrivere nel forum
10 risposte