Harjoitus 11: Mathematica - Differentiaaliyhtälöiden analysointi, lisäpaketit Mat-2.2107 Sovelletun matematiikan tietokonetyöt Syksy 2006 Mat-2.2107 Sovelletun matematiikan tietokonetyöt 1
Harjoituksen aiheita Differentiaaliyhtälöiden ja differentiaaliyhtälösysteemien analysointi Mathematicalla Differentiaaliyhtälösysteemin linearisointi ja stabiilisuustarkastelu Mathematican lisäpaketit Mat-2.2107 Sovelletun matematiikan tietokonetyöt 2
Funktion määrittely Funktion määrittelyssä käytetään sijoitusoperaattoria := - Funktion arvo lasketaan vasta kysyttäessä funktion arvoa jollakin argumentin arvolla. - Funktion määrittelyssä vasemmalla puolella argumenttiin lisätään alaviiva (_). In[1]:= f[x_,y_]:=x+y In[2]:= f[1,2] Out[2]= 3 In[3]:= f[t,2] Out[3]= 2 + t In[6]:= ta[n_]:=table[i^2,{i,n}] In[7]:= ta[5] Out[7]= {1, 4, 9, 16, 25} Mat-2.2107 Sovelletun matematiikan tietokonetyöt 3
Derivointi ja integrointi Jos lauseke on määritelty funktioksi, derivaatta saadaan laskettua -merkinnällä. In[8]:= g[x_]:= x^2 + 5 x In[9]:= g [x] Out[9]= 2 x + 5 In[10]:= g [x] Out[10]= 2 Derivointia varten ovat myös komennot D (osittaisderivaatta) ja Dt (kokonaisderivaatta). Integrointia varten ovat komennot Integrate (symbolinen integrointi) ja NIntegrate (numeerinen integrointi). - Kaikkia lausekkeita ei voida integroida symbolisesti. Mat-2.2107 Sovelletun matematiikan tietokonetyöt 4
Diffenrentiaaliyhtälöt Differentiaaliyhtälössä funktio kirjoitetaan argumenttinsa kanssa. Derivaatat merkitään pilkkua ( ) käyttäen. Yhtäsuuruus merkitään vertailuoperaattorilla ==. - Huom! Tässä älä tee kirjoitusvirhettä z[0]=0; edes Clear ei välttämättä pelasta (vrt. aikaisemmin), ainoa pelastus lienee Quit. Differentiaaliyhtälöt ratkaistaan DSolve -komennolla. - 1. argumentti: ratkaistava differentiaaliyhtälö - 2. argumentti: riippuva muuttuja (tuntematon funktio) - 3. argumentti: riippumaton muuttuja (funktion argumentti) Mat-2.2107 Sovelletun matematiikan tietokonetyöt 5
Differentiaaliyhtälön ratkaisu - esimerkki 1/2 dz(t) dt = 2 c t, z(0) = 0 Ensin ratkaistaan z(t) differentiaaliyhtälöstä. In[194]:= DSolve[{z [t]==2*c*t,z[0]==0},z[t],t] Out[194]= {{z[t] -> c t^2 }} In[195]:= %[[1,1,2]] Out[195]= c t^2 Tuntematon parametri c ratkaistaan annetusta loppuehdosta. In[196]:= Solve[%==16,c] /. t->2 Out[196]= {{c -> 4}} In[197]:= %% /. %[[1]] Out[197]= 4 t^2 Mat-2.2107 Sovelletun matematiikan tietokonetyöt 6
Differentiaaliyhtälön ratkaisu - esimerkki 2/2 Ratkaisu hieman lyhyemmin...: In[202]:= DSolve[{z [t]==2*c*t,z[0]==0},z[t],t] Out[202]= {{z[t] -> c t^2 }} In[203]:= Solve[{%[[1,1,2]]==16,t==2},c] Out[203]= {{c -> 4}} In[204]:= %% /. % Out[204]= {{{z[t] -> 4 t^2 }}} In[205]:= %[[1,1,1,2]] Out[205]= 4 t^2 HUOM! Parametrista riippuvaan muuttujaan viitataan yhtälöissä notaatiolla z[t]: In[206]:= DSolve[{z [t]==5*z[t]},z[t],t] (EI "5*z") Mat-2.2107 Sovelletun matematiikan tietokonetyöt 7
Desimaaliluvut differentiaaliyhtälöissä HUOM! Jos lausekkeissa esiintyy desimaalilukuja, Mathematica antaa vastauksen numeerisessa muodossa (esim. 2.71828... eikä E). - Tällaisten tulosten jatkokäsittely saattaa olla Mathematicalle vaikeaa, jopa mahdotonta. Älä siis mielellään tee näin: In[207]:= DSolve[{x [t]==x[t],x[0]==0.14},x[t],t] Out[207]= {{x[t] -> 0.140000000000000 2.71828182845905^t }} Tee näin: In[208]:= DSolve[{x [t]==x[t],x[0]==x0},x[t],t] /. {x0->0.14} Out[208]= {{x[t] -> 0.14 E^t } Mat-2.2107 Sovelletun matematiikan tietokonetyöt 8
Differentiaaliyhtälösysteemin numeerinen ratkaiseminen ja vaihetason kuvaajan piirtäminen Differentiaaliyhtälösysteemejä voidaan ratkaista numeerisesti komennolla NDSolve. Vaihetason kuvaajan piirtäminen onnistuu komennolla ParametricPlot. In[230]:= NDSolve[{x [t]==y[t],y [t]==-x[t],x[0]==0,y[0]==10}, {x[t],y[t]},{t,0,10}] Out[230]= {{x[t] -> InterpolatingFunction... In[231]:= {x[t],y[t]}/.%[[1]] Out[231]= {InterpolatingFunction... In[232]:= ParametricPlot[%,{t,0,10}] Mat-2.2107 Sovelletun matematiikan tietokonetyöt 9
Differentiaaliyhtälösysteemin linearisointi Olkoon epälineaarinen systeemi annettu muodossa ẋ = f(x,u) Linearisoinnissa systeemiä approksimoidaan tietyn tasapainopisteen (x 0, u 0 ) läheisyydessä Taylorin sarjan 1. kertaluvun termillä. Lineaarisen systeemin tilaesitys on muotoa ẋ(t) = Ax(t) + Bu(t) y(t) = Cx(t) + Du(t) Matriisit A ja B ovat Jakobin matriiseja, jotka lasketaan ottamalla systeemin differentiaaliyhtälöiden osittaisderivaatat kunkin tilamuuttujan ja ohjauksen suhteen. Mat-2.2107 Sovelletun matematiikan tietokonetyöt 10
Differentiaaliyhtälösysteemin stabiilisuus Tasapainopisteen stabiilisuuden tarkastelu: - Systeemi on ensin linearisoitava tasapainopainopisteen ympäristössä. - Linearisoitu systeemi on esitettävissä muodossa ẋ = Ax + Bu Stabiilisuuden määrittäminen kerroinmatriisin A ominaisarvoista: - Toinen ominaisarvoista < 0 ja toinen > 0 tasapainopiste on epästabiili (satulapiste). - Molemmat ominaisarvot < 0 tasapainopiste on asymptoottisesti stabiili (kuilu). - Ominaisarvot ovat puhtaasti imaginaarisia tasapainopiste on stabiili (keskus). Mat-2.2107 Sovelletun matematiikan tietokonetyöt 11
Esimerkki stabiilisuustarkastelusta 1/2 Olkoon tutkittava systeemi: dx dt = ax bxy, dy dt = py + qxy. Systeemin tasapainopisteiden ratkaiseminen: In[1]:= Solve[{a*x[t]-b*x[t]*y[t]==0,-p*y[t]+q*x[t]*y[t]==0}, {x[t],y[t]}] Out[1]=... Mat-2.2107 Sovelletun matematiikan tietokonetyöt 12
Esimerkki stabiilisuustarkastelusta 2/2 Linearisoidun systeemin kerroinmatriisin laskeminen annetun tasapainopisteen ympäristössä: - Komennon Outer argumentti D tarkoittaa osittaisderivointikomentoa. In[2]:= Outer[D,{a*x[t]-b*x[t]*y[t],-p*y[t]+q*x[t]*y[t]},{x[t],y[t]}] Out[2]=... In[3]:= %/.%%[[2]] Out[3]=... Kerroinmatriisin ominaisarvojen (ja ominaisvektorien) laskeminen: In[4]:= Eigensystem[%] Out[4]=... Mat-2.2107 Sovelletun matematiikan tietokonetyöt 13
Lisäpaketit Mathematican ominaisuuksia voidaan laajentaa lisäpaketeilla. Lisäpakettien komennot eivät sisälly kerneliin, ja ne on ladattava erikseen kun Mathematica käynnistetään. Pakettien lataaminen: <<paketti tai Needs["paketti"] - Jos paketti on jo ladattu, Needs-komento ei yritä ladata pakettia uudelleen.?paketti* näyttää uudet komennot, jotka on saatu käyttöön (lataamisen jälkeen) Huom! Jos lataamattoman paketin komentoja yritetään käyttää, syntyy komennon kanssa saman niminen muuttuja Mathematican muistiin. - Ratkaisu: Clear[muuttuja]. Mat-2.2107 Sovelletun matematiikan tietokonetyöt 14
Statistics-paketti Yksi Mathematican lisäpaketeista on Statistics, joka sisältää tilastolliseen analyysiin tarvittavia jakaumia ja komentoja. Jatkuvia jakaumia löytyy paketista Statistics ContinuousDistributions (NormalDistribution, StudentTDistribution, ChiSquareDistribution, FRatioDistribution). Diskreettejä jakaumia löytyy paketista Statistics DiscreteDistributions (BernoulliDistribution, BinomialDistribution, NegativeBinomialDistribution, PoissonDistribution, GeometricDistribution, HyperGeometricDistribution). Mat-2.2107 Sovelletun matematiikan tietokonetyöt 15
Jakauman odotusarvo ja varianssi In[206]:= <<Statistics ContinuousDistributions In[207]:= Mean[ChiSquareDistribution[df]] Out[207]= df In[208]:= Variance[ChiSquareDistribution[df]] Out[208]= 2 df In[209]:= <<Statistics DiscreteDistributions In[210]:= Mean[BinomialDistribution[n,p]] Out[210]= n p In[211]:= Variance[BinomialDistribution[n,p]] Out[211]= n (1 - p) p Mat-2.2107 Sovelletun matematiikan tietokonetyöt 16
Satunnaislukujen generointi Mathematicalla voidaan generoida satunnaislukuja suoraan halutusta jakaumasta Random -komennolla. In[234]:= Random[NormalDistribution[10,1]] Out[234]= 9.94862652574754 In[235]:= Random[PoissonDistribution[5]] Out[235]= 6 Mat-2.2107 Sovelletun matematiikan tietokonetyöt 17
Jakaumien piirtäminen PDF (Probability density function) = tiheysfunktio CDF (Cumulative distribution function) = kertymäfunktio In[238]:= Plot[PDF[NormalDistribution[0,1],x],{x,-3,3}] Out[238]= -Graphics- In[239]:= Plot[CDF[NormalDistribution[0,1],x],{x,-3,3}] Out[239]= -Graphics- In[240]:= <<Graphics Graphics In[241]:= Table[{PDF[PoissonDistribution[5],x],x},{x,0,15}] Out[241]=... In[242]:= BarChart[%] Out[242]= -Graphics- Mat-2.2107 Sovelletun matematiikan tietokonetyöt 18
Lineaarinen regressio In[247]:= <<Statistics LinearRegression In[248]:= v=table[i,{i,1940,1990,10}] Out[248]= {1940, 1950, 1960, 1970, 1980, 1990} In[249]:= p={3.696,4.030,4.446,4.706,4.788,4.999} Out[249]= {3.696, 4.03, 4.446, 4.706, 4.788, 4.999} In[250]:= Regress[Transpose[{v,p}],{1,x,x^2},x, OutputList->{ConfidenceIntervalTable}] Mat-2.2107 Sovelletun matematiikan tietokonetyöt 19
Kysymyksiä 1. Miten funktio määritellään Mathematicassa? 2. Mitä eroa on komennoilla DSolve ja NDSolve? 3. Kuinka ominaisarvo- ja vektori määritellään? 4. Miten Mathematican lisäpaketteja voidaan ladata? 5. Mitä Mathematican funktiot PDF ja CDF tekevät? 6. Miten lineaarinen regressiomalli muodostetaan Mathematicassa? Mat-2.2107 Sovelletun matematiikan tietokonetyöt 20