Aalto-yliopisto, Matematiikan ja Systeemianalyysin laitos

-e

mlVektori

Vektorimuuttujan funktioita ja niiden diffint-laskentaa, toisin sanoin: usean muuttujan funktioiden diffinttiä

1. Harjoitellaan usean muuttujan funktioiden piirtämistä. MATLABissa tämä tehdään määrittelemällä ensin piirtoalueen peittävä diskretointi, tai hila. Tämä määritellään komennolla meshgrid. Luodaan esimerkiksi suorakulmion [1, 2] × [3, 4] peittävä hila:

x = 1:0.2:2;
y = 3:0.2:4;
[X Y] = meshgrid(x,y);

Nyt muuttujissa X ja Y ovat hilapisteiden x- ja y-koordinaatit. Niillä voidaan suorittaa laskutoimituksia kuten tavallisillakin muuttujilla; on vain pidettävä mielessä että kyseessä ovat nyt matriisit, eli yleensä haluamme valita alkioittaiset operaatiot matriisioperaatioiden sijaan.

Pintojen piirtäminen tapahtuu komennoilla surf ja mesh. Lasketaan ja piirretään funktion

f(x, y) = x y^{2}

kuva:

Z = X.*Y;
% Huomaa alkoittainen kertolasku
surf(x,y,Z);

.

Piirrä näillä keinoin seuraavien funktioiden kuvat

• f(x, y) = \sqrt{1 − x^{2} − y^{2}} alueessa [−\frac{1}{2}, \frac{1}{2}] × [−\frac{1}{2}, \frac{1}{2}]

• f(x, y) = x^{3} − 3xy alueessa [−1, 1] × [−1, 1].

Toinen yleinen tapa kuvata usean muuttujan funktioita on käyttää tasa-arvokäyriä. Näitä piirretään komennolla contour, syntaksi on sama kuin tavallisilla piirtokomennoilla. Kokeile piirtää myös edellisten funktioden tasa-arvokäyrät.

2. Vektorianalyysissä on todistettu että funktion tasarvo-käyrä on aina gradientin normaali. Tutkitaan tätä nyt käytännössä. Piirrä funktiolle

f(x, y) = e^{−x^{2}−y^{2}}

tasa-arvokäyrät haluamassasi hilassa käyttäen komentoa contour (komennon syntaksi on sama kuin tavallisten piirtokomentojen). Tämän jälkeen laske funktion numeerinen gradientti tässä hilassa funktiolla gradient. Funktio palauttaa tässä tapauksessa kaksi matriisia, joissa on pisteittäiset numeeriset estimaatit arvoille

\frac{∂f}{∂x} ja \frac{∂f}{∂y}.

Gradientit kannattaa piirtää vektorikenttänä, MATLABin tapauksessa komennolla quiver. Esimerkiksi, jos halutut osittaisderivaatat ovat matriiseissa dx ja dy niin piirto tapahtuisi komennolla quiver(x,y,dx,dy). Lopuksi piirrä kuvat näkyviin päällekäin komentamalla:

contour(x,y,z)
hold on
quiver(x,y,dx,dy)

Tutki kuvasta, ovatko gradienttinuolet suorassa kulmassa tasa-arvokäyriä vastaan.

3. Muista, että Jacobin matriisi koostuu vektori- tai skalaariarvoisen funktion F ensimmäisistä osittaisderivaatoista:

J_{F} = [ \begin{matrix}\frac{∂y_{1}}{∂x_{1}} & … & \frac{∂y_{1}}{∂x_{1}} \\ ⋮ & ⋯ & ⋮ \\ \frac{∂y_{m}}{∂x_{1}} & … & \frac{∂y_{1}}{∂x_{n}} \end{matrix} ] .

Kuinka laskisit numeerisen Jacobin matriisin?

Vihje: Muista, että numeerisesti

f′(x) ≈ \frac{f(x + h) − f(x − h)}{2h} ,

4.

Funktio

function Jf = numjaco(F,m,x,n)
% f is a function with m components,
% x is a vector with n components,
% the result is an m by n matrix.
Jf = ones(m,n);   h = 1e-4;
f = fcnchk(F);
for j =1:n
    e = zeros(n,1); e(j) = 1;
    Jf(:,j) = (f(x+h*e)-f(x-h*e) )/(2*h);
end;

laskee vektorikentän F numeerisen Jacobin matriisin, olettaen että käytetty kanta on standardi. Jos vektorikentässä on vain yksi komponentti, kyseessä on kyseisen funktion gradienttivektori.

Kopioi edellä oleva funktio tiedostoon, ja määrittele funktiot • f(x, y) = x^{2}y

• g(x, y) = xe^{x^{2}+y}

ja laske niiden numeeriset gradientit pisteissä (1, 2) ja (2, −4). Vertaa tulosta tarkkoihin arvoihin:

∇f = [ \begin{matrix}2xy \\ x^{2} \end{matrix}] ∇g = [ \begin{matrix}e^{x^{2}+y} + 2x^{2}e^{x^{2}+y} \\ xe^{x^{2}+y} \end{matrix} ]

5. Piirrä funktion f(x, y) = e^{−x^{2}−y^{2}} määrittelemä pinta (x, y)-tason neliön [−2, 2] × [−2, 2] alueella. Laske tämän funktion integraali yli kyseisen neliön. Kyseisen integraalin arvo koko tason ylitse on π.

Vihje: Pinnan piirtämiseen tarvitset sopivan alueen peittävän hilapisteistön. Näitä luodaan MATLABissa komennolla meshgrid, katso help meshgrid. Pinta piirretään komennolla mesh tai surf, katso dokumentaatiota.

Integraalin laskemiseen kannattaa käyttää funktiota dblquad. Katso kutsumisohjeet dokumentaatiosta. dblquadin ensimmäisen argumentin tulee olla funktio: tässä kannattaa käyttää MATLABin anonyymifunktioita. Esimerkiksi ∫_{0}^{3} ∫_{2}^{3} xy dx dy = dblquad(@(x,y)x.*y,2,3,0,1). Jälleen kerran, tutki dokumentaatiota

function_handle.

6. Laske funktion f(x, y) = 3 + cos(x) + cos(y) määräämän pinnan ja suorakulmion [0, π] × [0, 2π] väliin jäävä tilavuus. Piirrä havainnolistava kuva.

Vihje: Tilavuuteen tarvitset kaksinkertaista integraalia dblquad, pinta piirretään komennoilla meshgrid ja

mesh.

7. Piirrä funktion f(x, y) = y^{2} − x^{2} tasa-arvokäyrät ja gradienttivektorikenttä, ja totea, että gradientti on aina kohtisuorassa tasa-arvokäyrää vasten.

Vihje: Laske gradientti funktiolla gradient, ja piirrä tasa-arvokäyrät komennolla contour. Gradienttivektorikentän saat piirrettyä komennolla quiver.

8. Määritä pinnan z = −x^{2}−y^{2} normaalivektori, ja piirrä sen vektorikenttä samaan kuvaan pinnan kanssa.

Vihje: Aloita määrittelemällä jokin tason suorakulmio funtion meshgrid avulla - tämän jälkeen voit määritellä pinnan, eli matriisin z. Pinnan normaalivektorin saat laskettua funktiolla surfnorm. Piirrä ensiksi pinta komennolla surf(x,y,z), sen jälkee kirjoita hold on, jonka jälkeen kirjota quiver3(x,y,z,u,v,w), missä u, v ja w ovat surfnormin palauttamat matriisit.