AUTOMATYZACJA OBLICZEŃ INŻYNIERSKICH Dr hab. inż. Jacek Kucharski, prof. PŁ Dr inż. Piotr Urbanek
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
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
OBSZARY PROBLEMOWE obliczenia matematyczne statystyczna analiza danych analiza 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 …
PAKIETY OPROGRAMOWANIA EXCEL MATLAB MATHCAD
MATLAB ogólna charakterystyka Pakiet 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 …
MATLAB rys historyczny lata 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.)
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
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) …
Środowisko pracy pulpit Matlaba okno graficzne okno edytora okno poleceń okno bieżącego katalogu okno przestrzeni roboczej okno historii poleceń okno graficzne okno edytora
Środowisko pracy
Charakterystyka środowiska Matlab 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
Charakterystyka środowiska - cd rola , ; … 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
Charakterystyka środowiska - cd help 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
Liczby, zmienne i wyrażenia Numeric - 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.
Rodzaje tablic w Matlabie macierze, tablice wielowymiarowe, tablice komórkowe, tablice strukturalne, A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1
Programowanie w Matlabie Skrypty x = pi/100:pi/100:10*pi; y = sin(x)./x; plot(x,y) grid Funkcje a=[3 1 7 9 -3] function [b, j] = desc_sort(a) [b ,j] = sort(-a); b = -b; [b c]=desc_sort(a) b = 9 7 3 1 -3 c = 4 3 1 2 5
Funkcje inline i komenda feval Inline function: f(x,y) = sqrt(x.^2+y.^2) w=f(3,4) w = 5 f = inline('sqrt(x.^2+y.^2)','x','y')
Funkcje inline i komenda feval function 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 = 0.4590
Funkcja eval expression = input('Podaj wyrażenie: ','s'); x=input('Podaj wartości do obliczeń: '); y=eval(expression); plot(y,'*');
Funkcje sterujące wykonywaniem programu w środowisku Matlab Petla ‘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);
Funkcje sterujące wykonywaniem programu w środowisku Matlab Pę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)
Funkcje sterujące wykonywaniem programu w środowisku Matlab if 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
Funkcje sterujące wykonywaniem programu w środowisku Matlab Konstrukcja 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
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
Tablice komórkowe Deklarowanie tablic: A(1,1) = {'John Brown'}; Indeksowanie B{1,1} = 'John Brown'; B{1,2} = [1 2 3 4 5 6 7 8 9]; celldisp(A) A{1} = John Brown A{2} = 1 2 3 4 5 6 7 8 9
Zaokrąglanie wartości Funkcja 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
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
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
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 = -2 + 9*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')
Grafika trójwymiarowa clear; 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
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