MATLAB Prowadzący: dr hab. inż. Marek Jaszczur Poziom: początkujący Laboratorium 12: Zagadnienia zaawansowane Cel: Poznanie metod rozwiązywania konkretnych problemów Czas: Wprowadzenia 10 minut, ćwiczeń 30 minut, testu 5 minut Wstęp Jak wiadomo Matlab służy do wykonywania obliczeń. Na tych zajęciach zaprezentowane zostaną wybrane metody rozwiązywania konkretnych zagadnień: 1. Rozwiązywanie liniowego układu równań Rozwiążmy następujący liniowy układ równań algebraicznych: 5x-3y+2z=10-3x+8y+4z=20 2x+4y-9z=9 W celu jego rozwiązania należy skonstruować macierz A i wektor kolumnowy b Rozwiązanie (3.4442; 3.1982; 1.1868) A=[5-3 2; -3 8 4; 2 4-9] b=[10; 20; 9] a następnie wyznaczyć rozwiązanie np: a) przez odwracanie macierzy b) przez dzielenie lewostronne: x=inv(a)*b x=a\b c) wykorzystując metodę gradientów sprzężonych: d) metodą eliminacji Gaussa x=cgs(a,b) C=[A b] Cr=rref(C) 2. Obliczanie wartości i wektorów własnych A v = v Problem polega na znalezieniu takiej wartości skalarnej oraz v dla określonej macierzy A aby powyższe równanie było spełnione. W matlabie tego typu obliczenia realizuje się błyskawicznie: dla wyznaczenia wartości własnych lams: lams=eig(a) w celu wyznaczenia wektorów własnych V i wartości własnych D (na przekątnej) należy wpisać: [V,D]=eig(A)
3. Faktoryzacja (dekompozycja) macierzy W Matlabie istnieje kilka funkcji umożliwiających rozkład (dekompozycję) macierzy: a) rozkład LU [L,U]=lu(A) w wyniku działania tej funkcji uzyskamy macierz L dolną trójkątną i U górna trójkątną, takie że L*U=A. Można dokonać sprawdzenia >>A-L*U lub >>norm(a-l*u) b) rozkład QR [Q,R]=qr(A) w wyniku rozkładu otrzymujemy macierz ortogonalną Q (czyli Q *Q=I) oraz górną trójkątną R, takie że Q*R=A c) rozkład Cholesky ego R=chol(A) W wyniku otrzymujemy macierz górna trójkątną R taką, że R *R=A. Uwaga macierz A musi być dodatnio określona 4. Aproksymacja liniowa Załóżmy że mamy następujący zestaw danych które chcemy dopasować do równania prostej: x 5 10 20 50 100 y 15 35 54 145 290 Aby to zrobić należy utworzyć wektory x,y z danymi z tabeli >> x=[5 10 20 50 100] >> y=[15 35 54 145 290] >> plot(x,y, o ) W oknie wykresu w meny TOOLS odszukaj pozycję BASIC FITTING a następnie wybierz linear. W wyniku otrzymasz liniowe dopasowanie. Jeżeli zaznaczono show equation to równanie aproksymujące również będzie pokazane. Ponadto wybranie strzałek umożliwia podgląd na WSP równania jak i na normę dopasowania. W celu porównania kilku dopasowań należy w oknie fitting zaznaczyć kilka opcji. Ponadto zaznaczenie opcji plot residua umożliwi wykonanie wykresu z residuami które graficznie reprezentują błędy dopasowania:
Poniżej przedstawiono odpasowanie liniowe i 4-go rzędu. Pomimo residuum o niemal zerowej wartości i normy o 12 rzędów wielkości mniejszej niż dopasowanie liniowe trudno uznać dopasowanie 4-go rzędu za optymalne. Współczynniki dopasowania można uzyskać funkcją która dopasowuje krzywą metoda najmniejszych kwadratów polyfit(x,y,n) gdzie n stopień dopasowania: >> polyfit(x,y,1) 2.8822 1.1586 >> polyfit(x,y,4) -0.0000 0.0074-0.3610 8.2026-17.8850 Wartości nowego wielomiany w punktach danych x (albo innych) można uzyskać poleceniem >> a=polyfit(x,y,1); >> polyval(a,x) 15.5696 29.9806 58.8026 145.2686 289.3786 5. Całkowanie numeryczne Numeryczne obliczanie całki zwane jest kwadraturą Często funkcja podcałkowa jest na tyle skomplikowana, że wyznaczenie całki analitycznie jest bardzo trudne lub wręcz niemożliwe. Całkowanie numeryczne można przeprowadzić kilkoma sposobami: quad metoda Simpsona quadl - metoda Lobatto quad8 - metoda Newtona-Cotesa Wyznaczenie całki w oparciu o powyższe polecenia jest niezwykle proste: >>quad( sin(x.^3),0,pi) 0.4158 >>quadl( sin(x.^3),0,pi) 0.4158 Ogólna postać polecenia do numeryczne całkowania jest następująca: quad( finkcja,a,b,[tol1 tol2],tr) gdzie: funkcja to całkowana funkcja (również może to być własna funkcja zapisana w m-pliku) a,b - granice całkowania dolna i górna tol - (opcjonalnie) dokładność obliczeń względna i bezwzględna, domyślnie 10-6 tr - jeśli różne od zera to wyświetlany jest raport z całkowania
Matlab umożliwia również obliczanie całek podwójnych i potrójnych dblquad całki podwójne triplequad - całki potrójne Kwadratury własne: Całkowanie numeryczne polega na tym, że przedział całkowania dzielony jest na wiele mniejszych podprzedziałów w których funkcja która jest całkowana aproksymowana jest prostszą funkcją (np. liniową). Wówczas wartość przybliżona całki wyrażana jest sumą: gdzie A i to współczynniki kwadratury, f(x) wartość funkcji w pkt. węzłowych a) metoda prostokątów W metodzie tej funkcja podcałkowa aproksymowana jest za pomocą wielomianu stopnia zerowego (tj. stała wartość). W efekcie otrzymuje się wypełnienie obszaru podcałkowego prostokątami. Przybliżona wartość całki obliczana jest poprzez zsumowanie prostokątów: Poniżej przedstawiono graficzną interpretację metody prostokątów i trapezów. h h Przykładowy skrypt (całkowanie metodą prostokątów): % Calkowanie numeryczne metoda prostokatow n=10; % liczba pod-przedziałów całkowania h=(b-a)/n % szerokość pod-przedziałów całkowania x=(a+h/2):h:(b-h/2); % węzły (środek pod-przedziału ) %x=(a):h:(b-h); % węzły (początek podprzedziału %x=(a+h):h:(b); % węzły (koniec pod-przedziału ) y=exp(x).*sin(x) pole=h*sum(y) % całkowanie numeryczne (sumowanie) pól tekst=strcat(['calka metoda prostokatów wynosi: ', num2str(pole)]); b) metoda trapezów W metodzie trapezów funkcję podcałkową aproksymuje się wielomianem pierwszego stopnia czyli funkcją liniową: Przykładowy skrypt (całkowanie metodą trapezów): % Calkowanie numeryczne metoda trapezow n=10; h=(b-a)/n x=a:h:b; % liczba pod-przedziałów całkowania % szerokość pod-przedziałów całkowania % węzły
y=exp(x).*sin(x) pole=h*(sum(y(2:n))+(y(1)+y(n+1))/2); % całkowanie numeryczne (trapezami) tekst=strcat(['calka metoda trapezow wynosi: ', num2str(pole)]); Porada: Metoda trapezów jest również zaimplementowana w funkcjach całkowania trapz i cumtrapz (trapz(y), trapz(x,y), cumptrapz(x,y)) c) metoda Simpsona W metodzie Simpsona funkcje podcałkową aproksymuje się funkcja kwadratową. Parabola jest dopasowywana do trzech wartości funkcji podcałkowej w równo oddalonych punktach: W tej metodzie liczba przedziałów n musi być parzysta Przykładowy skrypt (całkowanie metodą Simpsona): % Calkowanie numeryczne metoda Simpsona n=10; % liczba pod-przedziałów całkowania h=(b-a)/n % szerokość pod-przedziałów całkowania x=a:h:b; % węzły parzyste=2:2:n; nieparzyste=3:2:n-1; y=exp(x).*sin(x) pole=h/3*(y(1)+4*sym(y(parzyste))+2*sum(y(nieparzyste))+y(n+1); % całkowanie Simpsona tekst=strcat(['calka metoda trapezow wynosi: ', num2str(pole)]); d) metoda Monte Carlo W metodzie Simpsona funkcje podcałkową aproksymuje się funkcja kwadratową. Parabola jest dopasowywana
Metoda Monte Carlo (nazwę zawdzięcza wykorzystaniu liczb losowych) jest stosowana w różnych dziedzinach nauki i techniki. W celu policzeni całki: Obliczanie całki oznaczonej sprowadza się zatem do wyliczenia wartości średniej f i funkcji f(x). Wystarczy wylosować z przedziału a, b, n punktów, obliczyć sumę wartości funkcji f(x) w tych punktach i podzielić przez n. Innymi słowy wyznaczamy średnia wartość funkcji w tym przedziale. Przykładowy skrypt (całkowanie metodą Monte Carlo): % Calkowanie numeryczne metoda Monte Carlo n=1000; % liczba losowań x=a+(b-a)*rand(1,n); % węzły (wylosowane) y=exp(x).*sin(x); pole=(b-a)*sum(y)/n; % sumowanie tekst=strcat(['calka metoda trapezow wynosi: ', num2str(pole)]); e) całkowanie analityczne Symbolic Math Toolbox W matlabie możliwe jest również całkowanie którego wynikiem jest wzór. Poniższy przykład przedstawia użycie pakietu Symbolic Math Toolbox w celu realizacji takiego całkowania dla funkcji oznaczonej i nieoznaczonej: >> syms x >> y=int(1./(1+x.^2)) y = atan(x) >> y=int(1./(1+x.^2),0,1) y = pi/4 Funkcja int podaje rezultat całkowania w postaci wzoru. Jeżeli całka jest nieoznaczona otrzymuje się rozwiązanie analityczne, jeżeli podano granice obliczana jest dokładna wartość całki oznaczonej.