Presentation is loading. Please wait.

Presentation is loading. Please wait.

Programovanie geofyzikálnych úloh v prostredí MATLAB

Similar presentations


Presentation on theme: "Programovanie geofyzikálnych úloh v prostredí MATLAB"— Presentation transcript:

1 Programovanie geofyzikálnych úloh v prostredí MATLAB
LS 2015, 5.stretnutie

2 Programovanie geofyzikálnych úloh v prostredí MATLAB
Program predmetu: 1. týždeň: organizačné pokyny, inštalácia softvéru, úvod, voľba riešeného problému, základné info o Matlabe, pracovné prostredie Matlabu týždeň: základné operácie s maticami, import a export dát, základné grafické zobrazovanie (grafy a mapy) týždeň: pokročilejšie grafické zobrazovanie (popis grafov a máp, 3D grafy) 4. týždeň: príkazy, stavba programov 5. týždeň: stavba programov, tvorba M-súborov 6. týždeň: funkcie – zabudované v Matlabe, tvorba vlastných funkcií 7. týždeň: príklady programovania geofyzikálnych (geologických) úloh 8. týždeň: príklady programovania geofyzikálnych (geologických) úloh týždeň: tvorba vlastných aplikácií, práca s GUI (Graphical User Interface) 10. týždeň: tvorba vlastných aplikácií, nástroj GUIDE pozn.: zmeny vyhradené

3 Programovanie geofyzikálnych úloh v prostredí MATLAB
ďalšie dôležité príkazy: fitovanie polynómu cez skupinu dvojíc hodnôt (metódou LSQ): p = polyfit(x, y, n); výsledkom je matica p s koeficientami poynómu stupňa n matica p má n+1 prvkov (posledný prvok je konštantný člen – pozor, toto sa líši od často používanej aproximácie a0 + a1x + a2x2+ a3x3+ ...)

4 Programovanie geofyzikálnych úloh v prostredí MATLAB
ďalšie dôležité príkazy – fitovanie polynómu: príklad: clear all; close all; clc; x = (0: 0.1: 2.5)'; %vygenerovanie matice x y = erf(x); %chybova funkcia (error function) p = polyfit(x,y,5); %samotne nafitovanie polynomom 5.stupna m= numel(x) for j = 1:m % do matice fit(j) sa vygenerujú hodnoty polynomickej aproximácie fit(j) = p(1)*x(j)^5+ p(2)*x(j)^4+ p(3)*x(j)^3 + p(4)*x(j)^2 + p(5)*x(j) + p(6); end; plot(x,y, x,fit); xlabel('x[]','FontSize',10); ylabel('functions []','FontSize',10); legend(' error function ' ,'polynomial fit');

5 Programovanie geofyzikálnych úloh v prostredí MATLAB
ďalšie dôležité príkazy: Konvolúcia: príkaz: conv(x,y) príklad: filtrácia náhodnej vygenerovanej funkcie pomocou jednoduchého 3-prvkového car-box filtra (kĺzajúci priemer) close all; clear all; clc; x1 = randn(100,1); % generuje maticu nahodnych cisel s rozmermi 100x1 plot(x1); hold; %nakresli graf funkcie x1 a pocka na dalsie kreslenie xlabel('porad. cislo []','FontSize',10); ylabel('funkcie []','FontSize',10); b1 = [1; 1; 1]/3; %definovanie 3-prvkoveho car-box filtra ako maticu 3x1 y1 = conv(b1,x1); %konvolucia dvoch signalov (matic) n1 = length(y1) %dlzka vystupu konvolucie je n+m-1, kde m je dlzka filtra plot(y1,'--r') ; %dokresli graf vyhladenej funkcie y1 cervenou prerusovanou legend('vygenerovane','filtrovane'); % vykreslenie nie je uplne korektne… preco?

6 Programovanie geofyzikálnych úloh v prostredí MATLAB
ďalšie dôležité príkazy: riešenie systému lineárnych rovníc: Ax = b kde A je tzv. matica systému (m-riadkov  n-stĺpcov) , x je vektor hľadaných neznámych – jednostĺpcová matica (n-riadkov  1-stĺpec) a b tzv. pravá strana systému - jednostĺpcová matica (m-riadkov  1-stĺpec) systém je riešiteľný, keď m = n (počet neznámych = počet rovníc), prípadne keď m > n, kde ide o tzv. preurčený systém (rieši sa metódou LSQ)

7 Programovanie geofyzikálnych úloh v prostredí MATLAB
ďalšie dôležité príkazy: riešenie systému lineárnych rovníc: Ax = b kde A je tzv. matica systému (m-riadkov  n-stĺpcov) , x je vektor hľadaných neznámych – jednostĺpcová matica (n-riadkov  1-stĺpec) a b tzv. pravá strana systému - jednostĺpcová matica (m-riadkov  1-stĺpec) - poznáme veľké množstvo metód – Matlab ich poskytuje v značnom množstve - hlavný príkaz v Matlabe: x = A\b; (\-‘backslash‘ na rozdiel od /-‘slash‘) (x=A/b by riešil prípad xA = b) (tento je však „čiernou skrinkou = black box“ – nevieme, že pre akú metódu sa Matlab pri konečnej realizácii rozhodne) príklad: clear all; close all; clc; A=magic(3) b=[3; 1; 4] x = A\b % použitie „black-box“ metódy

8 Programovanie geofyzikálnych úloh v prostredí MATLAB
riešenie systému lineárnych rovníc: Ax = b - hlavný príkaz v Matlabe: x = A\b; - ďalšie možnosti: - LU-rozklad (LU-decomposition), - Choleského-rozklad (Cholesky-decomposition), - SVD-rozklad (SVD-decomposition), - QR-rozklad (QR-factorization), - použitie pseudo-inverznej matice (v prípade, že matica systému A je singulárna)

9 Programovanie geofyzikálnych úloh v prostredí MATLAB
riešenie systému lineárnych rovníc: Ax = b príklady: clear all; A=magic(3) b=[3; 1; 4] [L,U] = lu(A) % použitie LU-rozkladu y = L\b % rieši spodný trojuholníkový systém x = U\y % rieši horný trojuholníkový systém R = chol(A) % použitie Choleského-rozkladu; pozor matica A musí spĺňať y = R’\b % určité podmienky (tzv. pozitívne definitná, t.j. xTAx > 0) x = R\y x = pinv(A)*b %použitie pseudo-inverznej matice

10 Programovanie geofyzikálnych úloh v prostredí MATLAB
riešenie systému lin. rovníc: príklady: clear all; A=magic(3) b=[3; 1; 4] x1 = A\b [U,S,V] = svd(A) % použitie SVD-rozkladu (Singular Value Decomposition) for i=1: sqrt(numel(A)) % preklopenie diagonálnych prvkov matice S SD(i,i) = 1/S(i,i); end; x = V*SD*(U'*b) c = cond(A) % tzv. condition number (hovorí o miere nestability systému) [Q,R] = qr(A) % použitie QR-rozkladu y = Q\b x = R\y

11 Programovanie geofyzikálnych úloh v prostredí MATLAB
riešenie systému lineárnych rovníc: príklady použitia z geofyziky: LSQ; v metóde najmenších štvorcov sa vždy rieši systém tzv. normálnych rovníc, ktoré majú toľko neznámych, koľko je rovníc (získaných deriváciou sumy štvorcov odchyliek podľa hľadaných neznámych koeficientov) riešenie obrátenej úlohy pre mnohé metódy (mnohé gravimetrické a magnetometrické riešenia; ERT – „Locke“) väčšinou systém rovníc popisuje vzťah medzi jednou bunkou modelu a bodov merania, v ktorom sa dané pole modeluje riešenia pre tzv. semi-automatické interpretačné metódy (Wernerova a Eulerova dekonvolúcia) - atď., atď, atď., ...

12 Programovanie geofyzikálnych úloh v prostredí MATLAB
riešenie systému lineárnych rovníc: príklad použitia z geofyziky – Wernerova dekonvolúcia v magnetometrii: Werner (1953) postavil základnú myšlienku svojej interpretačnej techniky na „vyhľadávaní“, „rozpoznávaní“ účinku 2D-dajky (dosky) v profilových hodnotách DT. Táto idea je založená na využití základného vzťahu pre účinok DT(x) 2D-dajky (ako racionálnej funkcie) (napr. Grant-West, 1965, s. 325): (1) kde x je súradnica bodu pozdĺž profilu (profil sa uvažuje na úrovni z=0), x0 a z0 sú súradnice stredu horného okraju dajky, hodnoty A a B sú funkcie magnetizácie a geometrie dajky

13 Programovanie geofyzikálnych úloh v prostredí MATLAB
riešenie systému lineárnych rovníc: príklad použitia z geofyziky – Wernerova dekonvolúcia v magnetometrii: rovnica (1) je upravená na tvar: x2DT = a0 + a1x + b0DT + b1xDT, (2) kde Werner (1953) zaviedol nové konštanty a0, a1, b0 a b1: a0= -Ax0 + Bz0 , a1 = A, (3) b0 = - x02 - z02 , b1 = 2x0 . a ich vzťah ku hľadaným neznámym x0, z0, A a B je daný: x0 = b1/2 , (4) (5) A = a1 , (6) B = (a a1b1)/z0 , (7)

14 Programovanie geofyzikálnych úloh v prostredí MATLAB
riešenie systému lineárnych rovníc: príklad použitia z geofyziky – Wernerova dekonvolúcia v magnetometrii: rovnicu (2), ktorá obsahuje 4 neznáme a0, a1, b0 a b1 (ktoré majú jednoznačne definovaný vzťah k hľadaným x0, z0, A a B): x2DT = a0 + a1x + b0DT + b1xDT, (2) vieme napísať pre štyri rôzne polohy okna na profile x1=x(1), x2=x(2), x3=x(3), x4=x(4) štyri krát: a0 + a1x(1) + b0DT(x1) + b1x(1)DT(x1) = x(1)2DT(x1) , a0 + a1x(2) + b0DT(x2) + b1x(2)DT(x2) = x(2)2DT(x2) , a0 + a1x(3) + b0DT(x3) + b1x(3)DT(x3) = x(3)2DT(x3) , a0 + a1x(4) + b0DT(x4) + b1x(4)DT(x4) = x(4)2DT(x4) . čo predstavuje systém 4 rovníc o 4 neznámych typu Ax = b a vieme ho riešiť pre každú polohu posúvajúceho sa okna pozdĺž interpretovaného profilu

15 Werner deconvolution – algorithm (MatLab script)
clear all, close all; % INPUT OF PROFILE DATA - from 2 columns file (into matrix inpXdT) inpXdT = dlmread('mod2.dat',' '); % columns are separated into vectors X and dT X=inpXdT(:,1); dT=inpXdT(:,2); % number of readed data-rows is determined - put into m m = numel(X); % plotting the graph of input data plot(dT); xlabel('x [m]','FontSize',10); ylabel('dT[nT]','FontSize',10); % operator (window) length operl = 4;

16 Werner deconvolution – algorithm (MatLab script), continuation
% MAIN ALGORITHM OF WERNER DECONVOLUTION % main cycle along the profile data, sol_i - order number of obtained solutions sol_i=0; for i=1:m-operl-1 % creation of the matrix for 4 stages of the interpr. equation for k=0:operl-1 A(k+1,1)=1; A(k+1,2)=X(i+k); A(k+1,3)=dT(i+k); A(k+1,4)=X(i+k)*dT(i+k); end; % creation of the right-hand side vector b b(k+1,1) = X(i+k)*X(i+k)*dT(i+k); % solution of the Ax = b system x = pinv(A)*b; c = cond(A); % number of solutions will be increased sol_i = sol_i + 1; % calculation of dike parameters x0 and z0

17 Werner deconvolution – algorithm (MatLab script), continuation
% calculation of dike parameters x0 and z0 x_sol0(sol_i,1) = x(4)/2; z_sol0(sol_i,1) = -sqrt(-x(3)-x(4)*x(4)/4); c_sol0(sol_i,1) = c; % if the solution for x0 is not in the interval of the profile, % or if the solution for z0 is not pure real number, it will be not accepted if ( x_sol0(sol_i,1)<X(i) ) | ( x_sol0(sol_i,1)>X(i+operl-1) ) | ( imag(z_sol0(sol_i,1))~=0 ) sol_i=sol_i - 1; end; end; % end of the main cycle along the profile data, sol_i % plotting of solutions

18 Werner deconvolution – algorithm (MatLab script), continuation
% plotting of solutions %plot(x_sol0,z_sol0) figure, plot(x_sol0,z_sol0,'--rs','LineWidth',2,... 'MarkerEdgeColor','k',... 'MarkerFaceColor','g',... 'MarkerSize',6) grid on axis([X(1) X(m) -30 0]); xlabel('x [m]','FontSize',10); ylabel('z[m]','FontSize',10); % writing of determined solutions into a file % creating a matrix from solution vectors solXZ = [x_sol0 z_sol0 c_sol0]; save werner_solutions.dat solXZ -ascii -double; % END OF THE SCRIPT

19 Programovanie geofyzikálnych úloh v prostredí MATLAB
funkcie v Matlabe: zadefinované Matlabom (napr. sin(x), log(x),...) volanie – buď iba meno(parametre) alebo premenna = meno(parametre) dôležitý je tu pojem tzv. handle funkcie, čo je pomocná premenná (presnejšie údajový typ), ktorá obsahuje informáciu použitú pri referencovaní funkcie a táto môže byť neskôr využitá (podrobnejšie neskôr s Davidom ...) definované užívateľom musia byť samostatných M-súboroch alebo vhodne zakomponované v skripte (samotný celý skript potom musí byť funkciou a v rámci nej môžu byť definované ďalšie pod-funkcie) zadefinovanie: function [fout] = meno(vstupné parametre) jadro funkcie; fout = výsledný vzťah;

20 Programovanie geofyzikálnych úloh v prostredí MATLAB
funkcie v Matlabe – definované užívateľom: príklad: Vxz pre 3D hranol v gravimetrii Skript prism_3Dgrav_Vxz.m a z neho volaná funkcia Vxz_pomoc.m

21 Programovanie geofyzikálnych úloh v prostredí MATLAB
funkcie v Matlabe – definované užívateľom: príklad: function [fout] = Vxz_pomoc(X,Y,Z) % help function R = sqrt(X*X + Y*Y + Z*Z); fout = log(Y + R); % hlavný program (viac priamo v skripte prism_3Dgrav_Vxz.m): kappa = 6.67E-11; sigma = 1000; xsi1 = -500; xsi2 = 500; eta1 = -500; eta2 = 500; dzeta1 = 0.1; dzeta2 = 4000; zc = 0; yc = 0; xc = -3000; i = 1; while xc<=3000 X1=xsi1-xc; X2=xsi2-xc; Y1=eta1-yc; Y2=eta2-yc; Z1=dzeta1-zc; Z2=dzeta2-zc; pomoc = Vxz_pomoc(X2,Y2,Z2)-Vxz_pomoc(X1,Y2,Z2)-Vxz_pomoc(X2,Y1,Z2)... +Vxz_pomoc(X1,Y1,Z2)-Vxz_pomoc(X2,Y2,Z1)+Vxz_pomoc(X1,Y2,Z1)... +Vxz_pomoc(X2,Y1,Z1)-Vxz_pomoc(X1,Y1,Z1); Vxz(i) = -1E5*kappa*sigma*pomoc; xcor (i) = xc; xc = xc + 2; i = i + 1; end;

22 Programovanie geofyzikálnych úloh v prostredí MATLAB
funkcie v Matlabe – definované užívateľom: zložitejší príklad: Vz pre 3D hranol s polynom. zmenou hustoty Zložitejší vzorec (detaily v súbore: Vzorec_3Dhranol_polynom_density.ppt) Zo skriptu poly_3Dprism.m sú volané funkcia I0 až I5.

23 poznámka k viacrozmerným poliam:
Programovanie geofyzikálnych úloh v prostredí MATLAB poznámka k viacrozmerným poliam: základné dátové štruktúry sú matice: A(riadok,stlpec) viacrozmerné dátové štruktúry sú polia: B(riadok,stlpec,stranka)

24 poznámka k viacrozmerným poliam:
Programovanie geofyzikálnych úloh v prostredí MATLAB poznámka k viacrozmerným poliam: niektoré užitočné príkazy (funkcie) pre prácu s viacrozmernými poliami: ndims – počet rozmerov poľa cat – spájanie polí shiftdim – posun rozmerov squeeze – odstránenie rozmerov s veľkosťou 1 ndgrid – generovanie polí pre N-rozmerné funkcie a interpoláciu permute - permutácia rozmerov poľa ipermute – inverzná permutácia rozmerov poľa použitý zdroj: Bartko R., Miller M., MATLAB I. – algoritmizácia a riešenie úloh.

25 Ďalší príklad programu:
jednoduché spracovanie gravimetrických údajov (mikrogravimetria) skript: micro_grav_processing.m načítanie nameraných údajov vyseparovanie údajov zo základného bodu (ZB) a ostatných bodov preloženie polynómu hodnotami na ZB oprava o chod (hodnôt na všetkých ostatných bodoch) načítanie informácie o hodnote na ZB prepočet na hodnotu ZB (na „absolútne“ hodnoty) načítanie výšok meracích bodov výpočet neúplnej Bouguerovej anomálie (NBA) zobrazenie NBA spolu s modelovaným účinkom 2D horiz. valca (zadanie na tento týždeň – pokúste sa posledný krok urobiť pomocou volania externej funkcie na výpočet účinku 2D hor. pásu) všetky kroky sú ukázané na testovacom súbore z meraní na Gagarinovej ul. v Bratislave: Gagar_raw.dat, Gagar_base_station.dat, Gagar_elev.dat

26 Ďalší príklad programu:
Účinok (Vz) 2D hor. pásu: kde m = dhr, (tzv. plošná hustota), dh je hrúbka pásu, 2b jeho horiz. rozmer, h je hĺbka jeho uloženia.

27 Programovanie geofyzikálnych úloh v prostredí MATLAB
Zaujímavá mongrafia: Martin H. Trauth, 2006: MATLAB Recipes for Earth Sciences. Springer-Verlag Berlin Heidelberg, 230 p.

28 Programovanie geofyzikálnych úloh v prostredí MATLAB
Nasledujúce 2 stretnutia: Práca s GUI (Graphical User Interface) a celkovo grafické prostredie (plus ďalšie pokročilé veci) - David


Download ppt "Programovanie geofyzikálnych úloh v prostredí MATLAB"

Similar presentations


Ads by Google