Computación Matricial y Paralela1 Algoritmos Numéricos Algoritmos matriciales básicos Almacenamiento de matrices Operaciones básicas con vectores Operaciones.

Slides:



Advertisements
Presentaciones similares
Arreglos Unidimensionales y Bidimensionales ESTRUCTURAS DE DATOS I
Advertisements

UNIVERSIDAD NACIONAL DE INGENIERÍA UNI- NORTE
Tipos de matrices fila opuesta cuadrada nula triangular simétrica
OPERACIONES CON MATRICES
ÁLGEBRA MATRICIAL Y SISTEMAS DE ECUACIONES LINEALES
Ayudantia Python Arreglos 2.
JUAN LUIS CHAMIZO BLÁZQUEZ
MÉTODOS NUMÉRICOS. Explicación del método de L U. Realizado por:
1.- Definiciones. 2.- Fórmulas. 3.- Esquema. 4.- Ejercicios.
Resolución de Sistemas Lineales
TRANSFORMACIONES GEOMÉTRICAS
MATRICES.
ARREGLOS Estructuras de datos.
UPC MATRICES MA49 (EPE) Universidad Peruana de Ciencias Aplicadas
Vectores en java.
MATRICES Concepto Se llama matriz de orden m x n a todo conjunto de elementos aij dispuestos en m líneas horizontales (filas) y n verticales (columnas)
Distinguir y realizar los cálculos con las operaciones matriciales básicas. Las operaciones matriciales permiten el abordaje de los métodos del álgebra.
ALGORITMO DE FLOYD dik + dkj < dij
Informática empresarial
FUNCIONES, MATRICES Y DETERMINANTES
Matrices Es una estructura homogénea, compuesta por varios elementos, todos del mismo tipo y almacenados consecutivamente en memoria A cada elemento se.
MATRICES Y DETERMINANTES.
1 Librería secuencial de Álgebra Lineal Densa LAPACK Domingo Giménez Javier Cuenca Facultad de Informática Universidad de Murcia.
ARREGLOS BIDIMENSIONALES
TABLAS Definición. El tipo tabla permite definir objetos formados por un conjunto de elementos del mismo tipo. Ejemplos. El tipo tabla se utiliza para.
Manejo de Vectores y Matirces
Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación I.
Informática Ingeniería en Electrónica y Automática Industrial
Algebra Lineal.
A esto se le llama ser eficaz Ordenamos y mejoramos la información: A esto se le llama ser eficaz Operamos con matrices Imagen de DieselDemon bajo licencia.
M A T R I C E S MATRICES matrices.
Matrices Conceptos generales
ALGORITMO DE FACTORIZACION DIRECTA.
Matrices Departamento de Computación Escuela de Ingeniería de Sistemas
Algebra Ejemplos de Matrices Ramírez Abascal Guillermina Fabiola.
Multiplicación de matrices
Matrices Una matriz de tamaño n x m es un arreglo de números reales colocados en n filas (o renglones) y m columnas, de la siguiente forma:
Universidad de Murcia1 Algoritmos matriciales por bloques Multiplicación de matrices. BLAS Domingo Giménez Departamento de Informática y Sistemas Universidad.
Introducción a la Programación “Conceptos Básicos” Semestre de Otoño 2006 Claudio Gutiérrez Soto.
Matrices y Determinantes
003 MATRICES MATRICES.
Introducción a la Programación “Conceptos Básicos” Manuel Crisosto M., Claudio Gutiérrez S., Christian Vidal C.
Factorización Directa con pivoteo máximo de columna.
Matrices Prof. Flor Narciso Departamento de Computación
Unidad II Aplicaciones con Arreglos en Java y C++
Método de eliminación de Gauss con pivotamiento
Matrices: Definiciones, matrices especiales y operaciones con matrices
MATRICES.
Resolución de Sistemas Lineales
Matrices y Determinantes
III UNIDAD MATRICES.
Resolución de Sistemas Lineales Introducción. Notación matricial.
MATRICES Y DETERMINANTES
Al finalizar el curso el alumno será capaz de: Diseñar algoritmos utilizando estructuras estáticas de datos y programación modular.
003 MATRICES MATRICES.
Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación I.
Introducción a la Programación Orientada a Objetos Arreglos de 2 dimensiones TDA Matriz Implementar un TDA Matriz que brinde operaciones para calcular.
Algoritmo.
PUNTEROS EN EL LENGUAJE C
Matrices.
Lorena Chavez JESICA BRASSEL
Unidad 2 Matrices.
Matrices. Clasificación. Elaborado por: Bernardina Sánchez Alvarenga.
FUNDAMENTOS DE PROGRAMACIÓN Unidad II. Un array bidimensional o matriz es un conjunto de datos homogéneos (todos del mismo tipo), cada uno de los cuales.
PROF. RAFAEL MONTENEGRO B. UNELLEZ-APURE Introducci Ó n a los Arreglos (“arrays”) en C++
Definición de matriz Se llama matriz de orden m×n a todo conjunto rectangular de elementos a ij dispuestos en m líneas horizontales (filas) y n verticales.
Universidad de Oriente Núcleo Monagas Escuela de Ciencias Sociales y Administrativa Departamento de Contaduría Publica Profesora: Milagros Coraspe Ballicher:
@ Angel Prieto BenitoApuntes 2º Bachillerato C.S.1 MATRICES U.D. 2 * 2º BCS.
Profesora: Milagros Coraspe Realizado por: Almérida, Gissell C.I.: Valladares, Angélica C.I.: Universidad De Oriente Núcleo Monagas.
Transcripción de la presentación:

Computación Matricial y Paralela1 Algoritmos Numéricos Algoritmos matriciales básicos Almacenamiento de matrices Operaciones básicas con vectores Operaciones básicas con matrices Multiplicación de matrices Factorización LU Operaciones con matrices dispersas Trabajo por bloques

Computación Matricial y Paralela2 Almacenamiento de matrices densas En array bidimensional: double a[n][m] En array unidimensional: double *b[n*m] Fila i columna j: a[n][m], b[i*m+j] Cuando es submatriz de otra “Leading dimension”: posiciones de memoria entre dos elementos consecutivos de la misma columna Fila i columna j: c [i*ld+j] c m nn ld

Computación Matricial y Paralela3 Almacenamiento de matrices dispersas Muchas maneras distintas Tres arrays: datos[0,..,d-1], filas[0,..,d-1], columnas[0,..,d-1] datos (1,3,2,4), filas (0,1,2,2), columnas (2,0,1,3) Tres arrays: datos[0,..,d-1], columnas[0,..,d-1], comienzo fila[0,..,n-1] datos (1,3,2,4), columnas (2,0,1,3), com. filas (0,1,2,-1)

Computación Matricial y Paralela4 Operaciones básicas con vectores void escalar_vector(double d,double *v,int n)escalar_vector { int i; for(i=0;i<n;i++) v[i]*=d; } n flops (operaciones en coma flotante) En algoritmos numéricos se estudia el número de flops. En el estudio experimental los flops (Mflops, Gflops) por segundo. En paralelo los flops/segundo/procesador

Computación Matricial y Paralela5 Operaciones básicas con vectores double sumar_vector(double *v,int n)sumar_vector { int i; double s=0.; for(i=0;i<n;i++) s+=v[i]; return s; } n flops

Computación Matricial y Paralela6 Operaciones básicas con vectores void sumar_vectores(double *v1,double *v2,sumar_vectores double *vr,int n) { int i; for(i=0;i<n;i++) vr[i]=v1[i]+v2[i]; } n flops

Computación Matricial y Paralela7 Operaciones básicas con vectores double producto_escalar(double *v1,double *v2,int n)producto_escalar { int i; double p=0.; for(i=0;i<n;i++) p+=v1[i]*v2[i]; return p; } 2n flops

Computación Matricial y Paralela8 Operaciones básicas con matrices void escalar_matriz(double d,double **a,int n,int m)escalar_matriz { int i,j; for(i=0;i<n;i++) for(j=0;j<m;j++) (a[i][j])*=d; } nm, n 2 flops

Computación Matricial y Paralela9 Operaciones básicas con matrices Uso de “stride” de un vector void producto_escalar_stride(double *v1,int str1,producto_escalar_stride double *v2,int str2,int n) { int i; double p=0.; for(i=0;i<n;i++) p+=v1[i*str1]*v2[i*str2]; return p; } 2n flops

Computación Matricial y Paralela10 Operaciones básicas con matrices void sumar_matrices(double *a,int fa,int ca,int lda,sumar_matrices double *b,int fb,int cb,int ldb, double *c,int fc,int cc,int ldc) { int i,j; for(i=0;i<fa;i++) for(j=0;j<ca;j++) c[i*ldc+j]=a[i*lda+j]+b[i*ldb+j]; } n 2 flops

Computación Matricial y Paralela11 Operaciones básicas con matrices void matriz_vector(double *m,int fm,int cm,int ldm,matriz_vector double *v,int fv,int strv,double *r,int fr,int strr) { int i,j; double s; for(i=0;i<fm;i++) { s=0.; for(j=0;j<cm;j++) s+=m[i*ldm+j]*v[j*strv]; r[i*strr]=s; } 2n flops 2n 2 flops

Computación Matricial y Paralela12 Operaciones básicas con matrices void matriz_vector_pe(double *m,int fm,int cm,int ldm,double *v,int fv,int strv,double *r,int fr,int strr)matriz_vector_pe { int i,j; double s; for(i=0;i<fm;i++) r[i*strr]=producto_escalar_stride(&m[i*ldm],1,v,1,cm); } 2n flops 2n 2 flops

Computación Matricial y Paralela13 Operaciones básicas con matrices void trasponer_matriz(double *m,int n,int ld)trasponer_matriz { int i,j; double t; for(i=0;i<n;i++) for(j=i+1;j<n;j++) { t=m[i*ld+j]; m[i*ld+j]=m[j*ld+i]; m[j*ld+i]=t; } 3(n-i) asignaciones 3n(n+1)/2 asignaciones

Computación Matricial y Paralela14 Multiplicación de matrices i i jj k k

Computación Matricial y Paralela15 Multiplicación de matrices void matriz_matriz(double **a,int fa,int ca,double **b,matriz_matriz int fb,int cb,double **c,int fc,int cc) { int i,j,k; double s; for(i=0;i<fa;i++) { for(j=0;j<cb;j++) { s=0.; for(k=0;k<ca;k++) { s+=a[i][k]*b[k][j]; } c[i][j]=s; } } } 2n flops 2n 2 flops 2n 3 flops

Computación Matricial y Paralela16 Multiplicación de matrices void matriz_matriz_ld(double *a,int fa,int ca,int lda,matriz_matriz_ld double *b,int fb,int cb,int ldb,double *c,int fc,int cc,int ldc) { int i,j,k; double s; for(i=0;i<fa;i++) { for(j=0;j<cb;j++) { s=0.; for(k=0;k<ca;k++) s+=a[i*lda+k]*b[k*ldb+j]; c[i*ldc+j]=s; } } } 2n flops 2n 2 flops 2n 3 flops

Computación Matricial y Paralela17 Multiplicación de matrices void matriz_matriz_tras(double *a,int fa,int ca,int lda,matriz_matriz_tras double *b,int fb,int cb,int ldb,double *c,int fc,int cc,int ldc) { int i,j,k; double s; double *bt,*da,*db; bt=(double *) malloc(sizeof(double)*cb*fb); trasponer_matriz_esp(b,fb,cb,ldb,bt,cb,fb,fb); for(i=0;i<fa;i++) { for(j=0;j<cb;j++) { s=0.; da=&a[i*lda]; db=&bt[j*fb]; for(k=0;k<ca;k++,da++,db++) s+=da[0]*db[0]; c[i*ldc+j]=s; } } free(bt); } 2n flops 2n 2 flops 2n 3 flops

Computación Matricial y Paralela18 Multiplicación de matrices void matriz_matriz_pe(double *a,int fa,int ca,int lda,matriz_matriz_pe double *b,int fb,int cb,int ldb,double *c,int fc,int cc,int ldc) { int i,j; for(i=0;i<fa;i++) for(j=0;j<cb;j++) c[i*ldc+j]=producto_escalar_stride(&a[i*lda],1, &b[j],ldb,ca); } 2n flops 2n 2 flops 2n 3 flops

Computación Matricial y Paralela19 Multiplicación de matrices void matriz_matriz_mv(double *a,int fa,int ca,int lda,double *b,int fb,int cb,int ldb,double *c,int fc,int cc,int ldc)matriz_matriz_mv { int i; for(i=0;i<cb;i++) matriz_vector_pe(a,fa,ca,lda,&b[i],fb,ldb,&c[i],fc,ldc); } 2n 2 flops 2n 3 flops

Computación Matricial y Paralela20 Multiplicación de matrices en mi portátil : Método\tamaño bidimensional leading dimension leading+punteros traspuesta producto escalar matriz- vector

Computación Matricial y Paralela21 Multiplicación de matrices en SUN Ultra 1 : Método\tamaño Normal Traspuesta Bloques Bloq tras Almac blo Bl tr al bl Bloq dob

Computación Matricial y Paralela22 Multiplicación de matrices en kefren, pentium 4 : Método\tamaño Normal Traspuesta Bloques Bloq dob Blas Blas Blas

Computación Matricial y Paralela23 Factorización LU U ii =1 Paso 1: L 00 U 00 =A 00  L 00 =A 00 Paso 2: L 00 U 0i =A 0i  U 0i =A 0i /L 00 L i0 =A i0 Paso 3: A ij =L i0 U 0j +...  A’ ij =A ij - L i0 U 0j

Computación Matricial y Paralela24 Factorización LU U ii =1 Paso 1: L ii U ii =A ii  L ii =A ii Paso 2: L ii U ij =A ij  U ij =A ij /L ii L ji =A ji Paso 3: A jk =L ji U ik +...  A’ jk =A jk - L ji U ik i i L U

Computación Matricial y Paralela25 Factorización LU void lu(double *a,int fa,int ca,int lda)lu { int i,j,k; for(i=0;i<fa;i++) { for(j=i+1;j<ca;j++) //Paso 2 a[i*lda+j]/=a[i*lda+i]; for(j=i+1;j<fa;j++) //Paso 3 for(k=i+1;k<ca;k++) a[j*lda+k]-=a[j*lda+i]*a[i*lda+k]; }

Computación Matricial y Paralela26 Factorización LU Para resolver sistema Ax=b En la forma: LUx=b Resolver: Ly=b (Sistema triangular inferior: sustitución progresiva) Seguido de: Ux=y (Sistema triangular superior: sustitución regresiva)

Computación Matricial y Paralela27 Operaciones con matrices dispersas Producto matriz-vector Por cada elemento de la matriz Buscamos si hay elemento de la misma columna en el vector y acumulamos sobre la suma correspondiente a su fila datos fila columna datos 1 3 fila 0 2 resultado datos fila 0 1 2

Computación Matricial y Paralela28 Operaciones con matrices dispersas void matriz_vector_disperso(double *dm,int *fm,int *cm,matriz_vector_disperso int ndm,double *dv,int *fv,int ndv,double *dr,int *fr,int ndr) { int i,j,fact; double s; for(i=0;i<ndr;i++) fr[i]=i; i=0; while(i<ndm) { fact=fm[i]; j=0; s=0.; while(i<ndm && fm[i]==fact) { while(j<ndv && fv[j]<cm[i]) j++; if(j<ndv && fv[j]==cm[i]) s+=dm[i]*dv[j]; dr[fact]=s; i++; } } }