//warunki początkowe m=500; T=30; c=0.4; t=linspace(0,t,m); y0=[-2.5;2.5];

Podobne dokumenty
Równania nieliniowe, nieliniowe układy równań, optymalizacja

Równania nieliniowe, nieliniowe układy równań, optymalizacja

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Elementy metod numerycznych - zajęcia 9

ZASTOSOWANIE PROGRAMOWANIA LINIOWEGO W ZAGADNIENIACH WSPOMAGANIA PROCESU PODEJMOWANIA DECYZJI

Spis treści. Koszalin 2006 [BADANIA OPERACYJNE PROGRAMOWANIE LINIOWE]

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Optymalizacja systemów

Ćwiczenie 4. Matlab - funkcje, wielomiany, obliczenia symboliczne

Optymalizacja systemów

Metody optymalizacji - wprowadzenie do SciLab a

Obliczenia iteracyjne

Definicja problemu programowania matematycznego

Laboratorium Metod Optymalizacji

FUNKCJA REKURENCYJNA. function s(n:integer):integer; begin if (n>1) then s:=n*s(n-1); else s:=1; end;

Optymalizacja systemów

Rozdział 6 PROGRAMOWANIE WYPUKŁE I KWADRATOWE

Wykład 8. Rekurencja. Iterować jest rzeczą ludzką, wykonywać rekursywnie boską. L. Peter Deutsch

MATLAB tworzenie własnych funkcji

Drugi sposób definiowania funkcji polega na wykorzystaniu polecenia:

Rozdział 1 PROGRAMOWANIE LINIOWE

Algorytmy i struktury danych

Schemat programowania dynamicznego (ang. dynamic programming)

Programowanie matematyczne

Ekonometria - ćwiczenia 10

ROZWIĄZYWANIE UKŁADÓW RÓWNAŃ NIELINIOWYCH PRZY POMOCY DODATKU SOLVER PROGRAMU MICROSOFT EXCEL. sin x2 (1)

INSTRUKCJA DO ĆWICZENIA NR 1

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

PROGRAMOWANIE KWADRATOWE

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

Algorytm. a programowanie -

Egzamin / zaliczenie na ocenę*

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Funkcje liniowe i wieloliniowe w praktyce szkolnej. Opracowanie : mgr inż. Renata Rzepińska

Programowanie dynamiczne

Metody numeryczne. Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski

WYKŁAD 9 METODY ZMIENNEJ METRYKI

Document: Exercise*02*-*manual /11/ :31---page1of8 INSTRUKCJA DO ĆWICZENIA NR 2

Metody i analiza danych

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

ELEMENTY ANALIZY NUMERYCZNEJ ELEMENTY ANALIZY NUMERYCZNEJ. Egzamin pisemny zestaw 1 24 czerwca 2019 roku

Programowanie nieliniowe. Badania operacyjne Wykład 3 Metoda Lagrange a

do MATLABa programowanie WYKŁAD Piotr Ciskowski

Programowanie w Scilab

ELEMENTY ANALIZY NUMERYCZNEJ ELEMENTY ANALIZY NUMERYCZNEJ. Egzamin pisemny zestaw 1 26 czerwca 2017 roku

Matematyka dyskretna. Andrzej Łachwa, UJ, A/15

Opis efektów kształcenia dla programu kształcenia (kierunkowe efekty kształcenia) WIEDZA. rozumie cywilizacyjne znaczenie matematyki i jej zastosowań

Optymalizacja. Przeszukiwanie lokalne

Wykorzystanie programów komputerowych do obliczeń matematycznych, cz. 2/2

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2

Wprowadzenie do Scilab: funkcje i wykresy

Metody Numeryczne Optymalizacja. Wojciech Szewczuk

Interpolacja i aproksymacja, pojęcie modelu regresji

III TUTORIAL Z METOD OBLICZENIOWYCH

Elementy Modelowania Matematycznego

8. Neuron z ciągłą funkcją aktywacji.

Wprowadzenie do programu Mathcad 15 cz. 1

Zad. 3: Układ równań liniowych

Optymalizacja procesów technologicznych przy zastosowaniu programowania liniowego

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Programowanie celowe #1

Rekurencja. Przygotowała: Agnieszka Reiter

ROZWIĄZYWANIE RÓWNAŃ NIELINIOWYCH

W wielu obliczeniach w matematyce bądź fizyce wykonanie niektórych kroków zależy od spełnienia warunku.

d) Definiowanie macierzy z wykorzystaniem funkcji systemu Matlak

Pochodne cząstkowe i ich zastosowanie. Ekstrema lokalne funkcji

ALGORYTMY I STRUKTURY DANYCH

Algorytmika i pseudoprogramowanie

Dynamika układów podstawy analizy i symulacji. IV. Układy wielowymiarowe (MIMO)

Rekurencja (rekursja)

Algebra Liniowa 2 (INF, TIN), MAP1152 Lista zadań

Programowanie nieliniowe

FUNKCJE. Kurs ZDAJ MATURĘ Z MATEMATYKI MODUŁ 5 Teoria funkcje cz.1. Definicja funkcji i wiadomości podstawowe

13. Funkcje wielu zmiennych pochodne, gradient, Jacobian, ekstrema lokalne.

Elementy Modelowania Matematycznego Wykład 7 Programowanie nieliniowe i całkowitoliczbowe

Scenariusz lekcji opartej na programie Program nauczania informatyki w gimnazjum DKW /99

Matematyka dyskretna dla informatyków

Zapisywanie algorytmów w języku programowania

Z52: Algebra liniowa Zagadnienie: Zastosowania algebry liniowej Zadanie: Operatory różniczkowania, zagadnienie brzegowe.

Aproksymacja funkcji a regresja symboliczna

Układ równań liniowych

Wykład z równań różnicowych

Matematyka stosowana i metody numeryczne

Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych)

Podstawy MATLABA, cd.

Ćwiczenie 1. Wprowadzenie do programu Octave

Definicje i przykłady

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

O co chodzi z tym MATLAB'em?!

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

GNU Octave (w skrócie Octave) to rozbudowany program do analizy numerycznej.

Programowanie Funkcyjne. Marcin Kubica Świder,

PROGRAMOWANIE NIELINIOWE

Całkowanie numeryczne

doc. dr Beata Pułska-Turyna Zarządzanie B506 mail: mgr Piotr J. Gadecki Zakład Badań Operacyjnych Zarządzania B 505.

Podstawy programowania funkcjonalnego

Ciąg Fibonacciego jako szczególny przykład ciągu określonego rekurencyjnie. Przykłady rekurencji w informatyce

Programowanie dynamiczne cz. 2

A. Kasperski, M. Kulej Badania Operacyjne- programowanie liniowe 1

Transkrypt:

4.3. Przykłady wykorzystania funkcji bibliotecznych 73 MATLAB % definiowanie funkcji function [dx]=vderpol(t,y) global c; dx=[y(2); c*(1-y(1)^2)*y(2)-y(1)]; SCILAB // definiowanie układu function [f]=vderpol(t,y,c) f(1)=y(2); f(2)=c*(1-y(1)^2)*y(2)-y(1); endfunction W Matlabie funkcja VDerPol() jest zdefiniowana w osobnym pliku dyskowym w katalogu work. W Scilabie funkcja VDerPol() może, ale nie musi być zdefiniowana w osobnym pliku dyskowym. Jeśli stanowi część programu głównego, to rezygnujemy z wywoływania jej poleceniem getf(). % warunki początkowe c=0.4; m=500; y0=[-2.5;2.5]; global c; //warunki początkowe m=500; T=30; c=0.4; t=linspace(0,t,m); y0=[-2.5;2.5]; % rozwiązywanie [T,y]=ode45( VDerPol,0,m,y0); // rozwiązywanie getf( VDerPol.sci ); [y]=ode(y0,0,t,vderpol); % kreślenie rozwiązania plot(y(:,1),y(:,2)) // kreślenie rozwiązania plot2d(y(1,:),y(2,:)) Proszę zwrócić na sposób wykorzystania zmiennej globalnej Więcej o poleceniach plot() i plot2d() w podrozdziałach 5.1 i 5.2. 4.3.4. Optymalizacja Zagadnienie optymalizacji pojawia się w wielu problemach praktycznych, gdzie poszukujemy wartości parametrów, dla których pewne funkcje opisujące analizowany problem osiągają maksimum lub minimum. Rozwiązanie zagadnienia optymalizacyjnego polega więc na znalezieniu najlepszego, względem ustalonego kryterium, rozwiązania należącego do zbioru rozwiązań dopuszczalnych. Zagadnienia optymalizacji, nazywane również zadaniem programowania, są w Matlabie i Scilabie bardzo szeroko opracowane. Niestety w Matlabie stanowią część osobnej biblioteki Optimization Toolbox, którą należy dodatkowo dokupić,

74 Rozdział 4. Funkcje, skrypty bez jej obecności niektóre funkcje opisywane w tym rozdziale mogą być niedostępne. Ograniczenia tego typu nie występują w Scilabie. Programowanie liniowe W zagadnieniu programowania liniowego funkcja celu jest liniową funkcją wielu zmiennych. Zagadnienie programowania możemy zapisać w postaci: min c T x x Ax b (4.3.8) gdzie: A macierz współczynników ograniczeń, b wektor kolumnowy współczynników ograniczeń, c wektor kolumnowy współczynników funkcji celu, x [x 1,x 2,...,x n ] wektor rozwiązań. Tytułem przykładu rozwiążemy następujący problem: dla ograniczeń nierównościowych: min x { x 1 1.4x 2 }, (4.3.9) x 1 + x 2 400, x 1 + 2x 2 580, x 1 300, x 1 0, x 2 0. (4.3.10) Skrypty mogą przyjąć następującą postać: MATLAB SCILAB c=[-1-1.4] ; c=[-1-1.4] ; A=[1 1; 1 2; 1 0; -1 0; 0-1]; A=[1 1; 1 2; 1 0; -1 0; 0-1]; b=[400 580 300 0 0] ; b=[400 580 300 0 0] ; [x,lg]=linprog(c,a,b); [x,lg]=linpro(c,a,b); x - wektor rozwiązań, lg - współczynniki Lagrange a. Programowanie kwadratowe Do rozwiązywania zagadnień programowania kwadratowego można w zasadzie wykorzystać metody programowania nieliniowego omówione

4.3. Przykłady wykorzystania funkcji bibliotecznych 75 w następnym podpunkcie. Jednak oba systemy oferują wyspecjalizowane polecenia do rozwiązywania tego typu problemów. Wymieńmy tu quadprog() i quapro() odpowiednio dla Matlaba i Scilaba. Oba polecenia rozwiązują zadanie programowania kwadratowego zapisane w postaci: 1 min x 2 xht x + c T x Ax b (4.3.11) gdzie: A macierz współczynników ograniczeń, b wektor kolumnowy współczynników ograniczeń, c wektor kolumnowy współczynników funkcji celu, H macierz współczynników funkcji celu, x [x 1,x 2,...,x n ] wektor rozwiązań. Sposób wykorzystania obu poleceń pokażemy, poszukując minimum następującej funkcji celu: dla ograniczeń nierównościowych: min x { (x1 3) 2 + (x 2 4) 2}, (4.3.12) x 1 + 2x 2 3, 3x 1 + x 2 4, x 0, (4.3.13) gdzie występujące w równaniu (4.3.11) H i c przyjmują postać: H = ( 2 0 0 2 ) ( 6, c = 8 ). MATLAB H=[2 0; 0 2]; c=[-6; -8]; A=[1 2; 3 1]; b=[3; 4]; [x]=quadprog(h,c,a,b); x - wektor rozwiązań. SCILAB H=[2 0; 0 2]; c=[-6; -8]; A=[1 2; 3 1]; b=[3; 4]; [x]=quapro(h,c,a,b);

76 Rozdział 4. Funkcje, skrypty Programowanie nieliniowe Prosty przykład optymalizacji funkcji nieliniowej pokazano w punkcie 4.2.2. Poniżej zostanie pokazany inny, nieco bardziej złożony przykład optymalizacji funkcji dwu zmiennych. Poszukujemy minimum funkcji Rosenbrocka f(x 1, x 2 ) = 100(x 2 x 2 1) 2 + (1 x 1 ) 2, rozpiętej w przestrzeni liczb rzeczywistych R 2. Pierwszym krokiem jest oczywiście napisanie funkcji użytkownika obliczającej wartości funkcji f dla argumentów x 1, x 2. W przypadku Scilaba należy również obliczyć gradient funkcji. MATLAB function [f]=cost(x) f=100*(x(2)-x(1)^2)^2... +(1-x(1))^2; SCILAB function [f,g,ind]=cost(x,ind) f=100*(x(2)-x(1)^2)^2+... (1-x(1))^2; g=[-400*x(1)*(x(2)-x(1)^2)... -2*(1-x(1));200*(x(2)-x(1)^2)] endfunction Zmienna ind jest parametrem nie wykorzystanym, ale musi być zdefiniowana. Zmienna g to gradient funkcji f w punkcie x. Zadajemy go w postaci wektora kolumnowego zwierającego pochodne funkcji f(x 1, x 2) liczone po x 1 i x 2, g = [ f x 1 ; f x 2 ]. Samo poszukiwanie minimum funkcji to wydanie polecenia fminsearch() dla Matlaba lub optim() dla Scilaba. MATLAB [xopt,fval]=... fminsearch(@cost,[-1.2,1]) xopt= 1.0 1.0 fval = 8.177e-10 Wektor [-1.2;1] to warunki początkowe. SCILAB [f,xopt]=... optim(cost,[-1.2;1]) f = 8,177e-10 xopt=! 1; 1! W tablicy 4.5 zestawiono wybrane funkcje rozwiązujące zagadnienia optymalizacji.

4.4. Skrypty 77 Tablica 4.5. Polecenia umożliwiające rozwiązywanie zagadnień optymalizacji. MATLAB SCILAB Opis linprog() linpro() programowanie liniowe quadprog() quapro() programowanie kwadratowe leastsq() leastsq() metoda najmniejszych kwadratów fminbnd() optim() programowanie nieliniowe fminsearch() optim() programowanie nieliniowe Polecenia dostępne po zakupieniu biblioteki Optimization Toolbox. 4.4. Skrypty Skrypt to zbiór poleceń, komentarzy, wywołań funkcji, zapisany w odrębnym pliku dyskowym, realizujący określony przez użytkownika algorytm. Praca w systemach Matlab i Scilab powinna polegać na pisaniu skryptów, gdyż tylko wtedy możemy w pełni kontrolować proces obliczeń i maksymalnie wykorzystać możliwości systemu. 4.5. Sztuka programowania 4.5.1. Rady dla początkujących Jeśli uznamy programowanie, może nieco na wyrost, za formę sztuki, możemy stwierdzić, że nie jest możliwe jej nauczenie. Można jednak pokusić się o podanie pewnych wskazówek dla jej adeptów, które mogą ułatwić pisanie programów krótkich, optymalnych i szybkich, realizujących bezbłędnie postawione im zadania. Kilka prostych zasad Zanim zabierzemy się do pisania programu komputerowego, analizowany problem należy rozwiązać w sposób klasyczny na kartce papieru, oczywiście w takim zakresie, w jakim jest to możliwe. Pominięcie tego kroku jest gwarancją klęski. Każdy program musi mieć jasno określone parametry wejściowe i wyjściowe.

78 Rozdział 4. Funkcje, skrypty Nazwy zmiennych w programie powinny odzwierciedlać ich role w algorytmie. 4.5.2. Pisanie programów wydajnych Dobrze napisany program jest wynikiem spełnienia dwóch warunków: dobrego zrozumienia wybranego algorytmu, biegłej znajomości używanego narzędzia. Znaczenie algorytmu Rozwiązanie problemu jest niejednokrotnie utożsamiane ze znalezieniem właściwego algorytmu. Głównym niebezpieczeństwem, na jakie napotykamy, jest skłonność do bezkrytycznego wykorzystywania znalezionego algorytmu w swoim programie. Jako ilustracje rozważmy dwa zagadnienia. Pierwsze to zadanie wyznaczania liczb Fibonacciego 5. Definicja liczby Fibonacciego ma charakter rekurencyjny i jest następująca: F k = { 1, k=1,2, F k 1 + F k 2, k 3. (4.5.1) Bezpośrednia implementacja wzoru (4.5.1) w Scilabie prowadzi do następującej definicji funkcji: function r=fib(n) if n <=2 then r=1; else r=fib(n-1)+fib(n-2); end endfunction // tylko dla Scilaba Wyznaczenie piątej z kolei, licząc od 1, liczby Fibonacciego wymaga dziewięciu wywołań funkcji fib(), jest to dużo i wydaje się, że procedura jest bardzo czasochłonna. Można ją uprościć poprzez uproszczenie można uzyskać drogą uproszczenia podwójnego wywołania rekurencyjnego 5 Leonardo z Pizy Fibonacci (1170-1240), włoski matematyk, propagator arabskiego (dziesiętnego) sposobu liczenia, główne dzieła poświęcił arytmetyce, algebrze i geometrii.