mlK008.tex
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!