Home | Develop | Download | Contact
pdsmatrix.h
1 /*
2  * pdsmatrix.h
3  *
4  * Copyright 2011 Fernando Pujaico Rivera <fernando.pujaico.rivera@gmail.com>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19  * MA 02110-1301, USA.
20  *
21  */
22 
35 #ifndef __PDSMATRIX_H__
36 #define __PDSMATRIX_H__
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
42 #include <stdio.h>
43 #include <stdlib.h>
44 #include <pds/pdsraglobal.h>
45 #include <pds/pdsvector.h>
46 #include <pds/pdsregionrect.h>
47 
59 #ifndef PDS_OK
60 
64  #define PDS_OK 1
65 #endif
66 
67 #ifndef PDS_WRONG
68 
72  #define PDS_WRONG 0
73 #endif
74 
75 
76 
84 typedef struct
85 {
92 }PdsMatrix;
93 
107 
108 
118 
126 
127 
139 PdsMatrix *pds_matrix_new_load_data(const char* datafile);
140 
142 
164 
165 
176 int pds_matrix_copy_vector_col(PdsMatrix *Matrix,const PdsVector *VecSrc,PdsRaNatural col);
177 
178 
189 int pds_matrix_copy_vector_lin(PdsMatrix *Matrix,const PdsVector *VecSrc,PdsRaNatural lin);
190 
191 
204 
205 
220 
222 
238 
239 
249 int pds_matrix_init_matrix(PdsMatrix *Matrix,const PdsMatrix *MatSrc);
250 
251 
259 int pds_matrix_init_value(PdsMatrix *Matrix,PdsRaReal Val);
260 
268 int pds_matrix_init_rand(PdsMatrix *Matrix);
269 
279 
280 
282 
298 
299 
309 int pds_matrix_add_matrix(PdsMatrix *Matrix,const PdsMatrix *MatSrc);
310 
311 
319 int pds_matrix_add_value(PdsMatrix *Matrix,PdsRaReal Val);
320 
321 
331 int pds_matrix_sub_matrix(PdsMatrix *Matrix,const PdsMatrix *MatSrc);
332 
333 
343 int pds_matrix_mul_matrix_elements(PdsMatrix *Matrix,const PdsMatrix *MatSrc);
344 
345 
361 int pds_matrix_mul_matrix(PdsMatrix *Matrix,const PdsMatrix *MatSrc1,const PdsMatrix *MatSrc2);
362 
363 
373 PdsMatrix *pds_matrix_mul_matrix_new(const PdsMatrix *MatSrc1,const PdsMatrix *MatSrc2);
374 
375 
387 int pds_matrix_mul_vector(PdsVector *A,const PdsMatrix *M,const PdsVector *V);
388 
389 
401 
402 
410 int pds_matrix_mul_value(PdsMatrix *Matrix,PdsRaReal Val);
411 
412 
422 
423 
433 int pds_matrix_transpose(PdsMatrix *Mt,const PdsMatrix *M);
434 
447 int pds_matrix_inverse_matrix(const PdsMatrix *Matrix, PdsMatrix *MatInv);
448 
449 
461 
462 
464 
480 
481 
493 
494 
510 
511 
529 
530 
546 int pds_matrix_reduced_matrix(const PdsMatrix *Matrix, PdsMatrix *MatReduced);
547 
549 
567 int pds_matrix_mean(const PdsMatrix *Mat, PdsRaReal *mean);
568 
580 int pds_matrix_std(const PdsMatrix *Mat, PdsRaReal *std);
581 
596 int pds_matrix_std_and_mean(const PdsMatrix *Mat, PdsRaReal *std, PdsRaReal *mean);
597 
611 int pds_matrix_corr_matrix(const PdsMatrix *M0,const PdsMatrix *M1, PdsRaReal *pcc);
612 
613 
614 
628 
629 
643 
660 
661 
662 
701 
702 
704 
721 
722 
738 
739 
754 
755 
770 
771 
773 
786 int pds_matrix_printf(const PdsMatrix *Matrix);
787 
788 
796 int pds_matrix_fprintf(const PdsMatrix *Matrix,FILE *fd);
797 
798 
808 int pds_matrix_fscanf(PdsMatrix *Matrix, FILE *fd);
809 
810 
819 int pds_matrix_fwrite(PdsMatrix *Matrix, FILE *fd);
820 
821 
830 int pds_matrix_fread(PdsMatrix *Matrix, FILE *fd);
831 
832 
834 
851 int pds_matrix_save_rgb_bmp(const PdsMatrix *R,const PdsMatrix *G,const PdsMatrix *B,const char *bmpfilename);
852 
853 
866 int pds_matrix_save_grayscale_bmp(const PdsMatrix *Mat,const char *bmpfilename);
867 
868 
882 int pds_matrix_save_bmp_with_colormap(const PdsMatrix *Mat,const char *bmpfilename,const unsigned char colormap[256][3]);
883 
884 
904 int pds_matrix_octave_surf(const PdsMatrix *M,const char *labelx,const char *labely,const char *labelz,const char *octfile,const char *imgfile);
905 
906 
908 
927 
935 int pds_matrix_get_nlines(const PdsMatrix *Matrix, PdsRaNatural *Nlines);
936 
937 
945 int pds_matrix_get_ncolumns(const PdsMatrix *Matrix, PdsRaNatural *Ncolumns);
946 
955 
956 
965 int pds_matrix_get_min_value(const PdsMatrix *Matrix, PdsRaReal *m);
966 
967 
981 
982 
991 int pds_matrix_get_max_value(const PdsMatrix *Matrix, PdsRaReal *m);
992 
993 
1007 
1009 
1020 #define PDS_MSET(Matrix,X,Y,m) pds_matrix_set_value(Matrix,X,Y,m)
1021 
1034 
1035 
1037 
1051 
1062 int pds_matrix_is_quasiequal (PdsMatrix *M1,PdsMatrix *M2,double u);
1063 
1064 
1077 
1078 
1092 int pds_matrix_is_quasidiagonal (PdsMatrix *M1,double u);
1093 
1105 
1119 
1121 
1122 
1134 void pds_matrix_free(PdsMatrix *Matrix);
1135 
1136 
1143 void pds_matrix_destroy(PdsMatrix **Matrix);
1144 
1146 
1151 #ifdef __cplusplus
1152 }
1153 #endif
1154 
1155 #endif
1156 
int pds_matrix_mean_of_region(const PdsMatrix *Mat, PdsRegionRect Rin, PdsRaReal *mean)
Calcula la media de los elementos de la intersecion de la region con la matriz. mean=MEAN{Mat II Rin...
unsigned int PdsRaNatural
Definition: pdsraglobal.h:59
int pds_matrix_add_value(PdsMatrix *Matrix, PdsRaReal Val)
Suma a la matriz de tipo puntero PdsMatrix un valor. Matrix=Matrix+Val.
PdsMatrix * pds_matrix_new_matrix(const PdsMatrix *MatSrc)
Crea una matriz de tipo PdsMatrix a partir de la matriz MatSrc.
int pds_matrix_init_value(PdsMatrix *Matrix, PdsRaReal Val)
Inicia la matriz de tipo puntero PdsMatrix con un valor. Matrix=Val.
int pds_matrix_row_div_factor(PdsMatrix *Matrix, PdsRaNatural r1, PdsRaReal factor)
Divide la linea r1 por un factor y el resulltado lo carga a linea r1. Matrix{r1}=Matrix{r1}/factor.
int pds_matrix_corr_matrix(const PdsMatrix *M0, const PdsMatrix *M1, PdsRaReal *pcc)
Calcula el coeficiente de correlación de Pearson (PCC) entre dos matrices. PCC=corr{M0,M1}.
int pds_matrix_octave_surf(const PdsMatrix *M, const char *labelx, const char *labely, const char *labelz, const char *octfile, const char *imgfile)
Imprime una matriz M en un archivo de imagen usando como intermedio un archivo *.m de octave...
int pds_matrix_save_grayscale_bmp(const PdsMatrix *Mat, const char *bmpfilename)
Escribe los datos de una matriz en un archivo de en formato BMP.
PdsMatrix * pds_matrix_new(PdsRaNatural Nlin, PdsRaNatural Ncol)
Crea una matriz de tipo PdsMatrix e inicia con cero todos los elementos.
int pds_matrix_fscanf(PdsMatrix *Matrix, FILE *fd)
Inicializa una matriz con los datos del archivo apuntado por fd. Usa TAB o un salto de linea como del...
PdsRaReal ** M
Definition: pdsmatrix.h:87
int pds_matrix_get_nlines(const PdsMatrix *Matrix, PdsRaNatural *Nlines)
Devuelve el número de lineas de la matriz Matrix.
int pds_matrix_inverse_matrix(const PdsMatrix *Matrix, PdsMatrix *MatInv)
Invierte la matriz Matrix y la guarda en MatInv. Ambas matrices deben existir y tener el mismo tamanh...
int pds_matrix_copy_vector_col(PdsMatrix *Matrix, const PdsVector *VecSrc, PdsRaNatural col)
Copia vector VecSrc en la columna col de la matriz Matrix. Si los tamaños son diferentes intersecta l...
int pds_matrix_row_add_row_factor(PdsMatrix *Matrix, PdsRaNatural r1, PdsRaNatural r2, PdsRaReal factor)
Multiplica la linea r2 por un factor y el resulltado lo resta a linea r1. Matrix{r1}=Matrix{r1}+fact...
int pds_matrix_fprintf(const PdsMatrix *Matrix, FILE *fd)
Imprime en el archivo que apunta fd una matriz de tipo puntero PdsMatrix.
int pds_matrix_is_equal(PdsMatrix *M1, PdsMatrix *M2)
Compara dos matrices.
int pds_matrix_std_and_mean_of_region(const PdsMatrix *Mat, PdsRegionRect Rin, PdsRaReal *std, PdsRaReal *mean)
Calcula el desvío padrón y la media de los elementos de la intersección de la región con la matriz...
int pds_matrix_set_value(PdsMatrix *Matrix, PdsRaNatural x, PdsRaNatural y, PdsRaReal m)
Escribe el valor en la posición (x,y) de la matriz Matrix. En caso de que (x,y) estuvieran fuera de r...
PdsRaNatural Nlin
Definition: pdsmatrix.h:89
int pds_matrix_save_bmp_with_colormap(const PdsMatrix *Mat, const char *bmpfilename, const unsigned char colormap[256][3])
Escribe los datos de una matriz en un archivo de en formato BMP.
void pds_matrix_destroy(PdsMatrix **Matrix)
Libera una matriz de tipo puntero PdsMatrix, y limpia el puntero con NULL.
int pds_matrix_is_quasidiagonal(PdsMatrix *M1, double u)
Verifica si una matriz es casi diagonal. Usa un umbral u, qualquier valor menor o igual que u es cons...
int pds_matrix_std(const PdsMatrix *Mat, PdsRaReal *std)
Calcula el desvío padrón de los elementos de la matriz. std=STD{Mat}.
PdsMatrix * pds_matrix_mtm_ai_new(const PdsMatrix *M, PdsRaReal Alpha)
Genera M^T*M + Alpha*I.
int pds_matrix_init_region(PdsMatrix *Matrix, PdsRegionRect R, PdsRaReal val)
Inicializa la región R de matriz Matrix con el valor val.
int pds_matrix_init_matrix(PdsMatrix *Matrix, const PdsMatrix *MatSrc)
Inicia la matriz de tipo puntero PdsMatrix con una matriz. Si los tamaños son diferentes intersecta l...
int pds_matrix_copy_region_to_region(PdsMatrix *M1, PdsRegionRect R1, const PdsMatrix *M0, PdsRegionRect R0)
Copia la región R0 de la matriz M0 a la región R1 de la matriz M1.
int pds_matrix_fread(PdsMatrix *Matrix, FILE *fd)
Inicializa una matriz con los datos del archivo binario apuntado por fd.
int pds_matrix_mul_matrix(PdsMatrix *Matrix, const PdsMatrix *MatSrc1, const PdsMatrix *MatSrc2)
Multiplica la matriz MatSrc1 (Nlin1xNcol1) con la matriz MatSrc2 (Nlin2xNcol2) y lo carga en Matrix (...
PdsMatrix * pds_matrix_mtm_new(const PdsMatrix *M)
Genera M^T*M.
int pds_matrix_reduced_matrix(const PdsMatrix *Matrix, PdsMatrix *MatReduced)
Reduce la matriz Matrix y la guarda en MatReduced. MatReduced=Reduced{Matrix}.
PdsMatrix * pds_matrix_mul_matrix_new(const PdsMatrix *MatSrc1, const PdsMatrix *MatSrc2)
Multiplica la matriz MatSrc1 (Nlin1xNcol1) con la matriz MatSrc2 (Nlin2xNcol2) y devuelve una matriz ...
int pds_matrix_mul_matrix_elements(PdsMatrix *Matrix, const PdsMatrix *MatSrc)
Multiplica la matriz de tipo puntero PdsMatrix con una matriz MatSrc elemento a elemento y lo carga e...
int pds_matrix_is_antisymetric(PdsMatrix *M1)
Verifica si una matriz es anti simétrica.
int pds_matrix_row_mul_factor(PdsMatrix *Matrix, PdsRaNatural r1, PdsRaReal factor)
Multiplica la linea r1 por un factor y el resulltado lo carga a linea r1. Matrix{r1}=Matrix{r1}*fact...
Estructura de tipo PdsVector .
Definition: pdsvector.h:80
int pds_matrix_init_identity(PdsMatrix *Matrix, PdsRaReal Val)
Inicia la matriz de tipo puntero PdsMatrix con una diagonal de valor Val y llena el resto de ceros...
La estructura tipo PdsRegionRect . Esta estructura genera unnumero complejo. Para usar incluir pdsreg...
Definition: pdsregionrect.h:69
float PdsRaReal
Definition: pdsraglobal.h:49
int pds_matrix_get_max_value(const PdsMatrix *Matrix, PdsRaReal *m)
Devuelve el valor máximo de los elementos de la matriz Matrix.
int pds_matrix_mul_value(PdsMatrix *Matrix, PdsRaReal Val)
Multiplica a la matriz de tipo puntero PdsMatrix por un valor. Matrix=Val*Matrix.
int pds_matrix_is_quasiequal(PdsMatrix *M1, PdsMatrix *M2, double u)
Compara dos matrices, y verifica si la diferencia absoluta de cada elemento es menor que un umbral u...
int pds_matrix_get_max_value_and_pos(const PdsMatrix *Matrix, PdsRaReal *m, PdsRaNatural *lin, PdsRaNatural *col)
Devuelve el valor máximo de los elementos de la matriz Matrix.
int pds_matrix_get_min_value(const PdsMatrix *Matrix, PdsRaReal *m)
Devuelve el valor mínimo de los elementos de la matriz Matrix.
PdsVector * pds_matrix_mul_vector_new(const PdsMatrix *M, const PdsVector *V)
Multiplica la matriz M con el vector V y devuelve un vector A. A=M*V.
int pds_matrix_save_rgb_bmp(const PdsMatrix *R, const PdsMatrix *G, const PdsMatrix *B, const char *bmpfilename)
Escribe los datos de una matriz en un archivo de en formato BMP.
La estructura tipo PdsMatrix . Esta estructura genera una matriz de Nlin lineas y Ncol columnas...
Definition: pdsmatrix.h:84
int pds_matrix_get_value(const PdsMatrix *Matrix, PdsRaNatural x, PdsRaNatural y, PdsRaReal *m)
Devuelve el valor en la posición (x,y) de la matriz Matrix. (x,y) inicia con (0,0).
int pds_matrix_linear_least_square(const PdsVector *U, const PdsMatrix *H, PdsVector *Z)
Encuentra Z de modo que intenta satifazer U=HZ. Para conseguir esto usa la siguiente asignación : Z<...
int pds_matrix_get_ncolumns(const PdsMatrix *Matrix, PdsRaNatural *Ncolumns)
Devuelve el número de columnas de la matriz Matrix.
int pds_matrix_add_identity(PdsMatrix *Matrix, PdsRaReal Val)
Suma a la matriz de tipo puntero PdsMatrix con una diagonal de valor Val y suma cero al resto...
int pds_matrix_is_diagonal(PdsMatrix *M1)
Verifica si una matriz es diagonal.
int pds_matrix_init_rand(PdsMatrix *Matrix)
Inicia la matriz de tipo puntero PdsMatrix con valores aleatorios entre 0.0 e 1.0. La función usa internamente la función rand().
int pds_matrix_tikhonov_nolinear_least_square(const PdsVector *U, const PdsMatrix *J, const PdsVector *F, PdsRaReal Alpha, PdsVector *Z)
Encuentra Z iterativamente de modo que intenta satifazer U=F(Z). Usa la siguiente equacion iterativa:...
PdsRaNatural Ncol
Definition: pdsmatrix.h:91
int pds_matrix_mul_vector(PdsVector *A, const PdsMatrix *M, const PdsVector *V)
Multiplica la matriz M con el vector V y devuelve un vector A. A=M*V.
void pds_matrix_free(PdsMatrix *Matrix)
Libera una matriz de tipo puntero PdsMatrix.
PdsMatrix * pds_matrix_new_load_data(const char *datafile)
Crea una nueva matriz e inicia los datos con los elementos de la linea line del archivo datafile...
int pds_matrix_is_symetric(PdsMatrix *M1)
Verifica si una matriz es simétrica.
int pds_matrix_std_of_region(const PdsMatrix *Mat, PdsRegionRect Rin, PdsRaReal *std)
Calcula el desvío padrón de los elementos de la intersección de la región con la matriz. std=STD{Mat II Rin}.
PdsMatrix * pds_matrix_new_rand(PdsRaNatural Nlin, PdsRaNatural Ncol)
Crea una matriz de tipo PdsMatrix e inicializa los elementos con números aleatorios uniformemente dis...
int pds_matrix_get_min_value_and_pos(const PdsMatrix *Matrix, PdsRaReal *m, PdsRaNatural *lin, PdsRaNatural *col)
Devuelve el valor mínimo de los elementos de la matriz Matrix.
int pds_matrix_corr_matrix_of_region(const PdsMatrix *M0, const PdsMatrix *M1, PdsRegionRect R0, PdsRegionRect R1, PdsRaReal *pcc)
Calcula el coeficiente de correlación de Pearson (PCC) entre los elementos de la intersección de la r...
int pds_matrix_sub_matrix(PdsMatrix *Matrix, const PdsMatrix *MatSrc)
Resta la matriz de tipo puntero PdsMatrix con una matriz MatSrc y lo carga en Matrix. Si los tamaños son diferentes intersecta los tamaños y hace la copia en la intersección solamente. Matrix=Matrix-MatSrc.
int pds_matrix_copy_vector_lin(PdsMatrix *Matrix, const PdsVector *VecSrc, PdsRaNatural lin)
Copia vector VecSrc en la linea lin de la matriz Matrix. Si los tamaños son diferentes intersecta los...
int pds_matrix_get_region_rect(const PdsMatrix *Mat, PdsRegionRect *R)
Carga la variable PdsRegionRect desde la posicion (0,0), con ancho y alto (Mat->Nlin,Mat->Ncol).
int pds_matrix_printf(const PdsMatrix *Matrix)
Imprime en pantalla una matriz de tipo puntero PdsMatrix.
PdsMatrix * pds_matrix_transpose_new(const PdsMatrix *M)
Genera la transpuesta de la matriz. Mt=M^T.
int pds_matrix_mean(const PdsMatrix *Mat, PdsRaReal *mean)
Calcula la media de los elementos de la matriz. mean=MEAN{Mat}.
PdsMatrix * pds_matrix_inverse_matrix_new(const PdsMatrix *Matrix)
Invierte la matriz Matrix y la guarda en MatInv. Ambas matrices deben existir y tener el mismo tamanh...
int pds_matrix_swap_rows(PdsMatrix *Matrix, PdsRaNatural r1, PdsRaNatural r2)
Intercambia dos lineas de la matriz Matrix.
int pds_matrix_transpose(PdsMatrix *Mt, const PdsMatrix *M)
Genera la transpuesta de la matriz. Mt=M^T.
int pds_matrix_fwrite(PdsMatrix *Matrix, FILE *fd)
Escribe los datos de una matriz en el archivo binario apuntado por fd.
int pds_matrix_add_matrix(PdsMatrix *Matrix, const PdsMatrix *MatSrc)
Suma la matriz de tipo puntero PdsMatrix con una matriz MatSrc y lo carga en Matrix. Si los tamaños son diferentes intersecta los tamaños y hace la copia en la intersección solamente. Matrix=Matrix+MatSrc.
int pds_matrix_std_and_mean(const PdsMatrix *Mat, PdsRaReal *std, PdsRaReal *mean)
Calcula el desvío padrón y la media de los elementos de la matriz. std=STD{Mat}, mean=MEAN{Mat}...
int pds_matrix_copy_identity(PdsMatrix *Matrix, PdsRaNatural X, PdsRaNatural Y, PdsRaReal Val)
Copia en la matriz Matrix una matriz identidad(Val) en la posicion (X,Y). Si los tamaños son diferent...
int pds_matrix_copy_matrix(PdsMatrix *Matrix, PdsRaNatural X1, PdsRaNatural Y1, const PdsMatrix *MatSrc, PdsRaNatural X2, PdsRaNatural Y2)
Copia en la matriz Matrix en la posicion (X1,Y1) la matriz MatSrc desde la posicion (X2...

Enlaces de interés

HomePage Bazaar Download Bug report Ayuda Developer Feed