Energia Alternativa Laboratory & Applicazioni Didattiche
Onde su corda

VISUALIZZA L'ALBUM


FinePagina

qqcreafis

Avatar
PetaWatt


Utente
Msg:10028

Stato:



Inviato il: 23/04/2020 23:50:30

come simulare una corda oscillante

scopo: capire come si distribuisce l'energia istantanea tra onde longitudinali e trasversali

Metodo: numerico

Algoritmo: la corda viene suddivisa in tante perline di massa m in equilibrio ad una certa distanza se perturba il sistema le forze elastiche richiamano la massa

Il tempo viene discretizzato nel senso che ad ogni ciclo di evoluzione passa un deta t

1° passo individuare un linguaggio di programmazione efficente (C++??)

La simulazione è tanto più precisa quanto la suddivisione è fine e quanto il passo delta t è piccolo, quindi tanti vettori molto lunghi (1000 componenti minimo) variabili double e molti cicli per simulare un'evoluzione temporale di qualche s

un'uscita dei dati sia grafica che file...











---------------
ODE AD UNO STUDENTE MERITEVOLE (Sermone)
Allora Xyz è stato bravo! noi dobbiamo riconoscere ...

 

qqcreafis

Avatar
PetaWatt


Utente
Msg:10028

Stato:



Inviato il: 24/04/2020 12:23:49

immagine


http://www.energialternativa.info/public/newforum/ForumEA/U/perline_1.png



Immagine Allegata: perline.png
 
ForumEA/U/perline.png



Modificato da qqcreafis - 24/04/2020, 17:42:33


---------------
ODE AD UNO STUDENTE MERITEVOLE (Sermone)
Allora Xyz è stato bravo! noi dobbiamo riconoscere ...

 

qqcreafis

Avatar
PetaWatt


Utente
Msg:10028

Stato:



Inviato il: 25/04/2020 10:31:20

pseudocodice

posizionexnp1(10000) double;//posizione al tempo n+1 x perlina m
posizioneynp1(10000) double;//posizione y al tempo n*1 perlina m

posizionexn(100000) double;//posizione al tempo n x perlina m
posizioneyn(100000) double;//posizione al tempo n x perlina m

posizionexnm1(100000) double;//posizione al tempo n-1 x perlina m
posizioneynm1(100000) double;//posizione al tempo n-1 x perlina m

forzax(10000) double;//componente x forza perlina precedente N
forzay(10000) double;//componente y forza perlina precedente N

versoreiim1x(10000);//versore X che punta da n a n-1
versoreiim1y(10000);//versore Y che punta da n a n-1
moduloiim1(10000);// modulo diatanza n n-1

moduloforzaiim1(10000);//modulo forza da n a n-1



massa double=0,0001; //massa perlina kg
deltat double =0,0001;// intervallo di tempo s

d double = 0,001;//intervallo di spazio tra le perline m
K double = 10000;//costante elache dipende dalle posizioni differenti tramite la forzastica tra una perlina e l'altra N/m

ncicli,nperline,nperline-1,j,k integer lungo ;



fase di inizializzazione si calcolano i primi posizione nm1 e posizione n

il che equivale a dare una posizione iniziale e la velocità per ogni perlina

//fase di calcolo versori


nperline=10000;
nperlinem1=nperline-1;


moduloiim1(0)=sqr((posizionexn(0) +d-posizionexn(nperlinem1))^2+(posizioneyn(0)-posizioneyn(nperlinem1))^2);
versorexiim1(0)=(posizionexn(0)-posizionexnm1(nperlinem1))/modulonnm1(0)
versoreyiim1(i)=(posizioneyn(i)- posizionexnm1(nperline-1))/modulonm1(0)

for(i=1;i{
moduloiim1(i)=sqr((posizionexn(i) +d-posizionexn(i-1))^2+(posizioneyn(i)-posizioneyn(i-1))^2);

versorexiim1(i)=(posizionexn(i)-posizionexnm1(i))/modulonnm1(i)

versoreyiim1(i)=(posizioneyn(i)- posizionexnm1(i1))/modulonm1(i)
}
//calcolo forza perlina i perlina i-1

moduloforzaiim1(0)=k*(moduloiim1(0)-d);

forzaxiim1(0)=versorexiim1(0)*moduloforzaiim1(0);

forzayiim1(0)=versoreyiim1(0)*moduloforzaiim1(0);

for(j=1;i{
moduloforzaiim1(j)=k*(moduloiim1(j)-d);

forzaxiim1(j) = versorexiim1(j)*moduloforzaiim1(j);

forzayiim1(j) = versoreyiim1(j)*moduloforzaiim1(j);
};
//fase di calcolo posizione al tempo n+1 tramite la forza

for(l=0;l{

posizionexnp1(l)=+2*posizionexn(l)-posizionexnm1(l)+deltat^2*(forzaxiinm1(l)-forzaxiinm1(l+1)/m);
posizioneynp1(l)=+2*posizioneyn(l)-posizioneynm1(l)+deltat^2*(forzayiinm1(i)-forzayiinm1(l+1))/m;
};

posizionexnp1(nperline)=+2*posizionexn(nperline)-posizionexnm1(nperline)+deltat^2*(forzaxiinm1(nperline)-forzaxiinm1(0))/m;
posizioneynp1(nperline)=+2*posizioneyn(nperline)-posizioneynm1(nperline)+deltat^2*(forzayiinm1(nperline)-forzayiinm1(0))/m;

//ciclo di evoluzione

for(l=0;l<=nperline;l++)
{

posizionexnm1(l)=posizionexn(l);
posizioneynm1(l)=posizioneyn(l);


posizionexn(l)=posizionexnp1(l);
posizioneyn(l)=posizioneynp1(l);



};





segue



Modificato da qqcreafis - 27/04/2020, 20:22:22


---------------
ODE AD UNO STUDENTE MERITEVOLE (Sermone)
Allora Xyz è stato bravo! noi dobbiamo riconoscere ...

 

Bolle

Avatar
GigaWatt


AMMINISTRATORE
Msg:9359

Stato:



Inviato il: 15/05/2020 09:25:14

CITAZIONE (qqcreafis, 23/04/2020 23:50:30 ) Discussione.php?216104&1#MSG0



1° passo individuare un linguaggio di programmazione efficente (C++??)


perchè no!



---------------
Un risultato se non è ripetibile non esiste (by qqcreafis).




 
 InizioPagina
 

Versione Completa!

Home page     TOP100-SOLAR    Home page forum