\documentclass[11pt,twoside,a4paper,spanish]{article}
\usepackage[T1]{fontenc}
\usepackage{a4wide}
\usepackage{calc}
\usepackage[latin1]{inputenc}
\usepackage{isolatin1}
\usepackage{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
% ---------------------------
\setlength{\textheight}{\topmargin+\headheight+\headsep+\textheight}
\setlength{\topmargin}{0pt}
\setlength{\headheight}{0pt}
\setlength{\headsep}{0pt}
\setlength{\parindent}{0pt}
\setlength{\parskip}{1 ex plus 0.5 ex minus 0.2 ex}
\newcommand{\vect}[1]{\mathbf{#1}}    % Notación vectorial negrita
\newcommand{\for}[1]{\mathsf{#1}}
% ------------------------------
\begin{document}
\begin{center}\textbf{COMPUTACIÓN 2003 -- ASTRONOMIA}\end{center}
\begin{center}\textbf{PRACTICA 5b}\end{center}
\bigskip

El objetivo de esta práctica es construir una pequeña biblioteca de
subrutinas para operaciones con matrices. Esto permite
reutilizar código, sin tener que estar reescribiendo subrutinas cada
vez que las necesitemos.

En lo que sigue llamaremos $\for{A}$, $\for{B}$ a las
matrices sobre las cuales se realiza una operación y $\for{R}$ a la
matriz resultante de esta operación. Los símbolos $\for{N}$,
$\for{M}$ representan los tamaños de estas
matrices. 

\begin{enumerate}

\item Siguiendo el procedimiento explicado en la Pr\'actica 3, ejercicio 10, 
construya las siguientes subrutinas:
\begin{enumerate}
\item La subrutina $\for{MTXTRA}$ transfiere la matriz $\for{A}$
  $(n\times m)$ en el arreglo $\for{R}$, esto es, realiza una copia de 
  $\for{A}$ en $\for{R}$.
\item La subrutina $\for{MTXTRP}$ coloca la traspuesta de la matriz $\for{A}$
  $(n\times m)$ en $\for{R}$.
\item La subrutina $\for{MTXWRT}$ escribe la matriz $(n\times m)$
  guardada en $\for{A}$ fila por fila por pantalla.
\end{enumerate}
Verifique que cada subrutina funcione correctamente.

Recordar que el \'{\i}ndice $\for{K}$ del vector en donde se guardar\'a la 
matriz correspondiente (de \'{\i}ndices $\for{I}$, $\for{J}$), debe generarse 
con la expresi\'on:
\begin{displaymath}
  \for{K=(I-1)*M + J}
\end{displaymath}


\item Utilizando las subrutinas anteriores construya un programa tal que
dadas dos matrices $(n\times n)$ $\vect{A}$ y $\vect{B}$ y el escalar
$\lambda$ realice el cálculo:
\begin{displaymath}
%  \vect{AB}, \quad \vect{A}-\lambda\vect{I}, \quad 
\vect{AB^t}
%, \quad  \vect{A^tB}, \quad \vect{AB^t}-\vect{A^tB}
\end{displaymath}

\end{enumerate} 

\textbf{Nota:} Para utilizar las subrutinas no es necesario
  insertar el código dentro del programa (aunque, por supuesto, puede
  hacer esto). Puede compilar por separado las
  subrutinas y luego unir (\emph{link}) las necesarias con el programa
  principal en un único ejecutable como sigue. 

  Supongamos que mi programa \texttt{matriz.f} llama a la subrutina
  $\for{MTXMLT}$, la cual está guardada en el archivo
  \texttt{mtxmlt.f}. Entonces primero compilamos \texttt{mtxmlt.f}
  como sigue
  \begin{quote}
\begin{verbatim}
$ g77 -c mtxmlt.f
\end{verbatim}%$
  \end{quote}
  Esto genera un archivo \texttt{mtxmlt.o} conocido como código
  objeto. A continuación unimos el código objeto de nuestra subrutina
  con el programa principal y generamos el ejecutable,
  \begin{quote}
\begin{verbatim}
$ g77 -o matriz matriz.f  mtxmlt.o
\end{verbatim}%$
  \end{quote}
\end{document}


\item La subrutina $\for{MTXMSC}$ multiplica la matriz $\for{A}$
  $(n\times\ m)$ por un escalar $\for{S}$ y coloca el resultado en
  $\for{R}$.
\item La subrutina $\for{MTXUNT}$ construye la matriz unidad de orden
  $n$ en el arreglo $\for{R}$.
\item La subrutina $\for{MTXADD}$ realiza la suma de dos matrices
  $(n\times m)$  $\for{A}$ y $\for{B}$ y pone el resultado en
  $\for{R}$.
\item La subrutina $\for{MTXSUB}$ resta la matriz $(n\times m)$
  $\for{B}$ de la matriz $(n\times m)$  $\for{A}$ colocando el
  resultado en  $\for{R}$.
\item La subrutina $\for{MTXMLT}$ multiplica la matriz
  $(n\times l)$ $\for{A}$ por la matriz $(l\times m)$
  $\for{B}$ y coloca la matriz producto $(n\times m)$ en $\for{R}$.











