Wykład 6 Pakiety oprogramowania analizy matematycznej. Interpretacja wyników 1
System algebry komputerowej System algebry komputerowej lub komputerowy system obliczeń symbolicznych (ang. Computer Algebra System lub CAS) to program komputerowy wspomagający obliczenia symboliczne w matematyce, fizyce i dyscyplinach technicznych Możliwości Typowe wyrażenia z jakimi operują tego rodzaju programy zbudowane są z wielomianów jednej lub wielu zmiennych, funkcji elementarnych, lub macierzy; całek i pochodnych opisanych tu wyrażeń, macierzy bądź funkcji od takich wyrażeń, obliczenia algebraiczne na abstrakcyjnych strukturach grupowych, obliczenia związane z teorią liczb oraz obliczenia dotyczące modelowania, statystyki matematycznej oraz możliwość graficznej prezentacji wykresów funkcji. 2
Typowe operacje wykonywane na wyrażeniach upraszczanie wyrażeń podstawianie wyrażeń symbolicznych za zmienne i redukcja wyrazów podobnych rozwijanie iloczynów rozkład wyrażeń na czynniki różniczkowanie symboliczne całkowanie symboliczne całki oznaczone i nieoznaczone symboliczne rozwiązywanie niektórych typów równań i ich układów rozwiązywanie równań różniczkowych określonych typów obliczanie granic funkcji i ciągów obliczanie sum szeregów rozwijanie funkcji w szereg operacje na macierzach mnożenie, odwracanie, obliczanie wyznacznika... obliczenia związane z teorią grup obliczenia związane ze statystyką matematyczną operacje na listach i zbiorach elementów eksport wyników obliczeń do formatu TeXa i EPS. 3
Wybrane programy CoCoA (ang. COmputations in COmmutative Algebra) jest to wolny system algebry komputerowej przeznaczony do obliczeń liczbowych i wielomianowych. System jest używany głównie przez naukowców, ale może być użyteczny także dla "prostych" zadań (2000) Derive-program z rodziny CAS, który pozwala na wykonywanie obliczeń symbolicznych i numerycznych z wielu działów matematyki (1988) Maple-program komputerowy typu CAS służący do wykonywania obliczeń symbolicznych (1981) Mathematica - komercyjny system obliczeń symbolicznych i numerycznych (1988) MathCad komercyjny program algebry komputerowej (CAS) stworzony przez firmę Mathsoft o możliwościach zbliżonych do programu Mathematica lub Maple (1986) MuPAD komercyjny program algebry komputerowej (CAS) (1994) Maxima program komputerowy typu CAS (systemów algebry komputerowej), które mają wspomagać wykonywanie obliczeń symbolicznych. Głównym składnikiem programu jest interpreter (1982) Sage (wcześniej SAGE - akronim nazwy Software for Algebra and Geometry Experimentation) - System algebry komputerowej napisanego w Pythonie i Cythonie (2009) Yacas program typu CAS (wspomagający obliczenia symboliczne) o otwartym źródle, rozprowadzany na licencji GPL. Nazwa jest akronimem od słów Yet Another Computer Algebra System (2007) 4
Pakiet oprogramowania MatLab MATLAB - program komputerowy będący interaktywnym środowiskiem do wykonywania obliczeń naukowych i inżynierskich, oraz do tworzenia symulacji komputerowych (1980) Matlab, przynajmniej pierwotnie, przeznaczony był do pracy interaktywnej nad zadaniami numerycznej algebry liniowej. Z tego względu podstawowym elementem obsługi programu jest konsola tekstowa zwana zwykle oknem poleceń (ang. command window ). Praca z programem polega na wypisywaniu poleceń zakończonych znakiem powrotu karetki ( Enter ), które są niezwłocznie interpretowane przez program, a wyniki obliczeń wyświetlane w tym samym oknie. Polecenia mogą dotyczyć także otwarcia nowych okien do prezentacji graficznej wyników. Najprostszym wariantem takiej konwersacji jest użycie Matlab a jako potężnego kalkulatora obok znaku zachęty >> wpisujemy wyrażenie, kończąc je znakiem nowej linii ( Enter ): >> 2+sin(5*pi/7)-exp(3) ans = -17.3037 >> 5
Zmienne: interpretacja macierzowa i tablicowa Podstawowym typem danych jest tablica dwuwymiarowa liczb podwójnej precyzji (typu double). Zmienne skalarne są zapamiętywane jako macierz 1 x 1. >> X=[1,2;3,4;5,6] X= 1 2 3 4 5 6 Ta instrukcja powoduje utworzenie zmiennej X, której wartością jest tablica o 3 wierszach i 2 kolumnach Tablice (macierz) wprowadza sie wierszami, które oddziela sie średnikami, a elementy w wierszu oddzielane są przecinkami (lub spacjami). Elementy macierzy (tablicy) mogą być zadawane przy pomocy wyrażeń, mogą ponadto być liczbami zespolonymi. >> X=[1, 2+3*i, 7+cos(pi/3); i, -3, exp(2)] X = 1.0000 2.0000 + 3.0000i 7.5000 0 + 1.0000i -3.0000 7.3891 6
Programowanie w Matlabie Instrukcji To są polecenia (możliwe z funkcjami macierzowymi, podstawowymi matematycznymi, operatorami, druku wykresów itd.) Skrypty W celu zautomatyzowania pewną liczbę poleceń z wiersza poleceń możemy zapisać do pliku z rozszerzeniem *.m Funkcji Funkcja tak jak skrypt jest plikiem tekstowym zawierającym zestaw funkcji i poleceń Matlaba i zaczynać się powinna od słowa kluczowego function. Pliki funkcji mają również rozszerzenie.m. UWAGA: Ważne jest aby nazwa funkcji i nazwa pliku były takie same. 7
Dodatki MatLaba MATLAB Simulink Aerospace Blockset Aerospace Toolbox Bioinformatics Toolbox Communications System Toolbox Computer Vision System Toolbox Control System Toolbox Curve Fitting Toolbox DO Qualification Kit DSP System Toolbox Data Acquisition Toolbox Database Toolbox Datafeed Toolbox EDA Simulator Link Econometrics Toolbox Embedded Coder Filter Design HDL Coder Financial Derivatives Toolbox Financial Toolbox Fixed-Income Toolbox Fixed-Point Toolbox Fuzzy Logic Toolbox Global Optimization Toolbox IEC Certification Kit Image Acquisition Toolbox Image Processing Toolbox Instrument Control Toolbox MATLAB Builder EX MATLAB Builder JA MATLAB Builder NE MATLAB Coder MATLAB Compiler MATLAB Distributed Computing Server MATLAB Report Generator Mapping Toolbox Model Predictive Control Toolbox Neural Network Toolbox Optimization Toolbox Parallel Computing Toolbox Partial Differential Equation Toolbox Phased Array System Toolbox RF Toolbox Robust Control Toolbox Signal Processing Toolbox SimBiology SimDriveline SimElectronics SimEvents SimHydraulics SimMechanics SimPowerSystems SimRF Simscape Simulink 3D Animation Simulink Coder Simulink Control Design Simulink Design Optimization Simulink Design Verifier Simulink Fixed Point Simulink HDL Coder Simulink PLC Coder Simulink Report Generator Simulink Verification and Validation Spreadsheet Link EX Stateflow Statistics Toolbox Symbolic Math Toolbox System Identification Toolbox SystemTest Wavelet Toolbox xpc Target xpc Target Embedded Option 8
Struktura obliczeń symbolicznych Różniczkowanie, całkowanie, badanie granic, szeregów Taylora, sumowanie szeregów Upraszczanie wyrażeń Algebra liniowa Rozwiązywanie równań algebraicznych i różniczkowych 9
Definiowanie danych symbolicznych - funkcja sym Do definiowania zmiennych lub stałych symbolicznych służą funkcje sym i syms. >> x Przykład: x = >> x = sym('x'); % definicja zmiennej x >> a = sym('5'); % definicja stałej a=5 x >> rho = sym('(1+sqrt(5))/2'); % definicja zmiennej symbolicznej określającej złoty środek >> syms y z % definicja dwu zmiennych y, z >> a a = 5 >> rho rho = 5^(1/2)/2 + 1/2 Uwaga: Wszystkie zmienne, wykorzystywane w obliczeniach symbolicznych muszą być wcześniej zdefiniowane. 10
Symboliczne rozwiązywanie równań algebraicznych i układów równań funkcja solve Symboliczne rozwiązywanie równań możliwe jest dzięki wykorzystaniu funkcji solve(). Dla przykładu rozwiązania równania kwadratowego szukamy w następujący sposób: >> x = sym('x'); % zdefiniowanie zmiennej symbolicznej >> y = solve('a*x^2+b*x+c=0'); % x jest domyślną zmienną Funkcję solve można również wywoływać w inny sposób: >> y = solve('a*x^2+b*x+c',x); % równoważne poprzedniemu wywołaniu, podana zmienna x >> y = solve('a*x^2+b*x+c'); % domyślnie przyjęte, że lewa strona równania równa się 0 Podobnie postępujemy przy układach równań gdzie kolejne równania wpisujemy rozdzielone przecinkami. Przykład: >> syms x y % zdefiniowanie 2 zmiennych symbolicznych >> [x,y] = solve('x^2+y^2=1','x+2*y=2'); % rozwiązanie. Wynik w postaci 2 wektorów >> s = solve('x^2+y^2=1','x+2*y=2'); % rozwiązanie. Wynik w postaci struktury z 2 wektorami 11
f(x) = 0 syms a b c x S = a*x^2 + b*x + c; solve(s) Przykłady ans = -(b + (b^2-4*a*c)^(1/2))/(2*a) -(b - (b^2-4*a*c)^(1/2))/(2*a) b = solve(s,b) f(x) = q(x) s = solve('cos(2*x) + sin(x) = 1') b = -(a*x^2 + c)/x s = 0 pi/6 (5*pi)/6 W MuPADie 12
Układy równań syms x y; alpha = sym('alpha'); [x, y] = solve(x^2*y^2, x-y/2 - alpha) x = alpha 0 y = 0-2*alpha 1 x = alpha/2 + (alpha^2 + 2)^(1/2)/2 alpha/2 + (alpha^2-2)^(1/2)/2 alpha/2 - (alpha^2 + 2)^(1/2)/2 alpha/2 - (alpha^2-2)^(1/2)/2 y = (alpha^2 + 2)^(1/2) - alpha (alpha^2-2)^(1/2) - alpha - alpha - (alpha^2 + 2)^(1/2) - alpha - (alpha^2-2)^(1/2) 13
Upraszczanie wyrażeń symbolicznych W zależności od zastosowań wiele wyrażeń matematycznych można przedstawić w różnych formach. Matlab oferuje kilka funkcji, których zadaniem jest takie przedstawienie wyniku, aby spełniało nasze kryteria: symplify collect expand horner factor simple uproszczenie wyniku postać wielomianowa, grupowanie zmiennych rozwija mnożenia i sumowania postać zagłębionych iloczynów wielomiany w postaci iloczynowej dane wyrażenie matematyczne wypisuje we wszystkich możliwych formach 14
Upraszczanie wyrażeń symbolicznych - funkcja simplify( ) Często wynik operacji symbolicznych jest trudny do interpretacji. Uproszczenie wyniku uzyskujemy dzięki zastosowaniu funkcji simplify. 15
Upraszczanie wyrażeń symbolicznych - funkcja collect 16
Upraszczanie wyrażeń symbolicznych funkcja expand 17
Upraszczanie wyrażeń symbolicznych funkcja horner 18
Upraszczanie wyrażeń symbolicznych funkcja factor 19
Upraszczanie wyrażeń symbolicznych funkcja simple 20
Zmiana wyglądu wyświetlanych wyników funkcja pretty( ) Wyniki uzyskiwane w Matlabie, nawet po uproszczeniach dzięki różnym funkcjom często są trudne w odbiorze. Aby wyświetlić bardziej skomplikowane wyrażenia w formie zbliżonej do tej jak zapisuje to człowiek Matlab oferuje funkcję pretty. Przykład: >> a = sym('sin(x)/(2*cos(y))'); % definicja wyrażenia symbolicznego >> pretty(a) % wyświetlenie w przyjaznej formie UWAGA: Funkcja ta ma swoje zastosowanie zarówno do wyrażeń jak i do macierzy. syms x f = x^3-6*x^2 + 11*x - 6; g = (x - 1)*(x - 2)*(x - 3); h = -6 + (11 + (-6 + x)*x)*x; pretty(f); pretty(g); pretty(h) 21
Wartości liczbowe w obliczeniach symbolicznych funkcja subs( ) Gdy znamy wartości liczbowe poszczególnych zmiennych wynik liczbowy obliczeń symbolicznych uzyskujemy dzięki funkcji subs. Przykład: >> syms a b c x % definicja 4 zmiennych symbolicznych >> y = solve(a*x^2+b*x+c); % rozwiązanie równania względem zmiennej x >> a=3; b=2; c=1; % Przypisanie wartości liczbowych >> w = subs(y) % Wartość liczbowa y Uwaga: Jeśli wynik obliczeń jest już liczbą ale przedstawioną w mało zrozumiałej formie w celu uzyskania jej wartości liczbowej wystarczy napisać: double(x). Funkcja subs() wykorzystywana jest też do zamiany jednego wyrażenia na inne. Przykład: >> syms a b x % definicja 3 zmiennych symbolicznych >> subs(a+b,{a,b},{sin(x),exp(x)}) % = sin(x)+exp(x) 22
Symboliczne rozwiązywanie równań różniczkowych funkcja dsolve Równania różniczkowe dowolnego rzędu rozwiązujemy przy wykorzystaniu funkcji dsolve, której użycie jest podobne do użycia funkcji solve. Szczególne znaczenie w symbolicznym rozwiązywaniu równań różniczkowych ma zmienna D (duże D), która określa różniczkę pierwszego stopnia, i podobnie D2 to różniczka stopnia drugiego, itd. Przykład: >> dsolve('dy = a*x'); % różniczka pierwszego stopnia C2 + a*t*x W przypadku układu równań, kolejne równania oddzielamy przecinkami. Podobnie warunki brzegowe, podajemy po wszystkich równaniach, także oddzielone przecinkami: dsolve(równanie 1, równanie 2,., warunek 1, warunek 2,.) Przykład: >> dsolve('d2y = -a^2*y', 'y(0) = 1', 'Dy(pi/a) = 0'); % różniczka stopnia drugiego z warunkami brzegowymi (1/exp(a*t*i))/2 + exp(a*t*i)/2 23
Przykłady u = dsolve('d3u = u',... 'u(0) = 1', 'Du(0) = -1', 'D2u(0) = pi', 'x') u = (pi*exp(x))/3 - (cos((3^(1/2)*x)/2)*(pi/3-1))/exp(x/2)... - (3^(1/2)*sin((3^(1/2)*x)/2)*(pi + 1))/(3*exp(x/2)) 24
Układy równań różniczkowych S = dsolve('df = 3*f + 4*g', 'Dg = -4*f + 3*g') MatLab wraca obliczone rozwiązania w strukturze S. Można określić wartości f i g, wpisując f = S.f g = S.g f = C2*cos(4*t)*exp(3*t) + C1*sin(4*t)*exp(3*t) g = C1*cos(4*t)*exp(3*t) - C2*sin(4*t)*exp(3*t) 25
Różniczkowanie symboliczne funkcja diff Do różniczkowania symbolicznego wykorzystujemy funkcję diff(funkcja, rząd), przy, czym rząd pochodnej domyślnie równa się 1. Przykład: >> syms x n % definicja 2 zmiennych symbolicznych >> diff(x^n) % różniczkowanie symboliczne ans = n*x^(n - 1) syms x g = exp(x)*cos(x) diff(g) diff(g,2) exp(x)*cos(x) - exp(x)*sin(x) -2*exp(x)*sin(x) 26
Pochodne cząstkowe W przypadku funkcji wielu zmiennych możliwe jest liczenie pochodnych cząstkowych. W tym celu także korzystamy z funkcji diff() z wywołaniem: diff(funkcja, zmienna) Przykład: >> syms s t % definicja 2 zmiennych symbolicznych >> f = sin(s*t); % definicja funkcji 2 zmiennych >> diff(f,t) % pochodna funkcji po zmiennej t ans = s*cos(s*t) diff(f, t, 2) ans = -s^2*sin(s*t) 27
Przykłady 28
Całkowanie symboliczne funkcja int W Matlabie można całkować zarówno całki oznaczone jak i nieoznaczone. W przypadku całki nieoznaczonej stosujemy wywołanie funkcji w postaci: int (funkcja) W przypadku całki oznaczonej wywołanie ma następującą postać: int (funkcja, dolne ograniczenie, górne ograniczenie). Przykład: >> int('x'); % całko nieoznaczona >> int('sqrt(tan(x))',0,1); % całka oznaczona x^2/2 (2^(1/2)*(atan(2^(1/2)*tan(1)^(1/2) - 1) + atan(2^(1/2)*tan(1)^(1/2) + 1)))/2 - (2^(1/2)*(log(tan(1) + 2^(1/2)*tan(1)^(1/2) + 1) - log(tan(1) - 2^(1/2)*tan(1)^(1/2) + 1)))/4 29
Przykłady poleceń 30
Przykłady 31
Całka oznaczona syms x; f = exp(-a*x^2); int(f, x, -inf, inf) ans = (5^(1/2)*pi^(1/2))/5 32
Przykłady 33
Obliczenie granicy 34
Przykłady syms h n x limit((cos(x+h) - cos(x))/h, h, 0) ans = -sin(x) limit((1 + x/n)^n, n, inf) ans = exp(x) syms x; limit(x/abs(x), x, 0, 'left') syms x; limit(x/abs(x), x, 0, 'right') ans = -1 ans = 1 35
Sumowanie szeregów syms x k s1 = symsum(1/k^2, 1, inf) s2 = symsum(x^k, k, 0, inf) s1 =pi^2/6 1/(1 x) s2 =piecewise([1 <= x, Inf], [abs(x) < 1, -1/(x - 1)] 36
Szeregi Taylora syms x f = 1/(5 + 4*cos(x)); T = taylor(f, 8) T = (49*x^6)/131220 + (5*x^4)/1458 + (2*x^2)/81 + 1/9 pretty(t) --- help for sym/taylor --- TAYLOR Taylor series expansion. TAYLOR(f) is the fifth order Maclaurin polynomial approximation to f. Three additional parameters can be specified, in almost any order. TAYLOR(f,n) is the (n-1)-st order Maclaurin polynomial. TAYLOR(f,a) is the Taylor polynomial approximation about point a. TAYLOR(f,x) uses the independent variable x instead of SYMVAR(f). 37
Mathcad Mathcad to profesjonalny program matematyczny służący do rozwiązywania różnego typu zagadnień inżynierskich. Umożliwia prowadzenie zaawansowanych obliczeń numerycznych, jak również przekształceń symbolicznych (m.in. symboliczne obliczenia pochodnych, całek i granic funkcji), czyli operacji związanych z analizą matematyczną. 38
Nazwy palet symboli matematycznych Calculator działania takie jak na kalkulatorze Evaluation m.in. symbole przypisywania zmiennym wartosci (podstawiania) oraz rozkazy wyswietlenia obliczonej wartosci Graph wstawianie rónego rodzaju wykresów Matrix operacje wektorowe i macierzowe Boolean relacje i operacje logiczne Calculus analiza matematyczna (całki, pochodne, sumy, iloczyny, granice) Greek greckie litery Symbolic przekształcenia symboliczne (działania na wzorach a nie liczbach) Programming programowanie 39
Wyrażenia 40
Obliczenia symboliczne Wyznaczanie wartości pochodnej w sposób symboliczny Aby wyznaczyć pochodna funkcji symbolicznie należy zdefiniować pochodna, następnie wybrać polecenie Symbolics Evaluate Symbolicaly (wykonaj obliczenia na symbolach). Całkowanie funkcji Mathcad umożliwia obliczenie całki funkcji w zadanym przedziale oraz wyznaczenie całki nieoznaczonej funkcji. Wyznaczanie całki nieoznaczonej 41
Szeregi 42
Szereg Taylora 43
Różniczkowanie 44
Upraszczanie wyrażeń symbolicznych 45
Przykłady 46
Przykłady 47
Granicy 48
Symboliczne rozwiązywanie równań algebraicznych i układów równań 49