-
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ä!
-
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
-
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
-
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
-
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:
-
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
-
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:
-
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
-
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
-
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:
Piirrä funktion \(f(z) = |e^z|\) kuvaaja alueessa \([-1,1] \times [-i,i]\).
Piirrä funktion \(f(z) = |\log(z)|\) kuvaaja alueessa \([1,10] \times [i,10i]\)
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)