> ############## > # teht. 6 > > dy:={diff(y1(t),t)+diff(y2(t),t) = -sin(t), diff(y2(t),t)+diff(y3(t),t) = cos(t)+(1/10)*exp(-t/10), diff(y3(t),t)+diff(y1(t),t) = (1/10)*exp(-t/10)-sin(t)}; ## Ehkä hieman selkeämpää olisi: dy1:=... ;dy2:= ... ; dy3:= ...; ## dy:={dy1,dy2,dy3}; ## Samoin kuin edellä, suositellaan: ## alias(L=laplace,IL=invlaplace): (sitä ennen: with(inttrans) #V.4 ## readlib(laplace) # V.3 /d \ /d \ dy := {|-- y1(t)| + |-- y2(t)| = -sin(t), \dt / \dt / /d \ /d \ |-- y2(t)| + |-- y3(t)| = cos(t) + 1/10 exp(- 1/10 t), \dt / \dt / /d \ /d \ |-- y3(t)| + |-- y1(t)| = 1/10 exp(- 1/10 t) - sin(t)} \dt / \dt / > with(inttrans): # versio 4 näköjään vaatii tämän, versio 3 ei !? > ldy:=laplace(dy,t,s); # laplace vaatii, että dy on "set of eqns". Huomaa että jos määritellään dy:=[diff(y1(t),t)+ ...jne.], niin silloin dy olisi "list of eqns" joka ei kelpaa tässä tapauksessa. ldy := { s laplace(y1(t), t, s) - y1(0) + s laplace(y2(t), t, s) - y2(0) 1 = - ------, 2 s + 1 s laplace(y2(t), t, s) - y2(0) + s laplace(y3(t), t, s) - y3(0) s 1 = ------ + 1/10 --------, 2 s + 1/10 s + 1 s laplace(y3(t), t, s) - y3(0) + s laplace(y1(t), t, s) - y1(0) 1 1 = 1/10 -------- - ------} s + 1/10 2 s + 1 > ldy:=subs({y1(0)=1, y2(0)=0, y3(0)=0},ldy); # sijoitetaan alkuehdot ldy := { 1 s laplace(y1(t), t, s) - 1 + s laplace(y2(t), t, s) = - ------, 2 s + 1 s laplace(y3(t), t, s) - 1 + s laplace(y1(t), t, s) = 1 1 1/10 -------- - ------, s + 1/10 2 s + 1 s laplace(y2(t), t, s) + s laplace(y3(t), t, s) = s 1 ------ + 1/10 --------} 2 s + 1/10 s + 1 > lratk:=solve(ldy,{laplace(y1(t),t,s),laplace(y2(t),t,s),laplace(y3(t),t,s)}); > # huomaa että solve:kin vaatii että ldy on "set of eqns". 2 2 + s + 12 s lratk := {laplace(y3(t), t, s) = 1/2 -------------------------, 3 2 s (10 s + s + 10 s + 1) 1 laplace(y2(t), t, s) = 1/2 ------, 2 s + 1 2 s - 1 laplace(y1(t), t, s) = 1/2 -------} 2 s + 1 > convert(lratk, parfrac, s); 1 2 s - 1 {laplace(y2(t), t, s) = --------, laplace(y1(t), t, s) = --------, 2 2 2 s + 2 2 s + 2 10 1 laplace(y3(t), t, s) = 1/s - -------- + 1/2 ------} 1 + 10 s 2 s + 1 > ratk:=invlaplace(",s,t); ratk := {y3(t) = 1 - exp(- 1/10 t) + 1/2 sin(t), y2(t) = 1/2 sin(t), y1(t) = cos(t) - 1/2 sin(t)} > # kuva spacecurve:lla: ensin pitää kaivaa y1,y2,y3:n lausekkeet ratk:sta, jossa ne ovat vasta yhtälömuodossa. > y1:=subs(ratk,y1(t)); y2:=subs(ratk,y2(t)); y3:=subs(ratk,y3(t)); # helpompi tapa...?! y1 := cos(t) - 1/2 sin(t) y2 := 1/2 sin(t) y3 := 1 - exp(- 1/10 t) + 1/2 sin(t) ## Yllä toivottu helpompi ja elegantimpi tapa olisi: yset:=map(rhs,ratk); # rhs on "right hand side", eli poimitaan kunkin yhtälön oikea puoli. > with(plots): # täällä spacecurve asuu. > spacecurve([y1,y2,y3], t=0..8*Pi, axes=FRAME, numpoints=100, title=`tehtävä 6` ); # mitä pienempi numpoints, sitä karkeampi kuva. Ja sitten vain hiirellä kääntelemään ko. kuvaa... :-)