Discussione:
Fisica col computer
(troppo vecchio per rispondere)
marcofuics
2018-02-20 18:44:48 UTC
Permalink
Vorrei introdurre gli studenti (14enni liceo) all'uso del calcolatore per la fisica. Quale argomento mi suggerite più cool per il connubio phy-ict (non so, approx numeriche?... or else) e se Linux o Windows (particolari sw o semplice Nash) o risorse sw/web?
Luciano Buggio
2018-02-20 18:52:52 UTC
Permalink
Post by marcofuics
Vorrei introdurre gli studenti (14enni liceo) all'uso del calcolatore per la fisica. Quale argomento mi suggerite più cool per il connubio phy-ict (non so, approx numeriche?... or else) e se Linux o Windows (particolari sw o semplice Nash) o risorse sw/web?
Fai in modo che usino il loro cervello, senza questi inglesi orpelli.
marcofuics
2018-02-20 19:58:02 UTC
Permalink
Oddio
Leggi qua
Che ne pensi

https://www.tecnicadellascuola.it/wolfram-la-matematica-scuola-va-insegnata-col-pc
Giorgio Pastore
2018-02-20 19:16:29 UTC
Permalink
Post by marcofuics
Vorrei introdurre gli studenti (14enni liceo) all'uso del calcolatore per la fisica. Quale argomento mi suggerite più cool per il connubio phy-ict (non so, approx numeriche?... or else) e se Linux o Windows (particolari sw o semplice Nash) o risorse sw/web?
Dipende dal tuo background computeresco. E da che obiettivi ti poni.
Se non ti spaventa troppo l'aspetto ludico, puoi provare a utilizzare e
far utilizzare algodoo (http://www.algodoo.com/ ). Non li schiodi piu'
dal computer ;-) E' gratis e c'e' per Windows e Mac (nonche' IOS).
E ci puoi fare cose tremendamente serie.

Giorgio
marcofuics
2018-02-20 19:50:46 UTC
Permalink
Thx Giò, me lo provo.... È troppo se ti chiedo anche un paio di casi d'uso? Spara forte se vuoi,
Col computer ci so fare, ho feeling... (PhD calcolo distribuito sulla rete)
Giorgio Pastore
2018-02-20 22:04:15 UTC
Permalink
Post by marcofuics
Thx Giò, me lo provo.... È troppo se ti chiedo anche un paio di casi d'uso? Spara forte se vuoi,
Col computer ci so fare, ho feeling... (PhD calcolo distribuito sulla rete)
Il problema e' se ci sai fare anche "come i ragazzi".

qualche esempio di utilizzo lo puoi trovare su you tube (eventualmente
col vecchio nom di Phun).
P.es.:

ci puoi fare cose "seriose" come queste:





Ma anche folli meccansmi con molle, pulegge, ingranaggi etc. Di ogni
oggetto puoi variare in real time le caratteristiche fisiche.

Sempre on line trovi diversi tutorial.
fract
2018-02-20 20:04:19 UTC
Permalink
Post by marcofuics
Vorrei introdurre gli studenti (14enni liceo) all'uso del calcolatore
per la fisica
senza dubbio Physion (simulazioni)
Giorgio Pastore
2018-02-20 22:11:37 UTC
Permalink
Un' alternativa (sempre della serie "programming, but physics first" è
di usare Ejs dell' open source physics
https://www.compadre.org/osp/webdocs/Tools.cfm?t=EJS

che ha gia' una notevole lista di modelli adattabili. Conosco chi lo
utilizza normalmente a livello liceo classico!
Marco C.
2018-02-21 13:54:48 UTC
Permalink
On Tue, 20 Feb 2018 10:44:48 -0800 (PST), marcofuics
Post by marcofuics
Vorrei introdurre gli studenti (14enni liceo) all'uso del calcolatore per la fisica
Quale argomento mi suggerite più cool per il connubio phy-ict (non so, approx
numeriche?... or else) e se Linux o Windows (particolari sw o semplice Nash)
o risorse sw/web?
io ti consigierei di spiegare ai tuoi allievi un linguaggio di
programmazione e un po' di tecnica di programmazione così, quando ne
avranno bisogno, svilupperanno da soli quei programmi (o i SW)
necessari per fare fisica con il computer.

Marco C.
Luciano Buggio
2018-02-21 14:13:21 UTC
Permalink
Post by Marco C.
On Tue, 20 Feb 2018 10:44:48 -0800 (PST), marcofuics
Post by marcofuics
Vorrei introdurre gli studenti (14enni liceo) all'uso del calcolatore per la fisica
Quale argomento mi suggerite piů cool per il connubio phy-ict (non so, approx
numeriche?... or else) e se Linux o Windows (particolari sw o semplice Nash)
o risorse sw/web?
io ti consigierei di spiegare ai tuoi allievi un linguaggio di
programmazione e un po' di tecnica di programmazione cosě, quando ne
avranno bisogno, svilupperanno da soli quei programmi (o i SW)
necessari per fare fisica con il computer.
Così va bene.
Lo faranno se vorranno.

L.B.
Sergio Pomante
2018-03-03 23:38:56 UTC
Permalink
On Tue, 20 Feb 2018 10:44:48 -0800 (PST), marcofuics
Post by marcofuics
Vorrei introdurre gli studenti (14enni liceo) all'uso del calcolatore per la fisica.
Quale argomento mi suggerite più cool per il connubio phy-ict (non so, approx numeriche?... or else)
e se Linux o Windows (particolari sw o semplice Nash) o risorse sw/web?
Usare un laboratorio e' troppo antiquato?!

Trovo estremamente dannoso per un ragazzo avere un primo approccio
che NON SIA sperimentale MA simulato.

Molto, molto grave! e molto dannoso... da un punto di vista
strettamente formativo!

Piu' avanti, MAGARI, potranno dilettarsi in simulazioni... ma dopo!
molto dopo.
p***@gmail.com
2018-04-12 17:44:37 UTC
Permalink
Post by marcofuics
Vorrei introdurre gli studenti (14enni liceo) all'uso del calcolatore per la fisica. Quale argomento mi suggerite più cool per il connubio phy-ict (non so, approx numeriche?... or else) e se Linux o Windows (particolari sw o semplice Nash) o risorse sw/web?
Python+scipy

esempio di programmino di circa 100 righe (gravita`, corpi rigidi, fisica galileiana, attrito, integrazione):

inizio codice:

import numpy as np
import time
from matplotlib import pyplot as plt
import matplotlib.animation as animation


def update(i):
global x,lastX,nextX,v,a,passo,passok,m,gg,passo1,passo2,f

t=16
dt=1.0/t

f=f+1

if f<50:
passo[mm[0]==42]*=1.01
passo[mm[1]==42]*=1.01
if f>50 and f<100:
passo[mm[0]==42]/=1.01
passo[mm[1]==42]/=1.01
passo[mm[0]==46]/=1.01
passo[mm[1]==46]/=1.01
if f>100 and f<150:
passo[mm[0]==46]*=1.01
passo[mm[1]==46]*=1.01
if f>150:
f=0

for i in range(t):

a1=np.zeros(x.shape)
a1[:,1]=-gg*dt

g=np.where(x[:,1]<-1)
a1[g]*=[0,-100]

diff=np.squeeze(np.diff(x[mm],axis=0))
d=np.sqrt(np.sum(diff**2,axis=1))

difference=(d-passo)/d

t=(diff*.5*difference[:,np.newaxis])*dt*passok[:,np.newaxis]

np.add.at(x,mm[0],np.squeeze((t[:,np.newaxis])))
np.add.at(x,mm[1],-np.squeeze((t[:,np.newaxis])))

v=x-lastX
v[g]=0
nextX=x+v+a1*dt*dt
lastX=x
x=nextX

scat.set_offsets(x[m])

n=13
x=np.stack(np.meshgrid(np.linspace(0,n,n),np.linspace(0,n,n))).reshape((2,-1)).swapaxes(0,1)
passo=n/(n-1)

mm=np.concatenate(
(np.repeat(np.arange(n*n).reshape((n,n)),2,axis=1)[:,1:-1].reshape((-1,2)).T,
np.repeat(np.arange(n*n).reshape((n,n)),2,axis=0)[1:-1].T.reshape((-1,2)).T.reshape((2,-1)),
(np.dstack([np.arange(n*0,n*(n-1)),np.arange(n*1+1,n*n+1)]).reshape((n-1,-1))[:,:-2]).reshape((-1,2)).T,
(np.dstack([np.arange(n*0+1,n*(n-1)+1),np.arange(n*1,n*n)]).reshape((n-1,-1))[:,:-2]).reshape((-1,2)).T
),axis=1)

k1=np.squeeze(np.diff(x[mm],axis=0))
passo=np.sqrt(np.sum(k1**2,axis=1))
passok=np.zeros(len(passo))

v=np.zeros(x.shape)

lastX=x

ar=[3096, 3099, 3611, 3643, 4091, 8187, 8183, 4095, 2047, 118, 126, 124, 60]

k1=np.zeros((n,n))

for i in range(len(ar)):
k=i*n
m=(np.array(list(np.binary_repr(ar[i],n)),dtype='int8'))
k1[i]=((m*np.arange(n)+k)*m)

for j in k1[k1!=0]:
passok+=np.logical_or(mm[0]==j,(mm[1]==j))

passok=passok>1

m=(k1!=0).flatten()

nextX=np.zeros(x.shape)

fig = plt.figure(figsize=(7, 7))
ax = fig.add_axes([0, 0, 1, 1], frameon=False)

ax.set_xlim(-n*2, n*2), ax.set_xticks([])
ax.set_ylim(-n*2, n*2), ax.set_yticks([])

scat = ax.scatter(x[0],x[1],s=10*n)

gg=0.1
f=0

ani = animation.FuncAnimation(fig, update, interval=16,save_count=400)
plt.show()

fine codice

risultato (elefante molliccio che cammina all`indietro puntellandosi con la proboscide):

Loading Image...
marcofuics
2018-04-13 08:00:46 UTC
Permalink
Post by p***@gmail.com
Post by marcofuics
Vorrei introdurre gli studenti (14enni liceo) all'uso del calcolatore per la fisica. Quale argomento mi suggerite più cool per il connubio phy-ict (non so, approx numeriche?... or else) e se Linux o Windows (particolari sw o semplice Nash) o risorse sw/web?
Python+scipy
import numpy as np
import time
from matplotlib import pyplot as plt
import matplotlib.animation as animation
global x,lastX,nextX,v,a,passo,passok,m,gg,passo1,passo2,f
t=16
dt=1.0/t
f=f+1
passo[mm[0]==42]*=1.01
passo[mm[1]==42]*=1.01
passo[mm[0]==42]/=1.01
passo[mm[1]==42]/=1.01
passo[mm[0]==46]/=1.01
passo[mm[1]==46]/=1.01
passo[mm[0]==46]*=1.01
passo[mm[1]==46]*=1.01
f=0
a1=np.zeros(x.shape)
a1[:,1]=-gg*dt
g=np.where(x[:,1]<-1)
a1[g]*=[0,-100]
diff=np.squeeze(np.diff(x[mm],axis=0))
d=np.sqrt(np.sum(diff**2,axis=1))
difference=(d-passo)/d
t=(diff*.5*difference[:,np.newaxis])*dt*passok[:,np.newaxis]
np.add.at(x,mm[0],np.squeeze((t[:,np.newaxis])))
np.add.at(x,mm[1],-np.squeeze((t[:,np.newaxis])))
v=x-lastX
v[g]=0
nextX=x+v+a1*dt*dt
lastX=x
x=nextX
scat.set_offsets(x[m])
n=13
x=np.stack(np.meshgrid(np.linspace(0,n,n),np.linspace(0,n,n))).reshape((2,-1)).swapaxes(0,1)
passo=n/(n-1)
mm=np.concatenate(
(np.repeat(np.arange(n*n).reshape((n,n)),2,axis=1)[:,1:-1].reshape((-1,2)).T,
np.repeat(np.arange(n*n).reshape((n,n)),2,axis=0)[1:-1].T.reshape((-1,2)).T.reshape((2,-1)),
(np.dstack([np.arange(n*0,n*(n-1)),np.arange(n*1+1,n*n+1)]).reshape((n-1,-1))[:,:-2]).reshape((-1,2)).T,
(np.dstack([np.arange(n*0+1,n*(n-1)+1),np.arange(n*1,n*n)]).reshape((n-1,-1))[:,:-2]).reshape((-1,2)).T
),axis=1)
k1=np.squeeze(np.diff(x[mm],axis=0))
passo=np.sqrt(np.sum(k1**2,axis=1))
passok=np.zeros(len(passo))
v=np.zeros(x.shape)
lastX=x
ar=[3096, 3099, 3611, 3643, 4091, 8187, 8183, 4095, 2047, 118, 126, 124, 60]
k1=np.zeros((n,n))
k=i*n
m=(np.array(list(np.binary_repr(ar[i],n)),dtype='int8'))
k1[i]=((m*np.arange(n)+k)*m)
passok+=np.logical_or(mm[0]==j,(mm[1]==j))
passok=passok>1
m=(k1!=0).flatten()
nextX=np.zeros(x.shape)
fig = plt.figure(figsize=(7, 7))
ax = fig.add_axes([0, 0, 1, 1], frameon=False)
ax.set_xlim(-n*2, n*2), ax.set_xticks([])
ax.set_ylim(-n*2, n*2), ax.set_yticks([])
scat = ax.scatter(x[0],x[1],s=10*n)
gg=0.1
f=0
ani = animation.FuncAnimation(fig, update, interval=16,save_count=400)
plt.show()
fine codice
https://s9.postimg.cc/bs7ltdgxr/line.gif
grazieee :)

gentilissima
marcofuics
2018-04-13 08:07:52 UTC
Permalink
Post by p***@gmail.com
Post by marcofuics
Vorrei introdurre gli studenti (14enni liceo) all'uso del calcolatore per la fisica. Quale argomento mi suggerite più cool per il connubio phy-ict (non so, approx numeriche?... or else) e se Linux o Windows (particolari sw o semplice Nash) o risorse sw/web?
Python+scipy
import numpy as np
import time
from matplotlib import pyplot as plt
import matplotlib.animation as animation
global x,lastX,nextX,v,a,passo,passok,m,gg,passo1,passo2,f
t=16
dt=1.0/t
f=f+1
passo[mm[0]==42]*=1.01
passo[mm[1]==42]*=1.01
passo[mm[0]==42]/=1.01
passo[mm[1]==42]/=1.01
passo[mm[0]==46]/=1.01
passo[mm[1]==46]/=1.01
passo[mm[0]==46]*=1.01
passo[mm[1]==46]*=1.01
f=0
a1=np.zeros(x.shape)
a1[:,1]=-gg*dt
g=np.where(x[:,1]<-1)
a1[g]*=[0,-100]
diff=np.squeeze(np.diff(x[mm],axis=0))
d=np.sqrt(np.sum(diff**2,axis=1))
difference=(d-passo)/d
t=(diff*.5*difference[:,np.newaxis])*dt*passok[:,np.newaxis]
np.add.at(x,mm[0],np.squeeze((t[:,np.newaxis])))
np.add.at(x,mm[1],-np.squeeze((t[:,np.newaxis])))
v=x-lastX
v[g]=0
nextX=x+v+a1*dt*dt
lastX=x
x=nextX
scat.set_offsets(x[m])
n=13
x=np.stack(np.meshgrid(np.linspace(0,n,n),np.linspace(0,n,n))).reshape((2,-1)).swapaxes(0,1)
passo=n/(n-1)
mm=np.concatenate(
(np.repeat(np.arange(n*n).reshape((n,n)),2,axis=1)[:,1:-1].reshape((-1,2)).T,
np.repeat(np.arange(n*n).reshape((n,n)),2,axis=0)[1:-1].T.reshape((-1,2)).T.reshape((2,-1)),
(np.dstack([np.arange(n*0,n*(n-1)),np.arange(n*1+1,n*n+1)]).reshape((n-1,-1))[:,:-2]).reshape((-1,2)).T,
(np.dstack([np.arange(n*0+1,n*(n-1)+1),np.arange(n*1,n*n)]).reshape((n-1,-1))[:,:-2]).reshape((-1,2)).T
),axis=1)
k1=np.squeeze(np.diff(x[mm],axis=0))
passo=np.sqrt(np.sum(k1**2,axis=1))
passok=np.zeros(len(passo))
v=np.zeros(x.shape)
lastX=x
ar=[3096, 3099, 3611, 3643, 4091, 8187, 8183, 4095, 2047, 118, 126, 124, 60]
k1=np.zeros((n,n))
k=i*n
m=(np.array(list(np.binary_repr(ar[i],n)),dtype='int8'))
k1[i]=((m*np.arange(n)+k)*m)
passok+=np.logical_or(mm[0]==j,(mm[1]==j))
passok=passok>1
m=(k1!=0).flatten()
nextX=np.zeros(x.shape)
fig = plt.figure(figsize=(7, 7))
ax = fig.add_axes([0, 0, 1, 1], frameon=False)
ax.set_xlim(-n*2, n*2), ax.set_xticks([])
ax.set_ylim(-n*2, n*2), ax.set_yticks([])
scat = ax.scatter(x[0],x[1],s=10*n)
gg=0.1
f=0
ani = animation.FuncAnimation(fig, update, interval=16,save_count=400)
plt.show()
fine codice
https://s9.postimg.cc/bs7ltdgxr/line.gif
però non funge


https://repl.it/repls/CaringDownrightArchitecture

ho provato qui

https://repl.it/repls/CaringDownrightArchitecture
Archaeopteryx
2018-04-13 08:54:00 UTC
Permalink
E' fantastico ma siamo sicuri sia didattico?
--
"Buongiorno, qual è la password della wi-fi?"
"Prima deve ordinare da bere"
"Ok, una media chiara, quant'è?"
"Quattro euro"
"Ora mi dice la password?"
"Prima deve ordinare da bere; senza spazi e minuscolo"
p***@gmail.com
2018-04-13 10:02:40 UTC
Permalink
Post by Archaeopteryx
E' fantastico ma siamo sicuri sia didattico?
Si puo` usare come base per semplici simulazioni fisiche. Questo e` il listato minimo:

inizio codice:

import numpy as np
from matplotlib import pyplot as plt
import matplotlib.animation as animation


def update(fr):
global x,lastX,nextX,passo

t=32
dt=1.0/t

for i in range(t):

acc=np.zeros(x.shape)
acc[:,1]=-grav*dt

g=np.where(x[:,1]<0)
acc[g]*=[0,-1]
x[g]*=[1,0]

diff=np.squeeze(np.diff(x[mm],axis=0))
d=np.sqrt(np.sum(diff**2,axis=1))

difference=(d-passo)/d

t=(diff*.5*difference[:,np.newaxis])*dt

np.add.at(x,mm[0],np.squeeze((t[:,np.newaxis])))
np.add.at(x,mm[1],-np.squeeze((t[:,np.newaxis])))

vel=x-lastX
vel[g]=0
nextX=x+vel+acc*dt*dt
lastX=x
x=nextX

scat.set_offsets(x)


n=15
x=np.stack(np.meshgrid(np.linspace(0,n,n),np.linspace(0,n,n))).reshape((2,-1)).swapaxes(0,1)+[0,5]

mm=np.concatenate(
(np.repeat(np.arange(n*n).reshape((n,n)),2,axis=1)[:,1:-1].reshape((-1,2)).T,
np.repeat(np.arange(n*n).reshape((n,n)),2,axis=0)[1:-1].T.reshape((-1,2)).T.reshape((2,-1)),
(np.dstack([np.arange(n*0,n*(n-1)),np.arange(n*1+1,n*n+1)]).reshape((n-1,-1))[:,:-2]).reshape((-1,2)).T,
(np.dstack([np.arange(n*0+1,n*(n-1)+1),np.arange(n*1,n*n)]).reshape((n-1,-1))[:,:-2]).reshape((-1,2)).T
),axis=1)

k1=np.squeeze(np.diff(x[mm],axis=0))
passo=np.sqrt(np.sum(k1**2,axis=1))


lastX=x
nextX=np.zeros(x.shape)

fig = plt.figure(figsize=(7, 7))
ax = fig.add_axes([0, 0, 1, 1], frameon=False)

ax.set_xlim(-n*2, n*2), ax.set_xticks([])
ax.set_ylim(-n*2, n*2), ax.set_yticks([])

scat = ax.scatter(x[0],x[1],s=10)

grav=5

ani = animation.FuncAnimation(fig, update, interval=16,save_count=200)
ani.save('/tmp/grav.gif', dpi=80, writer='imagemagick',fps=60)
plt.show()

fine codice.

risultato:
Loading Image...

La simulazione consiste in n*n masse puntiformi legate (piu` o meno) rigidamente . La rigidita` dipende dal numero di passaggi di integrazione (valore t).

Esempio di modifica: togliendo la gravita` (grav=0), e impostando opportunamente la velocita` iniziale di 4 corpi diposti in punti opposti (lastX), posso mettere in rotazione l`intera struttura:

Loading Image...
p***@gmail.com
2018-04-13 10:55:29 UTC
Permalink
Post by Archaeopteryx
E' fantastico ma siamo sicuri sia didattico?
Visto che lo hai gradito, ti mostro anche la mia idea iniziale, ancora meno didattica.

Didascalia: "elefante nello spazio che si trasforma con sforzo lamarckiano in giraffa, e viceversa":

Loading Image...

(per apprezzare l`animazione nella sua velocita` originale bisogna scaricarla e visualizzarla con un lettore multimediale)
p***@gmail.com
2018-04-13 11:21:20 UTC
Permalink
Post by p***@gmail.com
Post by Archaeopteryx
E' fantastico ma siamo sicuri sia didattico?
Visto che lo hai gradito, ti mostro anche la mia idea iniziale, ancora meno didattica.
https://s9.postimg.cc/ugupdsblb/prova.gif
(per apprezzare l`animazione nella sua velocita` originale bisogna scaricarla e visualizzarla con un lettore multimediale)
Forse la parte didattica in questo caso puo` essere la conservazione del baricentro nello spazio? cioe` la trasformazione non modifica la velocita` del sistema?

(ad un certo punto si muove verso l`alto perche` ho dimenticato di togliere il pavimento)
Archaeopteryx
2018-04-13 12:20:39 UTC
Permalink
Post by p***@gmail.com
Forse la parte didattica in questo caso puo` essere la
conservazione del baricentro nello spazio? cioe` la
trasformazione non modifica la velocita` del sistema?
A parte che per me è inevitabile vederci anche un bel
virtuismo delle librerie di Python (io uso solo il C++ che
queste cose non ce l'ha) la mia perplessità era: cosa
capiscono del senso di usare un computer per simulare la
realtà? Se ho capito bene parliamo di scuola quindi al
massimo le medie superiori. Quello che all'epoca avrei
capito io sarebbe stato al massimo, per esempio far cadere
una massa, cercare di filmarla, misurare dal filmato la
posizione sull'asse verticale, implementare un semplice
moto parabolico con un linguaggio e controllare che le
cose andassero d'accordo. Io credo che sia questo che fa
passare il succo del metodo della simulazione su PC.

L'elegiraffa è un complicato, molto complicato,
assemblaggio di corpi rigidi che difficilmente si potrebbe
costruire nella realtà, filmare e poi controllare tutte le
posizioni per poi verificare che corrispondano a quelle
delle parti.

Però metto le mani avanti, io ho una forma mentis un po'
rigorosa su queste cose, dato che dovevo controllare
continuamente che il software desse le risposte giuste per
il modello. Potrebbe darsi che lo scopo sia un altro, per
esempio mostrare la potenza di Python o altro la cui
valenza didattica non immagino.
--
"Buongiorno, qual è la password della wi-fi?"
"Prima deve ordinare da bere"
"Ok, una media chiara, quant'è?"
"Quattro euro"
"Ora mi dice la password?"
"Prima deve ordinare da bere; senza spazi e minuscolo"
p***@gmail.com
2018-04-13 13:41:56 UTC
Permalink
Post by Archaeopteryx
A parte che per me è inevitabile vederci anche un bel
virtuismo delle librerie di Python (io uso solo il C++ che
queste cose non ce l'ha)
Altre 10 righe di codice e ho simulato una specie di contrazione muscolare che si propaga galvanicamente:

Loading Image...
marcofuics
2018-04-14 07:35:34 UTC
Permalink
Post by p***@gmail.com
Post by Archaeopteryx
A parte che per me è inevitabile vederci anche un bel
virtuismo delle librerie di Python (io uso solo il C++ che
queste cose non ce l'ha)
https://s9.postimg.cc/byzjleb9b/im_1.gif
molto bello

visto che tieni la mano calda
:-)

simuli la caduta di una molla (inizialmente tenuta compressa) da una certa altezza h?
p***@gmail.com
2018-04-14 09:20:08 UTC
Permalink
Post by marcofuics
Post by p***@gmail.com
Post by Archaeopteryx
A parte che per me è inevitabile vederci anche un bel
virtuismo delle librerie di Python (io uso solo il C++ che
queste cose non ce l'ha)
https://s9.postimg.cc/byzjleb9b/im_1.gif
molto bello
visto che tieni la mano calda
:-)
simuli la caduta di una molla (inizialmente tenuta compressa) da una certa altezza h?
Con la molla ci sono delle difficolta` che devo ancora risolvere (conservazione dell`energia, collisioni).

Ho riguardato il codice ed ho trovato un grave errore (praticamente funzionava per sbaglio); questa e` la versione corretta:

inizio_codice

import numpy as np
import time
from matplotlib import pyplot as plt
import matplotlib.animation as animation

def update(fr):

global pos,lastX,nextX,passo,t0,t1,ts,t,f0,f1,qu

dt=1.0/ts

acc=np.zeros(pos.shape)
acc[:,1]=-grav

for i in range(16):
for n,m in enumerate(mm):
diff=np.squeeze(-np.diff(pos[m],axis=0))
d=np.sqrt(np.sum(diff**2,axis=1))

difference=(passo[n]-d)/d
t=diff*.5*difference[:,np.newaxis]

np.add.at(pos,m[0],t)
np.add.at(pos,m[1],-t)

pos[5*5-int(5/2)-1]=[0,l]

if (fr==10):
pos+=[.05,0]

nextX=2*pos-lastX+acc*dt*dt
lastX=pos
pos=nextX

f0=pos[2,0]<0
if (f0 ^ f1) and (f0):
t1=time.time()
time_text.set_text(time_template % (t1-t0,(fr-qu)*dt) )
t0=t1
qu=fr
f1=pos[2,0]<0

scat.set_offsets(pos)

n=5

pos=np.stack(np.meshgrid(np.linspace(0,1,n),np.linspace(0,1,n))).reshape((2,-1)).swapaxes(0,1)-[.5,.5]

mm= (np.repeat(np.arange(n*n).reshape((n,n)),2,axis=1)[:,1:-1].reshape((-1,2)).T,
np.repeat(np.arange(n*n).reshape((n,n)),2,axis=0)[1:-1].T.reshape((-1,2)).T.reshape((2,-1)),
(np.dstack([np.arange(n*0,n*(n-1)),np.arange(n*1+1,n*n+1)]).reshape((n-1,-1))[:,:-2]).reshape((-1,2)).T,
(np.dstack([np.arange(n*0+1,n*(n-1)+1),np.arange(n*1,n*n)]).reshape((n-1,-1))[:,:-2]).reshape((-1,2)).T)


l=15
pos[n*n-int(n/2)-1]=[0,l]

k1=np.squeeze(np.diff(pos[np.concatenate(mm,axis=1)],axis=0))
passo=np.sqrt(np.sum(k1**2,axis=1))
passo=np.split(passo,np.cumsum([ i.shape[1] for i in mm ]))

lastX=pos

fig = plt.figure(figsize=(7, 7))
ax = fig.add_axes([0, 0, 1, 1], frameon=False)

ax.set_xlim(-20, 20), ax.set_xticks([])
ax.set_ylim(-20, 20), ax.set_yticks([])

grav=9.8
qu=0

time_template = 'periodo = %.2fs (%.2fs); calcolato='+'%.2fs' %(2*np.pi*np.sqrt(l/grav))
time_text = ax.text(0.05, 0.9, '', transform=ax.transAxes)

ts=60
scat = ax.scatter(pos[0],pos[1],s=10)
ani = animation.FuncAnimation(fig, update, interval=1000/ts,save_count=1500)
f1=0
t0=time.time()

plt.show()

fine_codice

risultato (questa volta didattico):

Loading Image...

pendolo l=15 m; g=9.8 m/s^2.

Il tempo tra parentesi e` quello calcolato tenendo conto del ritardo nell`elaborazione (dovuta nel caso specifico alla conversione del filmato avvenuta in tempo reale).
marcofuics
2018-04-14 19:03:15 UTC
Permalink
Paola scritto
#####
Con la molla ci sono delle difficolta` che devo ancora risolvere (conservazione dell`energia, collisioni).
#####

C'È un filmato carino sul web di un tipo che lascia cadere una molla elicoidale con asse verticale e compressa. La molla appena lasciata cade, ma l'estremità superiore rimane sospesa e ferma a mezz'aria
p***@gmail.com
2018-04-14 11:42:25 UTC
Permalink
Post by marcofuics
Post by p***@gmail.com
Post by Archaeopteryx
A parte che per me è inevitabile vederci anche un bel
virtuismo delle librerie di Python (io uso solo il C++ che
queste cose non ce l'ha)
https://s9.postimg.cc/byzjleb9b/im_1.gif
molto bello
Grazie, te ne propongo uno ispirato da una poesia di Gozzano:

"Dolce Parrasio! Dileguati giorni
dell'Accademia, quando il Mascheroni
con sottile argomento di metalli
le risentite rane interrogava.
Le querule presaghe della pioggia
(altro presagio al secolo vicino!)
stavano tronche il collo. Con sagace
man le immolava vittime a Minerva
su l'ara del saper l'abate illustre,
e se all'argentea benda altra di stagno
dalle vicine carni al lembo estremo
appressava, le vittime risorte
vibravan tutte con tremor frequente.
L'orobia pastorella impallidiva
sotto le fresche rose del belletto,
meravigliando alla virtù che cieca
passa per interposti umidi tratti
dal vile stagno al ricco argento e torna
da questo a quello con perenne giro.
Di sua perplessità - dubito forte -
si giovava l'abate bergamasco
per cingere lo snello guardinfante
e baciare furtivo (auspice Volta!)
tra l'orecchio e la vasta chioma nivea
la dotta pastorella sbigottita."

(balletto di rana mozzata galvanizzata)
Loading Image...

Il codice aggiuntivo rispetto all`elefante e` questo:

inizio_codice

def update(i):
...
...
size[int(n/2)]=20

pp=np.where(size==20)[0]

for p in pp:
size[mm[0][mm[1]==p]]=np.where(size[mm[0][mm[1]==p]]==1,20,size[mm[0][mm[1]==p]])
size[mm[1][mm[0]==p]]=np.where(size[mm[1][mm[0]==p]]==1,20,size[mm[1][mm[0]==p]])
size[pp]=40
size[size>20]-=1

for s in range(len(size)):
if size[s]>20:
passo[mm[0]==s]=passo1[mm[0]==s]-((size[s]-20)/180)
passo[mm[1]==s]=passo1[mm[1]==s]-((size[s]-20)/180)

...
...

passo1=passo.copy()
size=np.zeros(n*n)+1

fine_codice
p***@gmail.com
2018-04-13 14:04:41 UTC
Permalink
Post by Archaeopteryx
A parte che per me è inevitabile vederci anche un bel
virtuismo delle librerie di Python (io uso solo il C++ che
queste cose non ce l'ha) la mia perplessità era: cosa
capiscono del senso di usare un computer per simulare la
realtà?
Le librerie servono a velocizzare il calcolo di oggetti multidimensionali (numpy) e per la visualizzazione (matplotlib).

Il realta il programma e` tutto in questa funzione:

inizio

t=32
dt=1.0/t
temp=np.zeros(x.shape)

for i in range(t):

acc=np.zeros(x.shape)
acc[:,1]=-grav
g=np.where(x[:,1]<0)

diff=np.squeeze(np.diff(x[mm],axis=0))
d=np.sqrt(np.sum(diff**2,axis=1))

difference=(d-passo)/d

t=(diff*.5*difference[:,np.newaxis])*dt

np.add.at(x,mm[0],np.squeeze((t[:,np.newaxis])))
np.add.at(x,mm[1],-np.squeeze((t[:,np.newaxis])))

temp[g]=lastX[g]
lastX[g]=x[g]
x[g]=temp[g]
vel=x-lastX
nextX=x+vel+acc*dt*dt
lastX=x
x=nextX

fine

Ho preso spunto da questo articolo:

https://gamedevelopment.tutsplus.com/tutorials/simulate-tearable-cloth-and-ragdolls-with-simple-verlet-integration--gamedev-519
p***@gmail.com
2018-04-13 11:00:18 UTC
Permalink
Post by marcofuics
Post by p***@gmail.com
https://s9.postimg.cc/bs7ltdgxr/line.gif
però non funge
Io uso miniconda3:

https://conda.io/miniconda.html
marcofuics
2018-04-13 19:51:12 UTC
Permalink
Post by p***@gmail.com
Post by marcofuics
Post by p***@gmail.com
https://s9.postimg.cc/bs7ltdgxr/line.gif
però non funge
https://conda.io/miniconda.html
ah
da istallare... ma invece
ne conosci uno che gira web?
con l'import già aggiustati?
fract
2018-04-14 10:58:59 UTC
Permalink
Post by marcofuics
Vorrei introdurre gli studenti (14enni liceo) all'uso del calcolatore
per la fisica. Quale argomento mi suggerite più cool per il connubio
phy-ict (non so, approx numeriche?... or else) e se Linux o Windows
(particolari sw o semplice Nash) o risorse sw/web?
OT: qualcuno usa Pure Data, qui?

http://www.chnry.net/ch/IMG/pdf/2004_pmpd_icmc.pdf

magari a qualcuno (musicofilo) puo' interessare:

si tratta della libreria pmpd (Physical Modelling for Pure Data) per
creare sistemi dinamici, molle, palle rimbalzanti, chaos, onde, fluidi,
ecc., collegabile alla sintesi sonora, per il software: Pure Data
(linguaggio di programmazione visiva per la composizione musicale, sintesi
del suono, ma non solo)
p***@gmail.com
2018-04-15 06:58:57 UTC
Permalink
Post by marcofuics
Vorrei introdurre gli studenti (14enni liceo) all'uso del calcolatore per la fisica. Quale argomento mi suggerite più cool per il connubio phy-ict (non so, approx numeriche?... or else) e se Linux o Windows (particolari sw o semplice Nash) o risorse sw/web?
Per me i giovani (soprattutto se appassionati di informatica) devono avere prima di tutto gli strumenti per resistere alle varie sottoculture, post-moderne idolatrie.

Una delle peggiori sottoc. -per rimanere in tema con il gruppo- e` l`idea che la scienza sia e debba essere qualcosa di "divertente"; il migliore controveleno per questo concetto insensato consiste in:

1) studio del pensiero di Heidegger
2) riflessione del dramma esistenziale di grandissimi scienziati (Boltzmann, Einstein, Goedel, ecc.)
3) stare alla larga dalle pagliacciate degli scienziati (a maggior ragione di quelli grandissimi)
4) lettura di Pasolini:

"Guardo la folla e mi chiedo: «Dov'è questa rivoluzione antropologica di cui tanto scrivo per gente tanto consumata nell'arte di ignorare?» E mi rispondo: «Eccola».

Infatti la folla intorno a me, anziché essere la folla plebea e dialettale di dieci anni fa, assolutamente popolare, è una folla infimo-borghese, che sa di esserlo, che vuole esserlo. Dieci anni fa amavo questa folla; oggi essa mi disgusta.

E mi disgustano soprattutto i giovani (con un dolore e una partecipazione che finiscono poi col vanificare il disgusto): questi giovani imbecilli e presuntuosi, convinti di essere sazi di tutto ciò che la nuova società offre loro: anzi, di essere, di ciò, esempi quasi venerabili. E io sono qui, solo, inerme, gettato in mezzo a questa folla, irreparabilmente mescolato ad essa, alla sua vita che mostra tutta la sua «qualità» come in un laboratorio."

Chiudo in bellezza con la mia ultima creazione: "automóvil blindado blando cammina serpeggiando"

Loading Image...
marcofuics
2018-04-15 08:27:35 UTC
Permalink
Paola scritto
#####
Una delle peggiori sottoc. -per rimanere in tema con il gruppo- e` l`idea che la scienza sia e debba essere qualcosa di "divertente";
#####

Divertente? Perché no?
A me piace, io mi diverto, perciò mi viene facile.
Certo che se la fai facile la capisci anche meglio...
No regole in matematica (o in scienze in generale)
Studiare la regola significa fare altro, non matematica: bisogna capire il meccanismo, vedere la necessità di questo o quello, cogliere il senso e poi svilupparlo nuovamente.
p***@gmail.com
2018-04-15 13:38:41 UTC
Permalink
Post by marcofuics
Paola scritto
Non sono Paola ;-)
Post by marcofuics
#####
Una delle peggiori sottoc. -per rimanere in tema con il gruppo- e` l`idea che la scienza sia e debba essere qualcosa di "divertente";
#####
Divertente? Perché no?
Per ragioni teologiche: "l`albero della Scienza non fu mai l`albero della vita"
Post by marcofuics
A me piace, io mi diverto, perciò mi viene facile.
Va bene divertirsi: ma la scienza fondamentalmente non e` divertente; meglio chiarire subito questo equivoco.
Continua a leggere su narkive:
Loading...