Programowanie w języku Matlab

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

Język C/C++ Funkcje.
Programowanie w języku Visual Basic
Język ANSI C Funkcje Wykład: Programowanie komputerów
Języki programowania C++
Funkcje c.d. Strukturalność. Algorytmy. Ćwiczenia przed kolokwium.
typy całkowite (całkowitoliczbowe)
PROGRAMOWANIE STRUKTURALNE
Informatyka Stosowana
ZŁOŻONOŚĆ OBLICZENIOWA
Turbo pascal – instrukcje warunkowe, iteracyjne,…
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Instrukcje Instrukcja : definicja obliczenia i określenie sposobu wykonania tego obliczenia. Program : ciąg instrukcji wykonywanych kolejno od pierwszej.
Programowanie imperatywne i język C
Programowanie imperatywne i język C Copyright, 2004 © Jerzy R. Nawrocki Wprowadzenie.
Podstawy informatyki Informatyka stosowana Prowadzący: Grzegorz Smyk
Laboratoria z „wstęp do programowania”
INFORMATYKA Wykładowca: mgr Tadeusz Ziębakowski p. 126 I piętro (naprzeciw dziekanatu)
PODSTAWY JĘZYKA PHP 1. czym jest 2. składnia 3. wersje 4. bazy danych
AUTOMATYZACJA OBLICZEŃ INŻYNIERSKICH
Podstawy programowania PP – LAB5 Wojciech Pieprzyca.
Komunikacja z arkuszem. Iteracje. Funkcje.
Wykład 2 struktura programu elementy języka typy zmienne
Instrukcja skoku GO TO etykieta Np. GO TO 100 ….. 100WRITE (*,*) Przeskok do instrukcji 100 Uwaga! NIE WOLNO skakać do wnętrzna złożonych instrukcji warunkowych.
KOMPUTEROWE WSPOMAGANIE PRAC BADAWCZYCH FORTRAN - wprowadzenie Adam FIC INSTYTUT TECHNIKI CIEPLEJ.
Schemat Hornera Mgr inż. Michał Szucki.
Programowanie w języku Fortran 95
AWK Zastosowania Informatyki Wykład 1 Copyright, 2003 © Adam Czajka.
Podstawy programowania
Informatyka I Wykład 5 OPERATORY Priorytety i kolejność obliczeń
Podstawy programowania
Programowanie strukturalne i obiektowe
Wykład 2 Dr Aneta Polewko-Klim
Instrukcje sterujące część 2
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
TABLICE C++.
Wyrażenia w Turbo Pascalu.
Programowanie w języku Matlab
Podstawy informatyki 2013/2014
Użytkowanie i programowanie Matlaba
Programowanie Matlaba
Informatyka MZT1 Wykład 6 Iteracje while i repeat Tablice Rekordy
MOiPP Wykład 3 Matlab Przykłady prostych metod obliczeniowych.
Visual Basic for Applications Poziom podstawowy Zajęcia 2
Ogólna struktura programu w TP
Podstawy programowania
Algorytmika Iteracje autor: Tadeusz Lachawiec.
Iteracje w C# Informatyka Cele lekcji: Wiadomości: Uczeń potrafi:
PWSW Mechatronika Wykład 7 Matlab cd.
1 Zagadnienia na egzamin. 2 Język C podsumowanie Struktura programu w języku C Zmienne, Stałe Operacje arytmetyczne Operatory logiczne Priorytety operatorów.
Instrukcje wyboru.
Podstawowe struktury danych. Typy danych.
Programowanie imperatywne i język C Copyright, 2007 © Jerzy R. Nawrocki Wstęp do.
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
Pętle – instrukcje powtórzeń
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
Instrukcje warunkowe w php. Pętla FOR Czasem zachodzi potrzeba wykonania jakiejś czynności określoną ilość razy. Z pomocą przychodzi jedna z najczęściej.
PHP jest językiem skryptowym służącym do rozszerzania możliwości stron internetowych. Jego składnia jest bardzo podobna do popularnych języków programowania.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Visual Basic przygotował Michał Miłek Visual Basic – język programowania wysokiego poziomu i narzędzie programistyczne firmy Microsoft. Składnia jest oparta.
Informatyka Transport Matlab c.d. Macierze cd. Wykresy graficzne
Pakiety numeryczne Operatory, instrukcje sterujące, operacje bitowe Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
 Formuła to wyrażenie algebraiczne (wzór) określające jakie operacje ma wykonać program na danych. Może ona zawierać liczby, łańcuchy znaków, funkcje,
Czym jest PHP? ● Językiem programowania przeznaczonym do tworzenia i generowania dynamicznych stron WWW. Działa po stronie serwera: Klient Żądanie strony.
Programowanie strukturalne i obiektowe Klasa I. Podstawowe pojęcia dotyczące programowania 1. Problem 2. Algorytm 3. Komputer 4. Program komputerowy 5.
Obliczenia w Matlabie Tablice
Przykładowy algorytm geometryczny (geometria płaska)
Haskell Składnia funkcji.
Zapis prezentacji:

Programowanie w języku Matlab Optymalizacja czasowa kodu

M-file Profiler uzyskuje się informację m. in. o czasie i liczbie wykonań poszczególnych fragmentów kodu sposób użycia: >> profile on, profile clear >> badany kod >> profile report

Dane dostarczone przez M-file Profiler - badana funkcja: function result = example1(Count) for k = 1:Count result(k) = sin(k/50); if result(k) < -0.9 result(k) = gammaln(k); end środowisko Matlab 7.5.0.342 komputer PC z procesorem Pentium 4, 2.8 GHz, 2 GB RAM, system operacyjny Windows 2000 z Service Pack 4 - funkcja wywołana raz, z argumentem Count = 5000

Sposoby optymalizacji czasowej odpowiednie użycie danych, stosowanie konstrukcji, których działanie przyspiesza JIT-Accelerator, wektoryzacja kodu, inne.

Odpowiednie użycie danych rezerwacja pamięci na tablicę o znanych wymiarach function result = example1(Count) result = zeros(1, Count); for k = 1:Count result(k) = sin(k/50); % 0.002s if result(k) < -0.9 result(k) = gammaln(k); end odpowiedni dobór typu liczb – operacja na liczbach całkowitych są wykonywane szybciej niż na liczbach rzeczywistych

unikanie tworzenia niepotrzebnych zmiennych 1. function y = modfun1(x) y = 1.2*x; 2. function x = modfun2(x) x = 1.2*x; Czas wykonania dla tablicy o wymiarach 3000 x 3000: 2.731s 0.219s zachowanie typów zmiennych

przetwarzanie elementów tablic po kolumnach 1. for r = 1:N for c = 1:N if x(r,c) > 0 y(r,c) = x(r,c); end 2. for c = 1:N for r = 1:N if x(r,c) > 0 y(r,c) = x(r,c); end Czas wykonania przy: N = 3000, 4497523 elementach niezerowych i wcześniejszej rezerwacji pamięci na tablicę y: 3.11s 0.755s

Jeśli algorytm na to pozwala – traktować tablicę jako wektor i stosować indeksowanie liniowe for k = 1:N*N if x(k) > 0 y(k) = x(k); end Czas wykonania: 0.672s.

Stosowanie konstrukcji, których działanie przyspiesza JIT-Accelerator Od wersji 6.5 Matlab zawiera tzw. JIT-Accelerator, który znacznie skraca czas wykonywania kodu. Trzeba jednak przestrzegać kilku zasad: zmienne muszą być typu: double, complex, logical, char, int8, uint8, int16, uint16, int32, uint32; nie są przyspieszane operacje na: komórkach, strukturach, tablicach rzadkich oraz z użyciem uchwytów do funkcji, tablice mogą mieć co najwyżej trzy wymiary, nie może następować zmiana rozmiaru ani typu zmiennej, używane funkcje mogą być tylko funkcjami wbudowanymi Matlaba, wynik wyrażenia w instrukcjach: if, switch i while musi być skalarem, zmienna sterująca pętli for musi przyjmować wartości skalarne, wszystkie instrukcje w pętli muszą być napisane zgodnie z podanymi zasadami.

Wektoryzacja kodu Wektoryzacja - zastępowanie, o ile to możliwe, pętli, w których przetwarzane są pojedyncze elementy tablic, odpowiednimi operacjami tablicowymi. Przy wektoryzacji wykorzystywane są: operator dwukropka – do tworzenia tablic, przy odwołaniach do całych wierszy i kolumn oraz fragmentów tablic indeksowanie logiczne przy odwołaniach do elementów tablic, arytmetyczne operatory tablicowe, standardowe funkcje operujące na tablicach np. sum, prod, any, all, find, sort. Po wprowadzeniu JIT-Accelerator wektoryzacja już nie zawsze przynosi korzyści – hasło ,,życie jest za krótkie, żeby je spędzać na pisaniu pętli for’’ straciło na znaczeniu.

Utworzenie tablicy z wartościami funkcji cosinus dla t od 0 do 100 radianów, zmieniającym się co 0.0 1. k = 0; for t = 0:.01:100 k = k + 1; y(k) = cos(t); end 2. y = cos(0:.01:100); Czas wykonania: 0.209s bez rezerwacji pamięci na tablicę wyników, 0.115s z rezerwacją 0.024s

Utworzenie tablicy y z elementów tablicy x, przy czym elementy nieujemne mają pozostać, pozostałe mają być zastąpione 0 1. for c = 1:N for r = 1:N if x(r,c) > 0 y(r,c) = x(r,c); end 2. y = zeros(N); t = x > 0; y(t) = x(t); Czas wykonania (warunki pomiaru jak wcześniej): 0.755s 0.823s

Obliczenie sumy ciągu: 1 + 1/2 + 1/3 + ... + 1/n 1. suma = 0; for k = 1:n suma = suma + 1/k; end 2. suma = sum(1./(1:n)); Czas wykonania przy n = 100000: 0.001s 0.006s

Obliczenie sumy elementów leżących na przekątnej głównej tablicy 1. m = size(A,1); suma = 0; for k = 1:m suma = suma + A(k,k); end 2. suma = sum(diag(A)); Czas wykonania przy tablicy A o wymiarach 1000 x 1000: 0.00013s 0.00028s

Inne sposoby: napisanie fragmentów kodu w języku C lub Fortran i korzystanie z ich skompilowanych wersji zapisanych w mex-plikach, korzystanie z funkcji zaprojektowanych do wykonywania operacji na liczbach rzeczywistych, gdy przetwarzane są tylko dane tego typu (np.: realpow, realsqrt, reallog), odpowiednia konstrukcja wyrażeń warunkowych w instrukcjach: if i while - gdy używane są w nich operatory && oraz || nie zawsze zachodzi potrzeba obliczania wartości całego wyrażenia, unikanie przeciążania wbudowanych funkcji Matlaba, stosowanie m-plików funkcyjnych zamiast skryptowych, stosowanie, o ile to możliwe, funkcji load i save zamiast fread i fwrite.