35 #ifndef __PDSMATRIX_H__ 36 #define __PDSMATRIX_H__ 44 #include <pds/pdsraglobal.h> 45 #include <pds/pdsvector.h> 46 #include <pds/pdsregionrect.h> 1020 #define PDS_MSET(Matrix,X,Y,m) pds_matrix_set_value(Matrix,X,Y,m) 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
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...
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...
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 .
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...
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...
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:...
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...