ממיר שירים מיוטיוב
ויאגרה למכירה
מילון מורפיקס תרגום
рейтинг брокеров бинарные опционы
קמגרה מחיר
lamoda скидка

Tag Archives: blas

Matrix revolutions

Si cuando era un puber con excesivo brillo en el rostro alguien me decía que laburar con matrices iba a estar relacionado con informática, hubiese levantado sutilmente mis hombros con mi mejor cara de “oliendo excremento”.

El tema es que las matrices andan por todos lados. En primer año de la carrera uno las agarraba, las manoseaba (gauss-jordan), las daba vuelta (inversión), las tumbaba (transposición) y un sin fin más de operaciones (casi todo lo que indica el libro hindú) sin tener real dimensión de cuán involucradas estaban en el mundo.

No solo fotos o imágenes satelitales, cualquier problema que involucre varias incógnitas y ecuaciones termina idefectiblemente en una matriz a resolver (Ax=b).

El mundo gnulinuxero nos ha bien-acostumbrado a buscar, renegar, probar, indagar una y otra vez en un ciclo casi infinito (casi infinito = infinito) hasta alcanzar la solución a nuestros problemas. Así es que uno presupone que al transitar un nuevo camino se topará con decenas de obstáculos hasta alcanzar lo buscado.

Ah Si?

NO!
No fue así, en el primer intento ya estaba resolviendo un simple sistema matricial utilizando rutinas REcontraREmilREprobadas y que por años luz serán más eficientes de las que pueda llegar a programar yo en mis mejores sueños. Asi es como puse a buscar las librerías BLAS y LAPACK para que hagan el laburo por mi o mis compañeros.

Lo primero que vamos a hacer es instalarlas, luego algún lenguaje para usarlas (por ahora solo en fortran) y finalmente un ejemplo para probar que la cosa ande.

Instalación BLAS+LACPACK

#aptitude install libblas3gf libblas-doc libblas-dev liblapack3gf liblapack-doc liblapack-dev

Instalación gfortran

#aptitude install gfortran

Ejemplito a resolver

  <pre>\begin{bmatrix}  3.1 & 1.3 & -5.7 \\  1.0 & -6.9 & 5.8 \\  3.4 & 7.2 & -8.8  \end{bmatrix}  \begin{bmatrix}  x_1 \\  x_2 \\  x_3  \end{bmatrix}  =  \begin{bmatrix}  -1.3\\  -0.1\\  1.8  \end{bmatrix}</pre>

Programita a compilar (test1.f)

c solving the matrix equation A*x=b using LAPACK
	Implicit none
c declarations, notice single precision
	Real*4 A(3,3), b(3)
	integer i, j, pivot(3), ok
c define matrix A
	A(1,1)=3.1
	A(1,2)=1.3
	A(1,3)=-5.7
	A(2,1)=1.0
	A(2,2)=-6.9
	A(2,3)=5.8
	A(3,1)=3.4
	A(3,2)=7.2
	A(3,3)=-8.8
c define vector b, make b a matrix and you can solve multiple
c equations with the same A but different b
	b(1)=-1.3
	b(2)=-0.1
        b(3)=1.8
c find the solution using the LAPACK routine SGESV
	call SGESV(3, 1, A, 3, pivot, b, 3, ok)
c
c parameters in the order as they appear in the function call
c    order of matrix A, number of right hand sides (b), matrix A,
c    leading dimension of A, array that records pivoting,
c    result vector b on entry, x on exit, leading dimension of b
c    return value
c
c print the vector x
	do i=1, 3
	   write(*,*) b(i)
	end do
	end

Compilación

$gfortran -lblas -llapack test1.f -o test1.bin

Ejecución y resultado

$./test1.bin
1.0000001
1.0000004
1.0000004

Para mayor información: busque más información!!

C’est fini

 

Social Widgets powered by AB-WebLog.com.

Social Widgets powered by AB-WebLog.com.

Social Widgets powered by AB-WebLog.com.