\documentclass[finnish,11pt,twocolumn]{article}
\usepackage{/home/apiola/tex/numsym04}
\usepackage[dvips]{epsfig}
%\include{/home/apiola/tex/defs}
%\usepackage{v23harj}
%\include{defs}
\def\abs#1{\vert #1\vert}      
\def\norm#1{\Vert #1\Vert}      
\def\innerp#1{\langle #1 \rangle}
\def\vnormone#1{\sum_k \vert #1_k \vert}
\def\vnorminf#1{\max_k \vert #1_k \vert}
\def\mnormone#1{\max_j \sum_i \vert#1_{ij}\vert}
\def\mnorminf#1{\max_i \sum_j \vert#1_{ij}\vert}
\def\rv{\hfill\break}
\def\matl{{\sc Matlab}}
\def\maple{{\sc Maple}}
%\def\Arg#1{\textit{Arg} #1}
\def\Arg{{\textit{Arg}}\ \ }
\def\huom {{\bf Huom!}}

\begin{document}

%\vspace{0.2cm}
%\begin{verbatim}
%\end{verbatim}

\harjoitus{4}{9--}{helmi--maalis 2004}


Jaossa: [CvL]-sivut ODE (CH 9) \\
Muista {\tt http://www.math.hut.fi/teaching/numsym/matlab/moler/odes.pdf} \\
{\tt http://www.math.hut.fi/teaching/numsym/matlab/CV/CHAPTER.9} \\
{\tt http://www.math.hut.fi/teaching/L/ODE.html} ODE-"portaali" \\


Sek� [CvL]:ss� ett� Moler:ssa on laaja teht�v�valikoima.
Erityisesti Molerista on mahdollisuus valita my�s laajempia oppilaskohtaisia teht�vi�, joissa
p��see mukavasti k�ytt�m��n eri alueiden laskentav�lineit� yhteisty�ss�.

Olkoot lyhyesti C ja M nuo viitteet alla olevien teht�v�numeroiden kohdalla.



%\begin{verbatim}
% http://www.math.hut.fi/teaching/v/3/L/fourier.html
% http://www.math.hut.fi/teaching/v/3/L/fourier.mws
% http://www.math.hut.fi/teaching/numsym/02/H/harj1ohje.mws
%\end{verbatim}


T�ss� kaikille tarkoitettuja teht�vi�. Kokoelmaa t�ydennet��n niin
ODE- kuin muidenkin alueiden osalta.  Seminariesitysten t�ydennyksen�
(silloin kun ylim��r�ist� aikaa j��) voidaan pit�� neuvontaharjoituksia,
sovitaan my�hemmin, milloin harjoitusteht�vien suorituksia k�yd��n
l�pi.



\begin{enumerate}

\item %1
%Palauta mieleen harj.3 teht. 4 ja siihen liittyv� ratkaisutiedosto:\\
%{\tt http://www.math.hut.fi/teaching/numsym/04/L/ODEmlb1.html}
M 7.1 (s. 34). \\
"Experimentally"-osaan voit n�pp�r�sti k�ytt�� Matlabin ode23:a tai
ode23tx:��. \\
"Algebraically"-osaa ajatellen kirjoitin tiedoston loppuun  {\tt .../maple/ns04.mpl} 
pikku koodin ", jonka laitan my�s teht�vien per��n. (K�yt� hyv�ksesi, jos silt� tuntuu.)

\item %2
M 7.2 \\
Tutki lis�ksi algoritmin {\tt ode23(tx)} askelpituuden valintastrategiaa samaan tyyliin 
kuin [CvL]:ss�

s. 345 fig. 9.8 ja s. 347 fig. 9.11. Kokeile muutamalla eri AbsTol ja RelTol valinnalla.

Huomaa, kuinka k�tev� t�ss� on funktio {\tt diff}.


\item %3
Kummassakin l�hteess� puhutaan 2:n kappaleen probleemasta.
Kirjoita yleinen kahden kappaleen probleemaan liittyv� diffyht�l�. Massat $m_1$ ja $m_2$
olkoot hetkell� $t$ pisteiss�, joiden paikkavektorit ovat $\V{r_1}$ ja $\V{r_2}$.

Kirjoita t�t� yleist� muotoa vastaava m-tiedosto.

Johda sitten muoto, joka esiintyy kummassakin viitteess�  ("twobody", "Kepler") (ja taitaa
olla Matlabin demossakin). T�ss� toinen kappale ajatellaan paljon massiivisemmaksi, ja se
otetaan koordinaatiston origoksi.

K�y huolellisesti l�pi [CvL] ss. 343 -- 348 Matlab-laskut ja piirrokset. Tee joitakin omia
kokeiluja toleranssien ja menetelmien suhteen.

K�yt� alussa olevaa yleist� muotoa kahden samanmaassaisen (tms.)
kappaleen liikeratojen tutkimiseen sopivilla alkuehdoilla. Tapahtuuko helposti massojen 
t�rm�yksi�?
Ihan mukava olisi tehd� animaatio, mutta olkoon se "vapaaehtoista".

(T�ss� pikku johdatus aiheeseen "three body problem", josta voisi kehitell� aika laajankin
esityksen, sopivia referenssej� on tarjolla.)

\item %4
Ratkaise diffyht�l� $y'=\frac{1}{y^2}-y t, \ \ y(1)=1$

sek� Taylorin 4:n asteen menetelm�ll� ett� Runge-Kutta 4:ll�. Vertaa numeerisia ratkaisuja
kesken��n v�lill� $\lbrack 1,2 \rbrack$ ja k�yt� askelpituuksia $h=2^{-k}, k=2,\ldots,7.$

K�yt� Maplea hyv�ksesi. Voit samalla mietti�, miten implementoisit yleisen 4:nnen kertaluvun
Taylorin menetelm�n tai yleisemmin, yleisen n:nnen kertaluvun Taylorin menetelm�n Maplella.

Huomaa, ett� koko ty� menee hyvin Maplessa, meill� on valmis rk4 tiedostossa 
{\tt ../maple/ns04.mpl}. Toisaalta rk4:n voi tehd� hyvin Matlabilla, vaikka
omalla funktiolla tai CvL-funktiolla FixedRK.m \\
\verb_ http://www.math.hut.fi/teaching/numsym/04/matlab/CV/CHAPTER.9/  _



\end{enumerate}


\textbf{Teht�v�n 1 Maple-apu}

\begin{verbatim}
ode23step:=proc(f,t,y,h)
local s1,s2,s3,s4,tuusi,yuusi,euusi;
s1:=f(t,y);
s2:=f(t+h/2,y+h/2*s1);
s3:=f(t+3*h/4,y+3*h/4*s2);
tuusi:=t+h;
yuusi:=y+h*(2*s1+3*s2+4*s3)/9;
s4:=f(tuusi,yuusi);
euusi:=h/72*(-5*s1+6*s2+8*s3-9*s4);
[tuusi,yuusi,euusi];
end:
\end{verbatim}

\textbf{Teht�v� 3}

Muistele Newtonin gravitaatiolakia: Voima on suoraan verrannollinen massojen tuloon ja k��nt�en
verrannollinen et�isyyden neli��n. Voit valita yksik�t niin, ett� gravitaatiovakio $=1$.

Kirjoita kumpaakin massaa koskeva liikeyht�l�, voit rajoittua tasotapaukseen.
T�ll�in saat 8:n yht�l�n systeemin.

Funktio voisi alkaa vaikka n�in:

\begin{verbatim}
function Yp=kakskpl(t,Y)
% Kahden kappaleen ongelman diffyhtsys. Gravitaatiovakio = 1
global m1 m2
R1=Y(1:2);
V1=Y(3:4);
R2=Y(5:6);
V2=Y(7:8);
r=norm(R2-R1);
...
\end{verbatim}


\textbf{Teht. 4}

T�ss� er�s tapa, jolla voisi edet�. 
Tehd��n ensin kaikkein yksinkertaisin ei-triviaali (Ei-Euler) tapaus:
2. kertaluvun Taylorin menetelm�n askel.

\begin{verbatim}
taystep2:=proc(f,t0,y0,h)
local y1,y2,t,tay2;
y1:=f(t,y(t));
y2:=diff(y1,t);
y2:=subs(diff(y(t),t)=y1,y2);
tay2:=y0+h*y1+h^2/2*y2;
subs([t=t0,y(t)=y0],tay2);
end:
\end{verbatim}

Testausta:

\begin{verbatim}

# Esim:
 f:=(t,y)->y*t; 
 dsolve({diff(y(t),t)=t*y(t),y(0)=1},y(t));
 ytarkka:=subs(%,y(t)); 
 Y[0]:=1: h:=0.1: T:=seq(k*h,k=0..10);
 for k to 10 do
   Y[k]:=taystep2(f,T[k],Y[k-1],h):
  end do:T[0]:=0;
 pisteet:=seq([T[k],Y[k-1]],k=1..10);
 plot([[pisteet],ytarkka],t=0..1);
\end{verbatim}

Jatko sujuu samaan tapaan. Helppo on kirjoittaa yleinen n:nnen asteen Taylor.

Ongelmaksi tulee laskettaessa suuriksi paisuvat lausekkeet (ongelmasta
riippuen), jolloin aritmetiikkaa tulee paljon.
T�t� on kyll� mahdollista v�hent�� mm. seuraavilla v�lineill�.\\
{\tt horner} (jos p��dyt��n korkea-asteisen polynoin laskentaan).\\
{\tt codegen[optimize]}, joka muodostaa sopivia apumuuttjia, joiden avulla
v�ltyt��n laskemaan samoja lausekkeita monta kertaa.\\
Olkoon laskettu $h^4$:n kerroin $c_4$, jonka lausekkeesta tulee pitk�
ja korkea-asteinen polynomi:

\begin{verbatim}
c4:=coeff(yuusi,h,4);
with(codegen):
horner(numer(c4),y0); # Jos osoittaja on korkea-asteinen polynomi.
opti:=optimize(%);
nimet:=map(lhs,[opti]); 
arvot:=map(rhs,[opti]);
zip((a,b)->a=b,nimet,arvot); # Muodostetaan yht�l�t.
assign(%);                   # = - merkit := - merkeiksi.
\end{verbatim}

(N�iss� harjoituksissa kyll� riitt�� tehd� ilman optimointia,)





\end{document}

