Sistema Equazioni differenziali

Bibo901
Salve a tutti,
sono nuovo e scrivo per la prima volta.
Sono laureando in ingegneria meccanica, e sto svolgendo un personale progetto che riguarda la modellazione di un particolare cinematismo ad azionamento pneumatico.
L'algoritmo alla base del modello lo scriverò inizialmente in VBA e verrà eseguito in Excel. Purtroppo non ho accesso a licenze di MATLAB e sono ancora alle prime armi con la programmazione per scrivere un programma per intero in visual studio; tuttavia cavandomela discretamente bene in VBA ho deciso di testarlo li.
Arrivando al dunque, dopo svariati calcoli, mi sono imbattuto nel dover risolvere numericamente un problema ai valori iniziali di un sistema di equazioni differenziali.
Il sistema è composto da un equazione del moto in Lagrangiana angolare, dunque un equazione diff. del second'ordine (accelereazione, velocità e posizione angolare), e da un equazione diff. del prim'ordine che descrive l'andamento della pressione dell'aria nel tempo. Ho poi a disposizione il valore della posizione, velocità e pressione all'istante iniziale.
L'eq. della pressione è funzione di velocità e posizione angolare, e a sua volta l'equazione del moto è funzione della pressione.
Secondo voi è possibile integrare numericamente tale sistema con Runge-Kutta del 4 ordine ed Eulero? mi spiego meglio..
risolvere numericamente con R-K4 pressione e velocità angolare, e poi stimare la posizione angolare dalla rispettiva velocità stimata con Eulero?
Ps: non so se sono stato chiaro.. appena riesco a capire come postare immagine magari mando una foto del sistema :lol:

Risposte
Bibo901
Per capirci meglio.. il sistema è del seguente tipo:

d(p)/dt = f(p,teta,d(teta)/dt) 1
d^2(teta)/dt^2 = f(p,teta,d(teta)/dt) 2

CI:
p iniziale=0
teta iniziale=0
d(teta)/dt iniziale =0

quello che volevo fare era innanzitutto vedere la 2 come 2 eq. del prim'ordine ponendo d(teta)/dt = omega e chiamandola funzione 3,
dopodiché, per ogni passo, integrare con Runge-Kutta la 1 e la 2 con l'algoritmo che ho inviato come immagine in allegato, e successivamente utilizzare il più semplice Algoritmo di Eulero per ottenere la posizione angolare dalla 3.

Secondo voi è una cosa fattibile?

Purtroppo non sono un matematico e ho studiato poco niente di analisi numerica e da autodidatta... se mi poteste consigliare voi che siete del mestiere mi rendereste molto felice :smt023 :smt023

Raptorista1
Ciao, non mi sembra un'impresa particolarmente difficile. Ecco alcune dritte:

    [*:34wdf6ce] Se sai usare matlab ma non hai una licenza puoi sempre usare octave, che è quasi uguale ed è gratis[/*:m:34wdf6ce]
    [*:34wdf6ce] Perché vuoi usare due metodi diversi per il sistema? Io farei tutto quanto con RK4[/*:m:34wdf6ce]
    [*:34wdf6ce] Cerca di scrivere utilizzando i compilatori di formule, perché al momento il tuo secondo messaggio non è facile da leggere[/*:m:34wdf6ce][/list:u:34wdf6ce]

Bibo901
Ciao,
scusami (o scusatemi) se rispondo a distanza di qualche mese; ho avuto impegni che mi hanno un po' distratto da questo progetto e non sono riuscito a seguire la discussione da me iniziata, dopodichè mi ero davvero dimenticato di avere iniziato il discorso (SCUSATEMI ANCORA :oops: :oops: ). Dato la gentile risposta di raptorista ho comunque pensato di proseguire con questo post.

Dato le mie scarse competenze in materia ho deciso di studiarci su un po di piu prima di affrontare il discorso; una gentile professoressa di analisi numerica mi ha poi aiutato con la comprensione di alcuni concetti :-D .

'Perché vuoi usare due metodi diversi per il sistema? Io farei tutto quanto con RK4' : Pienamente d'accordo, ma all'epoca non avevo ben chiaro come fare.

'Se sai usare matlab ma non hai una licenza puoi sempre usare octave, che è quasi uguale ed è gratis' : Non so utilizzare Matlab, anche se dovró imparare qualcosa del linguaggio per il corso magistrale. Sicuramente daró un occhiata a octave, tuttavia ho cominciato da un po ad utilizzare il linguaggio Python (in particolare la versione Anaconda tramite l'IDE Spyder) e pensavo di programmare li l'algoritmo (mi trovo molto bene in quanto il linguaggio è davvero semplice e comodo)... da matematico cosa ne pensi? Un consiglio è davvero piú che gradito.

Inserisco come allegato l'estratto del resoconto tecnico che sto scrivendo per il progetto sopra esposto; è davvero corto (una facciata e poco piú) e volevo chiedervi se potevate darci un occhio in quanto è il procedimento logico che dovrei utilizzare per scrivere l'algoritmo.

(scusate ma ho difficolta nell'invio degli allegati e non mi invia pdf o docs. Pure le immagini come limite massimo mi da 1 quindi invio la prima pagina qui e la seconda in una seconda risposta)

Bibo901
Qui la seconda pagina :D

Raptorista1
"Bibo90":
Non so utilizzare Matlab, anche se dovró imparare qualcosa del linguaggio per il corso magistrale. Sicuramente daró un occhiata a octave, tuttavia ho cominciato da un po ad utilizzare il linguaggio Python (in particolare la versione Anaconda tramite l'IDE Spyder) e pensavo di programmare li l'algoritmo (mi trovo molto bene in quanto il linguaggio è davvero semplice e comodo)... da matematico cosa ne pensi? Un consiglio è davvero piú che gradito.

Python è molto meglio di matlab, ottima scelta! Puoi usare le librerie numpy e scipy che già forniscono RK4 e un sacco di altre cose, così che non devi implementare nulla a mano.

Bibo901
:D Caspita sono contento di averci azzeccato con il linguaggio! Anche perchè se mi dici cosi potrebbe venirmi comodo non solo per questo progetto ma anche per progetti futuri legati al corso magistrale. :-D
Per ora mi sono cimentato solo con Numpy e Matplotlib mentre scipy mi è ancora ignoto.
Ho visto, come mi hai detto, che in Scipy c'è gia quanto mi serve ed è pure abbastanza semplice da trovare esempi in rete, ad esempio ho trovato questo:

http://scipy.github.io/old-wiki/pages/C ... pse_ODEINT

che non usa R-K4 ma come stavo leggendo con l'istruzione set dovrebbe essere semplice cambiare il metodo d'integrazione. A questo punto tuttavia mi emergono diverse domande del tipo:

- il metodo odeint come si vede nell'esempio che metodo di integrazione usa?
- mi è davvero conveniente in termini computazionali 'settare' un metodo in particolare (nel mio caso R-K4) rispetto al metodo odeint? (non sapendo come è ragionato il metodo in se e se intrinsecamente effettua già una sua valutazione del metodo da utilizzare)

Io mi ero orientato su R-K4 in quanto risulta essere uno dei piu semplici da capire da un neofita, ma allo stesso tempo non richiede un passo estremamente piccolo per una buona precisione (come mi pare di aver capito richiede il metodo di Eulero [che rientra comunque nei metodi di R-K ma del primo ordine]), ed inoltre da come ho letto mi risulta essere molto utilizzato.

Volevo dunque chiederti se conoscevi qualche dispensa (in ita immagino sia chiedere troppo :roll: :roll: ) di SciPy che descrivesse i metodi principali e aiutasse ad entrare nel linguaggio del modulo.

Raptorista1
Odeint userà i parametri di default, che non conosco.
RK4 è così buono e famoso che è una buona scelta praticamente sempre, non solo da neofita.
Dispensa su scipy = documentazione di scipy.

Bibo901
Grazie mille, rapido preciso e conciso :smt023

Raptorista1
"Bibo90":
rapido preciso e conciso :smt023

Dovrei farne uno slogan

Bibo901
:-D mi metto subito all'opera e grazie ancora! :-D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.