33
Programowanie Matlaba

Programowanie Matlaba

  • Upload
    leroy

  • View
    55

  • Download
    0

Embed Size (px)

DESCRIPTION

Programowanie Matlaba. Operacje na macierzach:. * - mnożenie / - dzielenie \ - dzielenie lewostronne ^ - potęgowanie + - dodawanie - - odejmowanie ' - transponowanie sprzężone .' - transponowanie niesprzężone [] - łączenie. Operacje na tablicach/skalarach. - PowerPoint PPT Presentation

Citation preview

Page 1: Programowanie Matlaba

Programowanie Matlaba

Page 2: Programowanie Matlaba

Operacje na macierzach:

* - mnożenie/ - dzielenie\ - dzielenie lewostronne^ - potęgowanie+ - dodawanie- - odejmowanie

' - transponowanie sprzężone.' - transponowanie niesprzężone

[] - łączenie

Page 3: Programowanie Matlaba

Operacje na tablicach/skalarach

.* - mnożenie

./ - dzielenie

.\ - dzielenie lewostronne

.^ - potęgowanie+ - dodawanie- - odejmowanie

Page 4: Programowanie Matlaba

Indeksowanie tablic/macierzyIndeksowanie tablic wykonuje się wyrażeniem w postaciA(N,M) gdzie N i M są w ogólności wektorami np.:jeden_element = A(1,1)pierwszy_wiersz = A(1,1:4)pierwsza_kolumna = A(1:2,1)inny_przyklad = C([1 2 1], 1:2:5)Symbol endpierwszy_wiersz = A(1,1:end)Symbol end może być stosowany w indeksowaniu odwrotnympierwsza_kolumna = A(end:-1:1,1)% Samodzielny znak dwukropka pierwszy_wiersz = A(1,:)Tablicę można indeksować jednym indeksemTablicę można indeksować tablicą logiczną

Page 5: Programowanie Matlaba

Tablice komórkoweCell Arrays

np.

C = {[1] [2 3] [1 2; 3 4] ; ones(3,3) 'wynik' @permute}

Wybieranie elementów/indeksowanie

C{1,3}

C{4}

Najczęstsze zastosowania

Teksty

C = {'poczatek' 'kontynuacja' 'koniec'}

Elementy o różnym rozmiarze

Page 6: Programowanie Matlaba

Tablice komórkowexxx=['14:30';'15:00';'15:30';'16:00';'16:30';'17:00';'17:30';'18:00';'18:30';'19:00'];xxx2=['17:30' ;'18:00'; '18:30'];xxx3=['14:30';'15:00' ;'15:30'; '16:00']c1=datenum(xxx, 'HH:MM');c2=datenum(xxx2, 'HH:MM');c3=datenum(xxx3, 'HH:MM');a1 = subplot(3,1,1);plot(c,randn(10,1));hold on;datetick('x','HH:MM')a2 = subplot(3,1,2);plot(a2,c2,randn(3,1))hold on;datetick('x','HH:MM')a3 = subplot(3,1,3);plot(a3,c3,randn(4,1))hold on;datetick('x','HH:MM')linkaxes([a1 a2 a3], 'x');

Page 7: Programowanie Matlaba

Tablice komórkowexxx=['14:30';'15:00';'15:30';'16:00';'16:30';'17:00';'17:30';'18:00';'18:30';'19:00'];xxx2=['17:30' ;'18:00'; '18:30'];xxx3=['14:30';'15:00' ;'15:30'; '16:00']x = {xxx, xxx2, xxx3}for i = 1:3 c = datenum(x{i}, 'HH:MM'); a = subplot(3,1,i); plot(c,randn(size(x{i},1),1)); hold on; datetick('x','HH:MM')endlinkaxes([a1 a2 a3], 'x');

Nie stosować niepotrzebnie tablic komórkowych do obliczeń

Page 8: Programowanie Matlaba

FunkcjePrzykłady

function [out1,out2,out3]= mojafunkcja(in1,in2)

Funkcja nic nie zwraca

function [] = mojafunkcja(in1,in2)

lub

function mojafunkcja(in1,in2)

Funkcja bez paramterów

function mojafunkcja()

Page 9: Programowanie Matlaba

FunkcjePo co stosować funkcje?

Separujemy zmienne

– funkcja nic nie zmieni w sposób niekontrolowany w środowisku

- funkcja „posprząta po sobie”

Funkcje wykonują się szybciej

Program ułożony z funkcji jest czytelniejszy i krótszy

Umożliwia budowanie stopniowe dużych programów

Kod w postaci funkcji może być stosowany dla innych zadań

Page 10: Programowanie Matlaba

Funkcjefunction plott(time,y)% plott(time,y) rysuje os x jako czas% format czasu HH : MM : SS% podaj wektor time w sekundachgodziny=floor(time./3600);minuty = time./3600-godziny;czas = godziny+minuty;plot(czas,y);xt = get(gca,'XTick');xt_godz = floor(xt);xt_min10=xt-xt_godz;xt_min=floor(60*xt_min10);xt_sec10 = 60*xt_min10-xt_min;xt_sec = floor(60*xt_sec10);podpisy = cell(1,length(xt_sec)); for k=1:length(xt_sec) tg = num2str(xt_godz(k)); if xt_godz(k)<10 tg = ['0' tg]; end tm = num2str(xt_min(k)); if xt_min(k)<10 tm = ['0' tm]; end ts = num2str(xt_sec(k)); % tst = num2str(ts); if xt_sec(k)<10 ts = ['0' ts]; end podpisy{1,k} = [tg ':' tm ':' ts]; endset(gca,'XTickLabel',podpisy)

% koniec funkcji

Page 11: Programowanie Matlaba

Funkcjefunction plott(time,y)% plott(time,y) rysuje os x jako czas% format czasu HH : MM : SS% podaj wektor time w sekundachgodziny=floor(time./3600);minuty = time./3600-godziny;czas = godziny+minuty;plot(czas,y);xt = get(gca,'XTick');xt_godz = floor(xt);xt_min10=xt-xt_godz;xt_min=floor(60*xt_min10);xt_sec10 = 60*xt_min10-xt_min;xt_sec = floor(60*xt_sec10);podpisy = cell(1,length(xt_sec)); for k=1:length(xt_sec) tg = num2str(xt_godz(k)); if xt_godz(k)<10 tg = ['0' tg]; end tm = num2str(xt_min(k)); if xt_min(k)<10 tm = ['0' tm]; end ts = num2str(xt_sec(k)); % tst = num2str(ts); if xt_sec(k)<10 ts = ['0' ts]; end podpisy{1,k} = [tg ':' tm ':' ts]; endset(gca,'XTickLabel',podpisy)

end

Page 12: Programowanie Matlaba

Zadanie domowe – opisywanie osi czasufunction plott(time,y)% plott(time,y) rysuje os x jako czas% format czasu HH : MM : SS% podaj wektor time w sekundach

godziny=floor(time./3600);minuty = time./3600-godziny;czas = godziny+minuty;plot(czas,y);xt = get(gca,'XTick');xt_godz = floor(xt);xt_min10=xt-xt_godz;xt_min=floor(60*xt_min10);xt_sec10 = 60*xt_min10-xt_min;xt_sec = floor(60*xt_sec10);podpisy = cell(1,length(xt_sec)); for k=1:length(xt_sec) tg = num2str(xt_godz(k)); if xt_godz(k)<10 ; tg = ['0' tg] ; end tm = num2str(xt_min(k)); if xt_min(k)<10 ; tm = ['0' tm] ; end ts = num2str(xt_sec(k)); if xt_sec(k)<10 ; ts = ['0' ts] ; end podpisy{1,k} = [tg ':' tm ':' ts]; endset(gca,'XTickLabel',podpisy)

Page 13: Programowanie Matlaba

Zadanie domowe

Page 14: Programowanie Matlaba

Zadanie domowe – opisywanie osi czasu

xxx=['14:30';'15:00';'15:30';'16:00';'16:30';'17:00';'17:30';'18:00';'18:30';'19:00'];

xxx2=['17:30' ;'18:00'; '18:30'];xxx3=['14:30';'15:00' ;'15:30'; '16:00']x = {xxx, xxx2, xxx3}for i = 1:3 c = datenum(x{i}, 'HH:MM'); a = subplot(3,1,i); plot(c,randn(size(x{i},1),1)); hold on; datetick('x','HH:MM')endlinkaxes([a1 a2 a3], 'x');

Page 15: Programowanie Matlaba

Zadanie domowe – opisywanie osi czasu

Page 16: Programowanie Matlaba

Zadanie domowe – opisywanie osi czasu

Page 17: Programowanie Matlaba

Zadanie domowe – opisywanie osi czasu

ts1 = timeseries(A1, T1);ts1.Name = 'Amplitude';ts1.TimeInfo.Units = 'seconds';ts1.TimeInfo.StartDate='01-Jan-2013'; % start date.ts1.TimeInfo.Format = 'HH:MM:SS'; % format for display on x-axis.t_min = min ([T1(1) T2(1) T3(1)]) t_max = max ([T1(l1) T2(l2) T3(l3)]) x=(0.8*(T1(1)-t_min)/(t_max-t_min))+0.1;y=(0.8*(T1(l1)-t_min)/(t_max-t_min))+0.1;subplot ('Position', [x, .1, y-x, .27])plot(T1,A1,'-.r*')title ('')

Page 18: Programowanie Matlaba

Zadanie domowe

Page 19: Programowanie Matlaba

Przykład do omówienia

% Program do liczenia R, korzysta z wczesniej obliczonego CFF oraz gestosci

% prawdopodobienstwa wystapienia wstrzasu, wykorzystuje rowniez stale

% Mozna wczytac dajke Pink Green

AS=0.01; %stala

ta=6; %stala

load('Y.mat');load('X.mat'); load('C.mat'); load('density.mat');

aft=load('aft_3380-3459.99.txt'); %wczytanie aftershockow

y=aft(:,1); x=aft(:,2);

cou=1;

N=0;

Rate=0;

Page 20: Programowanie Matlaba

Przykład do omówienia

cou=1;N=0;Rate=0;for t=1:1:6 for m=1:32 for n=1:32 R(n,m)=dens(n,m)/((exp(-C(n,m)/AS)-1)*exp(-t/ta)+1); end end N(cou)=sum(sum(R)); Rate=Rate+R; cou=cou+1;end

Page 21: Programowanie Matlaba

Przykład do omówienia

Yy=Y(1,:); Yy=Yy(:); Xx=X(:,1); for i=1:length(aft) % przyrownywanie wspolrzednych wstrzasow for j=1:(length(Yy)-1) % do odpowiednich oczek siatki Y if (y(i)>Yy(j) && y(i)<Yy(j+1) ) y(i)=Yy(j); else continue end end end

Page 22: Programowanie Matlaba

Regresja liniowa

Jest Statistics Toolbox, który zawiera kilka możliwości liczenia regresji liniowej np.:

mdl = LinearModel.fit(X,y)

[r,m,b] = regression(t,y)

beta = mvregress(X,Y) % Multivariate linear regression

[b,bint,r,rint,stats] = regress(y,X)

Można liczyć samemu w oparciu o algebrę macierzy

Page 23: Programowanie Matlaba

Regresja liniowaY2 = B1(3:end) ;X2 = [ones(norigin,1) p.oml] ;varB1 = stats(4) * inv(X1' * X1) ;varP = varB1(3:end,3:end) ;plot(wyn(1:i)) ;I = eye(norigin) ;ee = 1 ;V2 = varP + I * ee ;B2 = (X2' * (V2 \ X2)) \ X2' * (V2 \ Y2) ;tm = (Y2 - X2*B2) ;sigma_2 = tm' * (V2 \ tm) / npha ; result.sigma = sqrt(sqr(stats(4)) + sigma_2) ;result.h = h ;result.a = zeros(4,1) ;result.a(1:2) = B2 ;result.a(3) = B1(1) ;Y = Y1 ;X = ones(npha,3) ;X(:,3) = X1(:,1) ;X(:,2) = [p.pha.ml]' ;B = result.a(1:3) ;tm = (Y - X*B) ;result.S2 = sqrt(tm' * tm / npha) ;

Page 24: Programowanie Matlaba

Regresja liniowacftool

Page 25: Programowanie Matlaba

Warto zapamiętać

Nie stosować

C= inv(B) * A ;

Lepiej się liczy – szybciej i dokładniej

C = B \ A ;

Page 26: Programowanie Matlaba

Czytanie/pisanie danych

save … -ascii -double -tabsloadCzytanie/pisanie formatowane fopenfprintf, fwrite fscanf, fgetl, fgets, freadfcloseCzytanie/pisanie operuje na wektorach.Nie ma potrzeby kontrolowania rozmiaru

wczytywanych danych

Page 27: Programowanie Matlaba

Tablica struktur

sta = 229x1 struct array with fields: sid sname slat slon selev

Page 28: Programowanie Matlaba

Tablica struktur

>> disp(sta(1))

sid: 1

sname: 'GKP'

slat: 53.2697

slon: 17.2367

selev: 115

Page 29: Programowanie Matlaba

Tablica struktur

>> b = [sta.slat]';>> disp(b(1:5)) 53.2697 77.0057 50.8428 49.6314 50.2195

Page 30: Programowanie Matlaba

Tablica struktur

>> b = [[sta.slat]' [sta.slon]'] ;

>> disp(b(1:5,:))

53.2697 17.2367

77.0057 15.5301

50.8428 16.2931

49.6314 22.7075

50.2195 19.7984

Page 31: Programowanie Matlaba

Tablica struktur

>> b = {sta.sname}' ;

>> b{1:2}

ans =

GKP

ans =

HSP

Page 32: Programowanie Matlaba

Tablica struktur

>> b = {sta.sname}' ;>> bb = 'GKP' 'HSP' 'KSP‘

Page 33: Programowanie Matlaba

Programowanie Matlaba

Koniec

Dziękuję za uwagęi zainteresowanie