MattieT-tehtäväportaali


Yhteydenotot:

Heikki Apiola
Dept. of Math. Sci.
Aalto-yliopisto
heikki.apiola'at'aalto.fi

Juha Kuortti
Dept. of Math. Sci.
Aalto-yliopisto
juha.kuortti 'at' aalto.fi

Miika Oksman
Dept. of Math. Sci.
Aalto-yliopisto
miika.oksman 'at' aalto.fi

Matlab/ComplAnal

Käytön idea: Kun löydät mieleisesi tehtävän, sen alapuolella on linkki tex-tiedostoon. Lataa tiedosto, ja liitä se harjoituspohjaan tai omaan Latex-pohjaasi.

Sisällysluettelo


  1. mlCA001

    mlCA001.tex
    Ensiapuohjeita

    • Sijoitus muuttujaan esim: >> z=(1+i)/(1-2*i)
      Puolipiste lopussa estää tulostuksen.

    • Muuttujan sisällön näet kirjoittamalla sen nimen ilman puolipistettä

    • Lopeta puolipisteeseen, jos komentosi tuottaa dataa paljon, isojen tulosteiden vilistäminen ruudulla on pelkkää kärsimystä.

    • Jos kuitenkin unohdit, niin CTR-C

    • Vektorin voi muodostaa esim. näin: >> vektori=[-1,0,4,5.2-3.45*i]
      Pitempiin vektoreihin: help colon, help linspace

    • Kun teet aritmetiikkaa vektoreille tyyliin
      >> x=linspace(0,1); y=(x.^2).*sin(x);
      niin muista piste ja ymmärrä. (Tässä sulut vain selvennykseksi.)

    • Kaikki vähänkin vakavampi työskentely kannattaa tehdä avaamalla editorilla tekstitiedosto, jonne kerätään Matlab-ajon komennot (ja mahdollisesti tärkeimmät tulosteet).

    • Matriisi muodostetaan tyyliin >> A=[1 2 3;4 5 6]
      2. rivi: A(2,:), 3. sarake: A(:,3) . Kokeile ihmeessä!


  2. mlCA002

    mlCA002

    Sijoita muuttujalle \(z\) arvo \(2+3i\). Laske Matlabilla \(z\):n reaaliosa, imaginaariosa,liittoluku, moduli (itseisarvo) ja argumentti (napakulma). Piirrä pisteet \(z\) ja \(\overline{z}\). Anna sopiva axis-komento, jotta saat paremman koordinaatiston. Piirrä sitten samaan kuvaan jana origosta pisteeseen z punaisella värillä ja origosta pisteeseen \(\overline{z}\) sinisellä.

    Vihje:
    Sopivia Matlab-komentoja: real, imag, conj, abs, angle, sign, plot, axis, hold on Tutki kutakin helpillä tyyliin help real jne.

    Opiskele aihetta "kompleksilukujen piirtäminen" :

    http://math.aalto.fi/\(\sim\)apiola/matlab/opas/lyhyt/grafiikka.html#complexplot

    Tässä lyhyesti:

    • plot(z)

      piirtää pisteen \(z\) tasoon, jos \(z\) on kompleksiluku.

    • Yleisemmin, jos \(z\) on kompleksivektori, plot(z) piirtää \(z\)-vektorin pisteiden kautta murtoviivan.

    • Jos halutaan pelkät pisteet, niin plot(z,’o’) (tai esim plot(z,’xb’) jos sinisellä ristillä).

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlComplAnal/mlCA002.tex

    Ratkaisu:
    ../mlteht/mlComplAnal/ratkaisut/mlCA002R.html

    Avainsanat:Matlabperusteet,mlComplAnal, kompleksiluvut
    Matlabfunktioita:real, imag, conj, abs, angle, sign, plot


  3. mlCA003

    mlCA003.tex
    Olkoon \(z\):lla vaikkapa arvo \(2+3i\) (yhtä hyvin joku muu). Suorita komennot ja selvitä aina itsellesi, mitä kukin tekee.

    >> z=sign(z)
    >> w=[z,z^2,z^3,z^4,z^5,z^6,z^7,x^8]
    >> plot(w)
    >> axis equal

    Piirrä samaan kuvaan säteet origosta kuhunkin \(w\)-vektorin pisteeseen vaikka punaisella.
    Vihje: Muista hold on ja sitten vaan annat plot:lle argumentiksi 2:n pituisia vektoreita ja käytät komentoeditoria (napsuttelet nuolinäppäintä ja editoit).

    Mitä havaitset, jos ajattelet kompleksiluvun potensseja (vaikkapa De Moivreta)?

    Matlab-tekniikkaa:
    - Miksi ei tarvitse kirjoittaa z.^2 ?
    - Entä jos haluaisit piirtää potenssit 1:100 ? Miksi nyt täytyy kirjoittaa .^ ?

    Suorita Matlab:ssa: help arith
    Lue:
    http://math.aalto.fi/~apiola/matlab/opas/ei-niin-lyhyt/osa2.html#luku4 matriisi- ja taulukko-operaatioesimerkit ja
    http://math.aalto.fi/~apiola/matlab/opas/lyhyt/perusteet.html#sec:matriisilaskenta

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlComplAnal/mlCA003.tex

    Ratkaisu:
    ../mlteht/mlComplAnal/ratkaisut/mlCA003R.html (html)

    Avainsanat:Matlabkompleksianalyysi,mlComplAnal,kompleksiluvun potenssit, De Moivre
    Matlabfunktioita: sign


  4. mlCA004

    mlCA004.tex
    Muodosta vektori, jossa on luvut \(w_{n,k} = \root n \of 1, k = 0 \ldots n-1.\) n:n arvolla 10.

    a) Käytä juurikaavoja.
    b) Ratkaise (numeerisesti) polynomiyhtälö \(z^n = 1\) ( help roots)

    Piirrä yksikköympyrä ja samaan kuvaan kaikki ykkösen n:nnet juuret vaikka ’o’-merkillä), missä vaikkapa \(n=10\). Kokeile eri n:n arvoilla.

    Kirjoita Matlabin editorilla tiedosto h1teht3.m (tms.) ja tee siitä Matlab skripti tyyliin:

    %% Harjoitus 1 tehtävä 3 , tiedosto h1teht3.m
    % Nimi ja opno (harjoitukseksi myöhempiin tarpeisiin)
    % 
    n=10    % Tätä voit vaihdella.
    k=0:n-1 % kokonaislukuvektori.
    w=...   % w-vekori, jossa nuo n:nnet juuret.

    Skripti, jossa on Matlab-komentoja (ja selityksiä %-merkin takana), suoritetaan Matlabissa komentamalla h1teht3 tai leikkaus/liimaus- menetelmällä. Nykyversioissa koko skripti tai sen osa suoritetaan suoraan Matlabin editorista CTR-ENTER-näppäilyllä.

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlComplAnal/mlCA004.tex

    Ratkaisu:
    ../mlteht/mlComplAnal/ratkaisut/mlCA004R.html

    Avainsanat:Matlabkompleksianalyysi,mlComplAnal,kompleksijuuret
    Matlabfunktioita: roots,plot


  5. mlCA005

    mlCA005.tex
    Puhdas kynä/paperi-tehtävä. Hahmottele seuraavat alueet kompleksitasossa (z-tasossa) ja niiden kuva- alueet kuvauksessa \(w=e^z\). Kiinnitä myös huomiota siihen, kuuluuko reuna mukaan. Tässä \(z=x+iy\)
    (a) \(-1 < x < 1, -\pi < y < \pi\).
    (b) \(0 \leq y \leq \pi/2.\) (Mieti, kuuluuko 0 mukaan kuvaan.)
    (c) \(\pi < y \leq 3\pi .\)
    (d) \(\ln 3 < x < \ln 5.\)

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlComplAnal/mlCA005.tex

    Ratkaisu:
    ../mlteht/mlComplAnal/ratkaisut/mlCA005R.html (myös tehtävään mlCA006)

    Avainsanat: kompleksianalyysi,ComplAnal
    Matlabfunktioita:


  6. mlCA006

    mlCA006.tex
    Avaa
    http://www.math.hut.fi/teaching/k3/03/L/CA1.html
    ja sieltä kohta demoexp. Voit käytellä skriptiä leikkaamalla/liimaamalla omaan Matlab-työtiedostoosi ja sieltä komentoikkunaan. Tässä vaiheessa ei ole välttämätöntä ymmärtää kaikkia skriptin Matlab-komentoja, kunhan näet, miten sitä modifiomalla voit tehdä haluamiasi juttuja.

    (a) Suorita ensin komennot ja katso, että saat samanlaiset kuvat kuin CA1.html:ssä.
    (b) Havainnollista exp-funktiota katsomalla joidenkin suorakulmioalueiden kuvautumista.
    (c) Voit myös helposti muuttaa skriptiä yleisluontoisemmaksi ottamalla x-vektorin pituuden n käyttöön ja kirjoittamalla vastaavanlaisen for-silmukan kuin y-vektorille on tehty.

    Vaativuus: 1+
    Tehtävän Latex-koodi:
    ../mlteht/mlComplAnal/mlCA006.tex

    Ratkaisu:
    ../mlteht/mlComplAnal/ratkaisut/mlCA006R.html

    Avainsanat:Matlabkompleksianalyysi,mlComplAnal,exp-funktio,eksponenttifunktio
    Matlabfunktioita: linspace, exp, meshgrid,min,max,length


  7. mlCA007

    mlCA007.tex
    (Puhdas käsinlasku)
    Kompleksiluvulla \(e^{i\alpha}\) kertominen suorittaa kierron kulman \(\alpha\) verran. Kyseessä on tason \(\R^2\) lineaarikuvaus, jolla niin ollen on matriisiesitys. (Muistele 1-kurssien asioita, lineaarikuvauksia käsitellään tälläkin kurssilla lähemmin.)

    Johda kiertokuvauksen matriisiesitys muodostamalla tulo \(w=e^{i\alpha} z\), \(z=x+iy=re^{i\Theta}\)

    Ohje: Ei tarvitse muuta kuin kirjoittaa \(e^{i\alpha}(x+iy)\) muotoon \(\textit{Re} + i \textit{Im}\) ja samaistaa kompleksiluku \(x+iy\) pystyvektorin \([x,y]^T\) kanssa.

    Opetus: Kiertokuvauksia (ja eräitä muitakin tason lineaarikuvauksia) voidaan käsitellä erityisen kätevästi kompleksiaritmetiikan avulla. Matriisilaskujen sijasta voidaan harrastaa kompleksiaritmetiikkaa.

    Seuraavassa tehtävässä harrastetaan tätä oikein olan takaa.

    Olennaista on, että käytössä on ohjelma, joka osaa laskea kompleksisilla vektoreilla. Matlab on tällainen (myös Maple ja Mathematica).

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlComplAnal/mlCA007.tex

    Avainsanat:Matlabkompleksianalyysi,mlComplAnal,lineaarikuvaus, kiertokuvaus
    Matlabfunktioita:


  8. mlCA008

    mlCA008
    Alla on versio kuuluisan matemaatikon Arnoldin ns. kissaa, jonka toteutamme Matlabilla varsin yksinkertaisena tyylitelmänä. Harjoituksen ajatuksena on demonstroida kompleksiaritmetiikan mahdollisuuksia kiertokuvauksien käsittelyssä. Samalla saamme rutiinia niin Matlabissa kuin yleensäkin kompleksiluvuilla laskemisessa.

    Käsittelemme tässä kissaa tavallisuudesta poiketen kompleksilukuvektorina.

    Tehtävässä ei ole jätetty juurikaan itse keksittävää. Niinpä jos aika on tiukalla, tämä tehtävä sopii oikein hyvin omatoimisesti läpikäytäväksi vaikka kotona.

    Selvitä itsellesi juurta jaksain, mitä kussakin vaiheessa tehdään. Kissa ja sen pyöritys on pelkkää kompleksiaritmetiikkaa.

    Komennot on annettu “ideointiyyliin”, siksi koodia on niin paljon.

    Suorita ensin nämä komennot: (Huomaa puolipisteen käyttö, jos dataa on “vähänkin paljon”.)

    clf              % clear graphics
    t=0:pi/100:2*pi; % tai esim. t=linspace(0,2*pi); 
    paa=.1*exp(i*t);
    plot(paa)
    axis equal
    hold on
    silmat=[-0.05+i*.055, 0.05+i*.055]
    plot(silmat,'+')
    nena=.02*i+.003*exp(i*t);% t-vektori muodostettiin yllä.
    plot(nena,'r')
    %nena=.02*i
    %plot(nena,'o')  % Tämä olisi ``laiskan miehen nenä''
    % Suuksi sopiva ympyrän kaari välillä (-2*pi/3,-pi/3)
    phi=linspace(-2*pi/3,-pi/3);
    suu=0.05*exp(i*phi);
    plot(suu,'.')
    korvat=[.1*exp(i*pi/6),.1*exp(i*5*pi/6)]
    plot(korvat,'o') % ``Laiskan miehen korvat''

    Tässä on peruskissa.

    Nyt ryhdymme pyörittelemään kissaparkaa. Päätä ei tarvitse pyörittää, ympyrä ei pyöritettäessä miksikään muutu. Riittää, kun pyöritämme suuta, nenää, silmiä ja korvia.

    Kootaan ensin kissan osat yhteen vektoriin ja tehdään äskeinen uudestaan kissavektorilla.

    figure(1)   % Tätä tarvitaan vain palattaessa takaisin kuvasta 2.
    % Ajatellaan, että figure(1) on z-taso ja figure(2) w-taso.
    clf              % Grafiikan putsaus     
    t=0:pi/100:2*pi; % Syytä tehdä uudestaan, vanha t voisi olla jo ihan muuta
    paa=.1*exp(i*t);    % vaikkei näillä komennoilla satukaan.
    plot(paa)
    axis equal
    hold on
    zkissa=[silmat,nena,korvat,suu];
    plot(zkissa,'or')  % Pelkät pisteet merkillä 'o' värillä 'r'

    Avataan uusi grafiikkaikkuna ja piirretään siihen kierrettyjä kissoja.

    figure(2)  % w-taso
    clf
    wkissa=exp(i*pi/4)*zkissa
    paa=.1*exp(i*t);
    plot(paa)
    axis equal
    hold on
    plot(wkissa,'or')
    shg     % show graphics

    Nyt voit jatkaa kissaleikkiä alla olevaan tyyliin tai jotenkin muuten. Helpointa ja opettavaisinta on kirjoittaa Matlabin editorilla alla olevat rivit (ja mahdollisesti myös zkissarivit) omien mieltymystesi mukaan modifioiden tiedostoon kissa.m. Kun tiedosto on polun varrella, voit sanoa istunnossasi kissa, editoida kissa.m:ää ja taas komentaa kissaa.

    clf
    alpha=pi/4;  % Kiertokulma, helppo muutella.
    wkissa=exp(i*pi/4)*wkissa
    paa=.1*exp(i*t);
    plot(paa)
    axis equal
    hold on
    plot(wkissa,'or')
    shg

    Seuraavaksi jo sormet syyhyävät kissan käsittelyyn matriisina ja kiertomatriisilla kerrottuna (vrt. [D]-teht. 5). Maltamme kuitenkin mielemme ja jätämme seuraavaan kertaan.

    Palannemme kissaan muutenkin yleisempien lineaarikuvausten yhteydessä, tällöin saatamme kaltoin kohdella sitä paljon enemmän, anteeksi kissa!

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlComplAnal/mlCA008.tex

    Ratkaisu:
    Tehtävä on tyyppiä: “Tee, mitä käsketään”, ja ihastele/ihmettele/ota opiksi.

    Avainsanat:Matlabkompleksianalyysi,mlComplAnal, Arnoldin kissa, lineaarikuvaus, kiertokuvaus kompleksiaritmetiikan avulla
    Matlabfunktioita:exp,plot,hold on


  9. mlCA009

    mlCA009.tex
    Matlab on ennenkaikkea matriisikieli. Jos kompleksiaritmetiikka sujuu käteväti, niin samoin on laita matriisilaskujen. Katsotaan siksi vielä, miten edellinen hoidettaisin matriisioperaatioin.
    **(Vrt. teht. 4)** HUOM HA:lle
    Näin saadaan malli myös yleisemmille linaarikuvauksille, joihin liittyviä tehtäviä mlLinalg-hakemistossa.

    Tällä kerralla esitämme kissan tavanomaisemmassa muodossa kaksirivisenä reaalisena matriisina, jossa kukin sarake edustaa kissan pistettä \(\R^2\):ssa.

    Olkoon zkissa kuten edellä.

    alpha=pi/4;   % muuttele tarpeen mukaan.
    A=[cos(alpha), -sin(alpha);sin(alpha),cos(alpha)] % Kiertomatriisi.
    zkissa=[real(zkissa);imag(zkissa)]; % zkissasamaistus C <-> R^2
    wkissa=A*zkissa; % Mahtavan kätevää on tämäkin. Kun zkissapisteet ovat
                % matriisin sarakkeina, niin kertomalla kiertomatriisilla A,
                % saadaan wkissapisteiden muodostama matriisi.
    figure(1); clf
    plot(zkissa(1,:),zkissa(2,:),'o') % Tämä on kaikkein tavallisin plot-
                                      % komennon muoto, kun data on reaalista.
    axis equal
    figure(2); clf
    plot(wkissa(1,:),wkissa(2,:),'*r')
    >> z=2+3*i
    >> plot(z)
    >> plot(z,'*')
    >> axis([0 4 0 4])
    >> hold on
    >> plot([0 z])
    >> abs(z)
    >> angle(z)
    >> atan(3/2)

    Vaativuus: 1
    Tehtävän Latex-koodi:
    ../mlteht/mlComplAnal/mlCA008.tex

    Ratkaisu:
    Tehtävä on tyyppiä: “Tee, mitä käsketään”, ja ihastele/ihmettele/ota opiksi.

    Avainsanat:Matlabkompleksianalyysi,mlComplAnal, Arnoldin kissa, lineaarikuvaus, kiertokuvaus
    Matlabfunktioita:exp,plot,hold on


  10. mlCA010

    Jos \(f\) on analyyttinen, sille pätee Cauchyn integraalikaava, josta muuttujanvaihdolla saadaan \[f(z_0) = \frac{1}{2\pi i} \int_{|z-z_0|} \frac{f(z)}{z-z_0}dz = \frac{1}{2\pi i} \int _0^{2\pi} \frac{f(z_0 -re^{it})}{z_0 + re^{it} -z_0}dt\] \[= \frac{1}{2\pi i} \int_0^{2\pi} f(z0 + re^{it})dt.\]

    Gaussin keskiarvoperiaatteen nojalla analyyttisen funktion arvo pisteessä \(z_0\) on laskettavissa ottamalla integraalikeskiarvo reunan ylitse. Intuitiivisesti keskiarvo on aina arvojen maksimin alapuolella.

    Tätä ajatusta noudattaen päästään seuraavaan: olkoon \(f:U \rightarrow \mathbb{C} \) ei-vakio analyyttinen funktio alueessa \(U\). Tällöin \(z \mapsto |f(z)|\) ei periaatteen mukaan saavuta suurinta arvoaan alueessa \(U\). Tutkitaan asiaa kokeellisesti:

    1. Piirrä funktion \(f(z) = |e^z|\) kuvaaja alueessa \([-1,1] \times [-i,i]\).

    2. Piirrä funktion \(f(z) = |\log(z)|\) kuvaaja alueessa \([1,10] \times [i,10i]\)

    3. Tutki vielä kuvauksen \(z \mapsto |z^3|\) käyttäytymistä alueessaa \([-1,1] \times [-i,i]\).

    Kuinka maksimiperiaate ilmenee näiden funktioiden tapauksessa?

    Maksimiperiaate pätee myös harmonisille funktioille: jos \(f = u + iv\) on analyyttinen funktio, joka (vähintään lokaalisti) saadaan annetusta harmonisesta funktiosta \(u\), niin funktion \[F(z) = e^{f(z)}\] avulla saadaan maksimiperiaate pätemään funktiolle \(u\), sillä \(|F(z)| = e^u\). Tutki maksimiperiaatten toteutumista eksponenttifunktion reaali- ja imaginääriosille seuraavasti:

    t  = -1:0.1:1;
    [x, y] = meshgrid(t,t);
    u = exp(x).*cos(y);
    mesh(x,y,u);
    v = exp(x).*sin(y);
    mesh(x,y,v)