Ćw.4
Transkrypt
Ćw.4
Ćwiczenie 4. Matlab - funkcje, wielomiany, obliczenia symboliczne Obliczenia z wykorzystaniem tzw. funkcji anonimowej Składnia funkcji anonimowej: nazwa_funkcji=@(lista_argumentów)(wyrażenie) gdzie: - wyrażenie jest ciałem funkcji zawierającym pojedynczy wzór funkcji; - lista_argumentów występujących we wzorze funkcji, oddzielanych przecinkami Zadanie: Obliczyć wartości drogi dla podanego wzoru na drogę: s= dla a=4 w przedziale dla t=[0, 5] Generujemy listę argumentów w macierzy jednowierszowej t od 0 do 5 z krokiem 0.1. t=[0:0.1:5] Dla wzoru s=at2/2 tworzymy funkcję anonimową (Uwaga: operator potęgowania na elementach macierzy .^) f = @(t)(a*t.^2/2) Wywołujemy funkcję anonimową: s=f(t) Metoda obliczeń w Matlab-ie: t=[0:0.1:5] a=4 f = @(t)(a*t.^2/2); s=f(t) plot(t,s) Wyniki obliczeń: t= 0 s= 0 1 2 3 4 5 2 8 18 32 50 Obliczenia przy pomocy funkcji zdefiniowanej w osobnym m-pliku Najpierw tworzymy m-plik funkcyjny o nazwie fs.m: % obliczanie wartości funkcji fs(t,a)=2*t^2 function y = fs(t, a) %argumenty funkcji:t oraz a y=a*t.^2/2; Generujemy macierz jednowierszową argumentów t: t=[0:0.1:5] Obliczamy ilość elementów macierzy t przy pomocy funkcji length n=length(t) Obliczamy wartości: s1i = fs(ti) dla i=1:n Metoda obliczeń w Matlab-ie: % Program oblicza tablicę wartości drogi s dla tablicy argumentów t t=[0:0.5:5]; n=length(t); for i=1:n s (i)=fs fs(t(i), a); fs end plot(t,s), grid %utworzenie wykresu s(t) Wyniki obliczeń: w macierzy t zadane są argumenty czasu t, zaś w macierzy s1 obliczone są wartości drogi dla każdej chwili t. Wyniki są wyświetlane w postaci wykresu. Wielomiany w Matlabie W matematyce często wielomian n-tego stopnia zmiennej x zapisujemy w postaci: 4(5) = 67 5 8 + a: 5 8;1 + 6 5 8;2 + ⋯ + 6= 5 8;= + ⋯ +68; 5 + 68;: 5 + 68 W wersji skróconej zapis wielomianu można przedstawić w następującej postaci: 8 4(5) = > 6= 5 8;= =?0 W języku Matlab indeksy macierzy zaczynają się od liczby 1 , a nie od liczby 0. Dlatego też, dla potrzeb programowania w Matlabie musimy zmienić indeksy we współczynnikach wielomianu: 4(5) = 61 5 + a 2 5 8 8;1 + 63 5 8;2 + ⋯ + 6= 5 8@1;= + ⋯ + 68 5 + 68@1 = > 6= 5 8@1;= Ćwiczenie Zapisać współczynniki wielomianu w Matlab-ie: w1(x) =2x2–6x+3 w2(x)=x4+2x2–6x+3 8@1 =?1 w macierzy a1 w macierzy a2 Rozwiązanie: a1=[2 -6 3] a2=[1 0 2 -6 3] Obliczanie pierwiastków wielomianu Do obliczania pierwiastków wielomianu służy poznana funkcja roots o następującej składni: roots(a) gdzie a jest macierzą współczynników wielomianu. Ćwiczenie Rozwiązać równanie: x3 – 3x2+2=0 Sposób 1: Podstawiamy do wektora a współczynniki wielomianu: a=[1 -3 0 2] Wywołujemy instrukcję roots ze współczynnikami w wektorze a: x=roots(a) Metoda obliczeń w Matlab-ie: a=[1 –3 0 2]; x=roots(a) Sposób 2: Podstawiamy współczynniki wielomianu od razu do wywołania funkcji roots umieszczając współczynniki w nawiasach kwadratowych x=roots([1 –3 0 2]) Metoda obliczeń w Matlab-ie: x=roots([1 -3 0 2]) Zadania Obliczyć pierwiastki wielomianów: a) 3x2+4x-5=0 b) x4+3x2–2x+4=0 Sprawdzić rozwiązania na wykresach. Obliczenia symboliczne – dodatek Symbolic Toolbox Pakiet Matlab może posiadać zainstalowany dodatek Symbolic Toolbox, umożliwiający obliczenia symboliczne. Wykorzystanie obliczeń symbolicznych wymaga zadeklarowania abstrakcyjnych zmiennych nie posiadających wartości. Służy do tego polecenie o postaci: syms arg1 arg2 arg 3 itd Symboliczne rozwiązywanie równań – funkcja solve() Przykład: syms x a f=a-x^2 r=solve solve(f, solve x) f= a-x^2 r= a^(1/2) -a^(1/2) Symboliczne operacje macierzowe syms A a b c d e f g h A=[a b; c d] B=[e f ; g h] il_m=A*B il_e=A.*B A= [ a, b] [ c, d] B= [ e, f] [ g, h] il_m = [ a*e+b*g, a*f+b*h] [ c*e+d*g, c*f+d*h] il_e = [ a*e, b*f] [ c*g, d*h] Obliczenia na wyrażeniach symbolicznych - funkcja subs( ) Gdy znamy wartości liczbowe poszczególnych zmiennych wynik liczbowy obliczeń symbolicznych uzyskujemy wykorzystując funkcję subs . Przykład: syms a b c x y = solve(a*x^2+b*x+c) solve a=3; b=4; c=1; w = subs(y) subs y= % definicja zmiennych symbolicznych % rozwiązanie równania względem zmiennej x % Przypisanie wartości liczbowych dla a b c % Obliczenie wartości liczbowej y -1/2*(b-(b^2-4*a*c)^(1/2))/a -1/2*(b+(b^2-4*a*c)^(1/2))/a w= -0.3333 -1.0000 Zadania 1. Wyjaśnić na obliczeniach symbolicznych podnoszenie do kwadratu macierzy kwadratowej: 6 L N M P O macierzowo i elementowo. 2. Wyprowadzić symboliczne wzory na obliczanie wyznaczników macierzy: 6 L N M P O 6 O Q T M R ℎ N SW V 3. Znaleźć symboliczne wyrażenia dla rozwiązań równania 3-go stopnia: ax3+bx2+cx+d=0 Następnie obliczyć pierwiastki równania, wykorzystując poznaną wcześniej funkcję roots, wstawić jeden z pierwiastków do rozwiązań symbolicznych, sprawdzając rozwiązanie funkcją subs. Obliczanie pochodnych funkcji - funkcja diff( ) Dla obliczenia pochodnych funkcji służy funkcja diff. Jej parametrami są: funkcja, której pochodna będzie liczona, oraz (opcjonalnie) zmienna, względem której pochodna jest liczona, także rząd pochodnej. Przykład 1. Obliczenie pochodnej funkcji f(x)=x2 syms x p=diff p=diff(x^2) diff p= 2*x : XZ Przykład 2. Obliczenie pochodnej funkcji f (x, y, z )= xyz X + Y [ według każdej zmiennej (pochodne cząstkowe): f=(x*y*z)^x+(1/(x*y))^2 p=diff diff(f) diff p= (x*y*z)^x*(log(x*y*z)+1)-2/x^3/y^2 p=diff diff(f,x) diff p= (x*y*z)^x*(log(x*y*z)+1)-2/x^3/y^2 p=diff diff(f,y) diff p= (x*y*z)^x*x/y-2/x^2/y^3 p=diff diff(f,z) diff p= (x*y*z)^x*x/z Przykład 3. Obliczenie pochodnej p=diff diff(f,x,2) diff \ ] ^_ : funkcji f (x, y, z )= xyz X + YXZ[ : p= (x*y*z)^x*(log(x*y*z)+1)^2+(x*y*z)^x/x+6/x^4/y^2 albo p=diff(diff diff(diff(f,x)) diff(diff Wykresy funkcji symbolicznej i jej pochodnej można utworzyć wykorzystując funkcję ezplot, jak w w poniższym przykładzie: syms x f=x^2 p=diff(f) ezplot(f,[-10, 10]) ezplot hold on ezplot(p,[-10, 10]) ezplot Całkowanie funkcji - funkcja int( ) W Matlabie można obliczać całki za pomocą funkcji int. Jej argumentem jest funkcja symboliczna, oraz opcjonalnie zmienna całkowania oraz granice całkowania (dla całek oznaczonych). Interpretacja całki oznaczonej to pole powierzchni pomiędzy krzywą funkcji w danym przedziale a osią x. Przykłady: Obliczenie całki nieoznaczonej funkcji f(a,b)=a+b syms a x f1=int int(a+x) int f2 =int int(a+x, a) int f 1= a*x+1/2*x^2 f2 = 1/2*a^2+a*x a `: 5 O5 Obliczenie całki oznaczonej: syms x c= int(x^2,1,3) int c= 26/3 Zadania 1. Znaleźć wzory ogólne na pochodne poniższych funkcji: 2 f(x)= tg x 3 f(x)= 1–cos x f(x)= : √_;: Wykonać wykresy tych funkcji i ich pochodnych korzystając z funkcji fplot lub ezplot. Zanalizować przy pomocy wykresów fakt, że pochodna odzwierciedla tangens kąta nachylenia stycznej. 2. Bazując na wiedzy z matematyki wyjaśnić działanie skryptu badającego ekstrema funkcji: clc,clear syms x f=x^4-3*x+5 ezplot(f,[-3, 3]) df=diff(f,x); ext=double(solve(df, x)); d2f=diff(f,x,2); for k=1:length(ext) x=double(ext(k)); inf=subs(d2f); if imag(inf)==0 %wartość nie jest zespolona if inf<0 fprintf('w punkcie %f jest maksimum\n', x) else fprintf('w punkcie %f jest minimum\n', x) end end end; Uwagi: funkcja imag(x) wyznacza część urojoną liczby, funkcja double(x) zamienia wartość typu symbolicznego na rzeczywistą. 3. Obliczyć symboliczny wzór na całkę nieoznaczoną funkcji: f(x)=3sin2x. 4. Obliczyć całkę oznaczoną funkcji f(x)=x2+1 w przedziale całkowania od -3 do 3. 5. Posiadamy działkę ograniczoną dwiema parabolami jak na rysunku: 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -1 Obliczyć pole powierzchni tej działki. -0.5 0 0.5 1