Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Użytkowanie i programowanie Matlaba

Podobne prezentacje


Prezentacja na temat: "Użytkowanie i programowanie Matlaba"— Zapis prezentacji:

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

2 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)|

3 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.

4 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.

5 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

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

7 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

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

9 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

10 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

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

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

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

14 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

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

16 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

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

18 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

19 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;

20 pmode

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

22 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

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

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

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

26 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

27 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

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

29 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

30 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

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

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

33 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

34 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 ;

35 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

36 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

37 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

38 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

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

40 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) ;

41 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) ;

42 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) ;

43 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) ;

44 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 = / max; larr[j] = ptr[j] * scale ; mxDestroyArray(id) ;

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

46 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) ;

47 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 ;

48 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

49 Dziękuję Zadania do domu

50 Użytkowanie i programowanie Matlaba
Toolboxes

51 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

52 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

53 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

54 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)

55 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ść

56 Dostępne narzędzia >> ver
MATLAB Version: (R2012b) MATLAB License Number: 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 (R2012b) Simulink Version (R2012b) Curve Fitting Toolbox Version (R2012b) Database Toolbox Version (R2012b) Image Processing Toolbox Version (R2012b) MATLAB Compiler Version (R2012b) Neural Network Toolbox Version (R2012b) Optimization Toolbox Version (R2012b) Parallel Computing Toolbox Version (R2012b) Partial Differential Equation Toolbox Version (R2012b) Signal Processing Toolbox Version (R2012b) Statistics Toolbox Version (R2012b) Symbolic Math Toolbox Version (R2012b) System Identification Toolbox Version (R2012b) Wavelet Toolbox Version (R2012b)


Pobierz ppt "Użytkowanie i programowanie Matlaba"

Podobne prezentacje


Reklamy Google