source: trunk/RESULTATS/eof_NCEP_an.m @ 27

Last change on this file since 27 was 27, checked in by pinsard, 15 years ago

production de .ps au lieu de .eps

  • Property svn:keywords set to Id
File size: 11.9 KB
Line 
1%EOF_NCEP_AN calcule les EOFs et composantes principales du champs de temperature de surface en moyennes mensuelles climatologiques
2% (12 points temporels)
3%
4% le programme enregistre automatiquement les resultats du calcul
5% (attention: penser a changer le nom du fichier de sortie en cas de
6% modification de parametres du programme: domaine spatial, moyenne
7% temporelle effectuee: annee / mois, etc. parametre "nomfic" ci dessous)
8%
9% le programme permet egalement de visualiser les resultats. Voir le doc
10% .pdf joint pour l'interpretation de cette visualisation.
11%
12% Date: Avril-Mai 2008
13% Auteur: juliette.mignot@locean-ipsl.upmc.fr
14% Contexte Ecole d'ete ENVI-STAT 2008
15%+
16%
17% module
18% ======
19%
20% ``eof_NCEP_an``
21%
22% DESCRIPTION
23% ===========
24%
25% ``eof_NCEP_an`` lit les fichiers
26% ``../DONNEES/lsmask_tropatl_PacandMedblancs.mat``
27% et ``../DONNEES/skt.mon.tropatl.mat``.
28%
29% ``eof_NCEP_an`` calcule ++blabla++
30%
31% ``eof_NCEP_an`` sauvegarde dans ``../DONNEES/eof_SSTan_tropAlt30N-20S.mat``.
32%
33% Ces fichiers sont lus par ``regandsignif_seriestemporelles.m_``.
34%
35% ``eof_NCEP_an`` affiche trois figures :
36%
37%  - ++
38%
39%  - ++
40%
41%  - valeurs propres de la matrice de covariance
42%
43% ``eof_NCEP_an`` sauve ces images dans ``./eof_SSTan_tropAlt30N-20S_[123].ps``.
44%
45% ++
46%
47% EXAMPLES
48% ========
49%
50% ::
51%
52% >> addpath('../PROGRAMMES/')
53% >> tpacpandreg_startup
54% >> eof_NCEP_an
55%
56% SEE ALSO
57% ========
58%
59% tpacpandreg_startup.m_
60%
61% .. _tpacpandreg_startup.m : tpacpandreg_startup.m.html
62%
63% initfig.m_
64%
65% .. _initfig.m : initfig.m.html
66%
67% regandsignif_seriestemporelles.m_
68%
69% .. _regandsignif_seriestemporelles.m : regandsignif_seriestemporelles.m.html
70%
71% whorldmap.m_
72%
73% .. _whorldmap.m : whorldmap.m.html
74%
75% TODO
76% ====
77%
78% improve description
79%
80% tester la branche NetCDF
81%
82% sous octave, triangle bizarre dans la dernière barre du graphique valeurs
83% propres.
84%
85% EVOLUTIONS
86% ==========
87%
88% $Id$
89%
90% - fplod 2009-08-26T10:26:35Z aedon.locean-ipsl.upmc.fr (Darwin)
91%
92%  * remplacement de ``eps`` par ``ps` pour pouvoir imprimer les figures
93%    produites par ``octave``
94%
95% - jmignot 2009-08-25
96%
97%  * suppression d'appel à contlab et colorbartype sous octave
98%
99% - fplod 2009-08-25T10:40:16Z aedon.locean-ipsl.upmc.fr (Darwin)
100%
101%    * modif commentaires liée au renommage
102%
103% - jmignot 2009-08-25
104%
105%   * RESULTATS/Reg_seriestemporelles.m renommé en
106%     RESULTATS/regandsignif_seriestemporelles.m pour éviter confusion
107%     avec PROGRAMMES/Reg_seriestemporelles.m
108%   * chgt de noms de fichiers : ``EOF_ devient ``eof_``
109
110% - fplod 2009-08-21T15:04:16Z aedon.locean-ipsl.upmc.fr (Darwin)
111%
112%   * as octave save default format is ASCII and no default extension
113%     while matlab save default format is MAT v5 mat-file (little endian) and
114%     default extension is ``.mat``, write more precise save instruction
115%   * add header
116%   * répertoire de données relatifs au répertoire courant
117%   * suppression de ``clear all`` présent dans ``tpacpandreg_startup.m``
118%   * contournement pb octave pour ``contourf`` :
119%     Dans le fil de discussion [Pkg-octave-devel] Bug#492223: octave3.0: contourf only accepts vector X and Y if same+++,
120%     je comprends que j'ai affaire à un bug de octave 3.0 (donc à surveiller
121%     pour les prochaines versions) qui ne veut pas faire de contourf si les
122%     variables X et Y n'ont pas la même dimension et c'est le cas ici
123%     (lat = 42x1, lon= 70x1 vue avec size).
124%     http://lists.alioth.debian.org/pipermail/pkg-octave-devel/2008-July/004672.html
125%   * sauvegarde des figures
126%   * replace file radical ``EOF_SSTmens_tropAtl`` by ``EOF_SSTan_tropAtl``
127%
128%-
129
130
131%%
132N=4; %nb d'EOF a tracer
133
134nomfic='eof_SSTan_tropAtl'
135% mettre 'eof_SSTan_tropAtl' quand on travaille en moyennes annuelles. Ce
136% fichier sera rappele dans les programme de regression lineaire
137%%
138%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
139%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
140%%%%              CHARGEMENT ET PREPARATION DES DONNEES
141%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
142
143nannees=60;
144
145repertoire=[ '..' filesep 'DONNEES' filesep ] % a adapter a chaque cas: chemin d acces aux donnees
146
147% Mask
148%-----
149file='lsmask_tropatl_PacandMedblancs.mat'
150   load([repertoire file]);
151  ny=size(mask,1); nx=size(mask,2); % dimensions spatiales des tableaux
152
153% Data
154%--------
155  %SI .MAT
156  repertoire2=[repertoire 'MAT' filesep] % a adapter a chaque cas: chemin d acces aux donnees
157  file=['skt.mon.tropatl.mat']
158  load([repertoire2 file]); % chargement des donnees
159
160
161  %SI NETCDF
162  %repertoire2=[repertoire 'NETCDF' filesep]% a adapter a chaque cas: chemin d acces aux donnees
163  % file=['skt.mon.tropatl.nc']
164  % f=netcdf([repertoire file],'nowrite');
165  % tab=f{'skt'}(:,:,:);
166
167
168   tab=permute(tab,[2 3 1]);% permutation des dimensions pour organiser le tableau sous la forme [lat lon temps]
169
170
171%---------------------------------------------------
172%  MANIPULATIONS TEMPORELLES: MOYENNE ET ANOMALIES
173%---------------------------------------------------
174
175% Construction de moyennes annuelles
176%---------------------------------------------------
177tab=reshape(tab,size(tab,1),size(tab,2),12,nannees);
178tab=squeeze(mean(tab,3));
179
180%  Construction des anomalies: on soustrait en chque point la moyenne temporelle totale
181%--------------------------------------------------------------------------
182tab_mean=squeeze(mean(tab,3)); tab_mean=repmat(tab_mean,[1 1 size(tab,3)]);
183anom=tab-tab_mean;
184ntemp=size(anom,3);
185
186%-------------------------------------------------------------
187%  MANIPULATIONS SPATIALES: PONDERATION, ZOOM GEOGRAPHIQUE
188%-------------------------------------------------------------
189
190% Pondération
191%----------------
192%Si on veut éventuellement attribuer un poids différent aux différents
193%points spatiaux, on le fait ici.
194
195% Préparation du zoom géographique: sur le masque, j'identifie les points
196% supplémentaires que je veux éliminer pour le calcul (critère en longitude
197% et/ou latitude par exemple)
198%---------------------------------------------------------------------
199limite_latS=-20; %limite du domaine d'etuade en latitude
200limite_latN=30; %limite du domaine d'etuade en latitude
201lat2D=repmat(lat,[1 size(mask,2)]);
202mask(lat2D>limite_latN&mask==0)=4;
203mask(lat2D<limite_latS&mask==0)=4;
204clear lat2D
205
206% Application du masque terre/mer pour pouvoir ensuite enlever les points de terre: on ne veut
207% travailler que sur l'océan
208%---------------------------------------------------------------------
209mask3D=repmat(mask,[1 1 size(tab,3)]);
210tab(mask3D~=0)=NaN;
211
212%  Elimination des points NaN
213%--------------------------------
214anom=reshape(anom,ny*nx,size(anom,3));
215maskr=reshape(mask,ny*nx,1);
216pt_val=find(maskr==0);
217Z=zeros(length(pt_val),ntemp);
218Z=anom(pt_val,:);
219%
220%%
221%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
222%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
223%%%                DECOMPOSITION EN COMPOSANTES PRINCIPALES
224%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
225
226%%%      CALCUL DE LA MATRICE DE COVARIANCE ET DIAGONALISATION
227
228% Z est donc une matrice N(points spatiaux) x M(points temporels) de
229% moyenne temporelle nulle sur laquelle on va faire l'analyse en EOF
230
231% matrice de covariance:
232  C = Z * Z';
233%  eval(['save ' repertoire 'MatCov_SST_tropAtl' num2str(limite_latN) 'N' num2str(limite_latS) 'S.asc C -ascii'])
234
235% diagonalisation
236  [E,Lambda] = eig(C);
237   % Lambda est la matrice diagonale des valeurs propres et E la matrice dont les colonnes sont les vecteurs propres correspondants.
238   % Soit Z*E = E*Lambda
239   % Les vecteurs propres sont appelés les EOF. Chaque EOF peut être considéré comme une carte de l'espace physique.
240
241
242 %%
243 %%%% calcul de la matrice donnant les pourcentages de variance
244Lambda = diag(Lambda);
245pctg_var = round(Lambda / sum(Lambda) * 1000) / 10;
246
247
248 %On definit les composantes principales de Q comme la decomposition du signal decrit par Q sur les EOF E.
249
250   P = Z' * E;
251
252%%
253%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
254%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
255 %%%             RECONSTRUCTION DES CARTES PHYSIQUES ET NORMALISATION DES
256 %%%             COMPOSANTES PRINCIPALES
257%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
258
259%initialisation des tableaux de stockage finaux
260TABEOF=zeros(ny,nx,N); %TABLEAU FINAL DES CARTES PHYSIQUES
261PC=zeros(ntemp,N);    %TABLEAU FINAL DES COMPOSANTES PRINCIPALES
262p_var=zeros(N,1);    %TABLEAU FINAL DES COMPOSANTES PRINCIPALES
263
264% boucle sur les differentes EOF pour reconstruire les cartes, normaliser
265% et enregistrer dans le tableau final
266for  i=1:1:N
267
268  disp(strcat('normalisation, projection et trace de l eof',num2str(i)))
269
270  pc = normalisation(P(:,end-i+1));
271  %
272  tabeof_temp=E(:,end-i+1);
273  tabeof=NaN+zeros(ny*nx,1);
274  tabeof(pt_val)=tabeof_temp;
275  tabeof=reshape(tabeof,ny,nx);
276  %remarque: autre facon de calculer le tabeof:
277  %  tabeof=projection(pc,Q'); tabeof=reshape(tabeof,ny,nx);
278
279      %%% enregistrement
280  TABEOF(:,:,i)=tabeof;
281  PC(:,i)=pc;
282  p_var(i)=pctg_var(end-i+1);
283
284end;
285
286fullfilename=[repertoire nomfic num2str(limite_latN) 'N' num2str(limite_latS) 'S.mat'];
287if (run_octave == 0)
288 save(fullfilename,'TABEOF','PC','p_var','lon','lat','mask','-v7');
289else
290 save('-v7',fullfilename,'TABEOF','PC','p_var','lon','lat','mask');
291end
292clear fullfilename;
293
294
295 %%               TRACE
296close all
297%parametres geographiques des graphes
298  geo=[-100 20 -30 30]; %[lonmin lonmax latmin latmax];
299  yti=[-30:10:30]; xti=[-100:30:20]; %labels de latitude et de longitude
300%niveaux de couleurs
301  lev=[-2:.02:2];
302  clip_lev=[-0.06 0.06];
303
304figure(1);
305initfig;
306figure(2);
307initfig;
308
309for i=1:4
310
311   %subplot(4,2,2*i-1)
312   ifigure=1;
313   figure(ifigure);
314   subplot(2,2,i)
315   if (run_octave == 0)
316    x=lon;
317    y=lat;
318   else
319    [x,y]=meshgrid(lon,lat);
320   end
321   z=squeeze(TABEOF(:,:,i));
322   contourf(x,y,z,lev);
323   caxis(clip_lev);
324   hold on
325   whorldmap
326   % limites geographies et labels de longitude et de latitude
327  ylim([geo(3) geo(4)])
328  xlim([geo(1) geo(2)])
329  set(gca, 'Xtick', xti, 'Ytick', yti)
330   if (run_octave == 0)
331    [longstr, latstr] = contlab(xti, yti);
332    set(gca, 'Xticklabel', longstr, 'Yticklabel', latstr)
333   end;
334  xlabel('longitude')
335  ylabel('latitude')
336
337   %titre de la figure
338   title([num2str(p_var(i)) '%'])
339
340  %barre de couleur
341  if (run_octave == 0)
342    hpal=jet(100); %carte des couleurs: du bleu au rouge par defaut.
343    pos1=get(gca,'Position');
344    pos=[pos1(1) pos1(2)-.075 pos1(3) .013];
345    colorbartype(pos,lev,1,clip_lev,hpal,0);
346    title('degC')
347  else
348    colorbar('East')
349  end;
350
351   % sauvegarde de la figure
352   printer='ps';
353   print_printer=['-d', printer];
354   fullfilename=['.' filesep nomfic num2str(limite_latN) 'N' num2str(limite_latS) 'S_' , num2str(ifigure) '.' printer];
355   print(print_printer,fullfilename);
356   clear fullfilename;
357   clear printer;
358
359   %subplot(4,2,2*i)
360   ifigure=2;
361   figure(ifigure);
362   subplot(2,2,i)
363   plot(PC(:,i),'x-')
364   title(['composante principale correspondante (normalisée)'])
365   hold on
366   plot([1 ntemp],[0 0],'k')
367   xlim([1 ntemp])
368   xlabel('mois')
369
370   % sauvegarde de la figure
371   printer='ps';
372   print_printer=['-d', printer];
373   fullfilename=['.' filesep nomfic num2str(limite_latN) 'N' num2str(limite_latS) 'S_' , num2str(ifigure) '.' printer];
374   print(print_printer,fullfilename);
375   clear fullfilename;
376   clear printer;
377
378end;
379
380
381% Graphe pourcentages de variance expliqué
382ifigure=3;
383figure(ifigure);
384bar(flipud(pctg_var))
385xlim([0 10])
386title('valeurs propres de la matrice de covariance')
387ylabel('% de variance expliqué')
388xlabel('indice du vecteur propre')
389
390% sauvegarde de la figure
391printer='ps';
392print_printer=['-d', printer];
393fullfilename=['.' filesep nomfic num2str(limite_latN) 'N' num2str(limite_latS) 'S_' , num2str(ifigure) '.' printer];
394print(print_printer,fullfilename);
395clear fullfilename;
396clear printer;
397
Note: See TracBrowser for help on using the repository browser.