Mathematican version 8 mukainen.   (25.10.2012 SKK)

Värähtelevä jousisysteemi

Jousen puristumista ja venymistä voidaan kuvata varsin yksinkertaisella matemaattisella mallilla

m (((d^2)x)/(d (t^2)))=-k x,

missä x on jousen poikkeama tasapainoasemasta ja k jouselle tyypillinen jousivakio.

Tässä esimerkissä tarkastelun kohteena on oheisen kuvion mukainen jousisysteemi, jossa kolme kappaletta massoiltaan (Subscript[m, 1]), (Subscript[m, 2]) ja (Subscript[m, 3]) on liitetty toisiinsa ja kiinnikkeeseen neljällä jousella jousivakioiltaan (Subscript[k, 1]), (Subscript[k, 2]), (Subscript[k, 3]) ja (Subscript[k, 4]). Kappaleet voivat liikkua vain pystysuorassa sunnassa.

Kappaleiden paikkakoordinaatit (Subscript[x, 1]), (Subscript[x, 2]) ja (Subscript[x, 3]) ilmoitetaan poikkeamina lepotilasta, ylöspäin positiivisena ja alaspäin negatiivisena. Newtonin lain mukaan kuhunkin kappaleeseen vaikuttava voima on toisaalta kappaleen massa kerrottuna sen kiihtyvyydellä eli paikkakoordinaatin toisella aikaderivaatalla, toisaalta kyseessä on jousien aiheuttama harmoninen voima. Systeemin liikeyhtälöt ovat siten toisen kertaluvun differentiaaliyhtälöitä, yksi yhtälö jokaista kappaletta kohden.

(Subscript[m, 1]) (((d^2)(Subscript[x, 1]))/(d (t^2)))=-(Subscript[k, 1]) (Subscript[x, 1])+(Subscript[k, 2])((Subscript[x, 2])-(Subscript[x, 1]))+(Subscript[k, 3])((Subscript[x, 3])-(Subscript[x, 1])),
(Subscript[m, 2]) (((d^2)(Subscript[x, 2]))/(d (t^2)))=-(Subscript[k, 2])((Subscript[x, 2])-(Subscript[x, 1]))-(Subscript[k, 4])((Subscript[x, 2])-(Subscript[x, 3])),
(Subscript[m, 3]) (((d^2)(Subscript[x, 3]))/(d (t^2)))=-(Subscript[k, 3])((Subscript[x, 3])-(Subscript[x, 1]))+(Subscript[k, 4])((Subscript[x, 2])-(Subscript[x, 3])).

Tutkitaan jousisysteemin käyttäytymistä ratkaisemalla differentiaaliyhtälöryhmä.

Laskujen aluksi on syytä hävittää mahdollisista aiemmista laskuista jääneet muuttujat.

Remove["Global`*"]

Asetetaan kappaleiden massoille ja jousivakioille numeeriset arvot:

m1= 2; m2= 1; m3= 1;

k1= 4; k2= 2; k3= 2; k4= 1;

Muodostetaan systeemin differentiaaliyhtälöryhmä.

ryhma= {m1 x1''[t] == -k1 x1[t] + k2(x2[t] - x1[t]) + k3(x3[t] - x1[t]),m2 x2''[t] == - k2(x2[t] - x1[t]) - k4(x2[t] - x3[t]),m3 x3''[t] == - k3(x3[t] - x1[t]) + k4(x2[t] - x3[t])}

Kerätään kappaleiden sijaintia osoittavat funktiot listaksi, samoin näiden derivaatat.

funktiot= {x1[t],x2[t],x3[t]}

derivaatat= D[funktiot,t]

Systeemiä tarkastellaan siten, että se sysätään hetkellä t=0 liikkeelle lepotilasta antamalla kullekin kappaleelle jokin alkunopeus. Alkuehdossa annetaan siten paikkakoordinaateille arvo 0 ja nopeuksille eli paikkakoordinaattien derivaatoille jotkin haluttua liiketilaa vastaavat arvot:

alkusijainti= {x1[0]==0,x2[0]==0,x3[0]==0}

alkunopeus= {x1'[0]==-10,x2'[0]==10,x3'[0]==30}

Ratkaistaan differentiaaliyhtälöryhmä Mathematican DSolve-komennolla ja sievennetään.

ratk= DSolve[Flatten[{ryhma,alkusijainti,alkunopeus}],funktiot,t];

liike= funktiot/.First[ratk]//ExpToTrig//FullSimplify

Sieventäminen saattaa olla varsin hidasta tarkoilla arvoilla laskettaessa. Tuloksesta kuitenkin näkyy, että systeemin liiketila muodostuu kolmesta erilaisesta värähtelystä. Näiden taajuudet ilmenevät lausekkeissa esiintyvistä sinifunktioista,

sin(2 t),    sin((Sqrt[3+(Sqrt[5])]) t),     sin((((-1+(Sqrt[5])) t)/(Sqrt[2])))  = sin((Sqrt[3-(Sqrt[5])]) t).

Jos alkuehtoihin annetaan arvot desimaalilukuina, esimerkiksi

alkunopeus= {x1'[0]==-10.0,x2'[0]==10.0,x3'[0]==30.0}

laskenta tapahtuu liukuluvuilla, jolloin se on nopeampaa, mutta yhtä yksinkertaiseen muotoon ei tulosta myöskään saada. Lausekkeissa usein esiintyy kompleksinen eksponenttifunktio (kuten edellä olevassa sieventämättömässä muodossakin). Tämä on palautettavissa trigonometrisiin funktioihin Eulerin kaavalla: exp(i u) = (e^(i u)) = cos u + i sin u.

Seuraava koodi määrittelee kappaleiden liikkeen animoinnissa tarvittavat työkalut. Kyseessä on Mathematicalla kirjoitettu ohjelmakoodi.

kappale[hor_,ver_,lev_,kork_,teksti_]:={{GrayLevel[0.5],Rectangle[{hor-0.5*lev,ver-0.5*kork},{hor+0.5*lev,ver+0.5*kork}]},Text[Style[teksti,12,Bold,FontFamily->"Helvetica"],{35,ver}]};
jousi[hor_,ala_,yla_,paa_,jaksot_,ampl_]:=Module[{jakso},jakso=(yla-ala-2*paa)/jaksot;
kierre=ParametricPlot[{hor+ampl*Sin[2*Pi*t/jakso],t+ala+paa},{t,0,jaksot*jakso}];
{Line[{{hor,ala},{hor,ala+paa}}],Line[{{hor,yla},{hor,yla-paa}}],kierre[[1]]}];
kuva[x1_,x2_,x3_,t0_,nro_]:=Module[{x10=x1/.t->t0,x20=x2/.t->t0,x30=x3/.t->t0,lepo1=50.0,lepo2=150.0,lepo3=100.0,a=20.0,h=10.0,s=5.0,ampl=3.0,teksti1="m1",teksti2="m2",teksti3="m3"},grafiikka=Graphics[{{GrayLevel[0.5],Rectangle[{-50,0},{50,5}]},Line[{{-50,0},{50,0}}],Text[Style[nro,16,Bold,FontFamily->"Helvetica"],{90,-5}],kappale[0,-lepo1+x10,a,h,teksti1],kappale[0,-lepo2+x20,a,h,teksti2],kappale[a/2,-lepo3+x30,a/2,h,teksti3],jousi[0,-lepo1+x10+h/2,0,s,5,ampl],jousi[-a/2,-lepo2+x20+h/2,-lepo1+x10-h/2,s,10,ampl],jousi[a/2,-lepo3+x30+h/2,-lepo1+x10-h/2,s,5,ampl],jousi[a/2,-lepo2+x20+h/2,-lepo3+x30-h/2,s,5,ampl]}];
Show[grafiikka,AspectRatio->Automatic,PlotRange->{{-100,100},{-200,10}}]];

Ja sitten animointi:

anim= Animate[kuva[liike[[1]],liike[[2]],liike[[3]],N[k 22/100],ToString[k]],{k,0,99,1},SaveDefinitions->True]

Tehtävä

Kiinnostava tilanne syntyy, jos systeemin liikkeessä esiintyy vain yksi edellä mainituista kolmesta taajuudesta. Tällaiseen on mahdollista päästä valitsemalla  alkunopeudet sopivasti. Seuraava lista sisältää kutakin taajuutta vastaavat alkunopeuksien suhteet. Seuraavat kolme komentoa asettavat alkunopeusasetukseksi kunkin näistä vuorollaan. Lukija tutkikoon, millaisia systeemin liikkeitä tällöin syntyy!

moodit= {{0,-1,1},{(1/2) (-1-(Sqrt[5])),1,1},{(1/2) (-1+(Sqrt[5])),1,1}}

alkunopeus= Thread[Equal[derivaatat/.t->0,15 moodit[[1]]]]

alkunopeus= Thread[Equal[derivaatat/.t->0,15 moodit[[2]]]]

alkunopeus= Thread[Equal[derivaatat/.t->0,15 moodit[[3]]]]

SKK & JP 03.05.2001