Użytkowanie i programowanie Matlaba

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

Język C/C++ Funkcje.
Programowanie wizualne PW – LAB6 Wojciech Pieprzyca.
Standardowa biblioteka języka C++
Programowanie obiektowe
RYS HISTORYCZNY W latach 70tych na zlecenie National Science Fundation powstały pierwsze biblioteki fortranowskie do obliczeń numerycznych. Jeden z.
Wskaźniki repetytorium Wskaźniki int Y = 1, X = 2; X = 5; int *p = &X; Y X p 4 4 p = &Y; *p = 4; 5.
Programowanie w języku Visual Basic
Język ANSI C Funkcje Wykład: Programowanie komputerów
Bezpieczeństwo wyjątków w C++: OpenGL
Języki programowania C++
PROGRAMOWANIE STRUKTURALNE
formatowanie kodu źródłowego
Nguyen Hung Son Uniwersytet Warszawski
ZŁOŻONOŚĆ OBLICZENIOWA
Funkcje Modularyzacja : program główny , funkcje Funkcje :
Zakres i zasięg deklaracji Zakres : obszar programu, w którym identyfikator może być użyty zakres globalny : cały program zakres lokalny : definicja pojedynczej.
P O D S T A W Y P R O G R A M O W A N I A
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Programowanie imperatywne i język C
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
C++ wykład 2 ( ) Klasy i obiekty.
Programowanie w C Wykład 3
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
AUTOMATYZACJA OBLICZEŃ INŻYNIERSKICH
Instytut Fizyki Teoretycznej
Język ANSI C Operacje we/wy
Wykład 2 struktura programu elementy języka typy zmienne
Wyrażenia Wyrażenie w Fortranie jest poprawną syntaktycznie kombinacją zmiennych, stałych, operatorów i funkcji. Wyrażenia są jednozdaniowymi przepisami.
Tablice tablica jest sekwencją elementów tego samego typu (prostego lub obiektowego) w Javie tablice są obiektami, a zmienne tablicowe przechowują referencję
Semafory według normy POSIX
POZNAŃ SUPERCOMPUTING AND NETWORKING CENTER WP 2.1 Zdalny dostęp do bibliotek naukowych Udział w projekcie: 6,51% Osoby kontaktowe: PCSS: Maciej Brzeźniak.
Programowanie w języku Fortran 95
Podstawy programowania II
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Programowanie w języku Matlab
Podstawy programowania. Język C i C++– podstawy Temat: 1
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Programowanie obiektowe – zastosowanie języka Java SE
5 Etapów Pracy Kompilatora
JAVA.
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Podstawy informatyki 2013/2014
Użytkowanie i programowanie Matlaba
Źródła błędów w obliczeniach numerycznych
MOiPP Matlab Sortowanie Obliczenia symboliczne - Symbolic ToolBox
MOiPP Wykład 3 Matlab Przykłady prostych metod obliczeniowych.
PWSZ Gniezno // codefly 2009 Łukasz Tomczak
Programowanie Matlaba Przedmiot wykładów na Studia doktoranckie Instytut Geofizyki PAN Warszawa 2013/2014.
Metody numeryczne metody rozwiązywania problemów matematycznych za pomocą operacji na liczbach. Otrzymywane tą drogą wyniki są na ogół przybliżone, jednak.
MOiPP Matlab Przykłady metod obliczeniowych Obliczenia symboliczne
Podstawy programowania II Wykład 3: Obsługa plików w stdio.h.
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
PWSW Mechatronika Wykład 7 Matlab cd.
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka Podstawy.
Visual Basic przygotował Michał Miłek Visual Basic – język programowania wysokiego poziomu i narzędzie programistyczne firmy Microsoft. Składnia jest oparta.
Dominik Benduski Michał Mandecki Podstawy Visual Basic w Excelu.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
Osoby prowadzące zajęcia z Informatyki (II część): Prof. Mirosław Czarnecki (W+L) Konsultacje:piątek (p. 302a)
Grzegorz Cygan Wstęp do programowania mikrosterowników w języku C
Wykład 3 Dr Aneta Polewko-Klim
Wątki, programowanie współbieżne
Visual Basic w programie Microsoft Excel
Założenia projektowe Javy
Język C++ Typy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Zapis prezentacji:

Użytkowanie i programowanie Matlaba Współpraca z programami w C

Uwarunkowanie zadania Uwarunkowanie zadania to czułość na zaburzenie danych. Jeżeli zadanie jest źle uwarunkowane, to niewielka zmiana danych może spowodować dużą relatywną zmianę wyniku. Wskaźnik uwarunkowania zadania charakteryzuje wpływ zaburzeń danych na zaburzenie rozwiązania, np. wskaźnik uwarunkowania zadania dla funkcji f(x) wynosi |xf'(x)/f(x)|

Algorytm numerycznie poprawny Algorytm numerycznie poprawny to algorytm, który daje rozwiązanie będące nieco zaburzonym dokładnym rozwiązaniem zadania o nieco zaburzonych danych. "Nieco zaburzone" oznacza zaburzone na poziomie reprezentacji zmiennoprzecinkowej.

Algorytm numerycznie stabilny Algorytm stabilny numerycznie to taki, który nie dopuszcza do sytuacji, kiedy w wyniku kumulacji poszczególnych błędów możemy uzyskać wysoce przekłamany wynik.

Algorytm numerycznie stabilny Przykład pierwiastki równania kwadratowego x2-2px+q : Zamiast x1 = p+sqrt(p2-q) ; x2 = p-sqrt(p2-q) należy liczyć if p >=0 x1 = p+sqrt(p2-q) ; x2 = q/x1 ; else x2 = p-sqrt(p2-q) ; x1 = q/x1 ; end

Obliczenia równoległe Obliczenia na wielu rdzeniach/procesorach komputera Obliczenia na klastrze Obliczenia na karcie graficznej

Warto zastosować Włączenie obliczeń równoległych matlabpool open Wiele funkcji w Matlabie ma wbudowane wsparcie dla obliczeń równoległych i rozproszonych Na koniec matlabpool close

Podstawowe operatory dla obliczeń równoległych - parfor - batch - spmd - pmode

Zaawansowany poziom wykorzystania obliczeń równoległych Przydzielanie klastrów obliczeniowych Definiowanie zadań job, ich wykonywanie i kontrola Definiowanie wątków task MATLAB Distributed Computing Server

Pętla parfor Działanie: clear A clear A for i = 1:8 parfor i = 1:8 A(i) = i; end A clear A parfor i = 1:8 A(i) = i; end A Działanie: Zakres zmienności zmiennej sterującej dzielony pomiędzy workerów Dane konieczne dla poszczególnych iteracji są rozsyłane do workerów Każdy worker wykonuje swoją pulę iteracji Wyniki są zwracane do klienta

Rodzaje zmiennych w pętli parfor Loop variables Sliced variables Broadcast variables Reduction variables Temporary variables

Loop variables parfor i = 1:n i = i + 1; a(i) = i; end

Sliced Variables parfor i = 1:length(A) B(i) = f(A(i)); end

Praca domowa parfor i = 1:k B(:) = h(A(i),A(i+1)); end Co napisać, aby można było w wykonywać tą czynność w pętli

Praca domowa C(1:k) = A(2:k+1); parfor i = 1:k B(:) = h(A(i),C(i)); end

Sliced Variables A(i+f(k),j,:,3) A(i,20:30,end) A(i,:,s.field1) A(i+k,j,:,3) A(i,:,end) A(i,:,k) Prawidłowe i nieprawidłowe indeksowanie

Broadcast Variables Jest rozsyłany do wszystkich wątków

Reduction Variables Akumulują wartości po wszystkich pętlach x = 0; parfor i = 1:10 x = x + i; end x x2 = []; n = 10; parfor i = 1:n x2 = [x2, i]; end x2 Akumulują wartości po wszystkich pętlach

SPMD -tablice rozproszone Tablice podzielone pomiędzy zasoby pamięciowe labów Ze strony klienta – DistributedArray matlabpool open local 2 W = ones(6,6); W = distributed(W); spmd T = W*2; end matlabpool close Ze strony labu – CodistributedArray codist = codistributor1d(3, [4, 12]); Z = codistributed.zeros(3, 3, 16, codist); Z = Z + labindex;

pmode

GPU Rg = gpuArray.rand(1,4) G = gpuArray(ones(100, 'uint32')); D = gather(G); X = rand(1000); G = gpuArray(single(X)); result = arrayfun(@myFunction, arg1, arg2); gpuDeviceCount gpuDevice(2)

Współpraca Matlaba z innymi programami Matlab  plik  Program Program  plik (ASCII, EXEL)  Matlab Matlab  plik MAT  Program Matlab plik Program plik Matlab Matlab  funkcja (C/C++, Fortran) Program (C/C++, Fortran)  Matlab

Matlab plik Pogram plik Matlab Funkcje użyteczne save … -ascii -double -tabs load fopen fprintf, fwrite fscanf, fgetl, fgets, fread fclose

Matlab plik program plik Matlab Przykład m-pliku z funkcją interfejsu do zewnętrznego programu „topar.m”

Matlab plik program plik Matlab Przykład m-pliku z funkcją interfejsu do zewnętrznego programu „topar.m”

Współpraca Matlaba z innymi programami Matlab  plik  Program Program  plik (ASCII, EXEL)  Matlab Matlab  plik MAT  Program (C/C++, Fortran) Matlab plik Program plik Matlab Matlab  funkcja (C/C++, Fortran) Program (C/C++, Fortran)  Matlab

Rodzaje funkcji bibliotecznych mx* – operacje na typach Matlaba mex* – komunikacja ze środowiskiem Matlaba eng* – korzystanie z mechanizmów Matlaba mat* – operacje na plikach z danymi Matlaba

Operowanie na plikach MAT Biblioteka mat* do czytania i pisania do pliku tablic Matlabowskich Biblioteka mx* do operacji na tablicach Matlabowskich

Eksploatacja mechanizmu Matlaba z programu Biblioteka mx* do operacji na tablicach/strukturach Matlabowskich Bibloteka eng* do otwarcia „silnika” Matlaba, exportu i importu danych oraz wykonywania polecen w Matlabie

Dodawanie kodu w C i Fortranie – tworzenie MEX-funkcji Standardowa nazwa funkcji Biblioteka mx* do operacji na tablicach Matlabowskich Biblioteka mex* do komunikacji ze środowiskiem Matlaba

Standardowa funkcja MEX w C void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) { /* program ... */ }

Standardowa funkcja MEX w Fortranie subroutine mexFunction(nlhs, plhs, nrhs, prhs) integer nlhs, nrhs integer plhs(*), prhs(*) C program C ...

Przykłady biblioteki mx* mxMalloc, mxFree – przydzielanie i zwalnianie pamięci na zmienne (w C ) Typy danych/struktury Matlaba, np. mxArray mxCreateDoubleMatrix, mxCreateDoubleScalar – tworzenie tablicy Matlaba mxDestroyArray – usuwanie tablicy Matlaba mxGetM, mxGetN – określanie rozmiarów tablic mxIsClass, mxIsDouble, itd. – badanie typu danych mxGetPr, mxGetPi, mxGetScalar – dostęp do danych double

Przykład mex funkcji #include <math.h> #include "mex.h" void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[]) { double *x, *y ; double sqsum ; int i, m, n, N ; if(nrhs != 1) { mexErrMsgTxt("SQCUM: Only one input argument allowed.") ; } if(nlhs != 1) { mexErrMsgTxt("SQCUM: Only one output argument allowed.") ; m = mxGetM(prhs[0]) ; n = mxGetN(prhs[0]) ; if(((m > 1) && (n > 1)) || !mxIsDouble(prhs[0])) { mexErrMsgTxt("TRGtest: Only one dimension input vector allowed.") ; N = m*n ; x = mxGetPr(prhs[0]); plhs[0] = mxCreateDoubleMatrix(1,N,mxREAL) ; y = mxGetPr(plhs[0],y) ; sqsum = x[0] ; y[0] = x[0] ; for(i = 1 ; i < N ; i++) { sqsum = sqsum - x[i]*(sqsum > 0 ? 1 : -1) ; y[i] = sqsum ;

Przykłady biblioteki mex* mexEvalString, mexCallMatlab – wykonywanie polecenia i funkcji z matlaba mexWarnMsgTxt, mexErrMsgTxt, mexPrintf – wypisywanie komunikatów w Matlabie mexLock – zatrzymanie MEX pliku w pamięci mexSet – ustawienie właściwości np. grafiki mexIsGlobal – badanie czy istnieje dana zmienna globalna mexFunctionName – odczytanie nazwy bieżącej funkcji

Kompilacja MEX funkcji Można stosować własny kompilator powszechny kompilator, np. Visual C++, Borland C, Watkom Matlab posiada własny kompilator. Wywoływany poleceniem mex <options> <filenames> np. mex funkcja.c mex procedura.F funkcje.F

Współpraca Matlaba z innymi programami Matlab  plik  Program Program  plik (ASCII, EXEL)  Matlab Matlab  plik MAT  Program (C/C++, Fortran) Matlab plik Program plik Matlab Matlab  funkcja (C/C++, Fortran) Program (C/C++, Fortran)  Matlab

Funkcje biblioteki eng* engOpen, engClose – otwarcie i zamknięcie „silnika” Matlaba Engine – Uchwyt do Matlaba engPutVariable – export zmiennej do Matlaba engGetVariable – import tablicy z Matlaba engEvalString – wykonanie polecenia w Matlabie engOutputBuffer – ustalenie bufora na komunikaty z Matlaba

Dokumentacja MATLAB External Interfaces „apiext.pdf” (Application Program Interface Guide) MATLAB External Interfaces Reference „apiref.pdf” MATLAB Compiler MATLAB COM Builder MATLAB Excel Builder

Przykład z bibliotek programu rotan // date mxArray *id = mxCreateDoubleMatrix(ln,1,mxREAL) ; double* ptr = mxGetPr(id) ; for(long j = 0 ; j < ln ; j++) { ptr[j] = larr[j] ; } delete[] larr ; name = "id" + IntToStr(cnt) ; mxSetName(id,name.c_str()) ; engPutArray(engine,id) ; mxDestroyArray(id) ;

Przykład z bibliotek programu rotan // sta name mxArray *ista = mxCreateString(chp.name().getsta().c_str()) ; name = "ista" + IntToStr(cnt) ; mxSetName(ista,name.c_str()) ; engPutArray(engine,ista) ; mxDestroyArray(ista) ;

Przykład z bibliotek programu rotan // chan number mxArray *inumber = mxCreateScalarDouble(chp.name().getnumber()) ; name = "inumber" + IntToStr(cnt) ; mxSetName(inumber,name.c_str()) ; engPutArray(engine,inumber) ; mxDestroyArray(inumber) ;

Przykład z bibliotek programu rotan // sta name mxArray *ista = mxCreateString(chp.name().getsta().c_str()) ; name = "ista" + IntToStr(cnt) ; mxSetName(ista,name.c_str()) ; engPutArray(engine,ista) ; mxDestroyArray(ista) ;

Przykład z bibliotek programu rotan //data WxSHString name = "od"+IntToStr(cnt); mxArray *id = engGetArray(engine,name.c_str()) ; if(id == NULL) return ; double* ptr = mxGetPr(id) ; long ln = mxGetN(id)*mxGetM(id) ; WxSAMPLE *larr = new WxSAMPLE[ln]; double max = 0 ; for(long j = 0 ; j < ln ; j++) { if(max < fabs(ptr[j])) max = fabs(ptr[j]) ; } double scale = 16777216 / max; larr[j] = ptr[j] * scale ; mxDestroyArray(id) ;

Przykład z bibliotek programu rotan WxSHString mord = "v" + IntToStr(valindex) + "=" + ival ; engEvalString(l_engine,mord.c_str()) ;

Przykład z bibliotek programu rotan char strcommand[256] ; sprintf(strcommand,"idata = struct('d',[],'b',0,'e',0,'sta',[],'name',[],'number',[])") ; engEvalString(l_engine,strcommand) ; sprintf(strcommand,"idata.d = id%d;",cnt) ; sprintf(strcommand,"idata.b = ib%d;",cnt) ; sprintf(strcommand,"idata.e = ie%d;",cnt) ; sprintf(strcommand,"idata.sta = ista%d;",cnt) ; sprintf(strcommand,"idata.name = iname%d;",cnt) ; sprintf(strcommand,"idata.number = inumber%d;",cnt) ; sprintf(strcommand,"icelldata{%d} = idata;",cnt) ;

Przykład z bibliotek programu rotan void __fastcall TRotanForm::Open2Click(TObject *Sender) { l_engine = engOpen(NULL) ; if(l_engine == NULL) { LogMessage("Can't start MATLAB engine") ; } else { MatlabImage->Visible = true ; Matlab1->Enabled = true ; } //--------------------------------------------------------------------------- void __fastcall TRotanForm::Close1Click(TObject *Sender) if(l_engine) { engClose(l_engine) ; l_engine = NULL ; MatlabImage->Visible = false ; Matlab1->Enabled = false ;

Kompilatory Matlaba Kompilacja M-plików i tworzenie: samodzielnych programów niezależnych od Matlaba (nie wymagających licencji) bibliotek dynamicznych dla innych programów kodów źródłowych w C dla MEX plików kodów źródłowych w C i C++ dla samodzielnych programów kodów w C z S-funkcjami dla Simulinka wtyczek do EXEL-a obiektów COM

Dziękuję Zadania do domu

Użytkowanie i programowanie Matlaba Toolboxes

Signal processing Analiza filtrów analogowych i cyfrowych Tworzenie filtrów FIR i IIR Analiza spektralna i cepstralna Analiza sygnałów statystycznych – widma mocy sygnału Predykcja liniowa Generacja fal

Signal processing – narzędzia GIU Opracowanie i analiza filtrów Opracowanie i analiza okienkowania Drukowanie i analiza sygnałów czasowych Analiza spektralna i filtracja sygnału

System Identification Tworzenie modelu matematycznego obiektu na podstawie sygnału wejściowego i wyjściowego Badanie poprawności modelu Badanie wpływu szumu na pomiar Obiekty liniowe i nieliniowe

Optimization Minimalizacja skalara Minimalizacja funkcji z ograniczeniami i bez ograniczeń Programowanie liniowe i kwadratowe Optymalizacja wielokryterialna Numeryczne rozwiązywanie równań liniowych i nieliniowych Metody najmniejszych kwadratów (dopasowywanie krzywych)

Inne narzędzia Komercyjne dostarczane przez MathWorks dostarczane przez innych producentów Darmowe dostarczane przez MathWorks (np. MatSeis) z innych źródeł Własna twórczość

Dostępne narzędzia >> ver ----------------------------------------------------------------------------------------------- - MATLAB Version: 8.0.0.783 (R2012b) MATLAB License Number: 321512 Operating System: Microsoft Windows XP Version 5.1 (Build 2600: Dodatek Service Pack 2) Java Version: Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) Client VM mixed mode MATLAB Version 8.0 (R2012b) Simulink Version 8.0 (R2012b) Curve Fitting Toolbox Version 3.3 (R2012b) Database Toolbox Version 4.0 (R2012b) Image Processing Toolbox Version 8.1 (R2012b) MATLAB Compiler Version 4.18 (R2012b) Neural Network Toolbox Version 8.0 (R2012b) Optimization Toolbox Version 6.2.1 (R2012b) Parallel Computing Toolbox Version 6.1 (R2012b) Partial Differential Equation Toolbox Version 1.1 (R2012b) Signal Processing Toolbox Version 6.18 (R2012b) Statistics Toolbox Version 8.1 (R2012b) Symbolic Math Toolbox Version 5.9 (R2012b) System Identification Toolbox Version 8.1 (R2012b) Wavelet Toolbox Version 4.10 (R2012b)