1 AUTOMATYZACJA OBLICZEŃ INŻYNIERSKICHDr hab. inż. Jacek Kucharski, prof. PŁ Dr inż. Piotr Urbanek
2 CEL OGÓLNY Zdobycie umiejętności efektywnego wykorzystywania wybranych narzędzi informatycznych dla potrzeb rozwiązywania typowych problemów obliczeniowych, spotykanych w szeroko rozumianej praktyce inżynierskiej
3 CELE SZCZEGÓŁOWE Poznanie możliwości wybranych pakietów oprogramowania w zakresie wspomagania rozwiązywania problemów inżynierskich Łączenie różnych form programowania i umiejętnego wykorzystania funkcji „wysokiego poziomu” Zdobycie umiejętności „transponowania” problemu z dziedziny inżynierskiej do środowiska informatycznego
4 OBSZARY PROBLEMOWE obliczenia matematyczne statystyczna analiza danychanaliza szeregów czasowych dopasowanie krzywej, regresja, interpolacja zagadnienia optymalizacyjne całkowanie i różniczkowanie numeryczne rozwiązywanie równań algebraicznych rozwiązywanie równań różniczkowych …
5 PAKIETY OPROGRAMOWANIAEXCEL MATLAB MATHCAD
6 MATLAB ogólna charakterystykaPakiet programowy do wykonywania złożonych obliczeń numerycznych dla potrzeb naukowych i inżynierskich. setki wbudowanych funkcji wykorzystujących najwyższej klasy algorytmy bogaty zestaw tematycznych zestawów narzędziowych (Toolbox) możliwość pisania własnych funkcji w wewnętrznym języku programowania interfejs umożliwiający uruchamianie programów napisanych w Fortranie lub C …
7 MATLAB rys historycznylata 70-te w USA powstają biblioteki do obliczeń macierzowych napisane w Fortanie 1980r. powstaje program (też w Fortanie) umożliwiający wykorzystywanie tych bibliotek bez potrzeby programowania w Fortranie (pierwowzór) od 1983r. trwają prace nad zastąpieniem Fortranu językiem C i dodaniem zintegrowanej grafiki 1985 r. pojawia się pierwsza wersja Matlaba (firma The Mathworks Inc.)
8 Tryby pracy Tryb interaktywny – potężny kalkulator z możliwością przeprowadzenia operacji graficznych Programowanie w Matlab – interpretowany język programowania wysokiego poziomu SIMULINK – symulacje komputerowe z wykorzystaniem programowania wizualnego
9 Wybrane typy plików M-pliki (pliki tekstowe zawierające programy napisane w Matlabie) Mat-pliki (pliki binarne zawierające dane w formacie Matlaba) Fig-pliki (binarne pliki wykresów) P-pliki (skompliowane M-pliki) Mex-pliki (programy zapisane w Fortranie lub C wywoływane z Matlaba) …
10 Środowisko pracy pulpit Matlaba okno graficzne okno edytoraokno poleceń okno bieżącego katalogu okno przestrzeni roboczej okno historii poleceń okno graficzne okno edytora
11 Środowisko pracy
12 Charakterystyka środowiskaMatlab rozróżnia wielkość liter Pomoc: help temat, lookfor łańcuch Przestrzeń robocza (who, clear, save, load) Po wprowadzeniu polecenia Matlab sprawdza: czy jest to zmienna jeżeli nie to czy jest to funkcja wbudowana jeżeli nie to czy jest to funkcja w bieżącym katalogu jeżeli nie to czy jest to funkcja w ścieżce dostępu Ścieżka dostępu zawarta w zmiennej path generowanej przez plik pathdef.m rozszerzanie: polecenia addpath, savepath
13 Charakterystyka środowiska - cdrola , ; … przydatne polecenia (clc, more, diary) historia poleceń MATLAB rozróżnia małe i wielkie litery. >>save - zapisuje wszystkie zmienne w pliku matlab.mat >>save temp - zapisuje wszystkie zmienne w pliku temp.mat >>save temp X Y - zapisuje zmienne X i Y w pliku temp.mat load temp help – wyświetla zestawienie katalogów MATLAB-a wraz z ich opisem
14 Charakterystyka środowiska - cdhelp nazwa polecenia – podaje podpowiedź na temat żądanego polecenia, np. help ver lookfor szukana_nazwa – przeszukuje wszystkie teksty pomocy w celu odnalezienia szukanej nazwy, lub jej fragmentów, which nazwa_m-pliku – powoduje wyświetlenie ścieżki dostępu do m-pliku lub do m-funkcji matlabpath – podaje przeszukiwane katalogi programu MATLAB
15 Liczby, zmienne i wyrażeniaNumeric - typ numeryczny podwójnej precyzji. Jest to podstawowy typ danych dla zmiennych MATLAB-a (wszystkie obliczenia dla zmiennych numerycznych są prowadzone w trybie podwójnej precyzji). Char – typ tablicowy znakowy lub łańcuchowy (każdy znak zapisywany jest 16-bitowo). cell – typ komórkowy. Elementy tablic komórkowych mogą zawierać inne tablice, struct – typ strukturalny. Odwołują się do nazw pól, które mogą zawierać inne tablice.
16 Rodzaje tablic w Matlabiemacierze, tablice wielowymiarowe, tablice komórkowe, tablice strukturalne, A =
17 Programowanie w MatlabieSkrypty x = pi/100:pi/100:10*pi; y = sin(x)./x; plot(x,y) grid Funkcje a=[ ] function [b, j] = desc_sort(a) [b ,j] = sort(-a); b = -b; [b c]=desc_sort(a) b = c =
18 Funkcje inline i komenda fevalInline function: f(x,y) = sqrt(x.^2+y.^2) w=f(3,4) w = 5 f = inline('sqrt(x.^2+y.^2)','x','y')
19 Funkcje inline i komenda fevalfunction y = calka_ozn(fname, fpname, a, b) % fname - nazwa funkcji, % fpname - nazwa I-szej pochodnej funkcji % a,b – górny i dolny przedział całkowania h = b - a; y = (h/2).*(feval(fname,a) + feval(fname,b))+ (h.^2)/12.*… (feval(fpname,a) -feval(fpname,b)); y=calka_ozn('sin','cos',0,1) y =
20 Funkcja eval expression = input('Podaj wyrażenie: ','s');x=input('Podaj wartości do obliczeń: '); y=eval(expression); plot(y,'*');
21 Funkcje sterujące wykonywaniem programu w środowisku MatlabPetla ‘for’ for k = array komendy end; for n=0:10 x(n+1) = sin(pi*n/10); Pętle ‘for’ zagnieżdżone: H = zeros(5); for k=1:5 for l=1:5 H(k,l) = 1/(k+l-1); Pętla for powinna być używana jedynie w przypadkach, gdy inne metody nie mogą być zastosowane. Przykładowo: A = zeros(10); for k=1:10 for l=1:10 A(k,l) = sin(k)*cos(l); end; Zamiast pętli można zastosować zapis skrócony: k = 1:10; A = sin(k)'*cos(k);
22 Funkcje sterujące wykonywaniem programu w środowisku MatlabPętla ‘while’ while expression statements end; q = pi; while q > 0.01 q = q/2; Instrukcja if if expression komendy end; komendy (jeżeli true) else komendy (jeżeli false)
23 Funkcje sterujące wykonywaniem programu w środowisku Matlabif expression1 komendy elseif expression 2 elseif … . else end Wielomiany Czebyszewa: function T = ChebT(n) t0 = 1; t1 = [1 0]; if n == 0 T = t0; elseif n == 1; T = t1; else for k=2:n T = [2*t1 0] - [0 0 t0]; t0 = t1; t1 = T; end
24 Funkcje sterujące wykonywaniem programu w środowisku MatlabKonstrukcja switch-case switch wyrażenie (skalar lub string) case wartość1 komendy case value2 . otherwise statements end x = ceil(10*rand); switch x case {1,2} disp(‘Wartość = 20%'); case {3,4,5} disp(‘Wartość = 30%'); otherwise disp(‘Wartość = 50%'); end
25 Operatory Operator Opis < Less than <= Less than or equal to> Greater >= Greater or equal to == Equal to ~= Not equal to Operator logiczny Opis | And & Or ~ Not
26 Tablice komórkowe Deklarowanie tablic: A(1,1) = {'John Brown'};Indeksowanie B{1,1} = 'John Brown'; B{1,2} = [ ]; celldisp(A) A{1} = John Brown A{2} =
27 Zaokrąglanie wartościFunkcja Opis floor Zaokrągla w kierunku minus nieskończoności ceil Zaokrągla w kierunku plus nieskończoności fix Zaokrągla do zera round Zaokrągla w kierunku liczby najbliższej wartości całkowitej
28 Grafika w Matlabie Grafika dwuwymiarowa for n=1:2:5 n10 = 10*n;x = linspace(-2,2,n10); y = x./(1+x.^2); plot(x,y,'r') title(sprintf('Rysunek %g. Wykres dla n = %g punktów.',(n+1)/2,n10)) axis([-2,2,-.8,.8]) xlabel('x') ylabel('y') grid pause(3) end
29 Grafika w Matlabie, cd.. k = 0; for n=1:3:10 n10 = 10*n;x = linspace(-2,2,n10); y = x./(1+x.^2); k = k+1; subplot(2,2,k) plot(x,y,'r') title(sprintf(‘Rysunek %g. Wykres dla n = %g points.' , k, n10)) xlabel('x') ylabel('y') axis([-2,2,-.8,.8]) grid pause(3); end
30 Grafika w Matlabie, cd.. h = get(gca,'xlabel'); set(h,'FontSize',12)set(gca,'XTick',-4:10) ylabel('y') h = get(gca,'ylabel'); set(gca,'YTick',-12:2:14) title('Graphs of (x-3)^2/36+(y+2)^2/81 = 1 and (x-7)^2/4+(y-8)^2/36 =1.') h = get(gca,'Title'); grid t = 0:pi/100:2*pi; x1 = 3 + 6*cos(t); y1 = *sin(t); x2 = 7 + 2*cos(t); y2 = 8 + 6*sin(t); h1 = plot(x1,y1,'r',x2,y2,'b'); set(h1,'LineWidth',1.25) axis('square') xlabel('x')
31 Grafika trójwymiarowaclear; clc; % Grafika 3D t = -10*pi:pi/100:10*pi; x = t.*cos(t); y = t.*sin(t); h = plot3(x,y,t); set(h,'LineWidth',1.25) title('Krzywa u(t) = < t*cos(t), t*sin(t), t >') h = get(gca,'Title'); set(h,'FontSize',12) xlabel('x') h = get(gca,'xlabel'); ylabel('y') h = get(gca,'ylabel');set(h,'FontSize',12) zlabel('z') h = get(gca,'zlabel'); grid
32 Grafika trójwymiarowa, cd..x = -1:0.05:1; y = x; [xi, yi] = meshgrid(x,y); zi = yi.^2 – xi.^2; mesh(xi, yi, zi) axis off