Espressione da Grafico
Salve a tutti, come da titolo mi servirebbe l'espressione analitica (anche polinomiale) di una funzione a partire dal grafico. In particolare il grafico è simmetrico rispetto l'origine, ha il valore di 5 per x che vanno da 0 a 2000 e una volta superati i 2000 decresce in maniera quasi iperbolica. Qualcuno potrebbe aiutarmi? io non so piu dove sbattere la testa...
Risposte
In teoria l'interpolazione polinomiale potrebbe fare al caso tuo. Con MatLab tramite polyfit e polyval e con un ciclo opportuno dovresti riuscire ad ottenere l'espressione analitica del polinomio interpolante
Non so se esistano altre tecniche più potenti visto che finora di analisi numerica ho fatto solo un corso.
Non so se esistano altre tecniche più potenti visto che finora di analisi numerica ho fatto solo un corso.
il mio problema nell'usare Matlab è che non ho la più pallida idea di come costruire la forma d'onda (cosa che ho provato a fare per mezza giornata) per poi usare l'espressioni polyfit e polyval
In teoria però dovresti conoscere o punti $(x_i,y_i)$ per cui passa il tuo grafico..
Allora io so solo che fino ad x=2000 deve valere 5, e poi deve decrescere fino a 0 in maniera iperbolica. Quindi in teoria potrei avere le coppie di valori (anche se nel tratto decrescente in realtà non ne ho) l'unica funzione decrescente che mi viene in mente è $ -log (x) $. E potrei fare un CSV cosicché lo posso usare su matlab.
Scusa l'ignoranza, cosa intendi con CSV?
Comunque, se hai le coppie di punti per cui passa la tua funzione, con MatLab è possibile interpolarla.
Comunque, se hai le coppie di punti per cui passa la tua funzione, con MatLab è possibile interpolarla.
il CSV è un formato di file derivato da excel. Il mio problema non è la fattibilità nel trovare la soluzione ma riuscire a dare a matlab il grafico che mi serve per poi cercare i polinomi.
La routine MatLab che implementa l’interpolazione polinomiale è polyfit, mediante la sintassi p = polyfit(x,y,n) dove $n$ è il grado del polinomio con cui vogliamo interpolare i dati.
Restituisce in uscita un vettore con i coefficienti del polinomio. Nel nostro caso sarà n=length(x)-1. I coefficienti del polinomio $p$ sono da interpretarsi in ordine decrescente: il primo coefficiente è relativo al monomio di grado massimo.
Per valutare un polinomio su un insieme di punti si utilizza la routine polyval.
Il grafico lo puoi costruire facendo il plot così:
I vettori $x_i=[ldots]$ e $y_i=[ldots]$ li devi costruire te in base ai tuoi dati. Credo sia meglio, ma non ne sono sicuro, se sono equispaziati. E ovviamente, devono essere della stessa lunghezza.
Restituisce in uscita un vettore con i coefficienti del polinomio. Nel nostro caso sarà n=length(x)-1. I coefficienti del polinomio $p$ sono da interpretarsi in ordine decrescente: il primo coefficiente è relativo al monomio di grado massimo.
Per valutare un polinomio su un insieme di punti si utilizza la routine polyval.
Il grafico lo puoi costruire facendo il plot così:
I vettori $x_i=[ldots]$ e $y_i=[ldots]$ li devi costruire te in base ai tuoi dati. Credo sia meglio, ma non ne sono sicuro, se sono equispaziati. E ovviamente, devono essere della stessa lunghezza.
clc clear all close all p=polyfit(xi,yi,n); %trova i coefficienti del polinomio interpolante t=linspace(-5e3,5e3,10000); % intervallo su cui vuoi lavorare, puoi adattarlo a tuo piacimento plot(t,polyval(p,t),'g') % faccio il plot
ok.. allora questo finesettimana ci provo e vediamo cosa esce fuori..
grazie per l'aiuto

Di nulla. Spero di esserti stato utile