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/Diff-intV (usean muuttjan (vektorimuuttujan) funktiot

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. mlDiV01

    Muista, että Jacobin matriisi koostuu vektori- tai skalaariarvoisen funktion \(F\) ensimmäisistä osittaisderivaatoista: \[J_{F} = \begin{bmatrix} \frac{\partial y_1}{\partial x_1} & \ldots & \frac{\partial y_1}{\partial x_1} \\ \vdots & \cdots & \vdots \\ \frac{\partial y_m}{\partial x_1} & \ldots & \frac{\partial y_1}{\partial x_n} \\ \end{bmatrix}.\] Kuinka laskisit numeerisen Jacobin matriisin?

    Muista, että numeerisesti \[f'(x) \approx \frac{f(x+h)- f(x-h)}{2h},\]


  2. mlDiV03

    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]\times [3,4]\) peittävä hila:

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

    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}]\times [-\frac{1}{2},\frac{1}{2}]\)

    • \(f(x,y) = x^3 - 3xy\) alueessa \([-1,1]\times [-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.


  3. mlDiV05

    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{\partial f}{\partial x} \text{ ja } \frac{\partial f}{\partial 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.


  4. mlDiV07

    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^2y\)

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

    ja laske niiden numeeriset gradientit pisteissä \((1,2)\) ja \((2,-4)\). Vertaa tulosta tarkkoihin arvoihin: \[\nabla f = \begin{bmatrix} 2xy \\ x^2 \end{bmatrix} \nabla g = \begin{bmatrix} e^{x^2 +y} + 2x^2 e^{x^2+y} \\ x e^{x^2+y} \end{bmatrix}\]


  5. mlDiV09

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

    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 \(\int_0^3 \int_2^3 xy \,dx \,dy = \) dblquad(@(x,y)x.*y,2,3,0,1). Jälleen kerran, tutki dokumentaatiota function_handle.


  6. mlDiV11

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

    Tilavuuteen tarvitset kaksinkertaista integraalia dblquad, pinta piirretään komennoilla meshgrid ja mesh.


  7. mlDiV13

    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.

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


  8. mlDiV15

    Määritä pinnan \(z=-x^2-y^2\) normaalivektori, ja piirrä sen vektorikenttä samaan kuvaan pinnan kanssa.

    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.