O co chodzi z tym MATLAB'em?! Część 1. SIMULINK W pliku data.mat jest zapisany przebieg. Gdzieś tam i kiedyś tam zarejestrowany. Widać go na fioletowo poniżej. Powstał on z obiektu, co ciekawe wiemy jak ten obiekt mniej więcej wyglądał. Rys. 1 Co znaczy wyglądał? A znaczy to że mamy jego schemat w matlabie. Rys. 2 No dobrze skoro to wszystko wiemy to co to za zadanie? O tuż szukamy wartości tych parametrów wpisanych w poszczególne bloki. Ale w m-pliku są juz zadane wartości ale to są orientacyjne, początkowe wartości. Im bardziej zgadniemy jakie one są tym szybciej i lepiej wyszuka nam je MATLAB. Jak dobrze zgadnąć te parametry początkowe to już zagadnienie książkowe lub dla tych co uważnie słuchali na wykładach. :)
Jakie te parametry są? Blok Transport Delay zawiera w sobie t0. Jest to moment rozpoczęcie przebiegu. Dla fioletowego widać że jest to około 0.5 sek. Pozostałe widać gdzie się znajdują. Szukane Parametry: t0 k Tz Tp om ksi Ale jak wyszukać właściwe parametry, tzn. jak zmusić do tego MATLAB żeby to zrobił za nas? Najpierw trzeba się zastanowić na jakiej podstawie MATLAB ma wiedzieć że parametry które znalazł są właściwe. Zazwyczaj na metodach komputerowych robi się to tak. Odejmujemy od siebie dwie wartości potem sprawdzamy czy wynik jest równy zero. Jeżeli wynik jest zero to znaczy ze wartości są takie same. Tak jak 2 2 = 0. Ale my odejmujemy od ciebie dwa przebiegi. Pierwszy to ten z pliku data.mat, drugi z wyjścia układu z rys. 2 (w całym modelu model obiekt lub subsystem). Żeby układ z rys. 2 wygenerował odpowiedź na jego wejście zadajemy skok jednostkowy (blok step, trzeba pamiętać by chwilę rozpoczęcia skoku ustawić w zerowej sekundzie Step Time: 0 Final Value: 1 ). Doszliśmy do tego że powstał nam układ: rys 3 Więc już teraz TEORETYCZNIE możemy kazać dla MATLAB'a podstawiać odpowiednie wartości pod parametry i sprawdzać czy wyjście z sumatora jest zerem czy nie! Ale nie jest tak prosto zadanie jest trochę bardziej trudniejsze bo na podstawie tej różnicy tworzymy wskaźnik jakości. Tzn. jakąś tam funkcję i sprawdzamy jaki uzyskuje wynik. Naszym wskaźnikiem jakości ma być: i także będziemy sprawdzać czy osiąga zero wynik tej funkcji po podstawieniu do niej naszej równicy. Ta funkcja gwarantuje nam że porównujemy dwa wykresy funkcji. Wcześniej tak nie było! Dla chcących widzieć dla czego tak nie było?! Ponieważ sama różnica jest wartością chwilową. Tzn. sprawdzaliśmy czy w danej chwili różnica pomiędzy wykresami jest zerem. Całkując dokonujemy sumowana błędów od chwili t0=0 aż do chwili t1= (całkujemy od 0 do ), ale w MATLAB'ie ograniczamy czas do 10s. Czyli nasze t1=10s. Jak zrealizować taką funkcję w MATLAB'ie? 1) Najpierw podnosimy do kwadratu. Wykorzystując blok mnożący z dwoma wejściami w podając na te wejścia naszą różnicę. Proste!
2) Potem z wyjścia bolku mnożącego zadajemy integrator (z ang. Całkowacz) i mamy nasz poszukiwany wynik, który to MATLAB będzie sprawdzał dla nas czy jest zerem! Oczywiście trudno jest osiągnąć idealną konfigurację! Ale zauważamy że nasz wynik jest liczą dodatnią, więc im mniejsza tzn. bliższa zeru będzie tym bardziej dopasowane są parametry. 3) Wynik wyprowadzamy blokiem To Workspace. UWAGA!! W bloku To Workspace opcja Save Format musi być ustawiona w tryb tablicowy Array. Więc finalnie nasz schemat wygląda tak: rys 4 Cały ten schemat z ustawieniami zapisany jest w pliku dupa_r12.mdl
M-PLIKI Teraz opowiem trochę o M-plikach. Pierwszy pod lupę bierzemy plik cel.m. Linia 1 to deklaracja funkcji, cały ten plik jest funkcją o nazwie cel, dlatego też plik tak samo sie nazywa cel.m Linia 3 Definiowanie zmiennych jako globalnych. Tak ma być i już, żeby były widoczne poza funkcją a w szczególności w naszym projekcie w SIMULINK'u Linie 5 do 9 z wektora X pobieramy zmienne do naszych parametrów tak by zostały podstawione w projekcie do którego odwołujemy sie w Linii 14. Parametry zapisane są w wektorze o nazwie X po to by łatwiej można było nim manipulować niż stosem różnych nazw zmiennych. W linii 15 wynik obliczeń SIMULINK'a wyprowadzonego jako zmienna J jest przepisywana jako wartość wyjściowa funkcji cel.
Kolejny plik to nic1.m: Linie 3 10 podają wartość początkową parametrów. Na stronie drugiej napisałem skąd są te wartości. Linia 12 w tym miejscu zapisujemy parametry w postaci wektora X0 celowo inaczej niż wewnątrz funkcji cel po to by nie pomieszały się te wartości. Linia 13 to wywołanie funkcji cel z parametrem X0. Linia 15 to sedno całego problemu! Funkcja fminsearch służ właśnie od poszukiwania wartości najmniejszej na podstawie zadanego parametru. X0 to liczby jakie będzie mieniać ta funkcja a 'cel' to wartość którą ona minimalizuje! W g zapisywany jest nasz wektor aktualnych wartości poszukiwanych parametrów Jak włączyć symulacje? Wpisujemy po prostu nic1 w MATLAB'ie.