source: tol/doc/kernel/matrix/VirtualMatrix.lyx @ 40407af

1941-docker-image-to-testdevel
Last change on this file since 40407af was 83a1cc2, checked in by Víctor de Buen <vdebuen@…>, 18 years ago

Unified document directory

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@21 be4846ae-f051-483a-831f-b64e7d08527f

  • Property mode set to 100644
File size: 31.1 KB
Line 
1#LyX 1.3 created this file. For more info see http://www.lyx.org/
2\lyxformat 221
3\textclass article
4\begin_preamble
5%\documentclass[spanish]{article}
6\usepackage{babel}
7\usepackage{a4wide}
8\usepackage{varioref}
9\usepackage{amssymb}
10\usepackage{latexsym}
11\usepackage{amssymb}
12\usepackage{amsmath}
13
14\usepackage{graphics}
15\usepackage{graphicx}
16\usepackage{ulem}
17\usepackage{color}
18\usepackage{multicol}
19\usepackage{longtable}
20
21%\usepackage{makeidx}
22\usepackage{hyperref}
23\makeindex
24
25\hypersetup{urlbordercolor=0 0 0,pdfborder=0 0 1 [3 2]}
26\end_preamble
27\language spanish
28\inputencoding auto
29\fontscheme default
30\graphics default
31\paperfontsize default
32\spacing single
33\papersize a4paper
34\paperpackage widemarginsa4
35\use_geometry 0
36\use_amsmath 0
37\use_natbib 0
38\use_numerical_citations 0
39\paperorientation portrait
40\secnumdepth 3
41\tocdepth 3
42\paragraph_separation indent
43\defskip medskip
44\quotes_language english
45\quotes_times 2
46\papercolumns 1
47\papersides 1
48\paperpagestyle default
49
50\layout Title
51
52Virtual Matrix en TOL
53\layout Author
54
55Jorge Suit Pérez y Víctor de Buen
56\layout Abstract
57
58La implementación de matrices virtuales pretende dotar al lenguaje de programaci
59ón TOL
60\begin_inset Foot
61collapsed false
62
63\layout Standard
64
65TOL:
66\emph on
67 Time Oriented Language
68\emph default
69, un lenguage interpretado de programación
70\emph on
71 open-source
72\emph default
73 cuya página web es
74\begin_inset LatexCommand \htmlurl[TOL-project]{http://www.tol-project.org}
75
76\end_inset
77
78 y que ha desarrollado por el grupo
79\begin_inset LatexCommand \htmlurl[Bayes]{http://www.bayesforecast.com}
80
81\end_inset
82
83
84\end_inset
85
86
87\emph on
88 
89\emph default
90de un mecanismo de definición de matrices de forma implícita con el doble
91 objetivo de ahorrar memoria, al no tener que almacenar explícitamente todas
92 las celdas de la matriz; y permitir al mismo tiempo la utilización de algoritmo
93s específicamente diseñados para formas especiales de matrices (Sparse,
94 Toeplitz, Vandermonde, ...)
95\layout Section
96
97Definición genérica de matriz virtual
98\layout Standard
99
100Una matriz virtual puede definirse de formas muy variopintas pero es necesario
101 contar con un interfaz mínimo común con el que interactuar con los posibles
102 algoritmos de una forma inequívoca y eficaz.
103 La estructura TOL podría definirse de esta forma:
104\layout LyX-Code
105
106Struct VMatrix
107\layout LyX-Code
108
109{
110\layout LyX-Code
111
112  Text      type_,
113\layout LyX-Code
114
115  Anything  param_,
116\layout LyX-Code
117
118  Set       methods_,
119\layout LyX-Code
120
121  Set       properties_
122\layout LyX-Code
123
124};
125\layout Enumerate
126
127
128\emph on
129Text type_
130\emph default
131: Identifica el tipo de matriz virtual que se usará para asegurar que se
132 puede utilizar un método concreto con los objetos de dicho tipo o bien
133 dar los errores o warnings pertinentes.
134 Esta etiqueta será mejor usarla en modo
135\shape italic
136case insensitive
137\shape default
138, es decir sin distinguir mayúsculas de minúsculas.
139\layout Enumerate
140
141
142\emph on
143Anything param_
144\emph default
145: Parámetros opcionales, dependientes del tipo de matriz virtual, que constituye
146n la información básica utilizada por los métodos genéricos de acceso.
147 Si es un sólo objeto se puede introducir tal cual, y si no, como un conjunto
148 de objetos con estructura arbitraria dependiente del tipo de matriz.
149 Si no se precisan argumentos opcionales se pasará el conjunto
150\family typewriter
151Empty
152\family default
153.
154\layout Enumerate
155
156
157\emph on
158Set methods_
159\emph default
160: Conjunto de métodos de acceso eficaz a las propiedades de la matriz, lo
161 cual depende tanto del tipo de matriz como de los algoritmos que se le
162 van a aplicar.
163 En casos especiales de aplicación de un método particular que no precise
164 usar todos estos métodos, o bien ya estén predefinidos para el tipo de
165 matriz virtual, entonces se pueden omitir pasando el conjunto
166\family typewriter
167Empty
168\family default
169.
170\layout Enumerate
171
172
173\emph on
174Set properties_
175\emph default
176: Conjunto de propiedades estructurales conocidas de la matriz, como por
177 ejemplo si se trata o no de una matriz.
178 Existen propiedades primarias con etiqueta propia, propiedades derivadas
179 de la mezcla de otras y propiedades incompatibles entre sí
180\begin_deeper
181\layout Enumerate
182
183
184\family typewriter
185Set VMP_IsSqr=[[
186\family default
187
188\begin_inset Quotes erd
189\end_inset
190
191
192\family typewriter
193Sqr
194\family default
195
196\begin_inset Quotes erd
197\end_inset
198
199
200\family typewriter
201]]
202\family default
203 : para especificar que la matriz es cuadrada, {
204\begin_inset Formula $Rows\left(A\right)=Cols\left(A\right)$
205\end_inset
206
207 }
208\begin_inset Foot
209collapsed false
210
211\layout Standard
212
213VMP son las siglas de Virtual Matrix Property
214\end_inset
215
216
217\layout Enumerate
218
219
220\family typewriter
221Set VMP_IsVer=[[
222\family default
223
224\begin_inset Quotes erd
225\end_inset
226
227
228\family typewriter
229Ver
230\family default
231
232\begin_inset Quotes erd
233\end_inset
234
235
236\family typewriter
237]]
238\family default
239 : para especificar que la matriz es vertical, {
240\begin_inset Formula $Rows\left(A\right)>Cols\left(A\right)$
241\end_inset
242
243 }
244\layout Enumerate
245
246
247\family typewriter
248Set VMP_IsHor=[[
249\family default
250
251\begin_inset Quotes erd
252\end_inset
253
254
255\family typewriter
256Hor
257\family default
258
259\begin_inset Quotes erd
260\end_inset
261
262
263\family typewriter
264]]
265\family default
266 : para especificar que la matriz es horizontal, {
267\begin_inset Formula $Rows\left(A\right)<Cols\left(A\right)$
268\end_inset
269
270 }
271\layout Enumerate
272
273
274\family typewriter
275Set VMP_IsReg=[[
276\family default
277
278\begin_inset Quotes erd
279\end_inset
280
281
282\family typewriter
283Reg
284\family default
285
286\begin_inset Quotes erd
287\end_inset
288
289
290\family typewriter
291]]
292\family default
293 : para especificar que la matriz es regular, {
294\begin_inset Formula $rank\left(A\right)=Min\left\{ Rows\left(A\right),Cols\left(A\right)\right\} $
295\end_inset
296
297 }
298\layout Enumerate
299
300
301\family typewriter
302Set VMP_IsSym=[[
303\family default
304
305\begin_inset Quotes erd
306\end_inset
307
308
309\family typewriter
310Sym
311\family default
312
313\begin_inset Quotes erd
314\end_inset
315
316
317\family typewriter
318,
319\family default
320
321\begin_inset Quotes erd
322\end_inset
323
324
325\family typewriter
326Sqr
327\family default
328
329\begin_inset Quotes erd
330\end_inset
331
332
333\family typewriter
334]]
335\family default
336 : para especificar que la matriz es simétrica, {
337\begin_inset Formula $A_{i,j}=A_{j,i}$
338\end_inset
339
340 }
341\layout Enumerate
342
343
344\family typewriter
345Set VMP_IsLowTri=[[
346\family default
347
348\begin_inset Quotes erd
349\end_inset
350
351
352\family typewriter
353LowTri
354\family default
355
356\begin_inset Quotes erd
357\end_inset
358
359
360\family typewriter
361]]
362\family default
363 : para matrices triangulares inferiores no necesariamente cuadradas, {
364 
365\begin_inset Formula $A_{i,j}=0\forall i>j$
366\end_inset
367
368}
369\layout Enumerate
370
371
372\family typewriter
373Set VMP_IsUppTri=[[
374\family default
375
376\begin_inset Quotes erd
377\end_inset
378
379
380\family typewriter
381UppTri
382\family default
383
384\begin_inset Quotes erd
385\end_inset
386
387
388\family typewriter
389]]
390\family default
391 : para matrices triangulares superiores no necesariamente cuadradas, {
392 
393\begin_inset Formula $A_{i,j}=0\forall i<j$
394\end_inset
395
396}
397\layout Enumerate
398
399
400\family typewriter
401Set VMP_IsColVec=[[
402\family default
403
404\begin_inset Quotes erd
405\end_inset
406
407
408\family typewriter
409Ver
410\family default
411
412\begin_inset Quotes erd
413\end_inset
414
415
416\family typewriter
417,
418\family default
419
420\begin_inset Quotes erd
421\end_inset
422
423
424\family typewriter
425Vec
426\family default
427
428\begin_inset Quotes erd
429\end_inset
430
431
432\family typewriter
433,
434\family default
435
436\begin_inset Quotes erd
437\end_inset
438
439
440\family typewriter
441LowTri
442\family default
443
444\begin_inset Quotes erd
445\end_inset
446
447
448\family typewriter
449]]
450\family default
451 : para especificar que la matriz es un vector columna, {
452\begin_inset Formula $Rows\left(A\right)=1$
453\end_inset
454
455 }
456\layout Enumerate
457
458
459\family typewriter
460Set VMP_IsRowVec=[[
461\family default
462
463\begin_inset Quotes erd
464\end_inset
465
466
467\family typewriter
468Hor
469\family default
470
471\begin_inset Quotes erd
472\end_inset
473
474
475\family typewriter
476,
477\family default
478
479\begin_inset Quotes erd
480\end_inset
481
482
483\family typewriter
484Vec
485\family default
486
487\begin_inset Quotes erd
488\end_inset
489
490
491\family typewriter
492,
493\family default
494
495\begin_inset Quotes erd
496\end_inset
497
498
499\family typewriter
500UppTri
501\family default
502
503\begin_inset Quotes erd
504\end_inset
505
506
507\family typewriter
508]]
509\family default
510 : para especificar que la matriz es un vector fila, {
511\begin_inset Formula $Cols\left(A\right)=1$
512\end_inset
513
514 }
515\layout Enumerate
516
517
518\family typewriter
519Set VMP_IsDiag=Set VMP_IsLowTri+VMP_IsUppTri+VMP_IsSym
520\family default
521 : para matrices diagonales, {
522\begin_inset Formula $A_{i,j}=0\forall i\neq j$
523\end_inset
524
525} Obsérvese que una matiz puede ser triangular por arriba y por abajo pero
526 no cuadrada, en cuyo caso no se considerará como matriz diagonal, aunque
527 lo sea de forma incompleta.
528\layout Enumerate
529
530
531\family typewriter
532Set VMP_HasUnitDiag=[[
533\family default
534
535\begin_inset Quotes erd
536\end_inset
537
538
539\family typewriter
540UnitDiag
541\family default
542
543\begin_inset Quotes erd
544\end_inset
545
546
547\family typewriter
548]]
549\family default
550 : para matrices con diagonal constante igual a 1, {
551\begin_inset Formula $A_{i,i}=1$
552\end_inset
553
554}
555\layout Enumerate
556
557
558\family typewriter
559Set VMP_IsOrthCols=VMP_IsOrth=[[
560\family default
561
562\begin_inset Quotes erd
563\end_inset
564
565
566\family typewriter
567OrthCols
568\family default
569
570\begin_inset Quotes erd
571\end_inset
572
573
574\family typewriter
575,
576\family default
577
578\begin_inset Quotes erd
579\end_inset
580
581
582\family typewriter
583Reg
584\family default
585
586\begin_inset Quotes erd
587\end_inset
588
589
590\family typewriter
591]]
592\family default
593 : para matrices ortogonales por columnas o simplemente otrtogonales, {
594 
595\begin_inset Formula $A^{T}A\; is\: diagonal$
596\end_inset
597
598 }
599\layout Enumerate
600
601
602\family typewriter
603Set VMP_IsOrthRows=[[
604\family default
605
606\begin_inset Quotes erd
607\end_inset
608
609
610\family typewriter
611OrthRows
612\family default
613
614\begin_inset Quotes erd
615\end_inset
616
617
618\family typewriter
619,
620\family default
621
622\begin_inset Quotes erd
623\end_inset
624
625
626\family typewriter
627Reg
628\family default
629
630\begin_inset Quotes erd
631\end_inset
632
633
634\family typewriter
635]]
636\family default
637 : para matrices ortogonales por filas, {
638\begin_inset Formula $AA^{T}\; is\: diagonal$
639\end_inset
640
641 }
642\layout Enumerate
643
644
645\family typewriter
646Set VMP_HasUnitCols=[[
647\family default
648
649\begin_inset Quotes erd
650\end_inset
651
652
653\family typewriter
654UnitCols
655\family default
656
657\begin_inset Quotes erd
658\end_inset
659
660
661\family typewriter
662]]
663\family default
664 : para matrices de columnas con norma unitaria, {
665\begin_inset Formula $A^{T}A\; has\: unit\: diagonal$
666\end_inset
667
668 }
669\layout Enumerate
670
671
672\family typewriter
673Set VMP_HasUnitRows=[[
674\family default
675
676\begin_inset Quotes erd
677\end_inset
678
679
680\family typewriter
681UnitRows
682\family default
683
684\begin_inset Quotes erd
685\end_inset
686
687
688\family typewriter
689]]
690\family default
691 : para matrices de filas con norma unitaria, {
692\begin_inset Formula $AA^{T}\; has\: unit\: diagonal$
693\end_inset
694
695 }
696\layout Enumerate
697
698
699\family typewriter
700Set VMP_IsOrthNormCols = VMP_IsOrth+VMP_HasUnitCols
701\family default
702 : para matrices ortonormales por columnas, o simplemente ortonormales
703\layout Enumerate
704
705
706\family typewriter
707Set VMP_IsOrthNormRows = VMP_IsOrth+VMP_HasUnitRows
708\family default
709 : para matrices ortonormales por filas
710\layout Enumerate
711
712
713\family typewriter
714Set VMP_IsTriDiag=[[
715\family default
716
717\begin_inset Quotes erd
718\end_inset
719
720
721\family typewriter
722TriDiag
723\family default
724
725\begin_inset Quotes erd
726\end_inset
727
728
729\family typewriter
730]]
731\family default
732 : para matrices tridiagonales no necesariamente cuadradas, {
733\begin_inset Formula $A_{i,j}=0\forall\left|i-j\right|>1$
734\end_inset
735
736}
737\layout Enumerate
738
739
740\family typewriter
741Set VMP_IsLowBiDiag=VMP_IsTriDiag+VMP_LowTri
742\family default
743 : para matrices bidiagonales inferiores no necesariamente cuadradas
744\layout Enumerate
745
746
747\family typewriter
748Set VMP_IsUppBiDiag=VMP_IsTriDiag+VMP_UppTri
749\family default
750 : para matrices bidiagonales superiores no necesariamente cuadradas
751\layout Enumerate
752
753
754\family typewriter
755Set VMP_IsIdent=VMP_IsDiag+VMP_HasUnitDiag+IsOrthNormCols+IsOrthNormRows+VMP_IsT
756riDiag
757\family default
758 : para la matriz identidad,
759\layout Enumerate
760
761etc.
762\end_deeper
763\layout Standard
764
765Se ha visto que una matriz puede mezclar varias propiedades, pero estas
766 mezclas no se pueden dar de forma arbitraria, por lo que será necesario
767 incorporar un sistema de control de congruencia.
768 Estas propiedades sólo aseguran que de presentarse en la lista la propiedad
769 se cumple, pero en caso contrario simplemente se entenderá que se desconoce
770 si la matriz observa o no dicha propiedad.
771 Por ejemplo una matriz resultado de una cierta operación puede resultar
772 ser simétrica de forma casual en cuyo caso no se especificará que lo es.
773 Para especificarlo explícitamente se pueden incluir propiedades del tipo
774 
775\begin_inset Quotes erd
776\end_inset
777
778NOT SYM
779\begin_inset Quotes erd
780\end_inset
781
782 para asegurar activamente que la matriz no es simétrica o
783\begin_inset Quotes erd
784\end_inset
785
786NOT REG
787\begin_inset Quotes erd
788\end_inset
789
790 para especificar que es singular a ciencia cierta.
791 Existen tres tipos de comportamiento que pueden adoptar los algoritmos
792 cuando necesitan saber si una matriz cumple o no una propiedad no especificada:
793\layout Enumerate
794
795Algunas propiedades se pueden obtener de la definición de la matriz de forma
796 sencilla y rápida, como por ejemplo, si es cuadrada o un vector fila.
797 En estos casos se incorporará la información automáticamente siempre que
798 sea pertinente.
799 
800\layout Enumerate
801
802Para otras propiedades puede ser relativamente costoso pero asumible, como
803 por ejemplo si es triangular superior o simétrica.
804 En este caso una variable global
805\begin_inset Foot
806collapsed false
807
808\layout Standard
809
810Se le podría llamar VMP_FORCE_CALC_UNKNOWN_PROPERTIES o algo similar
811\end_inset
812
813 gobernará lo que el usuario prefiere hacer en estos casos.
814 En cualquier caso TOL emitirá un
815\shape italic
816warning
817\shape default
818 avisando de ello al usuario por si se tratara de un defecto de definición.
819\layout Enumerate
820
821Otras propiedades requieren costes realmente prohibitivos como por ejemplo
822 saber si una matriz es regular u otronormal.
823 En estos casos TOL lanzará un
824\shape italic
825warning
826\shape default
827 y no procesará ningún algoritmo que requiera dicha propiedad no especificada.
828\layout Section
829
830Tipos básicos de matrices virtuales
831\layout Subsection
832
833Dense
834\layout Standard
835
836Una matriz de tipo "dense
837\begin_inset Quotes erd
838\end_inset
839
840 (densa o llena) es la que se define explícitamente como un objeto TOL Matrix
841 o un Real
842\layout LyX-Code
843
844Set d1 = VMatrix("Dense", Matrix A, Empty, Set properties);
845\layout LyX-Code
846
847Set d2 = VMatrix("Dense", Real   a, Empty, Set properties);
848\layout Standard
849
850No es necesario implementar métodos de acceso particulares pues el propio
851 objeto matriz ya los proporciona.
852 En el caso de definirse mediante un número real se entenderá la matriz
853 (1x1) cuya única celda es dicho número.
854\layout Subsection
855
856Scan
857\layout Standard
858
859Una matriz "Scan
860\begin_inset Quotes erd
861\end_inset
862
863 es la que se define implícitamente por sus propios métodos de acceso y
864 parámetros opcionales
865\layout LyX-Code
866
867Set d = VMatrix("Scan", Set param, VMatrixScanner(...), Set properties);
868\layout Standard
869
870El conjunto de métodos de acceso a una matriz deberá tener la siguiente
871 estructura para poder ser utilizado en los algoritmos genéricos de forma
872 eficaz:
873\layout LyX-Code
874
875Struct VMatrixScanner
876\layout LyX-Code
877
878{
879\layout LyX-Code
880
881  Code getRows_,
882\layout LyX-Code
883
884  Code getColumns_,
885\layout LyX-Code
886
887  Code getCell_,
888\layout LyX-Code
889
890  Code getRow_,
891\layout LyX-Code
892
893  Code getColumn_
894\layout LyX-Code
895
896};
897\layout Enumerate
898
899
900\emph on
901Code getRows_
902\emph default
903 : Función TOL declarada como
904\family typewriter
905Real (VMatrix v)
906\family default
907.
908 Devuelve el número de filas.
909 
910\layout Enumerate
911
912
913\emph on
914Code getColumns_
915\emph default
916: Función TOL declarada como
917\family typewriter
918Real (VMatrix v)
919\family default
920.
921 Devuelve el número de columnas.
922\layout Enumerate
923
924
925\emph on
926Code getCell_
927\emph default
928: Función TOL declarada como
929\family typewriter
930Real (VMatrix v, Real i, Real j)
931\family default
932.
933 Devuelve el valor de la celda situada en la intersección de la fila i-ésima
934 y la columna j-ésima.
935 Puede ser útil en algoritmos que precisen de acceso aleatorio a una celda
936 en particular.
937\layout Enumerate
938
939
940\emph on
941Code getRow_
942\emph default
943: Función TOL declarada como
944\family typewriter
945Real (VMatrix v, Real i)
946\family default
947.
948 Devuelve una matriz vector fila llena.
949 Se utilizará ampliamente en métodos virtuales de suma y multiplicación
950 de matrices.
951\layout Enumerate
952
953
954\emph on
955Code getColumn_
956\emph default
957: Función TOL declarada como
958\family typewriter
959Real (VMatrix v, Real j)
960\family default
961.
962 Devuelve una matriz vector columna llena.
963 Se utilizará ampliamente en métodos virtuales de suma y multiplicación
964 de matrices.
965\layout Standard
966
967Cuando los métodos de cálculo, este tipo de matriz podría acelerarse de
968 forma opcional utilizando caché en disco para almacenar los resultados
969 obtenidos y no voler a repetir dichos cálculos.
970\layout Paragraph
971
972Ejemplo
973\layout Standard
974
975En cualquier problema de regresión o interpolación de fenómenos en el espacio-ti
976empo aparecen facilmente matrices gigantescas que en realidad dependen de
977 tan sólo las coordenadas espaciales, pongamos
978\begin_inset Formula $\left(x,y,z\right)$
979\end_inset
980
981 en el espacio tridimensional, y el momento
982\begin_inset Formula $t$
983\end_inset
984
985 en el que sucede el fenómeno estudiado, que podemos representar como una
986 función
987\begin_inset Formula $u\left(x,y,z,t\right)$
988\end_inset
989
990, que puede ser escalar o vectorial, y de la cual se conoce un conjunto
991 de observaciones
992\begin_inset Formula $\left\{ u_{n}=u\left(x_{n},y_{n},z_{n},t_{n}\right)\right\} _{n=1\ldots N}$
993\end_inset
994
995, de las cuales queremos extraer una fórmula de interpolación que permita
996 calcular su valor en un punto arbitrario del espacio-tiempo.
997\layout Standard
998
999Las familias típicas de funciones básicas de interpolación son los polinomios,
1000 bien en la forma simple de monomios separados
1001\begin_inset Formula $\{1,x,x^{2},...\},\{1,x,y,x^{2},xy,y^{2},...\}$
1002\end_inset
1003
1004, bien ortogonalizados (Hermite, Chebychev, ...).
1005 Otra familia típica, usada cuando el fenómeno tiene cierta estructura periódica
1006, es la familia harmónica de sinusoidales (series de Fourier)
1007\layout Standard
1008
1009
1010\begin_inset Formula $\{1\},\{ sin\left(jx2\pi\right),cos\left(jx2\pi\right)\}_{j=1,2,3,\ldots},$
1011\end_inset
1012
1013
1014\layout Standard
1015
1016
1017\begin_inset Formula $\{1\},\{ sin\left(\left(jx+ky\right)2\pi\right),cos\left(\left(jx+ky\right)2\pi\right)\}_{j,k=1,2,3,\ldots},$
1018\end_inset
1019
1020...
1021 
1022\layout Standard
1023
1024En el caso concreto de los fenómenos meteorológicos, las estructuras periódicas
1025 (ondas) aparecen en el tiempo y en las coordenadas de longitud y latitud
1026 
1027\begin_inset Formula $\left(x,y\right)$
1028\end_inset
1029
1030 de forma no necesariamente independiente del tiempo, mientras que en la
1031 altura la periodicidad se diluye debido al pequeño espesor relativo de
1032 la atmósfera.
1033 Por esta razón se tomará una matriz e regresión como la expuesta a continuación
1034 para hallar la función de interpolación, una vez obtenidos los valores
1035 
1036\begin_inset Formula $\left\{ x_{n},y_{n},z_{n},t_{n}\right\} _{n=1\ldots N}$
1037\end_inset
1038
1039, para los que supondremos que
1040\begin_inset Formula $x_{n},y_{n},t_{n}$
1041\end_inset
1042
1043, están normalizados en el intervalo
1044\begin_inset Formula $\left[0,1\right]$
1045\end_inset
1046
1047,
1048\layout LyX-Code
1049
1050Matrix input  = Group("ConcatColumns",
1051\layout LyX-Code
1052
1053  SetOfMatrix
1054\layout LyX-Code
1055
1056  (
1057\layout LyX-Code
1058
1059    1,
1060\layout LyX-Code
1061
1062    z,
1063\layout LyX-Code
1064
1065    RPow(z,2)
1066\layout LyX-Code
1067
1068  )<<
1069\layout LyX-Code
1070
1071  BinGroup("<<",For(1,OrderT,Set(Real i)
1072\layout LyX-Code
1073
1074  {
1075\layout LyX-Code
1076
1077    BinGroup("<<",For(1,OrderX,Set(Real j)
1078\layout LyX-Code
1079
1080    {
1081\layout LyX-Code
1082
1083      For(1,OrderY,Matrix(Real k)
1084\layout LyX-Code
1085
1086      {
1087\layout LyX-Code
1088
1089        Matrix ti = RProd(t, 2*Pi*i);
1090\layout LyX-Code
1091
1092        Matrix xj = RProd(x, 2*Pi*j);
1093\layout LyX-Code
1094
1095        Matrix yk = RProd(y, 2*Pi*k);
1096\layout LyX-Code
1097
1098        Sin(ti+xj+yk) | Cos(ti+xj+yk)
1099\layout LyX-Code
1100
1101      })
1102\layout LyX-Code
1103
1104    }))
1105\layout LyX-Code
1106
1107  }))
1108\layout LyX-Code
1109
1110);
1111\layout Standard
1112
1113Cuando se precisa un nivel de detalle muy fino, los tamaños de las series
1114 de Fourier (
1115\family typewriter
1116OrderT
1117\family default
1118,
1119\family typewriter
1120 OrderX
1121\family default
1122y
1123\family typewriter
1124 OrderY
1125\family default
1126) han de hacerse mayores y el tamaño total de la matriz
1127\family typewriter
11283+OrderT*OrderX*OrderY
1129\family default
1130se puede hacer excesivo y superar facilmente la RAM disponible en la computadora
1131, teniendo en cuenta que el número de observaciones es de cientos de miles
1132 al día, y es conveniente hacer la interpolación con los datos de al menos
1133 un día, para asegurar un recubrimiento geográfico suficiente, debido a
1134 la heterogeneidad de frecuencias de las observaciones emitidas por las
1135 diferentes estaciones meteorológicas.
1136\layout Standard
1137
1138Sin embargo, para los cálculos de la regresión no es necesario mantener
1139 en memoria toda la matriz al mismo tiempo sino que sólo necesitamos tener
1140 cada columna por separado, por lo que se puede definir del siguiente modo
1141 en TOL
1142\layout LyX-Code
1143
1144//Estructura de parámetros de definición de la matriz virtual
1145\layout LyX-Code
1146
1147Struct MeteoParamDef
1148\layout LyX-Code
1149
1150{
1151\layout LyX-Code
1152
1153  Real   numObs_,
1154\layout LyX-Code
1155
1156  Real   orderX_,
1157\layout LyX-Code
1158
1159  Real   orderY_,
1160\layout LyX-Code
1161
1162  Real   orderT_,
1163\layout LyX-Code
1164
1165  Matrix x_,
1166\layout LyX-Code
1167
1168  Matrix y_,
1169\layout LyX-Code
1170
1171  Matrix z_,
1172\layout LyX-Code
1173
1174  Matrix t_
1175\layout LyX-Code
1176
1177};
1178\layout LyX-Code
1179
1180\layout LyX-Code
1181
1182//Función de creación de la matriz virtual
1183\layout LyX-Code
1184
1185Set MeteoInput(MeteoParamDef param)
1186\layout LyX-Code
1187
1188{
1189\layout LyX-Code
1190
1191  VMatrix
1192\layout LyX-Code
1193
1194  (
1195\layout LyX-Code
1196
1197    "Scan",
1198\layout LyX-Code
1199
1200    param,
1201\layout LyX-Code
1202
1203    VMatrixScanner
1204\layout LyX-Code
1205
1206    {
1207\layout LyX-Code
1208
1209      Real getRows(VMatrix this) { this->param->numObs_ },
1210\layout LyX-Code
1211
1212      Real getCols(VMatrix this)
1213\layout LyX-Code
1214
1215      {
1216\layout LyX-Code
1217
1218        3
1219\family typewriter
1220+
1221\family default
1222this->param->o
1223\family typewriter
1224rderT
1225\family default
1226_
1227\family typewriter
1228*
1229\layout LyX-Code
1230
1231          this->param->o
1232\family typewriter
1233rderX
1234\family default
1235_
1236\family typewriter
1237*
1238\layout LyX-Code
1239
1240          this->param->o
1241\family typewriter
1242rderY
1243\family default
1244_
1245\layout LyX-Code
1246
1247      },
1248\layout LyX-Code
1249
1250      getCell=UnknownCode, //No se precisa este método
1251\layout LyX-Code
1252
1253      getRow =UnknownCode, //No se precisa este método
1254\layout LyX-Code
1255
1256      Matrix getColumn(VMatrix this, Real col)
1257\layout LyX-Code
1258
1259      {
1260\layout LyX-Code
1261
1262        If(col<=3, RPow(this->param->z_,col),
1263\layout LyX-Code
1264
1265        {
1266\layout LyX-Code
1267
1268          Real   nx  = this->param->o
1269\family typewriter
1270rderX
1271\family default
1272_;
1273\layout LyX-Code
1274
1275          Real   ny  = this->param->o
1276\family typewriter
1277rder
1278\family default
1279Y_;
1280\layout LyX-Code
1281
1282          Real   nt  = this->param->o
1283\family typewriter
1284rder
1285\family default
1286T_;
1287\layout LyX-Code
1288
1289          Real   nxy = nx*ny;
1290\layout LyX-Code
1291
1292          Real   c0  = col-3;
1293\layout LyX-Code
1294
1295          Real   i   = Floor(c0/nxy);
1296\layout LyX-Code
1297
1298          Real   c1  = c0-i*nxy
1299\layout LyX-Code
1300
1301          Real   j   = Floor(c1/ny);
1302\layout LyX-Code
1303
1304          Real   c2  = c1-j*nx;
1305\layout LyX-Code
1306
1307          Real   k   = Floor(c/2);
1308\layout LyX-Code
1309
1310          Real   sc  = c2-k;
1311\layout LyX-Code
1312
1313          Matrix ti  = RProd(this->param->t, 2*Pi*i);
1314\layout LyX-Code
1315
1316          Matrix xj  = RProd(this->param->x, 2*Pi*j);
1317\layout LyX-Code
1318
1319          Matrix yk  = RProd(this->param->y, 2*Pi*k);
1320\layout LyX-Code
1321
1322          If(!sc, Sin(ti+xj+yk),Cos(ti+xj+yk))
1323\layout LyX-Code
1324
1325        }
1326\layout LyX-Code
1327
1328      }
1329\layout LyX-Code
1330
1331    },
1332\layout LyX-Code
1333
1334    Set properties=Empty
1335\layout LyX-Code
1336
1337  )
1338\layout LyX-Code
1339
1340};
1341\layout Subsection
1342
1343Sparse
1344\layout Standard
1345
1346Una matriz "Sparse
1347\begin_inset Quotes erd
1348\end_inset
1349
1350 es la que por tener una gran cantidad de ceros se define implícitamente
1351 de forma que sólo hay que especificar los valores no nulos.
1352 
1353\layout LyX-Code
1354
1355Set d4 = VMatrix("Sparse", [["SUBTYPE", S_1, S_2, ..., S_k]], Empty, Set properties
1356));
1357\layout Standard
1358
1359No es necesario implementar métodos de acceso particulares pues el propio
1360 objeto sparse-matrix ya los proporciona.
1361 Existen muchos subtipos de matriz sparse atendiendo al método de especificación
1362, por ello una matriz "sparse" se define mediante un conjunto
1363\begin_inset Quotes erd
1364\end_inset
1365
1366param
1367\begin_inset Quotes erd
1368\end_inset
1369
1370 donde el primer elemento especifica un tipo de "sparsidad" y los elementos
1371 restantes definen los valores distintos de cero.
1372 Se tienen los tipos de matrices "sparse":
1373\layout Enumerate
1374
1375"DIAG" : matriz diagonal densa por bloques.
1376\layout Enumerate
1377
1378"SDIAG" : matriz diagonal "sparse" por bloques.
1379\layout Enumerate
1380
1381"ROW" : matriz fila densa por bloques.
1382\layout Enumerate
1383
1384"SROW" : matriz fila "sparse" por bloques.
1385\layout Enumerate
1386
1387"COL" : matriz columna densa por bloques.
1388\layout Enumerate
1389
1390"SCOL" : matriz columna "sparse" por bloques.
1391\layout Enumerate
1392
1393"TRIPLET" : matriz rectangular "sparse" por bloque dada por coordenadas
1394 de
1395\layout Enumerate
1396
1397bloques.
1398\layout Standard
1399
1400La forma de los elementos S_i depende del tipo "sparsidad" "SUBTYPE" y hacen
1401 referencia a submatrices o bloques.
1402 Un bloque puede ser:
1403\layout Enumerate
1404
1405Un valor escalar : Real.
1406\layout Enumerate
1407
1408Una matriz densa : Matrix.
1409\layout Enumerate
1410
1411Una matriz sparse : Set [["SUBTYPE", S_1, S_2, ..., S_k]] (permite definicion
1412 recursiva).
1413\layout Enumerate
1414
1415Una matriz virtual : VMatrix (también permite definicion recursiva aún más
1416 genérica).
1417\layout Standard
1418
1419En realidad bastaría con el último caso pues engloba al resto pero se dan
1420 el resto de opciones para evitar expresiones demasiado engorrosas.
1421 En adelante una submatriz o bloque se denominara BLOCK.
1422 Para cada block B,m(B) nos da la cantidad de filas del bloque; y n(B),
1423 la cantidad de columnas del bloque.
1424 Por simplicidad de notacion se puede usar m_i, n_i para denotar la cantidad
1425 de filas y columnas del bloque i-esimo cuando el referido bloque quede
1426 claro en el contexto.
1427\layout Standard
1428
1429Especificamos ahora para cada tipo la forma de lo elementos S_i.
1430\layout Subsubsection
1431
1432Subtype "DIAG"
1433\layout Standard
1434
1435El tipo "DIAG" define una matriz diagonal por bloque que se obtiene al concatena
1436r en diagonal cada uno de los bloques S_i.
1437 El bloque S_1 comienza en la coordenada (1,1).
1438 Si la diagonal principal de S_i termina en las coordenadas (d_i,d_i), d_i
1439 = min(m_i,n_i), entonces el bloque S_{i+1} comienza en la coordenada (di+1,di+1
1440).
1441\layout Subsubsection
1442
1443Subtype "SDIAG"
1444\layout Standard
1445
1446El tipo "SDIAG" define una matriz diagonal "sparse" por bloque que se obtiene
1447 de colocar cada bloque en sus coordenadas diagonal especificada.
1448 La forma de S_i es {d_i, B_i}.
1449 El bloque B_i se coloca a partir de las coordenadas (d_i,d_i).
1450\layout Subsubsection
1451
1452Subtype "ROW"
1453\layout Standard
1454
1455El tipo "ROW" define una matriz fila por bloques que se obtiene de concatenar
1456 horizontalmente cada uno de los bloques S_i.
1457 El bloque S_1 comienza en la coordenada (1,1).
1458 El bloque S_{i+1} comienza en las coordenadas (1,n_i+1).
1459\layout Subsubsection
1460
1461Subtype "SROW"
1462\layout Standard
1463
1464El tipo "SROW" define una matriz fila "sparse" por bloque que se obtiene
1465 de colocar cada bloque en sus coordenadas de fila especificada.
1466 La forma de S_i es {n_i, B_i}.
1467 El bloque B_i se coloca a partir de las coordenadas (1,n_i).
1468\layout Subsubsection
1469
1470Subtype "COL"
1471\layout Standard
1472
1473El tipo "COL" define una matriz columna por bloques que se obtiene deconcatenar
1474 verticalmente cada uno de los bloques S_i.
1475 El bloque S_1 comienza en la coordenada (1,1).
1476 El bloque S_{i+1} comienza en las coordenadas (m_i+1,1).
1477\layout Subsubsection
1478
1479Subtype "SCOL"
1480\layout Standard
1481
1482El tipo "SCOL" define una matriz fila "sparse" por bloque que se obtiene
1483 de colocar cada bloque en sus coordenadas de columna especificada.
1484 La forma de S_i es {m_i, B_i}.
1485 El bloque B_i se coloca a partir de las coordenadas (m_i,1).
1486\layout Subsubsection
1487
1488Subtype "TRIPLET"
1489\layout Standard
1490
1491El tipo "TRIPLET" define una matriz rectangular "sparse" por bloque que
1492 se obtiene de colocar cada bloque en las coordenadas rectangulares especificada
1493s.
1494 La forma de S_i es {m_i, n_i, B_i}.
1495 El bloque B_i se coloca a partir de las coordenadas (m_i, n_i).
1496\layout Subsection
1497
1498Displacement
1499\layout Standard
1500
1501Las matrices con estructura de desplazamiento son tipos muy especiales de
1502 matrices que, aún pudiendo ser normalemente matrices llenas, son definibles
1503 mediante muy pocos parámetros,
1504\begin_inset Formula $O\left(n=rows+columns\right)$
1505\end_inset
1506
1507 en lugar de
1508\begin_inset Formula $O\left(rows\times columns\right)$
1509\end_inset
1510
1511; y para los que se cuenta con algoritmos de multiplicación, inversión o
1512 regresión super rápidos con órdenes superlineales
1513\begin_inset Formula $O\left(nlog^{h}n\right)$
1514\end_inset
1515
1516 (
1517\shape italic
1518superfast methods
1519\shape default
1520), casi todos ellos relacionados con el algoritmo de Schur, la transformada
1521 rápida de Fourier y con métodos de interpolación y regresión en general.
1522 También existen métodos de resolución de sistemas lineales arbitrarios
1523 basados en precondicionadores con estructura de desplazamiento que aceleran
1524 la solución de problemas genéricos, lo cual hace aún más interesante contar
1525 con est
1526\layout Standard
1527
1528Existen multitud de subtipos de matrices con estructura de desplazamiento
1529 que se irán introduciendo conforme se hagan necesarias: Toeplitz, Hankel,
1530 Circulant, Cauchy, Vandermonde, Toeplitz-like, Cauchy-like, Toeplitz+Henkel-lik
1531e, etc
1532\layout LyX-Code
1533
1534Set d = VMatrix("Displacement", [["SUBTYPE", param1, param2, ...]], Empty,
1535 Set properties));
1536\layout Standard
1537
1538No es necesario en estos casos implementar métodos de acceso particulares.
1539\layout Subsubsection
1540
1541Subtype
1542\begin_inset Quotes erd
1543\end_inset
1544
1545Toeplitz
1546\begin_inset Quotes erd
1547\end_inset
1548
1549
1550\layout Standard
1551
1552Una matriz de tipo "Toeplitz
1553\begin_inset Quotes erd
1554\end_inset
1555
1556 es la que se define implícitamente mediante los elementos comunes de cada
1557 diagonal principal, o sea que
1558\begin_inset Formula $T_{i,j}=t_{i-j}$
1559\end_inset
1560
1561.
1562\layout LyX-Code
1563
1564Set d1 = VMatrix("Displacement", [["Toeplitz", Polyn  t]], Empty, Set properties
1565);
1566\layout LyX-Code
1567
1568\layout Standard
1569
1570El coeficiente de grado cero se refiere a la diagonal principal central,
1571 los coeficientes de los monomios con grado negativo (F) se corresponden
1572 a las diagonales principales por debajo de la diagonal principal central,
1573 y los de grado positivo (B) a las diagonales principales superiores.
1574\layout Standard
1575
1576Este tipo de matrices serán especialmente útiles para la definición de matrices
1577 de espacio de estado de modelos que involucren procesos ARMA o VARMA, así
1578 como matrices de covarianzas de procesos estacionarios, etc.
1579 
1580\layout Subsubsection
1581
1582Subtype
1583\begin_inset Quotes erd
1584\end_inset
1585
1586Hankel
1587\begin_inset Quotes erd
1588\end_inset
1589
1590
1591\layout Standard
1592
1593Una matriz de tipo "Hankel
1594\begin_inset Quotes erd
1595\end_inset
1596
1597 es la que se define implícitamente mediante los elementos comunes de cada
1598 diagonal secundaria, o sea que
1599\begin_inset Formula $T_{i,j}=t_{i+j}$
1600\end_inset
1601
1602.
1603\layout LyX-Code
1604
1605Set d1 = VMatrix("Displacement", [["Hankel", Polyn  t]], Empty, Set properties);
1606\layout Standard
1607
1608La definición a partir del polinomio son análogos a los de la matriz de
1609 Toeplitz.
1610 Aparece de foma más rara pero no involucra apenas coste pues casi todos
1611 los métodos de las matrices de Toeplitz son facilmente asimilables para
1612 las matrices de Hankel.
1613\the_end
Note: See TracBrowser for help on using the repository browser.