1 / 33

Programowanie Matlaba

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.

leroy
Download Presentation

Programowanie Matlaba

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programowanie Matlaba

  2. Operacje na macierzach: • * - mnożenie • / - dzielenie • \ - dzielenie lewostronne • ^ - potęgowanie • + - dodawanie • - - odejmowanie • ' - transponowanie sprzężone • .' - transponowanie niesprzężone • [] - łączenie

  3. Operacje na tablicach/skalarach • .* - mnożenie • ./ - dzielenie • .\ - dzielenie lewostronne • .^ - potęgowanie • + - dodawanie • - - odejmowanie

  4. Indeksowanie tablic/macierzy • Indeksowanie tablic wykonuje się wyrażeniem w postaci • A(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 end • pierwszy_wiersz = A(1,1:end) • Symbol end może być stosowany w indeksowaniu odwrotnym • pierwsza_kolumna = A(end:-1:1,1) • % Samodzielny znak dwukropka • pierwszy_wiersz = A(1,:) • Tablicę można indeksować jednym indeksem • Tablicę można indeksować tablicą logiczną

  5. Tablice komórkowe • Cell 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

  6. Tablice komórkowe • 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'] • 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');

  7. Tablice komórkowe • 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') • end • linkaxes([a1 a2 a3], 'x'); • Nie stosować niepotrzebnie tablic komórkowych do obliczeń

  8. Funkcje • Przykł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()

  9. Funkcje • Po 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ń

  10. Funkcje • function 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)); • % tst = num2str(ts); • if xt_sec(k)<10 • ts = ['0' ts]; • end • podpisy{1,k} = [tg ':' tm ':' ts]; • end • set(gca,'XTickLabel',podpisy) • % koniec funkcji

  11. Funkcje • function 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)); • % tst = num2str(ts); • if xt_sec(k)<10 • ts = ['0' ts]; • end • podpisy{1,k} = [tg ':' tm ':' ts]; • end • set(gca,'XTickLabel',podpisy) • end

  12. Zadanie domowe – opisywanie osi czasu • function 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]; • end • set(gca,'XTickLabel',podpisy)

  13. Zadanie domowe

  14. 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') • end • linkaxes([a1 a2 a3], 'x');

  15. Zadanie domowe – opisywanie osi czasu

  16. Zadanie domowe – opisywanie osi czasu

  17. 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 ('')

  18. Zadanie domowe

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

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

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

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

  23. Regresja liniowa Y2 = 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) ;

  24. Regresja liniowa cftool

  25. Warto zapamiętać Nie stosować C= inv(B) * A ; Lepiej się liczy – szybciej i dokładniej C = B \ A ;

  26. Czytanie/pisanie danych save … -ascii -double -tabs load Czytanie/pisanie formatowane fopen fprintf, fwrite fscanf, fgetl, fgets, fread fclose Czytanie/pisanie operuje na wektorach. Nie ma potrzeby kontrolowania rozmiaru wczytywanych danych

  27. Tablica struktur • sta = • 229x1 struct array with fields: • sid • sname • slat • slon • selev

  28. Tablica struktur • >> disp(sta(1)) • sid: 1 • sname: 'GKP' • slat: 53.2697 • slon: 17.2367 • selev: 115

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

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

  31. Tablica struktur • >> b = {sta.sname}' ; • >> b{1:2} • ans = • GKP • ans = • HSP

  32. Tablica struktur • >> b = {sta.sname}' ; • >> b • b = • 'GKP' • 'HSP' • 'KSP‘ • 

  33. Programowanie MatlabaKoniecDziękuję za uwagęi zainteresowanie

More Related