Kaksoisheiluri

Kaksoisheiluri koostuu kitkattomalla nivelellä kiinnitetystä heiluritangosta, jonka päässä on kuula, sekä toisesta heiluritangosta, joka on kiinnitetty kitkattomalla nivelellä edelliseen kuulaan. Myös toisen tangon päässä on kuula. Olkoot heilurien varsien pituudet = L ja niiden päissä olevien kuulien massat (Subscript[m, 1]) ja (Subscript[m, 2]). Kun heilurit poikkeutetaan tasapainoasemastaan siten, että varret ovat samassa pystysuorassa tasossa, ja systeemi vapautetaan, syntyy heilahdusliike. Systeemin asento voidaan ilmaista kahdella kulmalla: massan  (Subscript[m, 1]) varsi muodostaa kulman (Subscript[(θ ), 1]) pystysuoran suunnan kanssa ja massan (Subscript[m, 2]) varsi vastaavalla tavalla kulman (Subscript[θ, 2]).

Systeemille voidaan johtaa seuraavat liikeyhtälöt. Johto on hieman hankala, mutta voidaan ehkä helpoimmin tehdä Lagrangen teorian avulla. (Ks. tätä käsittelevää Mathematica-dokumenttia.)

(((d^2)(Subscript[θ, 1]))/((dt)^2))+m (((d^2)(Subscript[θ, 2]))/((dt)^2)) cos((Subscript[θ, 2]) - (Subscript[θ, 1]))-((m(((Subscript[dθ, 2])/(dt))))^2) sin((Subscript[θ, 2]) - (Subscript[θ, 1]))+(g/L) sin((Subscript[θ, 1]))=0,(((d^2)(Subscript[θ, 2]))/((dt)^2))+ (((d^2)(Subscript[θ, 1]))/((dt)^2)) cos((Subscript[θ, 2]) - (Subscript[θ, 1]))+(((((Subscript[dθ, 1])/(dt))))^2) sin((Subscript[θ, 2]) - (Subscript[θ, 1]))+(g/L) sin((Subscript[θ, 2]))=0,
missä  m=((Subscript[m, 2])/((Subscript[m, 1]) + (Subscript[m, 2]))).

Merkitään k  =  g/L.

Seuraavassa lasketaan heiluriyhtälöille numeeriset ratkaisut ja tarkastellaan heilahduskulmien aikariippuvuutta. Tämän jälkeen rakennetaan animaatio heilurin liikkeelle. Lopuksi tarkastellaan tilannetta faasitasossa.

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

Remove["Global`*"]

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

ryhma =  {θ1'[t]  ==  ω1[
            t], 
ω1'[t] + 
            m ω2'[t] Cos[θ2[t] - θ1[t]] - 
            m θ2'[
                  t]^2 Sin[θ2[t] - θ1[t]] + 
            k Sin[θ1[t]]  ==  
          0, 
θ2'[t]  ==  ω2[
            t], ω2'[
              t] + ω1'[
                t] Cos[θ2[t] - θ1[
                    t]] +  θ1'[
                  t]^2 Sin[θ2[t] - θ1[t]] + 
            k Sin[θ2[t]]  == 0}

Ongelman tuntemattomat funktiot ovat heilurin kahden eri osan kulmat ja niiden kulmanopeudet.

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

Annetaan vakioille arvot k  =  1 ja m  =  0.5 ((Subscript[m, 1])  =  (Subscript[m, 2])). Alkuehdon määrittää tilanne, jossa heiluri on levossa poikkeutettuna mallikuvan mukaisesti.

k = 1; m = 0.5;
alkuehto = {θ1[0] == Pi/6, ω1[0] == 
          0, θ2[0] == Pi/3, ω2[0] == 0}

Ratkaistaan differentiaaliyhtälöryhmä numeerisesti.

rtk =  
      NDSolve[Flatten[{ryhma, alkuehto}], tuntemattomat, {t, 0, 100}, 
        MaxSteps -> 10000]

kulmat =  tuntemattomat /. First[rtk]

Piirretään kuvaajat sekä heilurien kulmille että kulmanopeuksille ajan suhteen. Kuulan (Subscript[m, 1]) suureet on piirretty vihreällä ja kuulan (Subscript[m, 2]) suureet sinisellä. Ensin kulmat.

<< Graphics`Graphics`

DisplayTogether[
      Plot[kulmat[[1]], {t, 0, 100}, PlotStyle -> Hue[ .3]], 
      Plot[kulmat[[3]], {t, 0, 100}, 
        PlotStyle -> Hue[ .6]]]

Vaikka värähtelyt ovatkin varsin samankaltaisia, ne eivät kuitenkaan toista mitään selkeästi erottuvaa muotoa. Vastaavat kulmanopeuksien kuvaajat.

DisplayTogether[
      Plot[kulmat[[2]], {t, 0, 100}, PlotStyle -> Hue[ .3]], 
      Plot[kulmat[[4]], {t, 0, 100}, PlotStyle -> Hue[ .6], 
        MaxBend -> 20]]

Derivaatta käyttäytyy kuten kulmakin, eli värähtelyssä ei ole havaittavissa jaksoa. Tämä käyttäytyminen on tyypillistä kaoottiselle värähtelylle. Tarkastellaan animaation avulla, miltä kyseinen värähtely näyttää.

Seuraavassa luodaan ensin tarvittavat työkalut heilurin värähtelyn animoimiseksi. Kyseessä on Mathematicalla kirjoitettu ohjelmakoodi.

<< Graphics`Arrow`
kuula[x_, y_, kulma_, 
          varsi_] := {{GrayLevel[0.3], 
            Disk[{x + varsi*Sin[kulma], y - varsi*Cos[kulma]}, 
              varsi/10]}, 
          Circle[{x + varsi*Sin[kulma], y - varsi*Cos[kulma]}, 
            varsi/10]};
tanko[x_, y_, kulma_, varsi_] := {Thickness[0.012], 
          Line[{{x, y}, {x + 0.9*varsi*Sin[kulma], 
                y - 0.9  varsi*Cos[kulma]}}]};
kuva[theta1_, theta2_, aika_, teksti_] :=  
        Module[{k, v = 50}, {k = theta1 /. t -> aika, 
            l = theta2 /. t -> aika}; 
grafiikka = 
            Graphics[{{GrayLevel[0.7], 
                  Rectangle[{-v, 0}, {v, 6}]}, 
                Line[{{-v, 0}, {v, 0}}], 
                Text[FontForm[
                    teksti, {"Helvetica-Bold", 12}], {41, 5}], 
                tanko[0, 0, k, v], 
tanko[
                  v Sin[k], -v Cos[k], l, v], 
                kuula[0, 0, k, v], 
                kuula[v Sin[k], -v Cos[k], l, 
                  v]}]; 
Show[grafiikka, 
            AspectRatio -> Automatic, 
            PlotRange -> {{-120, 120}, {-110, 
                  20}}]];

Itse animaatio on lista peräkkäisiä kuvia, joka on ensin laskettava (kestää jonkin aikaa) ja sitten ajettava. Ajaminen tapahtuu napsauttamalla kuvasarjaa oikeassa reunassa yhdistävä hakanen aktiiviseksi (mustaksi) ja painamalla ctrl-y.

anim =  
      Table[kuva[kulmat[[1]], kulmat[[3]], k 1/3, 
          ToString[k]], {k, 0, 99}]

Tarkastellaan seuraavaksi heilurien liikeratoja faasitasossa. Olkoon x-akselina heilurin liikkeen kulma ja y-akselina sen kulmanopeus. Ensimmäisen heilurin liike on piirretty vihreällä ja toisen sinisellä.

kuva1 = 
        ParametricPlot[{kulmat[[1]], kulmat[[2]]}, {t, 0, 
            100}, DisplayFunction -> Identity, 
          PlotStyle -> Hue[ .3]];
kuva2 = 
        ParametricPlot[{kulmat[[3]], kulmat[[4]]}, {t, 0, 
            100}, DisplayFunction -> Identity, 
          PlotStyle -> Hue[ .6]];
Show[kuva1, kuva2, AspectRatio -> Automatic, 
      DisplayFunction -> $DisplayFunction]

Vertaamalla saatua tulosta tavallisen heilurin vastaavaan faasitasokuvaan, käy selväksi, mikä olennainen ero kaoottisen ja tavallisen heilurin välillä on. Tasaisesti toistuvan värähtelykierron sijaan kaoottinen heiluri määrittää tietyn alueen faasitasossa, jonka sisällä heilurin rata kiertää.

Tehtäviä

Kaoottisen ilmiön yksi tunnuspiirre on se, että pieni muutos alkutilanteessa aiheuttaa helposti suuren muutoksen lopputulokseen. Tarkastele tämän väitteen pätevyyttä muuttamalla hieman heilurin alkuehtoja, esimerkiksi 10%, ja vertaamalla saamaasi värähtelyä yllä esitettyihin kulma- ja kulmanopeuskuvaajiin rajoitetulla aikavälillä kaukana alkutilanteesta, esimerkiksi  t = 90...100 s.

Muokataan heilurin alkuehtoja asettamalla (Subscript[θ, 2]) = π hetkellä t = 0 s. Animoi saamasi heiluriliike. Animaatiokuvat vievät runsaasti koneen muistia, joten voit muistin vapauttamiseksi poistaa edellisen animaatiokuvasarjan ennen uuden laskemista. Tämä tapahtuu  napsauttamalla kuvasarjaa oikeassa reunassa yhdistävä hakanen aktiiviseksi (mustaksi) ja painamalla delete. Miltä kyseinen liike näyttää faasitasossa? Osaatko selittää mistä on kysymys? Entä miten nyt vaikuttaa yllä esitetty pieni alkuehdon muutos?

Annetussa tehtävässä massat (Subscript[m, 1]) ja (Subscript[m, 2]) on määritelty yhtäsuuriksi (k = 1/2). Kokeile miten massan muuttaminen vaikuttaa heilurin käytökseen. Kumman, ylemmän vai alemman massan kaksinkertaistaminen aiheuttaa stabiilimman värähtelyn? Käytä päättelyn apuna faasitasokuvia. Miten saamasi tulos suhtautuu heilurille alkuehdossa annettuun energiaan?

JP & SKK 04.05.2001