Mathematican version 8 mukainen.   (25.10.2012 SKK)

Tavallinen heiluri

Otetaan tarkastelun kohteeksi tavallinen yksinkertainen heiluri. Tämä koostuu kitkattomaan niveleen kiinnitetystä (massattomasta) varresta sekä sen päässä olevasta kuulasta. Olkoon varren pituus L ja sen päässä olevan kuulan massa m. Kun heiluri poikkeutetaan tasapainoasemastaan ja se vapautetaan, syntyy heiluriliike. Rajoitutaan tarkastelemaan tasossa tapahtuvaa liikettä, jolloin heilurin asema voidaan ilmaista kulmalla θ, joka osoittaa poikkeaman pystysuorasta suunnasta.

Heilurin kuulaan vaikuttaa painovoima mg. Tämä voima yhdessä varren tukivoiman kanssa aiheuttaa tangentiaalisen voiman m g sin(θ) heilurin ympyräkaaren muotoiselle liikeradalle. Newtonin toisen lain mukaisesti tämän voiman tasapainottaa heilurin kulmakiihtyvyys L (((d^2)θ)/(dt^2)), jota vastaava voima on m L (((d^2)θ)/(dt^2)). Nämä voimat siis kumoavat toisensa, jolloin saadaan differentiaaliyhtälö

m L(((d^2)θ)/((dt)^2))+m g sin(θ)=0

eli

(((d^2)θ)/((dt)^2))+k sin(θ)=0                         (k=(g/L)).

Tämän differentiaaliyhtälön ratkaisu ei ole alkeisfunktio. Jos kulma θ on pieni, yhtälössä käytetään usein approksimaatiota sin(θ) = θ, jolloin alkeisfunktiot tarjoavat approksimatiivisen ratkaisun

A cos((Sqrt[k])t)+B sin((Sqrt[k])t).

Lasketaan tarkalle heiluriyhtälölle numeerinen ratkaisu ja tarkastellaan kulman θ aikariippuvuutta. Tämän jälkeen rakennetaan tarkkaan ratkaisuun perustuen animaatio heilurin liikkeelle.

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

Remove["Global`*"]

Heiluria kuvaava toisen kertaluvun differentiaaliyhtälö on helposti ilmaistavissa normaaliryhmänä.

ryhma= {θ'[t] == ω[t], ω'[t] ==-k Sin[θ[t]]}

Ongelman tuntemattomat funktiot ovat heilurin kulma ja kulmanopeus.

tuntemattomat= {θ[t],ω[t]}

Olkoon k=1. Alkuehdon määrittää tilanne, jossa heiluri on levossa poikkeutettuna yhden radiaanin kulmaan.

k=1;alkuehto={θ[0]==1,ω[0]==0}

Ratkaistaan differentiaaliyhtälö numeerisesti.

rtk= NDSolve[Flatten[{ryhma,alkuehto}],tuntemattomat,{t,0,15}]

Muokataan ratkaisu käyttökelpoisempaan muotoon.

kulmat= tuntemattomat/.First[rtk]

Piirretään kuvaaja, jossa näemme vihreällä heilurin kulman θ sekä sinisellä kulmanopeuden ((d θ)/(d t))

Plot[Evaluate[kulmat],{t,0,15},PlotStyle->{Hue[.3],Hue[.6]}]

Heilurin kulma ajan funktiona muistuttaa kosinikäyrää. Tarkasteltu heilurin maksimiheilahduskulma on varsin suuri, jolloin approksimaation sin(θ)=θ tarjoama differentiaaliyhtälön ratkaisu (esitetyillä alkuehdoilla) θ(t)=cos(t) on huonohko. Kuitenkin modifioimalla ratkaisun taajuutta sopivalla kertoimella, saadaan heilurin värähtelylle varsin hyvä alkeisfunktioapproksimaatio.

Alla heilurin paikkaa (vihreä) approksimoidaan funktiolla θ(t)=cos(0.94t) (punainen katkoviiva).

Plot[{kulmat[[1]],Cos[0.94t]},{t,0,15},PlotStyle->{{Green,Thick},{Red,Thick,Dashing[{.02}]}}]

Seuraavassa on muodostettu tarvittavat työkalut heilurin värähtelyn animoimiseksi. Värähtelevän heilurin lisäksi kuvassa näkyvät heilurin kuulaan vaikuttavat voimat. Varren tukivoima on punainen ja maan vetovoima sininen, vihreisiin osakomponentteihin jaettuna. Kyseessä on Mathematicalla kirjoitettu ohjelmakoodi.

kuula[kulma_,varsi_]:={{GrayLevel[0.3],Disk[{varsi*Sin[kulma],-varsi*Cos[kulma]},varsi/10]},Circle[{varsi*Sin[kulma],-varsi*Cos[kulma]},varsi/10]};tanko[kulma_,varsi_]:={Thickness[0.012],Line[{{0,0},{0.9*varsi*Sin[kulma],-0.9varsi*Cos[kulma]}}]};
nuolet[ku_,va_]:={{Hue[0.6],Arrow[{{va Sin[ku],-va Cos[ku]},{va Sin[ku],-va Cos[ku]-20}}]},{Hue[0.3],Arrow[{{va Sin[ku],-va Cos[ku]},{va Sin[ku]+20 Cos[ku] Sin[ku],-va Cos[ku]-20 Cos[ku] Cos[ku]}}],Arrow[{{va Sin[ku],-va Cos[ku]},{va Sin[ku]-20 Sin[ku] Cos[ku],-va Cos[ku]-20 Sin[ku] Sin[ku]}}]},{Hue[0.9],Arrow[{{va Sin[ku],-va Cos[ku]},{va Sin[ku]-20 Cos[ku] Sin[ku],-va Cos[ku]+20 Cos[ku] Cos[ku]}}]}};
kuva[theta_,aika_,teksti_]:= Module[{k,v=50},k=theta/.t->aika;
grafiikka=Graphics[{{GrayLevel[0.7],Rectangle[{-v,0},{v,6}]},Line[{{-v,0},{v,0}}],kuula[k,v],tanko[k,v],Text[Style[teksti,16,Bold,FontFamily->"Helvetica"],{45,3}],nuolet[k,v]}];
Show[grafiikka,PlotRange->{{-65,65},{-70,10}}]];

Animaatio:

anim= Animate[kuva[kulmat[[1]],k 67/500,ToString[k]],{k,0,99,1},SaveDefinitions->True]

Entä mitä heilurille tapahtuu, jos sille annetaan hieman vauhtia? Tarkastellaan ensin tilannetta, jossa alkuehtoon lisätään vauhtia -1.5 (rad/s).

alkuehto2={θ[0]==1,ω[0]==-1.5}

Numeerinen ratkaisu sievennyksineen.

rtk2= NDSolve[Flatten[{ryhma,alkuehto2}],tuntemattomat,{t,0,20}];

kulmat2= tuntemattomat/.First[rtk2]

Piirretään  jälleen kuvaaja, jossa vihreällä on heilurin kulma θ sekä sinisellä kulmanopeus ω.

Plot[Evaluate[kulmat2],{t,0,15},PlotStyle->{Hue[.3],Hue[.6]}]

Alkeisfunktioiden tarjoamat ratkaisut eivät enää tunnu enää kovinkaan sopivilta. Animoidaan jälleen heilurin liikettä, jotta nähdään, mitä tapahtuu. Ensin muokataan hieman yllä käytettyä kuvankoodia.

kuva2[theta_,aika_,teksti_]:= Module[{k,v=50},k=theta/.t->aika;
grafiikka=Graphics[{{GrayLevel[0.7],Rectangle[{-v-30,0},{v+30,12}]},Line[{{-v-30,0},{v+30,0}}],kuula[k,v],tanko[k,v],Text[Style[teksti,16,Bold,FontFamily->"Helvetica"],{70,6}],nuolet[k,v]}];
Show[grafiikka,PlotRange->{{-120,120},{-70,70}}]];

Animaatiokuvat vievät runsaasti koneen muistia, joten muistin vapauttamiseksi voi olla hyvä poistaa edellinen animaatiokuvasarja ennen uuden laskemista. Tämä tapahtuu  napsauttamalla kuvasarjaa oikeassa reunassa yhdistävä hakanen aktiiviseksi (mustaksi) ja painamalla delete. Uusi animaatio.

anim2= Animate[kuva2[kulmat2[[1]],k 179/1000,ToString[k]],{k,0,99,1},SaveDefinitions->True]

Mitä heilurille tapahtuu kun vauhtia annetaan vielä enemmän? Kokeillaan alkuehtoa ω(0) = -2.0(rad/s) ja lasketaan.

alkuehto3={θ[0]==1,ω[0]==-2.0}

rtk3= NDSolve[Flatten[{ryhma,alkuehto3}],tuntemattomat,{t,0,20}];

kulmat3= tuntemattomat/.First[rtk3]

Ja animointi vielä kerran.

anim3= Animate[kuva2[kulmat3[[1]],k 33/200,ToString[k]],{k,0,99,1},SaveDefinitions->True]

Tarkastellaan seuraavaksi heilurien liikeratoja faasitasossa. Olkoon x-akselina heilurin liikkeen kulma ja y-akselina sen kulmanopeus. Ensimmäinen heiluriliike piirretään vihreällä, toinen sinisellä ja kolmas punaisella.

kv1=ParametricPlot[{kulmat[[1]],kulmat[[2]]},{t,0,10},PlotStyle->Green];
kv2=ParametricPlot[{kulmat[[1]]+2Pi,kulmat[[2]]},{t,0,10},PlotStyle->Green];
kv3=ParametricPlot[{kulmat2[[1]],kulmat2[[2]]},{t,0,10},PlotStyle->Blue];
kv4=ParametricPlot[{kulmat2[[1]]+2Pi,kulmat2[[2]]},{t,0,10},PlotStyle->Blue];
kv5=ParametricPlot[{kulmat3[[1]]+4Pi,kulmat3[[2]]},{t,2.5,10.5},PlotStyle->Red];
kv6=ParametricPlot[{kulmat3[[1]]+4Pi,-kulmat3[[2]]},{t,2.5,10.5},PlotStyle->Red];
Show[kv1,kv2,kv3,kv4,kv5,kv6,AspectRatio->Automatic,PlotRange->All]

Tehtäviä

Heiluriliikkeet, jotka eivät tee kokonaisia pyörähdyksiä, muodostavat umpinaisen käyrän. Pyörivä heiluri muodostaa jatkuvan värähtelykäyrän. Mitä näillä faasitasokuvilla kuvataan?

Etsi heilurin alkuehtoja muokkaamalla heiluriliike, jossa heiluri juuri ja juuri pyörähtää ympäri. Mikä on lepoasennosta lähdettäessä tarvittava kulmanopeus? Miltä kyseinen liike näyttää faasitasossa?

JP & SKK 03.05.2001