Vous êtes sur la page 1sur 606

Universidad Complutense de Madrid

Laboratorio de Computacion Cientfica


Juan Jim
enez
23 de septiembre de 203
2
Cop!ri"#t 202$ 203 Juan Jimenez% &ermission is "ranted to cop!$ distribute
and'or modif! t#is document under t#e terms of t#e ()U *ree +ocumentation License$
,ersion
%3 or an! later version publis#ed b! t#e *ree -oft.are *oundation/ .it# no 0nvariant
-ections$ no *ront1Cover 2e3ts$ and no 4ac51Cover 2e3ts% 6 cop! of t#e license is
included in t#e section entitled 7()U *ree +ocumentation License8%
Cop!ri"#t 202$ 203 Juan Jimenez% -e concede permiso para copiar$ distribuir
!'o modificar este documento ba9o los terminos de la Licencia de +ocumentacion
Libre de ()U$ ,ersion %3 o cual:uier otra version posterior publicada por la *ree
-oft.are *oundation/ sin -ecciones 0nvariantes ni 2e3tos de Cubierta +elantera ni
2e3tos de Cubierta 2rasera% Una copia de la licencia esta incluida en la seccion
titulada ()U *ree +ocumentation License%
0ntroduccion al soft.are cientfico ;
%% 0ntroduccion a los computadores % % % % % % % % % % % % % % % % % % % % % % % % % % % % <
%%% )iveles de descripcion de un ordenador % % % % % % % % % % % % % % % % % % % % <
%%2% =l modelo de computador de ,on )eumann % % % % % % % % % % % % % % % % % % >
%%3% ?epresentacion binaria % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 20
%2% 6plicaciones de -oft.are Cientfico % % % % % % % %
%
% % % % % % % % % % % % % % % % % % 23
0ntroduccion a la pro"ramacion en Matlab 2;
2%% =l entorno de pro"ramacion de Matlab % % % % % % % % % % % % % % % % % % % % % % % % % 2;
2%%% La ventana de comandos de Matlab % % % % % % % % % % % % % % % % % % % % % % 2;
2%%2% ,ariables% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 2<
2%%3% ,ectores ! matrices% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 33
2%%@% =structuras ! celulas % % % % % % % % % %
%
% % % % % % % % % % % % % % % % % % % % 3A
2%2% =ntrada ! salida de +atos % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % @0
2%2%% =3portar e importar datos en Matlab % % % % % % % % % % % % % % % % % % % % % @0
2%3% Bperaciones aritmeticas$ relacionales ! lo"icas %
%
% % % % % % % % % % % % % % % % % % % @;
2%3%% Bperaciones aritmeticas % % % % % % % % %
%
% % % % % % % % % % % % % % % % % % % @;
2%3%2% &recedencia de los operadores aritmeticos % % % % % % % % % % % % % % % % % % % ;2
2%3%3% Bperaciones ?elacionales ! lo"icas% % % %
%
% % % % % % % % % % % % % % % % % % % ;@
2%@% -cripts ! *unciones % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % <;
2%@%% =l editor de te3tos de Matlab% % % % % % % % % % % % % % % % % % % % % % % % % % <;
2%@%2% -cripts % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % <<
2%@%3% *unciones % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % <>
2%@%@% *unciones incluidas en Matlab% % % % % % % % % % % % % % % % % % % % % % % % % % A@
2%@%;% +epuracion% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % A;
2%;% Control de *lu9o % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % >0
2%;%% *lu9o condicional% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % >0
2%;%2% 4ucles % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % >;
2%;%3% *unciones recursivas% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % C0
2%;%@% 6l"oritmos ! dia"ramas de flu9o% % % % % % % % % % % % % % % % % % % % % % % % % C
2%<% ?epresentacion (rafica % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % C@
2%<%% =l comando plot ! las fi"uras en Matlab% % % % % % % % % % % % % % % % % % % % C@
2%<%2% (raficos en 2+ % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 02
2%<%3% (raficos en 3+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 0

0ndice "eneral
%
2%
3

0)+0C=
(=)=?6L
@
6ritmetica del Computador ! *uentes de error 2;
3%% ?epresentacion binaria ! decimal % % % % % % % % % % % % % % % % % % % % % % % % % % % % 2;
3%2% ?epresentacion de numeros en el ordenador % % % % % % % % % % % % % % % % %
%
% % % % 2<
3%2%% )umeros no enterosD ?epresentacion en punto fi9o ! en punto
flotante
% % % 2>
3%3% =rrores en la representacion numerica% % % % % % % % % % % % % % % % % % % % %
%
% % % % 3<
3%3%% =rror de redondeo unitario % % % % % % % % % % % % % % % % % % % % % % % % % % % 3<
3%3%2% =rrores de desbordamiento % % % % % % % % % % % % % % % % % % % % % % % % % % % 3C
3%@% =rrores derivados de las operaciones aritmeticas % % % % % % % % % % % % % % %
%
% % % % @0
3%@%% 6cumulacion de errores de redondeo % % % % % % % % % % % % % % % % % % % % % % @0
3%@%2% 6nulacion catastrofica % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % @3
3%@%3% =rrores de desbordamiento % % % % % % % % % % % % % % % % % % % % % % % % % % % @@
Calculo de races de una funcion @A
@%% ?aces de una funcion % % % % % % % % % % % % % % % % % % % % % %
%
% % % % % % % % % % % @A
@%2% Metodos iterativos locales % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % @C
@%2%% Metodo de la biseccion % % % % % % % % % % % % % % % % % %
%
% % % % % % % % % % % @C
@%2%2% Metodo de interpolacion lineal o E?e"ula falsi F % % % %
%
% % % % % % % % % % % ;0
@%2%3% Metodo de )e.ton1?ap#son % % % % % % % % % % % % % %
%
% % % % % % % % % % % ;;
@%2%@% Metodo de la secante % % % % % % % % % % % % % % % % % % %
%
% % % % % % % % % % % ;>
@%2%;% Metodo de las apro3imaciones sucesivas o del punto
fi9o
% % % % % % % % % % % <
@%3% Calculo de races de funciones con Matlab% % % % % % % % % % % %
%
% % % % % % % % % % % A0
@%3%% La funcion de Matlab fzero. % % % % % % % % % % % % % % % % % % % % % % % % % % A0
@%3%2% Calculo de races de polinomios% % % % % % % % % % % % %
%
% % % % % % % % % % % A;
6plicaciones del calculo cientfico al al"ebra lineal AC
;%% Matrices ! vectores % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % AC
;%2% Bperaciones matriciales % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % >
;%3% Bperadores vectoriales % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % C;
;%@% 2ipos de matrices empleados frecuentemente % % % % % % % % % % % % % % % % % % % % % 20<
;%;% *actorizacion de matrices % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 20A
;%;%% *actorizacion LU % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 20A
;%;%2% *actorizacion de C#oles5! % % % % % % % % % % % % % % % % % % % % % % % % % % % % 2>
;%;%3% +ia"onalizacion % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 220
;%;%@% *actorizacion G? % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 22<
;%;%;% *actorizacion -,+ % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 233
-istemas de ecuaciones lineales 23A
<%% 0ntroduccion % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 23A
<%2% Condicionamiento % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 2@
<%3% Metodos directos % % % % % % % % % % % % % % % % % % % % % % % % %
%
% % % % % % % % % % % 2@@
<%3%% -istemas trian"ulares % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 2@@
<%3%2% Metodos basados en las factorizaciones % % % % % % % % %
%
% % % % % % % % % % % 2@<
<%3%3% =l metodo de eliminacion de (auss% % % % % % % % % % %
%
% % % % % % % % % % % 2;3
<%3%@% (auss1Jordan ! matrices en forma reducida escalonada % % % % % % % % % % % % 2;A
<%@% Metodos iterativos % % % % % % % % % % % % % % % % % % % % % % % %
%
% % % % % % % % % % % 2<0
<%@%% =l metodo de Jacobi% % % % % % % % % % % % % % % % % % % %
%
% % % % % % % % % % % 2<
<%@%2% =l metodo de (auss1-eidel% % % % % % % % % % % % % % % %
%
% % % % % % % % % % % 2<A
<%@%3% 6morti"uamiento% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 2A0
<%@%@% 6nalisis de conver"encia % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 2A3
3%
@%
;%
<%
0nterpolacion ! a 9uste de funciones 2AC
A%% =l polinomio de 2a!lor% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 2>0
A%2% 0nterpolacion polinomica% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 2>3
A%2%% La matriz de ,andermonde % % % % % % % % % % % % % % % % % % % % % % % % % % % 2>3
A%2%2% =l polinomio interpolador de La"ran"e% % % % % % % % % % % % % % % % % % % % % 2>@
A%3% +iferencias divididas% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 2>;
A%3%% =l polinomio de )e.ton1(re"or! % % % % % % % % % % % % % % % % % % % % % % % % 2>>
A%@% 0nterpolacion por intervalos% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 2C
A%@%% 0nterpolacion mediante splines cubicos % % % % % % % % % % % % %
%
% % % % % % % 2C3
A%@%2% *unciones propias de Matlab para interpolacion por intervalos
%
% % % % % % % 2C>
A%;% 69uste polinomico por el metodo de mnimos cuadrados % % % % % % %
%
% % % % % % % 2CC
A%;%% Mnimos cuadrados en Matlab% % % % % % % % % % % % % % % % % %
%
% % % % % % % 303
A%;%2% 6nalisis de la bondad de un a9uste por mnimos cuadrados% %
%
% % % % % % % 30@

0)+0C= (=)=?6L ;
A%
>% +iferenciacion e 0nte"racion numerica 30A
>%% +iferenciacion numerica% % % % % % % % % % % % % % % % % % % % % % % % % %
%
% % % % % % % 30A
>%%% +iferenciacion numerica basada en el polinomio de interpolaci
on%
% % % % % % 30>
>%%2% +iferenciacion numerica basada en diferencias finitas % % % % % %
%
% % % % % % 30C
>%2% 0nte"racion numerica% % % % % % % % % % % % % % % % % % % % % % % % % % % %
%
% % % % % % 32
>%2%% La formula del trapecio% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 33
>%3% Las formulas de -impson% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 3;
>%@% &roblemas de valor inicial en ecuaciones diferenciales % % % % % % % % % % % % % % % % % 3C
>%@%% =l metodo de =uler% % % % % % % % % % % % % % % % % % % % % % % % %
%
% % % % % % 320
>%@%2% Metodos de ?un"e1Hutta % % % % % % % % % % % % % % % % % % % % %
%
% % % % % % 32@
C% 2ratamiento estadstico de datos 32A
C%% -ecuencias de numeros aleatorios % % % % % % % % % % % % % % % % % % % % %
%
% % % % % % 32A
C%%% =l "enerador de numeros aleatorios de Matlab% % % % % % % % % %
%
% % % % % % 33
C%2% &robabilidad ! distribuciones de probabilidad % % % % % % % % % % % % % % % % % % % % % 333
C%2%% -ucesos aleatorios discretos % % % % % % % % % % % % % % % % % % % % % % % % % % % 333
C%2%2% +istribuciones de probabilidad continuas % % % % % % % % % % % % % % % % % % % % 33<
C%3% =l teorema del lmite central % % % % % % % % % % % % % % % % % % % % % % %
%
% % % % % % 3@0
C%@% 0ncertidumbre en las medidas e3perimentales % % % % % % % % % % % % % % % % % % % % % 3@2
C%@%% *uentes de incertidumbre% % % % % % % % % % % % % % % % % % % % % % % % % % % % % 3@@
C%@%2% 0ntervalos de confianza% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 3@;
C%@%3% &ropa"acion de la incertidumbreD =stimacion de la incertidumbre de medidas
indirectas% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 3;0
C%@%@% =9emplo de estimacion de la incertidumbre con Matlab% % % % % % % % % % % % 3;2
()U *ree +ocumentation License 3;A
% 6&&L0C640L02I 6)+ +=*0)020B)- % % % % % % % % % % % % % % % % % % % % % % % % % 3;A
2% ,=?4620M CB&I0)( % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 3;>
3% CB&I0)( 0) GU6)202I % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 3;C
@% MB+0*0C620B)- % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 3;C
;% CBM40)0)( +BCUM=)2- % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 3<
<% CBLL=C20B)- B* +BCUM=)2- % % % % % % % % % % % % % % % % % % % % % % % % % % % 3<
A% 6((?=(620B) J02K 0)+=&=)+=)2 JB?H- % % % % % % % % % % % % % % % % % % 3<
>% 2?6)-L620B) % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 3<
C% 2=?M0)620B) % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 3<2
0% *U2U?= ?=,0-0B)- B* 2K0- L0C=)-= % % % % % % % % % % % % % % % % % % % % % % % 3<2

0)+0C=
(=)=?6L
<
% ?=L0C=)-0)( % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 3<2
6++=)+UMD Ko. to use t#is License for !our documents % % % % % % % % % % % % % % % % 3<3

0ndice de fi"uras
%% +escripcion por niveles de un computador % % % % % % % % % % % % % % % % % % % % % % % A
%2% Modelo de ,on )eumann % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % C
2%% =ntorno de desarrollo inte"rado de Matlab % % % % % % % % % % % % % % % % % % % % % % % 2<
2%2% =l Jor5space de Matlab % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 32
2%3% 6specto de la #erramienta de importacion de datos % % % % % % % % % % % % % % % % % % @<
2%@% posicion del menu *ile ! del icono de nuevo documento en el 0+= de Matlab % % % <<
2%;% ,ista del editor de te3tos de Matlab mostrando el contenido del fic#ero prueba%m <A
2%<% =9emplo de uso de memoria ! ambito de variables durante la e9ecucion de una funcion A2
2%A% ,ista de el editor de te3to de Matlab% Circulo ro9o error en el codi"o% Circulos azules
advertencias de posible me9oras % % % % % % % % % % % % % % % % % % % % % % % % % % % % % A;
2%>% 4rea5point activo % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % AC
2%C% &arada de pro"rama en brea5point ! #erramientas de depuracion % % % % % % % % % % >0
2%0% =s:uema "eneral de la estructura de flu9o condicional if los terminos escritos entre par
entesis son opcionales% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % >3
2%% =s:uema "eneral de la estructura s.itc#1case1ot#er.ise % % % % % % % % % % % % % % % >@
2%2% =s:uema "eneral de la estructura de un bucle for los terminos escritos entre parente1
sis son opcionales% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % >;
2%3% =s:uema "eneral de la estructura de un bucle while los terminos escritos entre par
entesis son opcionales% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % >C
2%@% -mbolos empleados en dia"ramas de flu9o % % % % % % % % % % % % % % % % % % % % % % % C2
2%;% +ia"rama de flu9o para el problema de los numeros primos % % % % % % % % % % % % % % C3
2%<% ,entana "rafica de Matlab% representacion de los punto de la tabla A%2% % % % % % % C<
2%A% "rafico de los puntos de la tabla A%2% obtenida con el comando plot % % % % % % % % CA
2%>% +atos de la tabla A%2% representados mediante distintos tipos de lineas ! colores % CC
2%C% "raficas de las funciones seno ! coseno en el intervalo EL$ LF% ?epresentadas en la
misma fi"ura$ usando el comando hold on% % % % % % % % % % % % % % % % % % % % % % % 00
2%20% =9emplo de empleo del comando subplot % % % % % % % % % % % % % % % % % % % % % % % % 03
2%2% =9emplo de empleo del comando fplot % % % % % % % % % % % % % % % % % % % % % % % % % 0@
2%22% ?epresentacion de la funcion ! M lo"
0
E3F empleando el comando semilogx % % % % 0;
2%23% ?epresentacion de la funcion ! M 0
3
empleando el comando semilogy % % % % % % % 0<
2%2@% ?epresentacion de la funcion r M

N empleando el comando polar % % % % % % % % % 0A


2%2;% Comparcion entre los comandos stem$ bar ! stairs representando la misma colec1
cion de datos% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 0>
2%2<% #isto"ramas del numero de automoviles por cada 000 #abitantes para 23 pases %
0>
2%2A% =9emplo de uso de la funcion plotyy % % % % % % % % % % % % % % % % % % % % % % % % % % 0C
2%2>% =9emplo de uso de la funcion quiver % % % % % % % % % % % % % % % % % % % % % % % % % % 0
2%2C% +atos de la tabla OO representados empleando el comando errorbar % % % % % % % % 2
A

0)+0C= +=
*0(U?6-
>
3
3
2%30% (rafico en 3+ ! rotaciones% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 3
2%3% ?etcula para representar superficies% Los puntos ne"ros son los nodos definidos por
las matrices P
m
e I
m
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % @
2%32% -uperficie elemental obtenida elevando los cuatros puntos centrales de la fi"ura 2%3% ;
2%33% Comparacion entre mesh ! surf % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%
20
2%3@% retcula con simetra circular % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%
2
2%3;% Cono representado sobre una retcula circular % % % % % % % % % % % % % % % % % % % % % 22
2%3<% retcula con simetra circular % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%
22
2%3A% Comparacion entre los resultados de contour$ contour3$ meshc ! surfc$ para la
obtencion de las curvas de nivel de una superficie% % % % % % % % % % % % % % % % % % % 23
2%3>% Curva trazada sobre una superficie % % % % % % % % % % % % % % % % % % % % % % % % % % % 2@
3%% &osicion relativa de un numero no ma:uina 3 ! su redondeo a numero ma:uina
por truncamiento 3
2
! por e3ceso 3
=
-i redondeamos al mas pro3imo de los dos$ el
error es siempre menor o i"ual a la mitad del intervalo 3
e
3
2
% % % % % % % % % % %
% % % %
3A
3%2% 0lustracion del cambio de precision con la ma"nitud de los numeros representados% 3C
3%3% )umeros representables ! desbordamientos en el estandar 0=== A;@ de precisi
on
simple% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % @0
@%% =9emplo de ecuacion de Hepler para a M @0 ! b M 2 % % % % % % % % % % % % % % % % % % @>
@%2% 0lustracion del teorema de 4olzano % % % % % % % % % % % % % % % % % % % % % % % % % % % @C
@%3% +ia"rama de flu9o del metodo de la biseccion % % % % % % % % % % % % % % % % % % % %
%
;0
@%@% proceso de obtencion de la raz de una funcion por el metodo de la biseccion %
% %
;
@%;% Bbtencion de la recta :ue une los e3tremos de un intervalo Qa$ bR :ue contiene una
raz de la funcion % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % ;2
@%<% +ia"rama de flu9o del metodo de interpolacion lineal % % % % % % % % % % % % % % % %
%
;3
@%A% &roceso de obtencion de la raz de una funcion por el metodo de interpolacion
lineal
;@
@%>% ?ecta tan"ente a la funcion f E3F en el punto 3
0
% % % % % % % % % % % % % % % % % % % % ;;
@%C% +ia"rama de flu9o del metodo de )e.ton1?ap#son % % % % % % % % % % % % % % % % % % ;<
@%0% &roceso de obtencion de la raz de una funcion por el metodo de )e.ton % % % % %
%
;A
@%% ?ecta secante a la funcion f E3F en los puntos 3
0
! 3

% % % % % % % % % % % % % % % % % ;>
@%2% +ia"rama de flu9o del metodo de la secante % % % % % % % % % % % % % % % % % % % % % % ;C
@%3% proceso de obtencion de la raz de una funcion por el metodo de la secante % % % %
%
<0
@%@% Bbtencion "rafica del punto fi9o de la funcion$ "E3F M

e
3
% % % % % % % % % % % % % <
@%;% +ia"rama de flu9o del metodo del punto fi9o% La raz obtenida corresponde a la
funcion f E3F M "E3F 3 % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % <@
@%<% "E3F M

e
3
$ -olo la rama ne"ativa tiene un punto fi9o% % % % % % % % % % % % % % % % <;
@%A% proceso de obtencion de la raz de la funcio n f E3F M e
3
3
2
aplicando el metodo
del punto fi9o sobre la funcion "E3F M

e
3
% % % % % % % % % % % % % % % % % % % % % % <<
@%>% primeras iteraciones de la obtencion de la raz de la funcion f E3F M e
3
3
2
aplicando
el metodo del punto fi9o sobre la funcion "E3F M lnE3
2
F% % % % % % % % % % % % % % % % <A
@%C% proceso de obtencion de la raz de la funcion f E3F M e
3
3
2
aplicando el metodo del
punto fi9o sobre la funcion "E3F M lnE3
2
F$ el metodo oscila sin conver"er a la solucion%<>
@%20% proceso de obtencion de la raz de la funcion f E3F M e
3
3
2
aplicando el metodo
del punto fi9o sobre la funcion "E3F M
e
$ el metodo diver"e rapidamente% % % % % % <C
@%2% (rafica de la funcion f E3F M e
3
3
2
$ obtenida mediante pinta funcion% % % % % % % A2
;%% ?epresentacion "rafica de vectores en el plano % % % % % % % % % % % % % % % % % % % % % >0
;%2% ?epresentacion "rafica de vectores en el espacio % % % % % % % % % % % % % % % % % % % % >
;%3% interpretacion "eometrica de la norma de un vector % % % % % % % % % % % % % % % % % % ><

0)+0C= += *0(U?6- C
;%@% efecto del producto de un escalar por un vector % % % % % % % % % % % % % % % % % % % % C;
;%;% ?epresentacion "rafica de los vectores a M E$ 2F$ b M E$ F ! al"unos vectores$
combinacion lineal de a ! b% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % C<
;%<% ?epresentacion "rafica de los vectores a M E$ 2$ F$ b M E2$ 0$ F$ c M E$ $ F !
del vector a b S c% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % CA
;%A% ?epresentacion "rafica del vector a$ en las base canonica C ! en la base B % % % %
%
CC
;%>% 2ransformaciones lineales del vector a M Q/ 2R% +$ dilatacion'contraccion en
un
factor $;'0$;% ?
3
$ refle3ion respecto al e9e 3% ?
!
$ refle3ion respecto al e9e !% ?
N
rotaciones respecto al ori"en para an"ulos N M L'< ! N M L'3 % % % % % % % % % % % % 203
;%C% *ormas cuadraticas asociadas a las cuatro matrices dia"onalesD |a

| M |a
22
| M
$ a
2
M a
2
M 0 % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 20;
;%0% Bbtencion de un vector orto"onal % % % % % % % % % % % % % % % % % % % % % % % % % % % % 22>
<%% -istema de ecuaciones con solucion unica % % % % % % % % % % % % % % % % % % % % % % %
%
23C
<%2% -istema de ecuaciones sin solucion % % % % % % % % % % % % % % % % % % % % % % % % % % % 2@0
<%3% -istema de ecuaciones con infinitas soluciones % % % % % % % % % % % % % % % % % % % % % 2@
<%@% +ia"rama de flu9o "eneral de los metodos iterativos para resolver sistemas de ecua1
ciones% La funcion M E3F es la :ue especifica en cada caso el metodo% % % % % % % %
%
2<0
<%;% evolucion de la tolerancia Emodulo de la diferencia entre dos soluciones sucesivasF
para un mismo sistema resuelto mediante el metodo de (auss1-eidel ! el metodo
de
Jacobi % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
2A0
<%<% =volucion de la tolerancia para un mismo sistema empleando el metodo de Jacobi
Ediver"eF ! el de Jacobi amorti"uado Econver"eF% % % % % % % % % % % % % % % % % % % % 2A<
A%% Comparacion entre resultados obtenidos para polinomios de 2a!lor del lo"aritmo
natural de "rados 2$ 3$ ;$ 0$ 20 % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 2>
A%2% &ol!nomios de 2a!lor para las funciones coseno ! seno % % % % % % % % % % % % % % % 2>2
A%3% &olinomio de interpolacion de "rado nueve obtenido a partir de un con9unto de diez
datos % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 2C
A%@% 0nterpolaciones de orden cero ! lineal para los datos de la fi"ura A%3 % % % % % % % % 2C2
A%;% 0nterpolacion mediante spline cubico de los datos de la fi"ura A%3 % % % % % % % % %
%
2C>
A%<% &olinomio de mnimos cuadrados de "rado 0 % % % % % % % % % % % % % % % % % % % % % % 30
A%A% =9emplo de uso de la ventana "rafica de Matlab para realizar un a9uste por m
nimos
cuadrados % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
30;
A%>% Comparacion entre los residuos obtenidos para los a9ustes de mnimos cuadrados de
un con9unto de datos empleando polinomios de "rados a @% % % % % % % % % % % % % 30<
>%% ,ariacion del error cometido al apro3imar la derivada de una funcion empleando
una formula de diferenciacion de dos puntos% % % % % % % % % % % % % % % % % % % % % % 30
>%2% Comparacion entre las apro3imaciones a la derivada de una funcion ob"tenidas me1
diante las diferencias de dos puntos adelantada ! centrada % % % % % % % % % % % % % % 3
>%3% 0nterpretacion "rafica de la formula del trapecio% % % % % % % % % % % % % % % % % % % % 3@
>%@% 0nterpretacion "rafica de la formula e3tendida del trapecio% % % % % % % % % % % % % % 3;
>%;% 0nterpretacion "rafica de la formula '3 de -impsom% % % % % % % % % % % % % % % % % % 3<
>%<% 0nterpretacion "rafica de la formula 3'> de -impsom% % % % % % % % % % % % % % % % % % 3A
>%A% Circuito ?C % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 322
>%>% Comparacion entre los resultados obtenidos mediante el metodo de =uler para dos
pasos de inte"racion # M 0$0; ! # M 0$00 ! la solucion analtica para el volta9e
,
o
de un condensador durante su car"a% % % % % % % % % % % % % % % % % % % % % % % % % % %
323

0)+0C= +=
*0(U?6-
0
C%% -ecuencia de 00 numeros pseudoaleatorios "enerada mediante el metodo
middle s:uare% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 32C
C%2% +istribucion de probabilidad ! probabilidad acumulada de los resultados de lanzar
una moneda al aire% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 33@
C%3% +istribucion de probabilidad ! probabilidad acumulada de los resultados de lanzar
un dado al aire% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 33;
C%@% +istribucion de probabilidad ! probabilidad acumulada de los resultados de lanzar
un dado trucado al aire% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 33<
C%;% +istribucion de probabilidad uniforme para un intervalo Qa$ bR ! probabilidad acu1
mulada correspondiente % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 33A
C%<% +istribucion de probabilidad e3ponencial % % % % % % % % % % % % % % % % % % % % % % % 33>
C%A% +istribucion de probabilidad normal % % % % % % % % % % % % % % % % % % % % % % % % % % 33C
C%>% 2eorema del lmite centralD Comparacion entre #isto"ramas normalizados para
un
millon de medias ! la distribucion normal a :ue pertenecen % % % % % % % % % % % % % 3@3
C%C% Modo correcto de e3presar una medida e3perimental % % % % % % % % % % % % % % % % % 3@@
C%0% 0ntervalo de confianza del <>$2A T % % % % % % % % % % % % % % % % % % % % % % % % % % % 3@<
C%% *uncion inversa de probabilidad normal acumulada % % % % % % % % % % % % % % % % % % 3@A
C%2% 0ntervalo de probabilidad & T % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 3@>
C%3% Comparacion entre las distribuciones t de -tudent de $ ;$ 0$ 20 ! 30 "rados de
libertad ! la distribucion normal% % % % % % % % % % % % % % % % % % % % % % % % % % % % % 3@C

0ndice de 2ablas
2%% *ormatos numericos mas comunes en Matlab % % % % % % % % % % % % % % % % % % % % % 33
2%2% Bperadores aritmeticos definidos en Matlab % % % % % % % % % % % % % % % % % % % % % % @A
2%3% Bperadores relacionales definidos en Matlab % % % % % % % % % % % % % % % % % % % % % % ;@
2%@% Bperadores lo"icos elemento a elemento % % % % % % % % % % % % % % % % % % % % % % % % <
2%;% 6l"unas funciones matematicas en Matlab de uso frecuente % % % % % % % % % % % % % A@
2%<% +atos de prueba % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % C;
2%A% tipos de lnea ! color del comando plot % % % % % % % % % % % % % % % % % % % % % % % %
C>
2%>% ?esultados e3perimentales de la medida de la velocidad de un movil % % % % % % % %
3%% ?epresentacion en e3ceso a 2A$ para un e3ponente de > bits% % % % % % % % % % % % % 32
3%2% Comparacion entre los estandares del 0=== para la representacion en punto flotante%
Ebs bit de si"no$ m
i
bit de mantisa$ e
i
bit de e3ponenteF % % % % % % % % % % % % % % % 3;
A%% f E3F M erf E3F % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 2AC
A%2% 2abla de diferencia divididas para cuatro datos % % % % % % % % % % % % % % % % % % % % 2>A
A%3% 2abla de diferencias para el polinomio de )e.ton 1(re"or! de cuatro datos % % % % 2>C
>%% *ormulas de derivacion basadas en diferencias finitas % % % % % % % % % % % % % % % % % 32
C%% Mediciones de temperatura ! ,olta9e$ sobre una resistencia de prueba de 00 U % % 3;2
C%2% Medidas ! varianzas estimadas % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 3;@

0)+0C= +=
264L6-
2
&refacio
=stos apuntes cubren de forma apro3imada el contenido del Laboratorio de computacion cient
fi1 ca del primer curso del "rado en fsica% La idea de esta asi"natura es introducir al estudiante
a las estructuras elementales de pro"ramacion ! al calculo numerico$ como #erramientas
imprescindibles para el traba9o de investi"acion%
Casi todos los metodos :ue se describen en estos apuntes fueron desarrollados #ace si"los
por los "randesD )e.ton$ (auss$ La"ran"e$ etc% Metodos :ue no #an perdido su utilidad ! :ue$
con el advenimiento de los computadores di"itales$ #an "anado todava mas si cabe en atractivo e
interes% -e cumple una vez mas la famosa frase atribuida a 4ernardo de C#artresD
7-omos como enanos a los #ombros de "i"antes% &odemos ver mas$ ! mas le9os
:ue ellos$ no por :ue nuestra vista sea mas a"uda$ sino por:ue somos levantados
sobre su "ran altura%8
=n cuanto a los contenidos$ e9emplos$ codi"o$ etc% =stos apuntes deben muc#o a muc#as perso1
nas% =n primer lu"ar a Manuel &rieto ! -e"undo =steban :ue elaboraron las presentaciones de la
asi"natura 0ntroduccion al calculo cientfico ! pro"ramacion de la anti"ua licenciatura en f
sicas$ de la :ue el laboratorio de computacion cientfica es #eredera%
=n se"undo lu"ar a mis companVeros de los departamentos de *sica de la 2ierra$ 6stronom
a ! 6strofsica 0 ! 6r:uitectura de computadores ! 6utomatica :ue #an impartido la
asi"natura durante estos anVosD
?osa (onzalez 4arras$ 4elen ?odr"uez *onseca$ Maurizio Matessini$ &ablo Wurita$
,icente Carlos ?uz Martnez$ =ncarna -errano$ Carlos (arca -anc#ez$ Jose 6ntonio Mart
n$ ,ictoria Lopez Lopez$ 6lberto del 4arrio$ 4lanca 6!arza"uXena$ Javier (omez -elles$ )ac#o
(omez &erez$
Marta 6

valos$ 0nVa:ui Kidal"o$ +aviz sanc#ez$ Juan ?odri"uez$ Mara ?amirez$ 6

lvaro de la
Cama1
ra E=spero no #aberme olvidado de nadieF%
Muc#as "racias a todos por tantas #oras de traba9o compartidas%
&or ultimo$ los errores ! erratas :ue encuentres en estas notas$ esos s :ue son de mi e3clusiva res1
ponsabilidad% &uedes si :uieres a!udarme a corre"irlos en futuras ediciones/ 9uan%9imenezYfis%ucm%es
Juan Jimenez%
3

0)+0C= +=
264L6-
@
Captulo
0ntroduccion al soft.are cient
fico
=n la actualidad$ el ordenador se #a convertido en una #erramienta imprescindible para el
traba9o de cual:uier investi"ador cientfico% -u uso #a permitido realizar tareas :ue sin su a!uda
resultaran sencillamente imposibles de acometer% =ntre otras$ distin"uiremos las tres si"uientesD
6d:uisicion de datos de dispositivos e3perimentales%
6nalisis ! tratamiento de datos e3perimentales%
Calculo Cientifico%
La primera de estas tareas :ueda fuera de los contenidos de esta asi"natura% -u ob9etivo es
emplear el ordenador para reco"er datos automaticamente de los sensores empleados en un dispo1
sitivo e3perimental% =l procedimiento #abitual es emplear dispositivos electronicos :ue
traducen las lecturas de un sensor Eun termometro$ un manometro$ un caudalmetro$ una camara
etc%F a un volta9e% =l volta9e es di"italizado$ es decir$ convertido a una secuencia de ceros ! unos$ !
almacena1 do en un ordenador para su posterior analisis o'! directamente monitorizado$ es decir$
mostrado en la pantalla del ordenador% =n muc#os casos el ordenador es a su vez capaz de
interactuar con el dispositivo e3perimentalD iniciar o detener un e3perimento$ re"ular las
condiciones en :ue se realiza$ disparar alarmas si se producen errores$ etc%
+e este modo$ el investi"ador cientfico$ :ueda dispensado de la tarea de ad:uirir por s
mismo los datos e3perimentales% 2area :ue en al"unos casos resultara imposible$ por e9emplo si
necesita medir muc#as variables a la vez o si debe medirlas a "ran ritmo/ ! en la :ue$ en
"eneral$ es relativamente facil cometer errores%
=l analisis ! tratamiento de datos e3perimentales$ constitu!e una tarea fundamental dentro del
traba9o de investi"acion cientfica% Los ordenadores permiten realizar dic#as tareas$ de una
forma eficiente ! se"ura con cantidades de datos :ue resultaran imposibles de mane9ar #ace
;0 anVos% Como veremos mas adelante$ una simple #o9a de calculo puede a#orrarnos una
cuantas #oras de calculos tediosos% =l analisis estadstico de un con9unto de datos
e3perimentales$ el calculo la estimacion de los errores e3perimentales cometidos$ la posterior
re"resion de los datos obtenidos a una funcion matematica :ue permita establecer una le! o al
menos una relacion entre los datos obtenidos$ formar parte del traba9o cotidiano del
investi"ador$ virtualmente en todos los campos de la ciencia%
&or ultimo el calculo% Cabra decir :ue constitu!e el nucleo del traba9o de investi"aci
on% =l cientfico trata de e3plicar la realidad :ue le rodea$ mediante el empleo de una descripci
on ma1 tematica% +ic#a descripcion suele tomar la forma de un modelo matematico mas o menos
comple9o%
La validez de un modelo est li"ada a :ue sea capaz de reproducir los resultados e3perimentales
;
C6&

02ULB % 0)2?B+UCC0B

) 6L -B*2J6?= C0=)2

0*0CB
<
obtenidos del fenomeno :ue pretende e3plicar% -i el modelo es bueno sera capaz de obtener
me1 diante calculo unos resultados similares a los obtenido mediante el e3perimento% +e este modo$
el modelo :ueda validado ! es posible emplearlo para predecir como se comportara el sistema
ob9eto de estudio en otras condiciones%
%% 0ntroduccion a los computadores
Mas o menos todos estamos familiarizados con lo :ue es un computador$ los encontramos a diario
continuamente !$ de #ec#o$ #a! muc#os aspectos de nuestra vida actual :ue seran inima"inables
sin los computadores% =n terminos mu! "enerales$ podemos definir un computador como una m
a:uina :ue es capaz de recibir instrucciones ! realizar operaciones EcalculosF a partir de las
instrucciones recibidas% &recisamente es la capacidad de recibir instrucciones lo :ue #ace del
ordenador una #erramienta versatil/ se"un las instrucciones recibidas ! de acuerdo tambien a
sus posibilidades como ma:uina$ el ordenador puede realizar tareas mu! distintas$ entre las :ue
cabe destacar como mas "enerales$ las si"uientesD
&rocesamiento de datos
6lmacenamiento de datos
2ransferencias de datos entre el computador ! el e3terior
Control de las anteriores operaciones
=l computador se disenVa para realizar funciones "enerales :ue se especifican cuando se
pro1 "rama% La pro"ramacion es la :ue concreta las tareas :ue efectivamente realiza un
ordenador concreto%
%%% )iveles de descripcion de un ordenador
La fi"ura % muestra un modelo "eneral de un computador descrito por niveles% Cada nivel$
supone ! se apo!a en el nivel anterior%
% )ivel *sico% Constitu!e la base del #ard.are del computador% =sta constituido por
los componentes electronicos basicos$ diodos$ transistores$ resistencias$ etc% =n un
computador moderno$ no es posible separar o tan si:uiera observar dic#os componentesD -e
#an fabricado directamente sobre un cristal semiconductor$ ! forman parte de un
dispositivo electronico conocido con el nombre de circuito inte"rado%
2% Circuito +i"ital% Los componentes del nivel fsico se a"rupan formando circuitos
di"itales$ E=n nuestro caso circuitos di"itales inte"radosF% Los circuitos di"itales traba9an
solo con dos niveles de tension E,

$ ,
0
F lo :ue permite emplearlos para establecer
relaciones lo"icasD ,

Mverdadero$ ,
2
Mfalso% =stas relaciones lo"icas establecidas
empleando los valores de la tension de los circuitos di"itales constitu!en el soporte de todos
los calculos :ue el computador puede realizar%
3% Br"anizacion Kard.are del sistema% Los circuitos di"itales inte"rados se a"rupan !
or"anizan para forma el Kard.are del ordenador% Los modulos basicos :ue constitu!en el
Kard.are son la unidad central de procesos EC&UF$ La unidad de memoria ! las unidades de
entrada ! salida de datos% +ic#os componentes estan conectados entre s mediante un
bus$ :ue transfiere datos de una unidad a otra%
%% 0)2?B+UCC0B

) 6 LB-
CBM&U26+B?=-
A
6plicaciZn
Len"ua9e de
alto nivel
-istema Bperativo'
Compilador
6r:uitectura
del
Computador
Kard.are del sistema
Circuito +i"ital
)ivel *[sico
*i"ura %D +escripcion por niveles de un computador
@% 6r:uitectura del computador% La ar:uitectura define como traba9a el computador% &or
tanto$ est estrec#amente relacionada con la or"anizacion #ard.are del sistema$ pero opera
a un nivel de abstraccion superior% =stablece como se accede a los re"istros de memoria$
arbitra el uso de los buses :ue comunican unos componentes con otros$ ! re"ula el traba9o
de la C&U%
-obre la ar:uitectura se establece el len"ua9e basico en el :ue traba9a el ordenador$ conocido
como len"ua9e ma:uina% =s un len"ua9e :ue emplea todava niveles lo"icos binarios
Eceros o unosF ! por tanto no demasiado apto para ser interpretado por los seres #umanos%
=ste len"ua9e permite al ordenador realizar operaciones basicas como copiar el contenido de
un re"istro de memoria en otro$ sumar el contenido de dos re"istros de memoria$ etc%
=l len"ua9e ma:uina es adecuado para los computadores$ pero no para los #umanos$ por eso$
los fabricantes suministran 9unto con el computador un repertorio basico de instrucciones
:ue su ma:uina puede entender ! realizar en un len"ua9e al"o mas ase:uible% -e trata del
len"ua9e ensamblador% Los comandos de este len"ua9e son facilmente traducibles en una o
varias instrucciones de len"ua9e ma:uina% 6un as se trata de un len"ua9e en el :ue
pro"ramar directamente resulta una tarea tediosa ! proclive a cometer errores%
;% Compiladores ! -istemas Bperativos Los Compiladores constitu!en un tipo de pro"ra1
mas especiales :ue permiten convertir un con9unto de instrucciones$ escritas en un len"ua9e de
alto nivel en len"ua9e ma:uina% =l pro"ramador escribe sus instrucciones en fic#ero de te3to
normal$ perfectamente le"ible para el ser #umano$ ! el compilador convierte las instrucciones
contenidas en dic#o fic#ero en secuencias binarias comprensibles por la ma:uina%
Los computadores primitivos solo eran capaces de e9ecutar un pro"rama a la vez% 6 medida
:ue se fueron fabricando ordenadores mas sofisticados$ sur"io la idea de crear pro"ramas
:ue se encar"aran de las tareas basicasD "estionar el flu9o de informacion$ mane9ar perif
ericos$ etc% =stos pro"ramas reciben el nombre de sistemas operativos% Los computadores
modernos car"an al arrancar un sistema operativo :ue controla la e9ecucion del resto de las
aplicaciones% =9emplos de sistemas operativos son +B- E+is5 operatin" s!stemF$ U)0P ! su
version para ordenadores personales L0)UP%
<% Len"ua 9es de alto nivel% Los len"ua9es de alto nivel estan pensados para facilitar la
tarea del pro"ramador$ desentendiendose de los detalles de implementacion del #ard.are
del or1 denador% Los len"ua9es de alto nivel estan compuestos por un con9unto de comandos
! unas re"las sintacticas$ :ue permiten describir las instrucciones para en computador en
forma de te3to%
+e una manera mu! "eneral$ se pueden dividir los len"ua9es de alto nivel en len"ua9es compi1
lados ! len"ua9es interpretados% Los len"ua9es compilados emplean un compilador para con1
vertir los comandos del len"ua9e de alto nivel en len"ua9e ma:uina% =9emplos de len"ua9es
compilados son C $ CSS ! *ortran% Los len"ua9es interpretados a diferencia de los anteriores
no se traducen a len"ua9e ma:uina antes de e9ecutarse% -i no :ue utilizan otro pro"rama
el interprete :ue va le!endo los comandos del len"ua9e ! convirtiendolos en
instrucciones ma:uina a la vez :ue el pro"rama se va e9ecutando% =9emplos de pro"ramas
interpretado son 4asic$ &!t#on ! Java%
A% 6plicaciones% -e suele entender por aplicaciones pro"ramas orientados a tareas especficas$
disponibles para un usuario final% Kabitualmente se trata de pro"ramas escritos en un len"ua9e
de alto nivel ! presentados en un formato facilmente comprensible para :uien los usa%
=3isten multitud de aplicaciones$ entre las mas conocidas cabe incluir los nave"adores para
0nternet$ como =3plorer$ Mocilla o (oo"le Crome$ los editores de te3to$ como Jord$ las
#o9as de calculo como =3cel o los clientes de correo como Butloo5% =n realidad$ la lista de
aplicaciones disponibles en el mercado sera interminable%
%%2% =l modelo de computador de ,on )eumann
Los computadores modernos si"uen$ en lineas "enerales$ el modelo propuesto por ,on )e.mann%
La fi"ura %2 muestra un es:uema de dic#o modelo%
=n el modelo de ,on )e.man se pueden distin"uir tres modulos basicos ! una serie de
elementos de intercone3ion% Los modulos basicos sonD
La Unidad Central de &rocesos% C&U ECentral process unitFF $ esta unidad constitu!e
el nucleo en el :ue el ordenador realiza las operaciones%
+entro de la C&U pueden a su vez distin"uirse las si"uientes partes
La unidad de proceso o ruta de datosD =sta formada por La Unidad 6ritmetico
Lo"ica E6LUF$ capaz de realizar las operaciones aritmeticas ! lo"icas :ue indican las
instruc1 ciones del pro"rama% =n "eneral las 6LUs se constru!en para realizar aritm
etica entre enteros$ ! realizar las operaciones lo"icas basicas del al"ebra de 4oole
E6)+$ B?$ etcF% Kabitualmente$ las operaciones para numeros no enteros$
representados en punto flo1 tante se suelen realizar empleando un procesador espec
fico :ue se conoce con el nombre de Coprocesador matematico% La velocidad de
procesamiento suele medirse e millones de operaciones por se"undo EM0&-F o millones
de operaciones en punto flotante por se"undo EM*LB&-F%
?e"istros
&
Unidad de Control EUCF
C
Cont% &ro"% E&CF
?e"% =stado E-?F
?
%
0
%
%
?A
Unidad
U
6ritm\tico
LZ"ica
6LU
?e"% 0nstr% E0?F
?e"%+ir% Mem EM6?F
?e"%+at% Men EM+?F
4us +atos
4us +irecc%
4us Control
Memoria ='-
*i"ura %2D Modelo de ,on )eumann
=l banco de re"istrosD Con9unto de re"istros en los :ue se almacenan los datos con
los :ue traba9a la 6LU ! los resultados obtenidos%
La unidad de control EUCF o ruta de controlD se encar"a de buscar las
instrucciones en la memoria principal ! "uardarlas en el re"istro de instrucciones$ las
decodifica$ las e9ecuta empleando la 6LU$ "uarda los resultados en el re"istro de datos$ !
"uarda las condiciones derivadas de la operacion realizada en el re"istro de estado% =l
re"istro de datos de memoria$ contiene los datos :ue se estan le!endo de la memoria
principal o van a escribirse en la misma% =l re"istro de direcciones de memoria$ "uarda la
direccion de la memoria principal a las :ue esta accediendo la 6LU$ para leer o escribir%
=l contador del pro"rama$ tambien conocido como puntero de instrucciones$ es un
re"istro :ue "uarda la posicion en la :ue se encuentra la C&U dentro de la secuencia de
instrucciones de un pro"rama%
La unidad de memoria% -e trata de la memoria principal o primaria del computador%
=st dividida en blo:ues de memoria :ue se identifican mediante una direccion% La C&U
tiene acceso directo a dic#os blo:ues de memoria%
La unidad elemental de informacion di"ital es el bit E0$F% La capacidad de almacenamiento
de datos se mide en 4!tes ! en sus multiplos calculados siempre como potencias de 2D
4!te M > bits
H 4 M 2
0
bits M 02@ 4
M 4 M 2
20
bits M 02@ H 4
(4 M 2
30
bits
2 4 M 2
@0
bits
Unidad de =ntrada'-alida% 2ransfiere informacion entre el computador ! los
dispositivos perifericos%
Los elementos de intercone3ion se conocen con el nombre de 4uses% -e pueden distin"uir tresD
=n bus de datos$ por el :ue se transfieren datos entre la C&U ! la memoria o la unidad de
entrada'salida% =l bus de direcciones$ par especificar una direccion de memoria o del re"istro
de ='-% I el bus de Control$ por el :ue se envan senVales de control$ tales como la senVal de
relo9$ la senVal de control de lectura'escrituras entre otras%
%%3% ?epresentacion binaria
,eamos con al"o mas de detalle$ como representa la informacion un computador% Como se
e31 plico anteriormente$ La electronica :ue constitu!e la parte fsica del ordenador$ traba9a
con dos niveles de volta9e% =sto permite definir dos estados$ alto$ ba9o :ue pueden
representarse dos smbolos 0 ! % Kabitualmente$ empleamos 0 smbolos 0$ $ 2$ 3$ @$ ;$ <$ A$ >$
C$ es decir$ empleamos una representacion decimal% Cuando :ueremos representar numeros
ma!ores :ue nueve$ dado :ue #emos a"otado el numero de d"itos disponibles$ lo :ue #acemos
es combinarlos$ a"rupando can1 tidades de diez en diez% 6s por e9emplo$ el numero <$
representa seis unidades mas un "rupo de diez unidades ! el numero @<2 representa dos
unidades mas seis "rupos de diez unidades mas cuatro "rupos de "rupos de 0 unidades%
Matematicamente$ esto es e:uivalentes a emplear sumas de d"itos por potencias de diezD
302@ M 0
@
S 3 0
3
S 0 0
2
S 2 0

S 2 0
0
-i recorremos los d"itos :ue componen el numero de iz:uierda derec#a$ cada uno de
ellos representa una potencia de diez superior$ por:ue cada uno representa la cantidad de "rupos de
0 "rupos$ de "rupos %%% de diez "rupos de unidades% =sto #ace :ue potencialmente podamos
representar cantidades tan "randes como :ueramos$ empleando tan solo diez smbolos% =sta
representacion$ a la :ue estamos #abituados recibe el nombre de representacion en base 0 %
&ero no es la unica posible%
,olvamos a la representacion empleada por el computador% =n este caso solo tenemos dos
smbolos distintos el 0 ! el % -i :ueremos emplear una representacion analo"a a la representaci
on en base diez$ deberemos a"rupar a#ora las cantidad en "rupos de dos% 6s los unicos nu
meros :ue admiten ser representados con un solo d"ito son el uno ! el cero% &ara representar el
numero dos$ necesitamos a"ruparD tendremos 0 unidades ! "rupo de dos$ con lo :ue la
representacion del
numero dos en base dos
ser
0% &ara representar el numero tres$ tendremos una unidad mas un
"rupo de dos$ por lo :ue la representacion sera $ ! as sucesivamente% Matematicamente esto
es e:uivalente emplear sumas de d"itos por potencias de 2D
00 M 2
@
S 0 2
3
S 2
2
S 2

S 0
2
0
=sta representacion recibe el nombre de representacion binaria o en base 2% La e3pansion
de un numero representado en binario en potencias de 2$ nos da un metodo directo de
obtener su representacion decimal% 6s$ para el e9emplo anterior$ si calculamos las potencias de dos
! sumamos los resultados obtenemosD
2
@
S 0 2
3
S 2
2
S 2

S 0 2
0
M < S 0 S @ S 2 S
0 M 22 :ue es la representacion en base 0 del numero binario 00%
&ara numeros no enteros$ la representacion tanto en decimal como en binario$ se e3tiende
de modo natural empleando potencias ne"ativas de 0 ! de 2 respectivamente% 6s$
>3;$@ M > 0
2
S 3 0

S ; 0
0
S @ 0

S
0
2
! para un numero en binario$
0$0 M 2
2
S 0 2

S 2
0
S 0 2

S
2
2
+e nuevo$ basta calcular el termino de la derec#a de la e3presion anterior para obtener
la representacion decimal del numero 0$0%
]Como transformar la representacion de un numero de decimal a binarioO +e nuevo nos da
la clave la representacion sumas de productos de d"itos por potencias de dos% =mpecemos por el
caso de un numero entero% -upon"amos un numero +$ representado en decimal% Gueremos
e3pandirlo en una suma de potencias de dos% -i dividimos el numero por 2$ podramos
representarlo comoD
+ M 2 C

S
?

donde C

representa el cociente de la division ! ?

el resto% Como estamos dividiendo por
dos$ el resto solo puede valer cero o uno% -upon"amos a#ora :ue volvemos a dividir el cociente
obtenido por dos$
C

M 2 C
2
S
?
2
-i sustituimos el valor obtenido para C

en la ecuacion inicial obtenemos$
+ M 2 E2 C
2
S ?
2
F S ?

M 2
2
C
2
S ?
2
2

S ?

2
0
-i volvemos a dividir el nuevo cociente obtenido C
2
por dos$ ! volvemos a sustituir$
C
2
M 2 C
3
S ?
3
+ M 2
2
E2 C
3
S ?
3
F S ?
2
2

S ?

2
0
M 2
3
C
3
S ?
3
2
2
S ?
2

2

S ?

2
0
-upon"amos :ue tras repetir este proceso n veces$ obtenemos un conciente C
n
M % Lo"icamente
no tiene sentido se"uir dividiendo !a :ue a partir de este punto$ cual:uier division posterior :ue
#a"amos nos dara cociente 0 ! resto i"ual a C
n
% &or tanto$
+ M 2
n
S ?
n
2
n
S ?
3
2
2
S ?
2

2

S ?

2
0
La e3presion obtenida$ coincide precisamente con la e3pansion en potencias de dos del nu
mero binario ?
n
?
3
?
2
?

%
Como e9emplo$podemos obtener la representacion en binario del numero 23@$ empleando
el metodo descritoD vamos dividiendo el numero ! los cocientes sucesivos entre dos$ #asta obtener
un cociente i"ual a uno ! a continuacion$ construimos la representacion binaria del numero
colocando por orden$ de derec#a a iz:uierda% los restos obtenidos de las sucesivas divisiones !
anVadiendo un uno mas a la iz:uierda de la cifra construida con los restosD
+ividendo Cociente 2 ?esto
23@
A
;>
2C
@
A
3
A
;>
2C
@
A
3

&or tanto$ la representacion en binario de 23@ es 000%


-upon"amos a#ora un numero no entero$ representado en decimal$ de la forma 0$ d % -i
lo multiplicamos por dosD
=

$ d

M 0$ d 2
E%F +onde =

representa la parte entera ! d

la parte decimal del numero calculado% &odemos
entonces
representar 0$ d como$
0$ d M E=

$ d

F 2

M =

2

S 0$ d

2

E%2F
-i volvemos a multiplicar 0$ d

por dos$
=
2
$ d
2
M 0$ d

2 E%3F
! sustitu!endo en %2
0$ d

M =
2
2

S 0$ d
2
2

E%@F
0$ d M =

2

S =
2
2
2
S 0$ d
2
2
2
E%;F
]Kasta cuando repetir el procesoO =n principio #asta :ue obten"amos un valor cero para la
parte decimal$ 0$ d
n
M 0% &ero esta condicion puede no cumplirse nunca% &uede darse el caso de
#ec#o es lo mas probable de :ue un numero :ue tiene una representacion e3acta en decimal$ no
la ten"a en binario% =l criterio para detener el proceso sera entonces obtener un determinado nu
mero de decimales o bien se"uir el proceso #asta :ue la parte decimal obtenida vuelva a repetirse%
&uesto :ue los ordenadores tienen un tamanVo de re"istro limitado$ tambien esta limitado el
numero de d"itos con el :ue pueden representar un numero decimal% &or eso$ lo #abitual
sera truncar el numero asumiendo el error :ue se comete al proceder as% +e este modo$
obtenemos la e3pansion del numero ori"inal en potencias de dos$
0$ d 2 M =

2

S =
2
2
2
S S =
n
2
3
S
E%<F +onde los valores =

=
n
son precisamente los d"itos correspondientes a la
representacion
del numero en binarioD 0%=

=
2
=
n
% E=s trivial comprobar :ue solo pueden valer 0 o F%
,eamos un e9emplo de cada caso$ obteniendo la representacion binaria del numero 0$ <2;$ :ue
tiene representacion e3acta$ ! la del numero 0$ <2<$ :ue no la tiene% =n este se"undo caso$
calcula1 remos una representacion apro3imada$ tomando > decimales%
& decimal 2 & entera
0$<23
0$2@<
0$@C2
0$C>@
0$C<>
0$C3<
0%>A2
0%A@@
$2@<
0$@C2
0$C>@
$C<>
0$C3<
$>A2
%A@@
%@>>

0
0

%2% 6&L0C6C0B)=- += -B*2J6?= C0=)2

0*0CB
23
& decimal & entera
0$<2; $2;
0$2; 0$; 0
0$; $0
&ara construir la representacion binaria del primero de los numeros$ nos basta tomar las partes
enteras obtenidas$ por orden$ de derec#a a iz:uierda ! anVadir un 0 ! la coma decimal a la
iz:uierda% &or tanto la representacion binaria de 0$ <2; es 0$ 0% -i e3pandimos su valor en
potencias de dos$ volvemos a recuperar el numero ori"inal en su representacion decimal%
=n el se"undo caso$ la representacion binaria$ tomando nueve decimales de 0$ <23 es
0$00% &odemos calcular el error :ue cometemos al despreciar el resto de los decimales$
volviendo a convertir el resultado obtenido a su representacion en base diez$
0 2
0
S 2

S 0 2
2
S 0 2
3
S 2
@
S 2
;
S 2
<
S 2
A
S 2
>
M
0$ <20C3A; E%AF =l error cometido es$ en este casoD =rror M 0$ <23 0$ <20C3A; M 0$
00C0<2;%
%2% 6plicaciones de -oft.are Cientfico
+entro del mundo de las aplicaciones$ merecen una mencion aparte las dedicadas al calculo
cientfico$ por su cone3ion con la asi"natura%
=s posible emplear len"ua9es de alto nivel para construir rutinas ! pro"ramas :ue permitan
resolver directamente in determinado problema de calculo% =n este sentido$ el len"ua9e
*B?2?6) se #a empleado durante anVos para ese fin$ ! todava si"ue empleandose en
muc#as disciplinas cientficas ! de la 0n"eniera% -in embar"o$ #a! muc#os aspectos no triviales
del calculo con un computador$ :ue obli"aran al cientfico :ue tuviera :ue pro"ramar sus
propios pro"ramas a ser a la vez un e3perto en computadores% &or esta razon$ se #an ido
desarrollando aplicaciones especficas para calculo cientfico :ue permiten al investi"ador
centrarse en la resolucion de su problema ! no el desarrollo de la #erramienta adecuada para
resolverlo%
=n al"unos casos$ se trata de aplicaciones a medida$ relacionadas directamente con al"un area
cientfica concreta% =n otros$ consisten en pa:uetes de funciones especficos para realizar de
forma eficiente determinados calculos$ como por e9emplo el pa:uete -&-- para calculo estad
stico%
Un "rupo especialmente interesante lo forman al"unos pa:uetes de soft.are :ue podr
amos situar a mitad de camino entre los len"ua9es de alto nivel ! las aplicacionesD Contienen
e3tensas libreras de funciones$ :ue pueden ser empleadas de una forma directa para realizar
calculos ! ademas permiten realizar pro"ramas especficos empleando su propio len"ua9e% =ntre
estos podemos destacar Mat#ematica$ Maple $ Matlab$ Bctave ! -cilab % =l uso de estas
#erramientas se #a e3tendido enormemente en la comunidad cientfica% 6l"unas como Matlab
constitu!en casi un estandar en determinadas areas de conocimiento%
C6&

02ULB % 0)2?B+UCC0B

) 6L -B*2J6?= C0=)2

0*0CB
2@
Captulo 2
0ntroduccion a la pro"ramacion
en
Matlab
=ste captulo presenta una introduccion "eneral a la pro"ramacion% &ara su desarrollo$
vamos a emplear una de las aplicaciones informaticas para calculo cientfico :ue mas aceptaci
on #a tenido en los ultimos anVosD el entorno de pro"ramacion de Matlab% Matlab es el acr
onimo de M62ri3 L64borator!% -u computacion numerica emplea como elementos basicos
matrices
Usaremos esta #erramienta$ entre otras motivos$ por:ue nos ofrece la posibilidad de realizar
pro"ramas similares a los :ue podramos realizar con un len"ua9e de pro"ramacion de alto
nivel$ nos permite resolver problemas de calculo cientfico directamente$ empleando las
#erramientas :ue inclu!e ! ademas nos permite combinar ambas cosas%
=ste captulo no pretende ser e3#austivo$ cosa :ue por otro lado resulta imposible en el
caso de Matlab$ sino tan solo dar una breve introduccion a su uso% 6fortunadamente$ Matlab
cuenta con una mu! buena documentacion$ accesible a traves de la ^a!uda^$ eso s$ en in"les%
2%% =l entorno de pro"ramacion de Matlab
Cuando iniciamos Matlab en el computador$ se abre una ventana formada por uno o mas
pane1 les% =sta ventana$ constitu!e lo :ue en pro"ramacion se llama un entorno de desarrollo
inte"rado o$ abreviadamente$ 0+= Eacronimo tomado de su nombre en 0n"lesD inte"rated
development envi1 ronment% =l 0+= de Matlab$ contiene todo los elementos necesarios para
pro"ramar% La fi"ura 2% muestra el aspecto del 0+= de Matlab%
-e"un como se confi"ure$ el 0+= de Matlab puede mostrar un numero ma!or o menor
de paneles ! una disposicion de los mismos distinta a la mostrada en la fi"ura% La me9or manera
de aprender estos ! otros detalles del 0+= es usarlo% 6:u nos centraremos solo en al"unos
aspectos fundamentales%
2%%% La ventana de comandos de Matlab
+e los paneles mostrados en la ventana de la fi"ura 2%$ vamos a empezar e3aminando el situado
a la derec#a% -e trata de la ventana de comandos Ecommand .indo. F de Matlab% la ventana
muestra el simbolo __$ :ue recibe el nombre de prompt !$ a continuacion$ una barra vertical |
parpadeante% La ventana de comandos permite al usuario interactuar directamente con MatlabD
Matlab puede recibir instrucciones directamente a traves de la ventana de comandos$ e9ecuta
las instrucciones
2;
C6&

02ULB 2% 0)2?B+UCC0B

) 6 L6 &?B(?6M6C0B

) =)
M62L64
2<
*i"ura 2%D =ntorno de desarrollo inte"rado de Matlab
recibidas$ ! devuelve los resultados de nuevo en la ventana de comandos% ,eamos un e9emplo mu!
sencilloD si escribimos en la ventana de comandosD
>> a=18 3
Matlab calcula la suma pedida$ devuelve el resultado !$ por ultimo$ vuelve a presentar el prompt$
para indicarnos :ue est preparado para recibir otro comando%
a =
!1
>>
+e este modo$ podemos emplear Matlab de un modo analo"o a como emplearamos una
calcu1 ladoraD realizamos una operacion$ obtenemos el resultado$ realizamos otra operacion$
obtenemos el resultado ! as sucesivamente%
2%%2% ,ariables%
=n el el e9emplo :ue acabamos de ver$ Matlab calcula el resultado pedido$ ! lo presenta en
pantalla usando la e3presion
a =!1
]&or :ue #ace falta escribir a M > S 3 en lu"ar de escribir directamente > S 3O La razon
tiene :ue ver con el modo de traba9o de Matlab$ ! de otros len"ua9es de alto nivel% =sto nos
lleva al concepto de variable%
&odemos ver una variable como una re"ion de la memoria del computador$ donde un pro"rama
"uarda una determina informacion/ numeros$ letras$ etc% Una caracterstica fundamenta de
una variable es su nombre$ !a :ue permite identificarla% Como nombre para una variable se
puede
esco"er cual:uier combinacion de letras ! numeros$ empezando siempre con una letra$ en el
caso de Matlab

% -e puede ademas emplear el si"no 8 8% Matlab distin"ue entre ma!usculas ! minu
sculas$ por lo :ue si ele"imos como nombres de variable &ino$ &0)B ! &i)o$ Matlab las
considerara como variables distintas%
=n al"unos len"ua9e$ es preciso indicar al ordenador :ue tipo de informacion se "uardara en
una determinada variable$ antes de poder emplearlas% =sto permite mane9ar la memoria del
computador de una manera mas eficiente$ asi"nando zonas adecuadas a cada variable$ en funcion
del tamanVo de la informacion :ue "uardaran% 6 este proceso$ se le conoce con el nombre de
declaracion de variables% =n Matlab no es necesario declarar las variables antes de emplearlas%
=l metodo mas elemental de emplear una variable es asi"narle la informacion para la :ue
se creo% &ara #acerlo$ se emplea el smbolo de asi"nacion$ :ue coincide con si"no M empleado
en matematicas% Como veremos mas adelante la asi"nacion en pro"ramacion ! la i"ualdad en
ma1 tematicas no representan e3actamente los mismo% La manera de asi"nar directamente
informacion a una variable es escribir el nombre de la variable$ a continuacion el si"no de
asi"nacion !$ por ultimo$ la informacion asi"nada$
"ombre#variable =
$
-i escribimos en la ventana de comandos la e3presion anterior ! pulsamos el retorno de carro%
Matlab devuelve el si"uiente resultadoD
>>
"ombre#variable=$
"ombre#variable =
$
>>
Matlab e9ecuta las instrucciones indicadas ! nos confirma :ue #a creado en la memoria una variable
"ombre variable ! :ue #a "uardado en ella el numero
@%
=n Matlab podemos emplear el smbolo de asi"nacion para construir variables :ue
"uarden distintos tipos de datos$
% =nteros positivos ! ne"ativos
>> a=$
a =
$
>>b=%$
b =
%$
2% )umeros con parte entera ! parte decimal separadas por un punto$ positivos ! ne"ativos%

Como se vera mas adelante$ Matlab tiene un con9unto de nombres de instrucciones ! comandos !a definidos%
-e debe evitar emplear dic#os nombres$ !a :ue de #acerlo se pierde acceso al comando de Matlab :ue representan
>> a=13.$&'8
a =
13.$&'8
>> b=%13.$&'8
b =
%13.$&'8
3% )umeros e3presados como potencias de 0 Ela potencia de 0 se representa con la letra
e se"uida del valor del e3ponenteF%
>> f=3e1(
f =
3.((((e(1(
>> g=%3e1(
g =
%3.((((e(1(
>> h=3e%1(
h =
3.((((e%(1(
>> t=%3e%1(
t =
%3.((((e%(1(
@% )umeros comple9os% &ara indicar la parte ima"inaria se puede emplear la letra i o la letra )%
>> s=!3i
s =
!.(((( 3.((((i
>> w=$%&)
w =
$.(((( % &.((((i
;% Caracteres$ letras o numeros$ mane9ados estos ultimos como smbolos% -e indica a
Matlab :ue se trata de un caracter escribendolo entre comillas simples$
>> p=*a*
p =
a
>> +=*1*
+ =
1
<% Cadenas de caracteres%
>> m=*hola amigos*
m =
hola amigos
La forma :ue #emos visto de asi"nar un valor a una variable es la mas sencilla pero no es
la unica% 2ambien podemos asi"nar un valor una variable a partir de una e3presion aritm
etica$ como #emos visto antes% 6demas podemos asi"nar un valor a una variable copiando el
contenido de otra variableD
>> a=18
a =
18
>> b=a
b =
18
>>
&or ultimo$ podemos asi"nar a una variable el valor de una funcion en un
puntoD
>> x=(
x =
(
>> y=cos,x-
y
=
1
>>
La variable y contiene el valor de la funcion coseno en el punto x=(% Mas adelante
estudiaremos como mane9ar funciones en Matlab%
-i escribimos directamente en la lnea de comandos de Matlab$ un numero$ una e3presi
on al"ebraica o una funcion$ sin asi"narlas a una variable$ Matlab crea automaticamente una
variable para "uardar el resultado$ 6s por e9emploD
>> 3
& ans =
8
>>
Matlab "uarda el resultado de la operacion realizadaD 3 S @$ en la variable ans% -e trata del nombre
de variable por defecto/ es una abreviatura de al palabra in"lesa ans.er ErespuestaF% =n cual:uier
caso es recomendable asi"nar los resultados de las operaciones e3plcitamente a una variable% La
razon para ello tiene :ue ver con lo :ue llamaremos reasi"nacion de variables%
0ma"inemos :ue creamos en Matlab una variable asi"nandole un valorD
>> a=3$
a =
3$
>>
-i a continuacion$ asi"namos a esa misma variable el resultado de una operaci
on$
>> a=1!&
a =
1.
>>
=l valor inicialmente asi"nado a la variable a se pierde% -encillamente #emos reasi"nado a la
variable un nuevo valor sobreescribiendo el anterior% -i en la lnea de comandos escribimos
operaciones sin asi"nar el resultado a una variable concreta$ Matlab lo asi"nara a la variable ans
pero esto si"nifica :ue cada nueva operacion reasi"na su resultado a la variable ans$ con lo :ue
solo conservaremos al final el resultado de la ultima de las operaciones realizadas%
=s posible en Matlab crear una variable :ue no conten"a nada% &ara ello #a! :ue emplear dos s
mbolos especialesD Q ! R% 6s si escribimos en la lnea de comandosD
>> variable#vacia=/0
variable#vacia =
/0
>>
obtenemos una variable :ue no contiene nada% Mas adelante veremos la utilidad de #acerlo%
Kasta a#ora$ siempre :ue #emos realizado una operacion en la ventana de comandos$
Matlab nos #a respondido escribiendo en pantalla el resultado de la misma% =n muc#as ocasiones$
no nos interesa :ue Matlab nos muestre por pantalla el resultado de una operacion/ por e9emplo$
por:ue se trata de un resultado intermedio$ o por:ue es un resultado de "ran tamanVo ! su
visualizacion por pantalla no es util ! sin embar"o si :ue consume muc#o tiempo% &odemos
omitir la visualizacion por pantalla del resultado de una operacion$ si terminamos la operaci
on$ anVadiendo al final un punto ! coma E1F$
>>
2=3&1
>>
3=21
3
=
4
=n la primera operacion #emos anVadido E1F al final de la lnea$ Matlab no muestra el
resultado% -in embar"o$ si :ue #a realizado la operacion pedida ! "uardado el resultado en la
variable 2% &or eso es posible emplearla en la se"unda operacion para crear la variable 3%
?ecursion% Kemos indicado antes como el smbolo de asi"nacion M en pro"ramacion no
coinci1 de e3actamente con la i"ualdad matematica% Un e9emplo claro de estas diferencias lo
constitu!e la recursion% =sta se produce cuando la misma variable aparece a los dos lados del s
mbolo de asi"nacionD
>> a=3
a =
3
>> a=a1
a =
$
La e3presion anterior no tiene sentido matematicamente$ !a :ue una variable no puede ser i"ual a
si misma mas la unidad% -in embar"o$ en pro"ramacion$ es una sentencia validaD el ordenador toma
el valor almacenado en la variable a$ le suma ! "uarda el resultado en la variable a$
sobreescribiendo el valor anterior%
La recursion se emplea mu! a menudo en pro"ramacion$ ente otras venta9as$ permite crear con1
tadores$ variables :ue van incrementando o decrementando su valor pro"resivamente ! permite
a#orrar espacio de memoria cuando se realizan operaciones :ue re:uieren calculos intermedios%
=l espacio de traba 9o de Matlab Jor5space% Matlab "uarda en memoria las variables
:ue creamos en la ventana de comandos ! las asocia a lo :ue se conoce como el espacio de
traba9o de Matlab% +ic#o espacio de traba9o contiene una relacion de las variables creadas de
modo :ue podamos volver a utilizarlas en la ventana de comandos% Uno de los paneles :ue el 0+=
de Matlab puede mostrarnos es precisamente el Jor5space% La fi"ura 2%2 muestra dic#o panel% =n
el se mues1 tran los nombres de las variables contenidas en el espacio de traba9o$ as como
informacion relativa a su valor$ tamanVo en memoria etc%
*i"ura 2%2D =l Jor5space de Matlab
6demas del panel :ue acabamos de describir$ es posible listar el contenido de las variables
presentes en el Jor5space empleando dos comandos especiales de Matlab/ se trata de los comandos
who ! whos% =l primero de ellos nos devuelve en la ventana de comandos los nombres de las
variables contenidas en el Jor5space% =l se"undo nos devuelve los nombres de las variables 9unto
con informacion adicional sobre su contenido$ tamanVo$ etc%
>> who
5our variables are6
"ombre#variable
a
b
x
y
>> whos
"ame 7ize 3ytes 8lass 2ttributes
"ombre#variable 1x1 8 double
a 1x1 8 double
b 1x1 8 double
x 1x1 8 double
y 1x1 8 double
>>
&ara eliminar una variable del Jor5space$ se emplea el comando clear% -i escribimos en la
ventana de comandos el comando clear$ se"uido del nombre de una variables$ Matlab la elimina
del Jor5space% -i escribimos el comando clear$ sin anVadir nada mas$ Matlab eliminara
2B+6-
las variables contenidas en el Jor5space%
*ormatos de visualizacion Kemos visto en los e9emplos anteriores como al realizar una
opera1 cion en Matlab$ se nos muestra el resultado en la ventana de comandos% 6demas podemos
e3aminar el contenido de cual:uier variable contenida en el .or5space sin mas :ue escribir su
nombre en la ventana de comandos ! pulsar la tecla retorno de carro%
Matlab permite ele"ir la forma en :ue los resultados se presenta por pantalla% &ara ello se
emplea el comando format% La si"uiente tabla$ resume los formatos mas comunmente
empleados%
2abla 2%D *ormatos numericos mas comunes en Matlab
Comando formato Comentario
format short 2$3@;A coma fi9a% Cuatro decimales
format short9 $23@<e S 0 coma flotante% Cuatro decimales
format long 2$3@;<A>C023@;00 coma fi9a% Guice decimales
format long9 $23@;<A>C023@;0e S 0 coma flotante% Guice decimales
2%%3% ,ectores ! matrices%
Una de las caracterstica mas interesantes de Matlab$ es la posibilidad de crear
facilmente matrices% -e pueden crear de muc#as maneras$ la mas elemental de todas ellas$ emplea
el operador de asi"nacion M$ ! los smbolos especiales Q$ R$ el punto ! coma / ! la coma $% Las
matrices se crean introduciendo los valores de sus elementos por filas$ separados por comas o
espacios% Una vez introducidos todos los elementos de una fila$ se anVade un punto ! coma$ o se
pulsa el retorno de carro$ ! se anVaden los elementos de la fila si"uiente% =l si"uiente e9emplo
muestra como crear una matriz de de dos filas ! tres columnasD
>> matriz!3 =/ 1 3 $ 13 &
%10
matriz!3 =
1 3 $
3 & %1
o tambienD
>> matriz!3 =/ 1 3 $
3 & %10
matriz!3 =
1 3 $
3 & %1
=n el primer caso$ se empleado el punto ! coma para separar las filas ! en el se"undo se
#a empleado el retorno de carro% =n ambos se emplea el smbolo Q para indicar a Matlab
:ue :ueremos empezar a construir una matriz$ ! el smbolo R para indicar a Matlab :ue #emos
terminado de construirla% Una vez construida$ Matlab nos devuelve en la ventana de comandos
la Matriz completa% Matlab nos permite ademas emplear cada elemento de una matriz como si
se tratase de una variable$ es decir$ se puede asi"nar a los elementos de una matriz un valor
numerico$ el resultados de una operacion o un valor "uardado en otra variableD
>> a=1
a =
1.((
>> b=!
b =
!.((
>> mtr=/ a ab a%b1 1 (.&
cos,(-0
mtr =
1.(( 3.(( %1.((
1.(( (.&( 1.((
>>
Matlab considera las matrices como la forma basica de sus variables$ as para Matlab un
escalar es una matriz de una fila por una columna% Un vector fila de 3 elementos es una matriz de
una fila por tres columnas ! un vector columna de tres elementos es una matriz de tres filas ! una
columna%
0nde3acion% 6l i"ual :ue se #ace en al"ebra$ Matlab es capaz de referirse a un elemento cual1
:uiera de una matriz empleando ndices para determinar su posicion Efila ! columnaF dentro de
la matriz% `
a

a
2
a
3
`
a M
`
a
2
a
22
a
23
`
a
3
a
32
a
33
=l criterio para referirse a un elemento concreto de una matriz$ en Matlab es el mismoD se indica
el nombre de la variable :ue contiene la matriz ! a continuacion$ entre parentesis ! separados
por una coma$ el ndice de su fila ! despues el de su columnaD
>> a=/1 ! 31 $ & '1 . 8 40
a =
1.(( !.(( 3.((
$.(( &.(( '.((
..(( 8.(( 4.((
>> a,1:!-
ans =
!.((
>> a,!:1-
ans =
$.((
>>
=s interesante observar de nuevo como Matlab asi"na por defecto el valor del elemento
buscado a la variable ans% Como !a se #a dic#o$ es me9or asi"nar siempre una variable a los
resultados$ para ase"urarnos de :ue no los perdemos al realizar nuevas operacionesD
>> a1!=a,1:!-
a1! =
!.((
>> a!1=a,!:1-
a!1 =
$.((
>>
6#ora #emos creado dos variables nuevas :ue contienen los valores de los elementos a
2
! a
2
de
la matriz a%
Matlab puede seleccionar dentro de una matriz no solo elementos aislados$ sino tambien
sub1 matrices completas% &ara ello$ emplea un smbolo reservado$ el smbolo dos puntos D% =ste s
mbolo se emplea para recorrer valores desde un valor inicial #asta un valor final$ con un
incremento o paso fi9o% La sinta3is esD inicio6paso6fin$ por e9emplo podemos recorrer los nu
meros enteros de cero a > empleando un paso 2D
>> (6!68
ans =
( !.(( $.(( '.(( 8.((
>>
=l resultado nos da la lista de los numeros 0$ 2$ @$ <$ >% 6demas$ si no indicamos el tamanVo
del
paso$ Matlab tomar por defecto un paso i"ual a uno% =n este caso basta emplear un unico s
mbolo
dos puntos para separar el valor de inicio del valor finalD
>> 16&
ans =
1.(( !.(( 3.(( $.(( &.((
C6&

02ULB 2% 0)2?B+UCC0B

) 6 L6 &?B(?6M6C0B

) =)
M62L64
3<
>>
&odemos emplear el smbolo dos puntos$ para obtener submatrices de una matriz dada% 6s
por e9emplo si construimos una matriz de cuatro filas por cinco columnasD
>> matriz=/1 ! $ & '
3 & %' ( !
$ & 8 4 (
3 3 %1 ! (0
matriz =
1.(( !.(( $.(( &.(( '.((
3.(( &.(( %'.(( (.(( !.((
$.(( &.(( 8.(( 4.(( (.((
3.(( 3.(( %1.(( !.(( (.((
>>
&odemos obtener el vector formado por los tres ultimos elementos de su se"unda filaD
>> fil=matriz,!:36&-
fil =
%'.(( ( !.((
>>
B el vector columna formado por su se"unda columna completaD
>> matriz,16$:!-
ans =
!.((
&.((
&.((
3.((
>>
o la submatriz de tres filas por tres columnas formada por los elementos :ue ocupan las filas 2
a @ ! las columnas 3 a ;D
>> subm=matriz,!6$:36&-
subm =
%'.(( ( !.((
2%% =L =)2B?)B += &?B(?6M6C0B

) +=
M62L64
3A
8.(( 4.(( (
%1.(( !.(( (
>>
6 parte de la inde3acion tpica del al"ebra de los elementos de una matriz indicando su fila
! columna$ en Matlab es posible referirse a un elemento de una matriz empleando un unico
ndice% =n este caso$ Matlab cuenta los elementos por columnas$ de arriba aba9o ! de iz:uierda a
derec#a$
`
a

a
@
a
A
`
6 M
`
a
2
a
;
a
>
`
a
3
a
<
a
C
6s por e9emplo$ en una matriz 6 de 3 filas ! @ columnas$
>> 2=/3 ( %1 (1 ! 1 ( (1 1 3
( (0 2 =
3 ( %1 (
! 1 & .
1 3 4 8
las e3presiones$
>> 2,!:3-
ans =
&
!
>> 2,8-
ans =
&
#acen referencia al mismo elemento de la matriz 6%
2%%@% =structuras ! celulas
-e trata de dos tipos de variables especiales% 6mbas comparten la propiedad de poder combinar
dentro de s variables de distintos tipos%
=structuras% Una estructura es una variable :ue "uarda la informacion divida en campos%
&or e9emplo$ si escribimos en la ventana de matlab$
>> est.nombre=*2na*
est =
nombre6 *2na*
>> est.edad=!&
est =
nombre6 *2na*
edad6 !&
C6&

02ULB 2% 0)2?B+UCC0B

) 6 L6 &?B(?6M6C0B

) =)
M62L64
3>
obtenemos una estructura con dos campos$ el primero de ellos es el campo nombre$ ! "uarda
dentro una cadena de caracteres *2na*$ el se"undo es el campo edad ! "uarda dentro el valor
!&% La estructura :ue acabamos de definir es una sola variable llamada es ! podemos aplicar
cual:uier comando de matlab cu!o resultado no dependa del contenido especfico de la variable%
&odemos copiarla en otra estructura$
>> est!=est
est! =
nombre6 *ana*
edad6 !&
podemos borrarla$
>> clear est
>> who
5our variables are6
est!
>>
)o podemos realizar sobre ella$ como un todo$ operaciones aritmeticas o relacionales$
pero s sobre sus campos$
>> x=est.edad1!
x =
3.
=l numero de campos de una estructura puede aumentarse anVadiendo a su nombre$ el
nombre del nuevo campo separado por un punto ! asi"nando un valor o una variable a dic#o
campo%
>> est.campo#nuevo=/1 !13 $1 ' .0
est =
nombre6 *ana*
edad6 !&
campo#nuevo6 /3x! double0
>> y=/1 ! 30
y =
1 ! 3
>> est.campo#nuevo!=y
est =
nombre6 *ana*
edad6 !&
campo#nuevo6 /3x! double0
campo#nuevo!6 /1 ! 30
&odemos tambien eliminar campos de una estructura mediante el comando rmfield$
>> est=rmfield,est:*edad*-
est =
nombre6 *ana*
campo#nuevo6 /3x! double0
campo#nuevo!6 /1 ! 30
2%% =L =)2B?)B += &?B(?6M6C0B

) +=
M62L64
3C
&or ultimo$ una estructura nos permite definir ! utilizar varios niveles de campos% &ara
ello$ basta ir definiendo los nombres de los campos de un nivel separados por un punto del nombre
del nivel anterior$
>> multinivel.datos#personales.nombre=*2na*
multinivel =
datos#personales6 /1x1 struct0
>> multinivel.datos#personales.primer#apellido=*;imenez*
multinivel =
datos#personales6 /1x1 struct0
>> multinivel.datos#personales.segundo#apellido=*<asarte*
multinivel =
datos#personales6 /1x1 struct0
>> multinivel.domicilio.calle=*=onzano*
multinivel =
datos#personales6 /1x1 struct0
domicilio6 /1x1 struct0
>> multinivel.domicilio.numero=.!$
multinivel =
datos#personales6 /1x1 struct0
domicilio6 /1x1 struct0
>> multinivel.valor=/3 $ &1 3.& ! 30
multinivel =
datos#personales6 /1x1 struct0
domicilio6 /1x1 struct0
valor6 /!x3 double0
La informacion se encuentra a#ora estructurada en niveles% 6s por e9emplo$
>> multinivel.domicilio
ans =
calle6 *=onzano*
numero6 .!$
Me devuelve el contenido del campo domicilio :ue es a su vez una estructura formada por
dos campos calle ! numero% La informacion :ueda estructurada en niveles :ue pueden
ramificarse tanto como se desee% &ara obtener la informacion contenida al final de una rama$ es
preciso indicar todos los campos :ue se atraviesan #asta lle"ar a ella$
>> multinivel.datos#personales.segundo#apellido
ans =
<asarte
Matlab tiene definidas funciones propias para conse"uir un mane9o eficiente de las estructuras%
6 parte de la funcion rmfield de la :ue #emos #ablado anteriormente$ Cabe destacar la funcion
struct :ue permite crear directamente una estructura% -u sinta3is es$
s= struct,*field1*: values1: *field!*: values!: ...-
donde s representa el nombre de la estructura$ field1$field!$ etc son los nombres correspon1
dientes a cada campo$ introducidos entre comillas$ ! values1$ etc los valores contendidos en cada
campo% &ara un conocimiento mas profundo del uso de las estructuras se aconse9a consultar la
a!uda de Matlab%
C6&

02ULB 2% 0)2?B+UCC0B

) 6 L6 &?B(?6M6C0B

) =)
M62L64
@0
Celulas% Las celulas$ cells en Matlab$ son ob9etos :ue almacenan datos de diversos tipos en
una misma variable% 6 diferencia de las estructuras$ las celulas no e3panden un arbol de campos
sino :ue "uardan cada dato en una acelda8% &ara referirse a una celda concreta$ empleamos un
ndice$ de modo analo"o a como #acemos con un vector% &ara construir una celula$ procedemos
de modo analo"o a como #acemos con un vector$ pero en lu"ar de emplear corc#etes como
delimitadores$ empleamos llaves% 6s$ por e9emplo$
>> a=>/1 ! 31 $ & '1 . 8 40:*cadena*: %$&1*pepe*: /1 ! 30: *cadena!*?
a
=
/3x3 double0 *cadena* / %$&0
*pepe* /1x3 double0 *cadena!*
Kemos creado una celula a$ cu!os elementos son$ una matriz 3 3$ la cadena de
caracteres cadena$ el numero @;$ otra cadena de caracteres pepe$ el vector Q$ 2$ 3R ! una u
ltima cadena de caracteres cadena!%
Los elementos separados por espacios o por comas simples$ pertenecen a la misma fila dentro
de la celula% Los elementos pertenecientes a distintas filas estan separados por un punto ! coma%
&odemos obtener el tamanVo de la celula su numero de filas ! columnas empleando el
comando size $ i"ual :ue #icimos para el caso de vectores o matrices$
>> size,a-
ans =
! 3
I podemos referirnos a una celda cual:uiera de la celula$ ! obtener su contenido
indicando entre llaves la fila ! la columna a la :ue pertenece% 6s por e9emplo$ para obtener el
vector Q$ 2$ 3R de la celula a del e9emplo anterior #acemos$
>> vector=a>!:!?
vector =
1 ! 3
Las celdas$ de modo analo"o a como suceda con las estructuras$ nos permiten a"rupar
datos de distinto tipo empleando una sola variable% 6demas$ el #ec#o de :ue los datos ester
ordenados por celdas en filas ! columna$ #ace sencillo :ue se puede acceder a ellos%
2%2% =ntrada ! salida de +atos
Matlab posee una amplia coleccion de metodos para importar datos desde ! e3portar datos
a un fic#ero% 6 continuacion describimos al"unos de los mas usuales%
2%2%% =3portar e importar datos en Matlab
+atos en formato propio de Matlab Matlab posee un formato de arc#ivo propio para mane9ar
sus datos% Los arc#ivos de datos propios de Matlab$ emplean la e3tension .mat%
-i tenemos un con9unto de variables en el .or5space$ podemos "uardarlas en un fic#ero em1
pleando el comando save$ se"uido del nombre del fic#ero donde :ueremos "uardarlos% )o es preciso
incluir la e3tension .mat$ Matlab la anVade automaticamenteD
>> save datos
2%2% =)2?6+6 I -6L0+6 += +62B- @
Matlab crear
en el directorio de traba9o un nuevo fic#ero datos.mat en el :ue :uedaran "uardadas
todas las variables contenidas en el .or5space% Los fic#eros .mat "enerados por Matlab estan
escritos en binario% )o se puede e3aminar su contenido empleando un editor de te3tos% Matlab
almacena toda la informacion necesaria nombre de las variables$ tipo$ etc para poder volver a
reconstruir las variables en el .or5space tal ! como estaban cuando se "enero el arc#ivo%
=s posible "uardar tan solo al"unas de las variables contenidas en el .or5space en lu"ar de
"uardarlas todas% &ara ello$ basta anVadir al comando save$ detras del nombre del arc#ivo$
el nombre de las variables :ue se desean "uardar$ separadas entre s por un espacio
>>save datos1 2 matriz#1 3
La instruccion anterior "uarda en un arc#ivo llamado datos%mat las variables 2$ matriz1 !
3%
Los datos contenidos en cual:uier fic#ero .mat "enerado con el comando save de Matlab$
pueden volver a car"arse en el .or5space empleando el comando load$ se"uido del nombre del
fic#ero cu!os datos se desean car"arD
load datos.mat
car"a en el .or5space las variables contenidas en el fic#ero datos.mat$ la e3tension del
fic#ero puede omitirse al emplear la funcion load% -i conocemos los nombres de las variables
contenidas en un arc#ivo .mat$ podemos car"ar en Matlab solo una o varias de las variables
contenidas en el arc#ivo$ escribiendo sus nombres$ separados por espacios$ detras del nombre del
arc#ivoD
>>load datos 2 @
matriz1
car"ar tan solo las variables 2$ @ ! matriz1$ de entre las :ue conten"a el fic#eros datos.mat
+atos en *ormato 6-C00 -e puede emplear tambien el comando save para e3portar
datos en formato 6-C00% &are ello es preciso anVadir al comando modificadores$
>>save datos.txt 2 %278AA
=ste comando "uardar la variable 2 en el fic#ero datos.txt% Matlab no anVade nin"una
e31
tension por defecto al nombre del fic#ero cuando empleamos el comando save con el modificador
%278AA% =n este caso$ #emos anVadido e3plcitamente la e3tension .txt$ esto facilita :ue el
arc#ivo
resultante se pueda e3aminar lue"o empleando un sencillo editor de te3to o una #o9a de calculo%
Cuando se e3portan datos desde Matlab en formato 6-C00$ Matlab "uarda tan solo los valores
numericos contenidos en las variables$ pero no los nombres de estas% &or otro lado$ "uarda tan
solo oc#o d"itos$ por lo :ue #abitualmente se pierde precision% =s posible "uardar datos en
formato 6-C00 si anVadimos al comando save el modificador %BCD3<9$
>>save nombre#2rchivo matriz#1: matriz!: ... %278AA %BCD3<9
-upon"amos :ue en .or5space tenemos "uardada la si"uiente matriz$

$30023<>C0000000e S 000 3$@;<C>3000000000e S 000 @$32<A>000000000e S 00<

a M
@$000230000000000e S 003 $2@;<AA000000000e S 00 $23;<;<A0000000e S 002
-i e9ecutamos en Matlab$
>>save datos.txt a %278AA
=l fic#ero resultante
tendra
el aspecto si"uiente$
1.3((!3'4e(( 3.$&'483(e(( $.3!1'.8(e(&
$.(((!3((e(3 1.!$&'..(e(1 1.!31&'&.e(!
es decir$ los elementos de una misma fila de la matriz a se "uardan en una fila separados por
espacios$ las filas de la matriz se separan empleando retornos de carro cada una ocupa una linea
nueva ! los valores cu!os d"itos si"nificativos e3ceden de > se #an truncado$ redondeando
el ultimo d"ito representado% =ste ultimo es el caso de los elementos a

! a
33
de la
matriz del e9emplo%
Cuando se "uardan varias variables o todo el .or5space en un mismo fic#ero con formato
6-C00$ es preciso tener en cuenta :ue Matlab se limitara a "uardar los contenidos de las
variables$ uno deba9o de otro$ en el orden en :ue las escribamos detras del comando save Een el
caso de :ue "uardemos todas las variables del .or5space las "uardara una deba9o de otra por
orden alfabeticoF$ por lo :ue resulta difcil distin"uir las variables ori"inales% 6s por
e9emplo$ si tenemos en el .or5space las variables$
`
3 ;
`
`
3 @
`
6 M
`
2
`
a M
`
@ ;$< 2
`
c M

3 2

> 0 3 0
La orden$
>>save datos.txt c a 2 %278AA
produce el un arc#ivo con el si"uiente contenido$
3.(((((((e(( !.(((((((e((
1.(((((((e(( 3.(((((((e(( $.(((((((e((
$.(((((((e(( &.'((((((e(( !.(((((((e((
3.(((((((e(( (.(((((((e(( 1.(((((((e((
3.(((((((e(( &.(((((((e((
!.(((((((e(( 1.(((((((e((
8.(((((((e(( (.(((((((e((
=l comando load$ presenta al"unas limitaciones para car"ar datos contenidos en un fic#ero
6-C00% -olo funciona correctamente si el contenido del fic#ero puede car"arse en una unica
matriz$ es decir$ cada fila de datos en el fic#ero debe contener el mismo numero de datos%
6s$ en el e9emplo anterior$ los datos "uardados en el fic#ero datos.txt$ no pueden volver a
car"arse en Matlab usando el comando load%
&ara el caso de un fic#ero cu!os contenido pueda adaptarse a una matriz$ el comando load
car"a todos los datos en una unica matriz a la :ue asi"na el nombre del fic#ero sin e3tension%
Lectura ! escritura de datos con formato Matlab puede tambien escribir ! leer
datos$ empleando formatos ! procedimientos similares a los de el len"ua9e C% &ara ello$ es preciso
emplear varios comandos
2
D
=n primer lu"ar es preciso crear o si !a e3iste abrir el arc#ivo en :ue se :uiere "uardar o
del :ue se :uieren leer los datos% =n ambos casos se emplea para ello el comando fopen% La sinta3is
de este comando es de la forma$
fid=fopen,nombre de fichero:
permisos-
2
Lo :ue se ofrece a continuacion es solo un resumen del uso de los comandos ! formato mas frecuentes%
&ara obtener una informacion completa$ consultar la a!uda de Matlab%
3$ 30$;
`
a M
`
@0 ;000$< 223
`
c M

30
> 0 3 0
=l nombre del fic#ero debe ser una cadena de caracteres$ es decir$ debe ir escrito entre apostrofos%
Ka! al menos oc#o tipos de permisos distintos$ para una descripcion detallada consultar la
a!uda de Matlab% 6:u describiremos tan solo tres de ellos$ *w* .rite abre o crea un
arc#ivo con permiso de escritura% -i el arc#ivo !a e3ista su contenido anterior se sobreescribe%
-i se :uiere anVadir datos a un arc#ivo sin perder su contenido se emplea el modificador *a*
append los nuevos datos introducidos se escriben al final del fic#ero$ a continuacion de los !a
e3istentes% *r* read permiso de lectura$ es la opcion por defecto$ permite leer el contenido de
un arc#ivo% Cuando se traba9a en el sistema operativo Jindo.s$ es comun emplear los permisos
en la forma *wt* !
*rt*$ de este modo$ los arc#ivos se mane9an en el denominado formato ^te3to^% La variable fid$ es
un identificador del fic#ero abierto ! es tambien la forma de referirnos a el en un pro"rama$
o
en la lnea de comandos mientras permanece
abierto%
-upon"amos :ue #emos abierto o creado un arc#ivo para escribir en el$ datos
contenidos en el .or5space$
fichero1=fopen,*mi#fichero*:*wt*-
&ara escribir en el emplearemos el comando fprintf% La sinta3is de este comando necesita un
identificador de arc#ivo en nuestro caso sera fic#ero$ un descriptor del formato con en :ue se
desean "uardar los datos ! el nombre de la variable :ue se desea "uardar%
control=fprintf,fichero1:formato:nombre#de#variable:...-
Los descriptores de formato se escriben entre apostrofos% =mpiezan siembre con el caracter
E$ se"uido de un numero con formato e%d% +onde e es el numero mnimo de d"itos empleados
para "uardar cada dato ! e el numero de decimales$ por ultimo se anVade un caracter$
conocido como caracter de conversion$ :ue permite a9ustar el formato numerico de los datos%
Los mas usuales sonD f notacion de punto fi9o$ e notacion e3ponecial ! g la
notacion :ue resulte mas compacta de las dos anteriores%
6:u #emos incluido solo los caracteres de conversion mas usuales para el caso de datos num
eri1 cos% Cabe anVadir :ue para el caso de una cadena de caracteres se emplea como caracter de
conversion la letra s% &or e9emploD
>>2=*mi cadena de
caracteres*
>>num=fprinf,fid:*Es*: 2-
=scribe el te3to contenido en el vector 2 en el arc#ivo indicado por
fid%
Matlab$ almacena los datos consecutivamente uno detras de otro% -i se trata de matrices$ los va
le!endo por columnas ! una variable tras otra en el orden en :ue se #a!an introducido al llamar a
la funcion fprintf% &ara separar entre s los datos se puede anVadir a los descriptores de
formatos$ espacios ! tambien caracteres de escape como ?etornos de carro \r$ indicadores de
salto de lnea
\n o tabuladores \t$ entre
otros%
&or e9emplo$ supon"amos :ue tenemos en Matlab las si"uiente matrices
`
3$2; ;$22
`
6 M
`
2
`
$23@; 3$0>AC @23@$2
`
2

-i empleamos$
>>num=fprinf,fid:*E!.1f*: 2: a c-
Los datos se "uardaran en el arc#ivo indicado por fid en la si"uiente formaD
3.!!3.1&.!13(.&1.!$(.(3.1&(((.'$!3$.!!!3.(3(.((.(
(uardados en este formato resulta bastante difcil reconocerlos% -i probamos$
>>num=fprinf,fid:*E!.1f *: 2: a c-
=l resultado sera$
3.! !3.1 &.! 13(.& 1.! $(.( 3.1 &(((.' $!3$.! !!3.( 3(.( (.(
=l formato es de punto fi9o ! los datos aparecen separados por un espacio notese :ue en el
descriptor de formato se #a incluido un espacio entre la f ! el apostrofo% Los datos de las tres
matrices aparecen uno detras de otro$ ! se #an ido escribiendo en el arc#ivo por columnas
-i cambiamos de nuevo el descriptor de formato$
>>num=fprinf,fid:*E!.3gFn*: 2: a c-
obtendremos$
3.!&
!3.1
&.!!
13(
1.!3
$(
3.(4
&e(3
$.!3e(3
!!3
3(
(.(((!
Matlab eli"e el formato mas compacto para cada dato$ ! "uarda cada dato en una fila nueva$
debido al termino \n introducido al final del descriptor%
&or ultimo indicar :ue es posible emplear varios descriptores consecutivos$ en cu!o caso$
Matlab los aplica a cada dato consecutivamente$ cuando #a terminado con la lista de descriptores$
comienza de nuevo por el principio%
&or e9emplo$
>>num=fprinf,fid:*E!.3g E!.3g E!.3gFn*: a-
(uarda los datos contenidos en a como$
1.!3 $( 3.(4
&e(3 $.!3e(3 !!3
=s decir cada tres datos cambia a una lnea nueva% &or supuesto$ podramos #acer :ue los
datos se "uardaran con un formato distinto en cada caso$
>>num=fprinf,fid:*E!.3g E3f E!.3fFn*: a-
1.!3 $(.(((((( 3.(88
&e(3 $!3$.!((((( !!3.(((
&or ultimo indicar$ :ue si se emplea el comando fprintf sin emplear un identificador de
arc#ivo o empleando como identificador el valor % Matlab escribe el resultado directamente en la
ventana de comandos con el formato deseado%
&or e9emplo$
2%3% B&=?6C0B)=- 6?02M=

20C6-$ ?=L6C0B)6L=- I LB

(0C6-
@;
>>3 = /8.8 ...1 88(( ..((01
>>fprintf,1: *G is E'.!f metros o E8.3f mmFn*: 4.4: 44((: 3-
Mostrar en la ventana de comandos las si"uientes lneasD
G is 4.4( metros o 44((.(((
mm G is 8.8( metros o
88((.((( mm G is ...( metros
o ..((.((( mm
&ara car"ar arc#ivos desde un fic#ero :ue contiene datos en binario$ se emplea el comando
fscanf% -u uso es similar al de fprintf$ pero a#ora los datos pasaran desde el fic#ero donde estan
"uardados a una matriz%
>>2=fscanf,pid:*Ef*-
=L comando fscanf$ admite como parametros el numero ma3imo de datos :ue se leeran
del fic#ero$
a=fscanf,fid:*E&.!f*:H-
Lee como ma3imo M datos del fic#ero ! los "uarda en un vector a% =s posible dar a los datos
formato de matriz$ mediante dos parametros Efila ! columnaF$
a=fscanf,fid:*E&.!f*:/H:"0-
6#ora crear una matriz a de M filas por ) columnas% Matlab ira co"iendo los datos del fic#ero$
por columnas #asta rellenar la matriz%
=s posible dar al se"undo parametro el valor inf% +e este modo$ Matlab creara una matriz de
H filas ! el numero de columnas necesario para car"ar todos los datos del fic#ero% E-i faltan
elementos para completar la matriz resultante$ Matlab rellena los #uecos con cerosF &or ultimo$
una vez :ue se #an escrito o ledo datos en el fic#ero es preciso cerrarlo correctamente empleando
el comando fclose$ la sinta3is de este comando solo precisa :ue se inclu!a el identificador del
fic#ero :ue se :uiere cerrar$
>>fclose,fid-
Kerramienta de importacion de datos Matlab posee una #erramienta especial para importar
datos% Con ella$ es posible car"ar en Matlab datos de mu! diverso tipo$ no solo numericos sino
tam1 bien ima"enes$ sonido$ etc% Una de las venta9as de esta #erramienta es :ue reconoce
directamente
entre otros los arc#ivos creados por las #o9as de c
alculo%
&ara abrir en Matlab la #erramienta de importacion$ basta seleccionar en la pestanVa file
la opcion 0mport +ata% Matlab abre entonces una ventana :ue nos permite nave"ar por el
arbol de directorio ! seleccionar el arc#ivo del :ue deseamos importar los datos% Una vez
seleccionado$ Matlab abre la ventana mostrada en la ima"en 2%3% -e trata de un pro"rama
especial import .izard :ue sirve para "uiar al usuario en el proceso de car"ar las variables
contenidas en el fic#ero en el .or5space de Matlab%
2%3% Bperaciones aritmeticas$ relacionales !
lo"icas
2%3%% Bperaciones aritm
eticas
Una vez :ue sabemos como crear o importar variables en Matlab$ vamos a ver como podemos
realizar operaciones aritmeticas elementales con ellas% La sinta3is es mu! sencilla$ !
podemos
*i"ura 2%3D 6specto de la #erramienta de importacion de
datos
sintetizarla de la si"uiente maneraD
resultado M operando

operador

operando
2
operador
2
operando
3
operando
n
operador
n
=s decir basta concatenar los operadores con los operandos ! definir una variable en la :ue "uardar
el resultado% &or e9emplo$
>>x=11 y=!1 z=31 q=xyz
>>z='
=n este caso los operandos son las variables x$ y$ z$ el operador$ :ue se repite dos veces es el smbolo
:ue representa la operacion suma ! q es la variable en la :ue se "uarda el resultado$ en este caso$
de la suma de las tres variables anteriores%
Los operadores aritmeticos disponibles en Matlab cubren las operaciones aritmeticas
#abitua1 les$ pero #a! :ue recordar :ue Matlab considera sus varibles como matrices% &or lo
tanto$ las operaciones definidas Matlab las considera por de defecto operaciones entre matricee%
La tabla 2%2 contiene los operadores definidos en Matlab%
6 continuacion$ veremos al"unos e9emplos de mane9o de operaciones basicas% Kemos visto !a
el mane9o de la suma% -i se trata de matrices en vez de numeros$
>> 2=/1 ! 31 $ & '1 . 8 40
2 =
1 ! 3
$ & '
. 8 4
>> 3=/$ & '1 ! ( 31 %1 ! $0
3 =
$ & '
! ( 3
%1 ! $
2abla 2%2D Bperadores aritmeticos definidos en Matlab
operacion smbolo e9emplo notas
suma r=ab suma matricial
diferencia %
producto I r=aIb producto matricial
producto .I r=a.Ib producto por elementos
division J d=aJb +ivisionD a b

division .J d=a.Jb +ivision por elementos


divisio n \ d=a\b division p or la iz:uierdaD
a

b potenciacion K y=a K b potencia de una matriz
potenciacion .K y=a .K b potencia elemento a elemento
trasposicion * y=a* matriz traspuesta
>> 8=23
8 =
& . 4
' & 4
' 1( 13
&or supuesto$ #a! :ue respetar las condiciones en :ue es posible realizar una operacion aritm
etica entre matrices% La operacion$
>> 2=/1 ! 31 $ & '1 . 8
40 2 =
1 ! 3
$ & '
. 8 4
>> 3=/$ & '1 ! ( 30
3 =
$ & '
! ( 3
>> 8=23
9rror using
Hatrix dimensions must agree.
da un error por:ue solo es posible sumar matrices del mismo tamanVo%
3
=n el caso del producto$ Matlab define dos operaciones distintas% La primera es el producto
matricial normal$
>> 2=/1 ! 31 $ & '1 . 8
40 2 =
1 ! 3
$ & '
. 8 4
>> 3=/3 $1 %! 11 '
.0 3 =
3 $
%! 1
' .
>> ==2I3
= =
1. !.
38 '3
&4 44
=l se"undo producto$ no es propiamente una operacion aritmetica definida sobre matrices%
-e trata de un producto realizado elemento a elemento% &ara ello los dos factores deben ser
matrices del mismo tamanVo% =l resultado es una nueva matriz de i"ual tamanVo :ue las
iniciales en la :ue cada elemento es el producto de los elementos :ue ocupaban la misma posici
on en las matrices factores$
>> 2 = /1 ! 31 $ &
'0 2 =
1 ! 3
$ & '
>> 3 = /! 3 $1 1 !
30 3 =
! 3 $
1 ! 3
>> 8
=2.I3 8 =
3
,er las definiciones de las operaciones matriciales en el capitulo ;%2%
! ' 1!
$ 1( 18
=n "eneral$ cual:uier operador al :ue se antepone un punto .I .J .K indica una
operacion realizada elemento a elemento%
La division no est definida para matrices% -in embar"o$ en Matlab #a! definidas tres divisiones%
La primera$ emplea el smbolo clasico de division$ para simples numeros realiza la division
normal% &ara matrices$ la operacion es e:uivalente a multiplicar el primer operando por la matriz
inversa del se"undo% 6'4 6 4

% Las si"uientes tres operaciones son e:uivalentes en
Matlab$ aun:ue desde el punto de vista de como realiza el calculo para obtener el resultado$ son
numericamente distintas$
>> 2=/1 ! 31 $ & '1 . 8
40 2 =
1 ! 3
$ & '
. 8 4
>> 3=/! ( 11 3 ! %11 %! (
!0 3 =
! ( 1
3 ! %1
%! ( !
>> 8=2J3
8 =
(.'''. 1.(((( 1.'''.
1.'''. !.&((( 3.$1'.
!.'''. $.(((( &.1''.
>>
8=2Iinv,3- 8
=
(.'''. 1.(((( 1.'''.
1.'''. !.&((( 3.$1'.
!.'''. $.(((( &.1''.
>> 8=2I3K%1
8 =
(.'''. 1.(((( 1.'''.
1.'''. !.&((( 3.$1'.
!.'''. $.(((( &.1''.
=n el primer caso se empleado la division$ en el se"undo se a multiplicado la matriz 2 por
la inversa de 3$ calculandola mediante la funcion de Matlab inv$ ! en el tercer caso se #a
multiplicado la matriz 2 por 3 elevado a %
` `
`
`
`
La division elemento a elemento$ funciona de modo analo"o a como lo #ace la multiplicaci
on elemento a elemento%
La division por la iz:uierda$ representada mediante el smbolo \ es e:uivalente a multiplicar
la inversa del primer operando por el se"undo$ 6\4 6

4%
>> 2=/1 ! 31 $ & '1 3 %$
40 2 =
1 ! 3
$ & '
3 %$ 4
>> 3=/! ( 11 3 ! %11 %! (
!0 3 =
! ( 1
3 ! %1
%! ( !
>> 8=2F3
8 =
%(.4((( 1.(((( %1.&&((
(.8((( ( (.1(((
(.$333 %(.3333 (..833
>> 8=2K%1I3
8 =
%(.4((( 1.(((( %1.&&((
(.8((( (.(((( (.1(((
(.$333 %(.3333 (..833
>> 8=inv,2-I3
8 =
%(.4((( 1.(((( %1.&&((
(.8((( (.(((( (.1(((
(.$333 %(.3333 (..833
Uno de los usos tpicos de la division por la iz:uierda$ es la resolucion de sistema de
ecuaciones lineales Ever tema <F% &or e9emplo$ dado el sistema de ecuaciones$
33

S 23
2
@3
3
M 3
`
`
z
`
3
6
bc d
2 @
3
z bc d
3

b
bc d
3
23

S 3
2
S 33
3
M 3
3

S 33
2
S 23
3
M A

`
2 3
`

`
3
2
`
M
`
3
`
3 2 3
3
A
&odemos resolverlo en Matlab con una sencilla division por la iz:uierda$
>> 2=/3 ! %$1 ! 1 31 1 3
!0
2 =
3 ! %$
! 1 3
1 3 !
>> b=/31%31%.0
b =
3
%3
%.
>> x=2Fb
x =
1
%!
%1
6un:ue la potenciacion en Matlab tiene mas usos$ solo consideraremos el caso de una matriz elevada
a un numero% =l resultado
ser e3ponente$ 6
3
M 6 6
6$
multiplicar la matriz por si misma tantas veces como indi:ue el
>> 2=/3 ( %11 ! 1 (1
1
3
!0
2 =
3 ( %1
! 1 (
1 3 !
>> 2K3
ans =
13 %18 %18
!$ %& %1!
&$ 18 %&
>> 2I2I2
ans =
13 %18 %18
!$ %& %1!
&$ 18 %&
La potenciacion elemento a elemento eleva cada elemento de la matriz al valor :ue indi:ue el
e3ponente%
2rasponer una matriz es obtener una nueva matriz intercambiando las filas con las columnas
de la matriz ori"inal$ Ever captulo ;%2F% 6s por e9emplo$
>> 2=/3 ( %1 (1 ! 1 ( (0
2 =
3 ( %1 (
! 1 ( (
>> 3=2*
3 =
3 !
( 1
%1 (
( (
Las matrices 2 ! 3 son traspuestas entre s
%
2%3%2% &recedencia de los operadores aritm
eticos
Combinando operadores aritmeticos$ es posible elaborar e3presiones comple9as% &or e9emplo$
L=&I3%'J3!K3!%$
La pre"unta :ue sur"e inmediatamente es en :ue orden realiza Matlab las operaciones
indicadas% &ara evitar ambi"uXedades$ Matlab$ como todos los len"ua9es de pro"ramacion$
establece un orden de precedencia$ :ue permite saber e3actamente en :ue orden se realizan las
operaciones% =n Matlab el orden de precedencia esD
% =n primer lu"ar se calculan las potencias%
2% 6 continuacion los productos ! las divisiones$ :ue tienen el mismo "rado de precedencia%
3% &or ultimo$ se realizan las sumas ! las restas%
&or tanto$ en el e9emplo :ue acabamos de mostrar$ Matlab calculara primero$
!K3=8
a continuacion el producto ! la division
&I3=1&
'J3=!
&or ultimo sumara todos los resultados intermedios$ ! "uardara el resultado en la
variable L
1&%!8%$=1.
L=1.

Uso de parentesis para alterar el orden de precedencia% Cuando necesitamos escribir


una e3presion complicada$ en muc#os casos el necesario alterar el orden de precedencia% &ara
#acerlo$ se emplean parentesis% -us re"las de uso son basicamente dosD
La e3presiones entre parentesis tienen precedencia sobre cual:uier otra operacion%
Cuando se emplean parentesis anidados Eunos dentro de otrosF los resultados siempre
se calculan del parentesis mas interno #acia fuera%
&or e9emplo$
>> y=!$J!
y =
$
>> y=,!$-J!
y =
3
=n la primera operacion$ el orden de precedencia de los operadores #ace :ue Matlab divida
primero @ entre 2 ! a continuacion le sume 2% =n el se"undo caso$ el parentesis tiene precedencia/
Matlab suma primero 2 ! @ ! a continuacion divide el resultado entre 2%
=l uso correcto de los parentesis para alterar la precedencia de los operadores$ permite
e3presar cual:uier operacion matematica :ue deseemos% &or e9emplo calcular la #ipotenusa de un
trian"ulo rectan"ulo a partir de valor de sus catetos$
# M Ec
2
S c
2
F
2
2
Gue en Matlab podra e3presarse como$
h=,c1K!c!K!-K,1J!-
B la e3presion "eneral para obtener las races de una ecuacion de se"undo "rado$
2

3 M
b Eb @ a
cF 2
2
a
en este caso no es preciso dividir el calculo en dos e3presiones$ una para la raz
positiva$
x=,%b,bK!%aIc-K,1J!--J,!Ia-
! otra para la raz ne"ativa
x=,%b%,bK!%aIc-K,1J!--J,!Ia-
=s preciso ser cuidadosos a la #ora de construir e3presiones :ue inclu!en un cierto nu
mero de operaciones% 6s$ en el e9emplo :ue acabamos de ver$ el parentesis final !Ia es
necesario/ si se
omite$ Matlab multiplicar por a el resultado de todo lo anterior$ en lu"ar de dividirlo%
2%3%3% Bperaciones ?elacionales ! lo"icas%
6un:ue son distintas$ las operaciones relacionales ! las lo"icas estas estrec#amente
relacionadas entre s% 6l i"ual :ue en el caso de las operaciones aritmeticas$ en las
operaciones relacionales ! lo"icas e3isten operandos$ variables sobre las :ue se efectua la
operacion ! operadores$ :ue indican cual es la operacion :ue se efectua sobre los operandos%
La diferencia fundamental es :ue tanto en el caso de las operaciones relacionales como lo"icas el
resultado solo puede ser EciertoF o 0 EfalsoF%
Bperadores relacionales% La tabla 2%3 muestra los operadores relacionales disponibles en Matlab%
-u resultado es siempre la verdad o falsedad de la relacion indicada%
2 abla 2%3D B p eradores relacionales definido s en Matlab
operacion smbolo e9emplo notas
menor :ue M r=aMb Compara matrices elemento a elemento o un
escalar con todos los elementos de una matriz
ma!or :ue > r=a>b Compara matrices elemento a elemento o un
escalar con todos los elementos de una matriz
ma!or o i"ual :ue >= r=a>=b Compara matrices elemento a elemento o un
escalar con todos los elementos de una matriz
menor o i"ual :ue M= r=aM=b Compara matrices elemento a elemento o un
escalar con todos los elementos de una matriz
i"ual a == a==b Compara matrices elemento a elemento o un
+istinto de
a=b a=b
escalar con todos los elementos de una matriz
Compara matrices elemento a elemento o un
escalar con todos los elementos de una matriz
=specificadores
todos all r=all,a- ,erdadero si todas las columnas
de una matriz son verdaderas
al"uno any r=any,a- ,erdadero si al"unaEsF columnaEsF
de una matriz ,erdaderaEsF
encontrar find r=find,a- +evuelve como resultado los ndices
de los elementos verdaderos
Los operadores relacionales pueden traba9ar sobre matrices de i"ual tamanVo$ en ese caso
la operacion se realiza elemento a elemento ! el resultado es una matriz de unos ! ceros% &or
e9emploD
>> 2=/3 ( %11 ! 1 (1 1 3
!0 2 =
3 ( %1
! 1 (
1
>> 3=/! (
3
11
!
3 ! %11 %! (
!0
3 =
! ( 1
3 ! %1
%! ( !
>> 8=2>3
8 =
1 ( (
( ( 1
1 1 (
La matriz 8 contiene el resultado lo"ico de comprobar uno a uno si los elementos de 2
son ma!ores :ue los elementos de 3/ como el elemento 2,1:1- es ma!or :ue 3,1:1-$ la relaci
on es cierta% &or tanto$ el resultado 8,1:1- es uno% La relacion$ en este caso ser ma!or
:ue se va comprobando elemento a elemento a elemento ! su verdad o falsedad se consi"na en
el elemento correspondiente de la matriz resultado%
&or supuesto$ si se comparas dos valores escalares el resultado es un tambien un escalar$
>> r=3M=.
r =
1
Los operadores relacionales admiten tambien :ue uno de sus operando sea un escalar ! el
otro una matriz% =n este caso$ Matlab compara el escalar con todos los elementos de la matriz !
"uarda el resultado en una matriz del mismo tamanVo$
>>
2 2
=
3 ( %1
! 1 (
1 3 !
>> menor#que#tres=2M3
menor#que#tres =
( 1 1
1 1 1
1 ( 1
>> distinto#de#tres=2N=3
distinto#de#tres =
( 1 1
1 1 1
1 ( 1
>> igual#a#tres=2==3
igual#a#tres =
1 ( (
( ( (
( 1 (
=s importante senValar :ue el operador relacional :ue permite comparar si dos variables
son i"uales es == Edoble i"ualF$ no confundirlo con el i"ual simple = empleado como sabemos
como
smbolo de asi"nacion% =n cuanto a la tilde$$ empleada en el operador =$ se obtiene en Matlab
pulsando la tecla $ mientras se mantien pulsada la tecla alt gr% la tilde en Matlab representa la
ne"acion lo"ica% 6s por e9emplo si escribimos en Matlab$
>>
N1
ans =
(
>>
N(
ans =
1
-i ne"amos el uno EverdaderoF nos da cero EfalsoF ! viceversa%
Kablaremos por ultimo de los especificadores$ incluidos en la parte inferior de la tabla 2%3%
)o son operadores% -e trata de funciones definidas en Matlab%
La funcion any toma como variable de entrada una matriz% Como veremos en la seccion
si"uiente$ esto se indica colocando el nombre de la variable de entrada$ a continuacion del nombre
de la funcion entre parentesis% La salida de la funcion$ entendiendo por tal el valor devuelto
por la misma$ se puede "uardar en una variable mediante el smbolo de asi"nacion$
salida=any,entrada-
-i introducimos como entrada un vector fila o un vector columna$ la funcion any$ devolvera
un uno a la salida$ si al menos uno de los elementos del vector de entrada es distinto de cero
! devolvera un cero si todos los elementos del vector de entrada son ceros
>> s=/1 %! ( !0
s =
1 %! ( !
>> r=any,s-
r =
1
>> s=zeros,3:1-
s =
(
(
(
>> r=any,s-
r =
(
-i introducimos como variable de entrada una matriz$ la funcion any buscara si #a! al"un
valor distinto de cero por columnas de la matriz de entrada% La salida de la funcion any sera
entonces un vector fila con el mismo numero de columnas :ue la matriz de entrada% Cada
elemento del vector salida toma valor uno$ si la columna correspondiente de la matriz de
entrada tiene al menos un valor distinto de cero ! toma valor cero si todos los elementos de
dic#a columna son cero% &or e9emplo$ -i definimos en Matlab una matriz$
>> 2=/3 ( %1 (1 ! 1 ( (1 1 3
( (0 2 =
3 ( %1 (
! 1 ( (
1 3 ( (
! le aplicamos la funcion any$
>> r=any,2-
r =
1 1 1 (
=l primer elemento del vector resultante es $ puesto :ue todos los elementos de la primera
columna de 6 son cero% =l se"undo tambien es uno$ por:ue al menos dos de los elementos de
la se"unda columna de 6 son distintos de cero$ lo mismo sucede con la tercera :ue tiene un
elemento distinto de cero% -olo el ultimo elemento de la respuesta es cero !a :ue todos los
elementos de la ultima columna de 6 son cero%
La funcion all funciona de modo analo"o a any$ pero en este caso$ el vector resultante toma
valor uno si todos los elementos de la columna correspondiente de la matriz de entrada son distintos
de cero% -i aplicamos all a la misma matriz del e9emplo anterior$
>> r=all,2-
r =
1 ( ( (
-olo el primer elemento del vector salida r es a#ora distinto de cero$ !a :ue la matriz 2
tiene ceros en todas sus columnas menos en la primera%
Gueda por senValar :ue ambas funciones pueden operar por filas en lu"ar de #acerlo por
colum1 nas% +e #ec#o la funcion admite un se"undo parametro de entrada :ue se introduce
detras de la matriz de entrada ! separado por una coma$ si dic#o parametro vale Eo se omite$
como #emos #ec#o en los e9emplos anterioresF$ la funcion operan por columnas% -i a dic#o
parametro se le da valor !$ la funcion opera por filas$
>> r=any,2:!-
r
=
1
1
1
>> r=all,2:!-
r
=
(
(
(
=n este caso las funciones nos devuelven vectores columnas :ue indican si en la fila correspondiente
de la matriz de entrada #a! al"un elemento distinto de cero Ecaso del funcion anyF o si todos
los elementos son distintos de cero Ecaso de la funcion allF%
La utilidad de esta dos funciones :ue acabamos de describir se ve mas clara cuando la combi1
namos con el uso de los operadores relacionales% por e9emplo$
>> 2=/3 ( %1 (1 ! 1 ( (1 1 3
( (0
2
=
3 ( %1 (
! 1 ( (
1 3 ( (
>> 8=2>!
8 =
1 ( ( (
( ( ( (
( 1 ( (
>> r1=any,8-
r1 =
1 1 ( (
>> r=any,r1-
r =
1
Mediante el uso del operador > ! de la funcion any$ #emos comprobado :ue en la matriz 2
#a! al menos al"un elemento distinto de cero% &or supuesto$ esto podemos #acerlo en una
sola sentencia$ combinado operadores ! funciones$
>> 2=/3 ( %1 (1 ! 1 ( (1 1 3 (
(0
2 =
3 ( %1 (
! 1 ( (
1 3 ( (
>> r=any,any,2>!--
r =
1
Como un se"undo e9emplo$ vamos a comprobar si todos los elementos de la matriz 2 son
menores :ue @$
>> 2=/3 ( %1 (1 ! 1 ( (1 1 3
( (0 2 =
3 ( %1 (
! 1 ( (
1 3 ( (
>> r=all,all,2M$--
r
=
1
&or ultimo insistir en :ue$ si no se indica otra cosa$any and all$ traba9an buscando los
valores distintos de cero por columnas% 6s por e9emplo la sentencia$
>> r=any,all,2>!--
r
=
(
compruebas si en al"una de las columnas de 2 todos los elementos son menores :ue 2% ! la
sentencia$
>> r=all,any,2>%1--
r
=
1
comprueba si en todas las columnas de 2 #a! al"un elemento ma!or :ue
%
La ultima de las funciones incluidas en la tabla 2%3 es la funcion find% =sta funcion admite
como variable de entrada una matriz% -i se la llama con una sola variable de salida$ devuelve un
vector con los indices de los elementos de la matriz :ue son distintos de cero% -i se la llama con
dos variables de salida en la primera devuelve un vector con el ndice de las filas de los
elementos de la matriz distintos de cero$ ! en la se"unda variable devuelve un vector con los
indices de las correspondientes columnas de los elementos de la matriz distintos de cero$
>> 2
2 =
1 ( 1
( 1 1
1 1 (
>> indice=find,2-
indice =
1
3
&
'
.
8
Los elementos $ 3 $; <$ etc$ de la matriz 6 son distintos de cero Ever inde3acion con un u
nico indice 2%%3F
>> /fila:columna0=find,2-
fila =
1
3
!
3
1
!
columna =
1
1
!
!
3
3
>>
Los elementos E$F$ E3$F$ E2$2F$ etc$ de la matriz 6 son distintos de cero%
&odemos combinarlos con otros operadores relacionales para conocer :ue elementos de
una matriz cumplen una determinada condicion &or e9emplo
>> 2=/3 ( %1 (1 ! 1 ( (1 1 3
( (0 2 =
3 ( %1 (
! 1 ( (
1 3 ( (
>>
indice=find,2N=(-
indice =
1
!
3
&
'
.
)os permite conocer los ndices de los elementos de 6 :ue son distintos de cero%
Bperadores Lo"icos =n Matlab se distin"uen tres con9untos de operadores lo"icos se"un el
tipo de variable sobre la :ue actuen% 6:u vamos a ver solo dos de ellosD los operadores lo"icos
elemento a elemento ! los operadores lo"icos para escalares%
La tabla 2%@ muestra los operadores lo"icos elemento a elemento% =stos operadores l
o"icos esperan :ue sus operando sean matrices de i"ual tamanVo$ aun:ue pueden actuar tambi
en sobre escalares% =l resultado$ es una matriz del mismo tamanVo :ue los operandos$ compuesta
por ceros ! unos$ :ue son el resultado de la operacion lo"ica realizada entre los elementos de
operandos%
2 abla 2%@D B p eradores l o"icos eleme n to a eleme n to
operacion smbolo e9emplo notas
and O r=aOb Bperacion lo"ica and entre los elementos de a !
b or | r=a|b Bp eracion lo"ica or entre los elementos
de a ! b
or e3clusivo xor,- r=xor,a:b->=b Bperacion lo"ica or e3clusivo
entre los elementos de a ! b
ne"acion r=a complemento de los elementos de a
=n cuanto a su funcionamiento$ son los operadores tpicos del al"ebra de 4ool% 6s el
operador
O si"ue la tabla de verdad propia de la operacion and$ el resultado solo es verdadero EF si
sus operandos son verdaderos EF
@
$
2abla de verdad de la operacion and
operando operando 2 ?esultado

0
0

0
0
0
6s por e9emplo$
>> 2=/1 ( 11 ( 1 111 1
(0 2 =
@
=n realidad Matlab considerara verdadero cual:uier operando distinto de 0
1 ( 1
( 1 1
1 1 (
>> 3=/1 1 11 ( ( 11 1 (
10 3 =
1 1 1
( ( 1
1 ( 1
>> L=2O3
L =
1 ( 1
( ( 1
1 ( (
La matriz L contiene el resultado de realizar la operacion and elemento a elemento entre las
matrices 2 ! 3/ solo a:uellas posiciones :ue contienen a la vez un uno en ambas matrices$
obtienen un uno como resulta en la matriz L%
La operacion or$ responde a la si"uiente tabla de verdad$
2abla de verdad de la operacion or
operando operando 2 ?esultado

0
0

0
=n este caso$ el resultado es cierto si cual:uiera de los dos operando es cierto% -i lo aplicamos
a las matrices del e9emplo anterior$
>> r=2P3
r =
1 1 1
( 1 1
1 1 1
-olo es cero el elemento r,!:1- de la matriz resultado$ !a :ue solo los elementos 2,!:1- !
3,!:1- son a la vez cero%
La tabla de verdad de la operacion or e3clusivo es$
=s decir la salida solo es verdadera cuando una de las entradas en verdadera ! la otra no% =sta
operacion solo e3iste en Matlab con formato de funcion% Usando de nuevo el e9emplo anterior$
>> r=xor,2:3-
r =
2abla de verdad de la operacion or
operando operando 2 ?esultado

0
0

0
0

0
( 1 (
( 1 (
( 1 1
se puede comprobar :ue solo son uno los elementos de r para los cuales los correspondientes
elementos de 2 ! 3 no son uno o cero a la vez%
=l operador ne"acion actua sobre un solo operando$ ne"andolo es decir$ transformando
sus elementos con valor uno en ceros ! sus elementos con valor cero en unos%
>>
2 2
=
1 ( 1
( 1 1
1 1 (
>> r=N2
r =
( 1 (
1 ( (
( ( 1
&ara entradas escalares se definen dos operadores lo"icos$ :ue se corresponden con los opera1
dores and ! or de la lo"ica de 4ool% &or tanto si"uen las tablas de verdad de dic#as funciones :ue
acabamos de ver% -u sinta3is es la misma :ue la de los operadores lo"icos elemento a elemento$
simplemente se escribe dos veces el smbolo del operador para indicar :ue se trata de una
operacion entre escalares% 6s$ por e9emplo para la operacion and$
>> a=1
a =
1
>> b=(
b =
(
>> r=aOOb
! (
3 !
%! (
r =
(
! para la operacion or$
>> r=aOOb
r =
(
>> r=aPPb
r =
1
Los operadores lo"icos elemento a elemento tambien funcionan correctamente cuando actu
an sobre escalares$ pero son$ en "eneral menos eficientes :ue operadores especficos :ue
acabamos de ver%
&or ultimo$ indicar :ue los operadores lo"icos pueden combinarse entre s con operadores
rela1 cionales ! con operadores aritmeticos% =l orden de precedencia es el si"uienteD
% &arentesis EF
2% Bperadores aritmeticos en su orden de precedencia
3% Bperadores relacionales$ todos tienen el mismo orden de precedencia por lo :ue se evalu
an de iz:uierda a derec#a
@% and elemento a elemento
;% or elemento a elemento
<% and escalares
A% or escalares
Matlab aconse9a el uso de parentesis cuando se encadenan varias operaciones lo"icas
para ase"urar su uso correcto ! facilitar la lectura de las sentencias%
&or e9emplo$
>> 2=/3 ( (1 ! 1 (1 1 3
(0 2 =
3 ( (
! 1 (
1 3 (
>> 3=/! ( 11 3 ! %11 %! (
!0 3 =
1
%1
!
2%@% -C?0&2- I *U)C0B)=- <;
>> r=2>1O3>2
r =
( ( (
1 ( (
( ( (
>> r=,2>1-O,3>2-
r =
( ( (
1 ( (
( ( (
6mbas sentencias realizan la misma operacion$ Comprueban :ue elementos de 2 son
ma!ores :ue ! a la vez cumplen ser menores :ue el correspondiente elemento de 3% -in
embar"o$ los parentesis de la se"unda sentencia facilitan entender el orden en :ue se realizan las
operaciones%
2%@% -cripts ! *unciones
Kasta a#ora$ #emos mane9ado siempre Matlab desde la lnea de comandos% =s decir$ #emos
introducido las instrucciones en Matlab en la ventana de comandos% =ste modo de emplear Matlab
es poco eficiente$ !a :ue e3i"e volver a introducir todos los comandos de nuevo cada vez :ue
:ueremos repetir un calculo
Matlab puede emplear fic#eros de te3to en los :ue introducimos un con9unto de comandos$
"uardarlos$ ! volver a emplearlos siempre :ue :ueramos% =sta es la forma #abitual de traba9ar no
solo de Matlab$ sino de otros muc#os entornos de pro"ramacion% Un fic#ero :ue contiene codi"o
de Matlab recibe el nombre "enerico de pro"rama% Un pro"rama de Matlab no es mas :ue un
fic#ero de te3to :ue contiene lneas formadas por comando validos de Matlab% Lo #abitual es
:ue cada lnea conten"a un comando% =l fic#ero se "uarda con un nombre ! la e3tension .m%
&or e9emploD miprograma.m% =l nombre del fic#ero$ puede contener numeros ! letras$ pero el
primer caracter debe ser siempre una letra% Los pro"ramas en Matlab pueden tomar dos formas
basicas$ scripts ! funciones%
2%@%% =l editor de te3tos de Matlab%
&odemos emplear un editor de te3tos cual:uiera$ :ue "enere te3to en 6-C00$ como por e9emplo
el ^bloc5 de notas^$ para escribir nuestros pro"ramas% -in embar"o$ si traba9amos en el entorno
de Matlab$ lo ideal es emplear su propio editor de te3tos% Ka! varias formas de abrir el editor
de te3tos de Matlab/ pulsando el icono de nuevo documento o bien desple"ando el menu *ile
! seleccionando nuevo script$ la posicion de ambos se indica en la fi"ura 2%@
La otra opcion es emplear el comando edit% =ste comando puede emplearse de dos maneras%
-i se escribe en la ventana de comandos$
>>edit
Matlab abrir
el editor de te3tos ! creara un documento nuevo sin nombre Euntitled%
-i anVadimos a continuacion del comando edit el nombre de un fic#ero$
>>edit e)emplo1.m
*i"ura 2%@D posicion del menu *ile ! del icono de nuevo documento en el 0+= de Matlab
4uscar
un fic#ero con dic#o nombre en los directorios de Matlab ! en el directorio de traba9o% -i
lo encuentra$ abrir el arc#ivo encontrado% -i no lo encuentra$ creara uno nuevo con dic#o nombre%
La fi"ura 2%; muestra el editor de te3tos de Matlab$ con el contenido del fic#ero e)emplo1.m% =n
dic#a ima"en es posible observar las barras de menu ! de #erramientas de las :ue dispone el
editor de te3to$ para facilitar el traba9o de pro"ramacion% =

stas$ entre otras facilidades
resaltar te3to de palabras clave$ cotar numero de lneas$ san"rar estructuras de pro"ramacion$
etc% #acen :ue resulta especialmente atractivo emplear el editor de te3tos de Matlab en lu"ar
de emplear otro editor de te3tos "enerico%
2%@%2% -cripts
Un script en Matlab es un simple fic#ero de te3to :ue contiene un con9unto de sentencias de
Matlab validas% La manera de e9ecutarlo$ consiste en escribir el nombre del fic#ero en la lnea
de comandos de Matlab% Matlab va le!endo el contenido del fic#ero lnea a linea$ ! va e9ecutando
los comandos :ue contiene cada lnea e3actamente i"ual :ue si se #ubieran escrito directamente
en la lnea de comandos de Matlab% ,eamos un e9emplo sencillo$ :ue corresponde con el codi"o
contenido en la fi"ura 2%;D
E 9ste programa toma dos matrices llamadas 2 y 3 del espacio de traba)o de
Hatlab:
E calcula su suma y la guarda en una variable llamada suma: calcula el
producto y
E lo guarda en una variable llamada producto y: por ultima genera un mensa)e en
la
E ventana de comandos para indicar que ha terminado de
e)ecutarse. suma=23
producto=2I3
disp,*e)ecucion terminada*-
rrador$9uan%9imenez
*i"ura 2%;D ,ista del editor de te3tos de Matlab mostrando el contenido del fic#ero prueba%m
-i escribimos el te3to anterior en un arc#ivo ! lo "uardamos con el nombre e9emplo%m$ podemos
e9ecutar sun contenido en Matlab sin mas :ue escribir en la linea de comandosD
>> e)emplo1
Las cuatro primeras lneas de codi"o :ue empiezan con el smbolo T no se e9ecutan%
Cuando Matlab encuentra una lnea :ue empieza con dic#o smbolo interpreta :ue se trata de un
comentario escrito por el pro"ramador$ para e3plicar :ue #ace el pro"rama o aclarar al"un
aspecto de su funcionamiento% Cuando el editor de Matlab detecta el smbolo T en una lnea
de codi"o$ resalta en color verde todo el te3to de la lnea a partir de dic#o smbolo% +e este
modo$ es inmediato ver :ue se trata de un comentario ! :ue Matlab no tratara de e9ecutarlo%
Un aspecto importante de la pro"ramacion en Matlab$ ! en cual:uier otro len"ua9e de pro"ra1
macion$ lo constitu!e el comentario del codi"o de pro"rama/ facilita su uso por otros usuarios !
permite al pro"ramador recordar :ue fue lo :ue #izo cuando lo pro"ramo% La e3periencia
demuestra :ue$ en poco tiempo$ los pro"ramas no comentados se vuelven incompresibles incluso
para :uien los escribio%
La :uinta lnea del pro"rama busca en el .or5space las variables 2 ! 3% -i las variables
no e3isten$ es decir$ si no #an sido creadas previamente$ el pro"rama da un error$ e3actamente
i"ual :ue si #ubieramos escrito directamente en la ventana de comandos de Matlab la sentencia
suma=23 sin #aber definido antes 2 ! 3% -i las variables e3isten calcula la suma ! "uarda el
resultado en el .or5space en la variable suma% La si"uiente lnea de codi"o realiza el calculo del
producto de las dos variables ! "uarda el resultado en la variable producto% La ultima linea del
pro"rama mostrara en
la ventana de comandos la frase$
e)ecucion terminada
&ara ello emplea la funcion de Matlab disp :ue escribe en la ventana de comandos cadenas de
caracteres%
Un aspecto mu! importante de los scripts es :ue #acen uso del .or5space de Matlab tanto para
buscar las variables :ue emplean como para "uardar las variables resultantes de sus calculo% -u
e9ecucion es identica a la :ue se realizara si copiaramos linea a linea en la ventana de
comandos ! las fueramos e9ecutando una detras de otra%
2%@%3% *unciones
Las funciones 9ue"an un papel fundamental en cual:uier len"ua9e de pro"ramacion% =n el
caso de Matlab$ se escriben como fic#eros de te3to$ de modo analo"o a los scripts% lo :ue determina
:ue Matlab los interprete como funciones es su primera lnea de codi"o% )os referiremos a esta
primera lnea con el nombre de cabecera de la funcion% La cabecera de una funcion debe
empezar siempre por la palabra clave function% +ebe contener ademas$ como mnimo$ el nombre
de la funcion% &or e9emplo$
function raices
Un detalle importante en Matlab es :ue el fic#ero de te3to :ue contiene la funcion debe llamarse
i"ual :ue esta$ para :ue Matlab pueda identificar la funcion correctamente% =s decir$ en el caso
del e9emplo anterior$ el fic#ero :ue conten"a la funcion debe llamarse raices%m%
6 parte del nombre de la funcion la cabecera puede incluir tambien nombres de las
variables de entrada% =stos se escriben a continuacion del nombre de la funcion$ separadas por
comas ! encerradas entre parentesis$
function raices,a:b:c-
=n este e9emplo a$ b ! c son variables de entrada de la funcion raices% La razon por la :ue
#a! :ue incluir estas variables de entrada es :ue$ a diferencia de los scripts$ las funciones no
pueden acceder directamente a los valores de las variables contenidos en el .or5space de Matlab%
Cuando se e9ecuta una funcion es preciso dar valores a las variables :ue necesite utilizar$ ! :ue no se
definan e3presamente en el codi"o de la funcion% 6clararemos esto mas tarde con un e9emplo%
&or ultimo la cabecera de una funcion puede incluir tambien una o varias variables de
salida% =stas se escriben delante del nombre de la funcion separadas por comas ! encerradas entre
corc#e1 tes% =ntre laEsF variableEsF de salida ! el nombre de la funcon se inclu!e el smbolo de
asi"nacion
=$ para indicar :ue los resultados obtenidos por la funcion se #an asi"nado E"uardado enF a dic#as
variables%
function /x1:x!0=raices,a:b:c-
=n este caso$ las variables de salida seran x1 ! x!%
6 continuacion$ vamos a completar el e9emplo para el :ue #emos construido la cabecera en
los parrafos anteriores% -e trata de una funcion :ue obtiene las races de una ecuacion de
se"undo "rado$ a3
2
S b3 S c M 0 conocidos sus coeficientes a$ b$ c$
function /x1:x!0=raices,a:b:c-
E9sta funcion calcula las raices de una ecuacion de segundo grado axK!bKxc=(
Elas variables de entrada son los coeficientes a: b: c de la ecuacion.
Elas variables de salida x1 : x! son las dos raices de la ecuacion
Ecalculo de la primera raiz
x1=,%b,bK!%$IaIc-K,1J!--J,!Ia-
Ecalculo de la segunda raiz
x!=,%b%,bK!%$IaIc-K,1J!--J,!Ia-
+eberemos "uardar estas lneas de codi"o en un arc#ivo con el nombre raices%m% &odemos
a#ora emplear la funcion ,raicesF para calcular las races de una ecuacion de se"undo "rado%
-upon"amos :ue :ueremos obtener las races de la ecuacion$
3
2
S 3 < E2%F
si escribimos en la lnea de comandos$
>>/raiz1: raiz!0=raices,1:1:%'-
Matlab mostrar
en la pantalla$
x1 =
!
x! =
%3
raiz1 =
!
raiz! =
%3
6nalicemos con un poco de detalle lo :ue #emos #ec#o% 6l escribirD /raiz1:raiz!0 = raices
,1:1:%'-$ #emos llamado a la funcion raices$ indicando :ue las variables de entrada deben tomar
los valores a=1$b=1$ c=%'$ es decir$ los valores de los coeficientes de la ecuacion de se"undo
"rado cu!a solucion :ueremos obtener% 6demas #emos pedido a Matlab :ue "uarde los
resultados en el .or5space en las variable raiz1 ! raiz!% Cuando$ tras llamar a la funcion$
pulsamos el retorno de carro$ Matlab empieza a e9ecutar el codi"o de la misma% Lo primero :ue
#ace es crear las variables a$ b ! c ! asi"narle los valores $ ! 1<% Matlab crea estas variables
pero no las "uarda en el .or5space sino en un espacio de memoria al :ue solo tiene acceso la
funcion raices$ desde la :ue se #an creado% =sto constitu!e una caracterstica mu! importante de
las funciones en Matlab% Cada vez :ue se llama a una funcion$ se crea un espacio de memoria en
la :ue se "uardan las variable definidas en la funcion ! a la :ue solo esta tiene acceso% 6demas$
una funcion no puede acceder ni modificar directamente nin"una variable :ue este en el
.or5space%
Una vez :ue la funcion #a asi"nado valores a las variable de entrada$ comienza a realizar los
calculos pedidos$ en primer lu"ar calcula la raz correspondiente al discriminante positivo$
S
p
b
2
@ac E2%2F
! crea la variable x1 para "uardar el resultado% La variable x1 solo e3iste en la memoria de la
funcion raices ! por tanto no e3iste ni es accesible desde el .or5space% Como no #emos
terminado la lnea de pro"rama en la :ue se calcula x1 con un punto ! coma$ Matlab muestra
en la ventana de comandos el resultado del calculo realizado%
La raz correspondiente al discriminante ne"ativo se calcula de modo analo"o% Una vez
termi1 nada la e9ecucion de la lneas del pro"rama$ Matlab vuelve a e3aminar la cabecera del
pro"rama ! observa :ue debe dar como resultado$ los valores contenidos en las variables x1 ! x!%
&ara ello$ crea la variable raiz1 en el .or5space ! copia en ella el contenido de la variable x1%
6nalo"amente crea la variable raiz! ! copia en ella el contenido de la variable x!% Con esto #a
terminado la e9ecucion del pro"rama% Matlab destru!e las variables x1 ! x! :ue solo #an
e3istido durante la e9ecucion del pro"rama$ ! nos muestra de nuevo el prompt en la ventana de
comandos para indicarnos :ue esta listo para e9ecutar nuevas ordenes% -i analizamos el contenido
del .or5space$ empleando el comando who de Matlab$
>>
who
5our variables are6
raiz1 raiz!
observaremos :ue all estan las variable raiz1 ! raiz!$ :ue contienen las races de la ecuaci
on de se"undo "rado :ue :ueramos resolver%
=n el e9emplo anterior #emos asi"nado directamente valores a las variables de entrada de la
funcion raices% =n Matlab$ una funcion puede tambien asi"nar valores a sus variable de
entrada copiandolos de los de otras variables e3istentes en el .or5space$ supon"amos :ue
creamos en el .or5space de Matlab$ tres variables con los valores de los coeficientes de la ecuaci
on de se"undo "rado del e9emplo anterior$
>>coef1=1: coef!=1 coef3=%'
&odramos entonces llamar a nuestra funcion races$ sustitu!endo los valores de la variables
de entrada por los nombres de estas variables$
>> /raiz1: raiz!0=
raices,coef1:coe!:coef3-
Matlab$ copiara a#ora los valores contenidos en coef1$ coef! ! coef3 en las variables de
entrada de la funcion a$ b$ c% )i :ue decir tiene$ :ue el resultado final de la e9ecucion sera el
mismo%
6

mbito de una variable La importancia de el concepto de funcion esta precisamente en
el tratamiento :ue #ace de las variables% &ara entenderlo me9or$ introduciremos el concepto de
ambito de una variable%
Como #emos visto$ la forma usual de crear una variable en Matlab es mediante el s
mbolo de asi"nacion% Cuando asi"namos un valor o el resultado de una operacion a una
variable en la ventana de comandos de Matlab$
2%@% -C?0&2- I *U)C0B)=- A
>> a=18
a =
18
Matlab reserva un espacio de memoria del computador para "uardar la variable con el valor
asi"nado% =sta variable forma parte del .or5space de Matlab$ :ue constitu!e su ambito propio% La
variable creada es solo visible para a:uellos comandos ! sentencias :ue$
% -e e9ecutan desde la ventana de comandos de Matlab%
2% -e e9ecutan desde un script%
Cuando e9ecutamos una funcion desde la ventana de comandos de Matlab$ la funcion crea su
propio espacio de memoria% &or as decir$ es como un .or5space particular de la funcion%
Cual:uier variable :ue cree la funcion se "uardara en el espacio de memoria de la funcion$ :ue
constituira su ambito propio% La variable creada dentro de la funcion solo es visible para
a:uellos comandos ! sentencias :ue se e9ecutan dentro de la funcion%
Una vez :ue termina la e9ecucion de una funcion$ el espacio de memoria :ue se creo al
e9ecutarse se destru!e ! con el cual:uier variable :ue el pro"rama #a!a creado durante su e9ecuci
on%
La unica manera de pasar informacion contenida en una variable del .or5space de Matlab
a una funcion es copiandola a una variable de entrada de la funcion%
La unica manera de pasar informacion contenida en una variable del espacio de memoria de
una funcion$ al .or5space de Matlab$ es copiandola a traves de una variable de salida de la
funcion%
La fi"ura 2%< muestra es:uematicamente como se "estionan las variables en Matlab% =n el
cuadro superior se muestra la e9ecucion de varias sentencias en la ventana de traba9o de Matlab%
Las dos primeras crean directamente dos variables a ! b :ue se almacenan en el .or5space
de Matlab$ representado por el cuadro azul de la derec#a% 6 continuacion se llama a la funcion
e9em Ecuadro ro9o centralF$ asi"nandole como variable de entrada la variable a ! como variable de
salida y% La ventana de comandos cede el control a la funcion :ue empieza a e9ecutarseD
% La funcion crea su propio espacio de memoria Ecuadro ro9o de la iz:uierdaF
2% Copia el valor contenido en la variable a en la variable ent% =sta variable se almacena en el
espacio de memoria de la funcion%
3% Crea la variable b asi"nandole el valor @ ! la "uarda en el espacio de memoria de la funcion%
6 partir de este momento ! #asta el final de la e9ecucion de la funcion #a! dos
variables con el mismo nombreD b=! en el .or5space de Matlab/ b=$ en el espacio de
memoria de la funcion% Las dos variables coe3isten pero no se pueden confundir por:ue
pertenecen a ambitos distintos%
@% Crea la variable sal asi"nandole el producto de b=$ por ent=3% 6lmacena la variable sal en
el espacio de memoria de la funcion%
;% La funcion a lle"ado al final de su codi"o% vuelve a leer la cabecera ! crea la variable y en
el .or5space de Matlab$ copiando el contenido de la variable sal%
<% termina la e9ecucion destru!endo el espacio de memoria de la funcion ! devolviendo el control
a la ventana de comandos%
C6&

02ULB 2% 0)2?B+UCC0B

) 6 L6 &?B(?6M6C0B

) =)
M62L64
A2
Crea a ! b
,entana de comandos de Matlab
__aM3
__bM2
__!Me9emEaF
! M
2
__
llamada a la
funcion
e9emEF
devoluci
on
control
ventana de comandos
.or5space de Matlab
aM3
bM2
%%%
tras e9ecutar e9em
!M2
Copiar a
en ent
function salMe9emEentF
bM@/
salMbeent/
Copiar
sal en !
Crea b
! sal
=spacio de memoria
de la funcion
e)em.m
entM3
bM@
salM2
%%%
tras e9ecutar e9em
se destru!en
todas las variables
*i"ura 2%<D =9emplo de uso de memoria ! ambito de variables durante la e9ecucion de una
funcion
Llamar a una funcion desde otra funcion% =n Matlab$ como en cual:uier len"ua9e de alto
nivel$ es posible llamar una funcion desde dentro de otra% 0ncluso es posible :ue una funcion se
llame a si misma$ aun:ue este caso lo veremos mas adelante cuando #ablemos del control de
flu9o%
,eamos un e9emplo sencillo de llamada de una funcion desde otra$
function salida=e)emplo!,entrada-
Eesta funcion toma el valor de entrada lo eleva al cuadrado y pasa
el
Eresultado aun segunda funcion que calcula la raiz
cuadrada...
Eentrada y salida deberQan ser iguales al
final x=entradaK!1
EEEEllamada a la segunda funcionEEE
E
salida=raiz,x-1
La funcion e)emplo! llama a una se"unda funcion raiz cu!o codi"o$
function out=raiz,in-
out=inK,1J!-1
+ebe "uardarse en uno de los tres lu"ares si"uientesD
% =n el mismo fic#ero$ e9emplo2%m en :ue se encuentra escrito el codi"o de la funcion
e)emplo!$ 9usto deba9o de dic#a funcion%
2% =n un fic#ero propio$ raiz%m "uardado en el directorio en :ue Matlab esta traba9ando%
3% =n un fic#ero propio$ raiz%m "uardado en cual:uier directorio de los incluidos en el pat# de
Matlab%
6demas al e9ecutar la funcion e)emplo!$ se buscara el codi"o de la funcion raz$
precisamente en el orden :ue acabamos de indicar% -i anVadimos directemente el codi"o de la
funcion raiz al fic#ero e9emplo2%m$ el codi"o :uedara$
function salida=e)emplo!,entrada-
Eesta funcion toma el valor de entrada lo eleva al cuadrado y pasa el
Eresultado aun segunda funcion que calcula la raiz cuadrada...
Eentrada y salida deberQan ser iguales al
final x=entradaK!1
EEEEllamada a la segunda funcionEEEE
salida=raiz,x-1
EEEEEEcodigo de la segunda funcionEEEEE
function out=raiz,in-
disp,*version incluida en el archivo e)emplo!.m*-
out=inK,1J!-1
La venta9a de escribir el codi"o de la se"unda funcion en el mismo fic#ero de la primera es :ue
el acceso es mas rapido% -in embar"o$ solo la funcion e)emplo! podra llamarla% =s decir la
funcion raiz no puede emplearse desde la ventana de comandos de Matlab ni desde nin"una otra
funcion%
=n "eneral$ si escribimos en un arc#ivo %m de Matlab varias funciones$
function a=uno,b-
Eaqui viene el codigo de la funcion uno
...
function c=dos,d-
Eaqui viene el codigo de la funcion dos
...
function e=tres,f-
Eaqui viene el codigo de la funcion dos
...
.
.
.
2odas las funciones incluidas en el fic#ero pueden llamarse entre unas a otras$ pero solo la
primera de ellas puede ser e9ecutada desde la ventana de comandos de Matlab% 6demas el
nombre del fic#ero debe coincidir con el nombre de la primera funcion contenida en el% =n el
e9emplo :ue acabamos de esbozar$ el fic#ero debera llamarse uno%m%
2abla 2%;D 6l"unas funciones matematicas en Matlab de uso frecuente
tipo nombre variables funcion matematica
2ri"onometrica cos !McosE3F coseno de un an"ulo en radianes
2ri"onometrica sin !MsinE3F seno de un an"ulo en radianes
2ri"onometricas tan !MtanE3F tan"ente de un an"ulo en radianes
2ri"onometricas csc !McscE3F cosecante de un an"ulo en radianes
2ri"onometricas sec !MsecE3F secante de un an"ulo en radianes
2ri"onometricas cot !McotE3F cotan"ente de un an"ulo en radianes
2ri"onometricas %%%
asin
!Ma%%%E3F
!MasinE3F
inversa de una funcion tri"onometrica en
radianes
e9emplo$ arcoseno en radianes
=3ponencial e3p !Me3pE3F e
3
=3ponencial lo" !Mlo"E3F lo"aritmo natural
=3ponencial lo"0 lo"0E3F lo"aritmo en base 0
=3ponecial s:rt !Ms:rtE3F
p
E3F
?edondeo ceil !MceilE3F redondeo #acia S
?edondeo floor !MfloorE3F redondeo #acia
?edondeo round !MroundE3F redondeo al entero mas pro3imo
?edondeo fi3 !Mfi3E3F redondeo #acia 0
?edondeo rem rMremE3$!F resto de la division entera de ! entre 3
Modulos norm !MnormE3F modulo de un vector 3
Modulos abs !MabsE3F valor absoluto de 3$Emodulo de 3 si 3 es comple9oF
Modulos si"n !Msi"nE3F funcion si"no/ si 3 positivo$ 1 si 3 ne"ativo$ 0 si 3M0
=videntemente si cada funcion est
"uardada en un fic#ero %m distinto$ todas las funciones
pueden en principio ser e9ecutadas desde otra funcion o desde la ventana de comandos de Matlab%
Cada vez :ue se e9ecuta una funcion$ esta crea su propio espacio de memoria% Las variables
incluidas en la cabecera de la funcion como variables de entrada ! salida se copian$ tal ! como
#emos visto para el caso de una funcion simple$ entre el espacio de memoria propio de la funcion
! el espacio de memoria de la funcion :ue la #a llamado%
2%@%@% *unciones incluidas en Matlab%
Matlab inclu!e decenas de funciones% =stas funciones$ estan escritas con la misma filosof
a :ue acabamos de describir a:u$ es decir$ admiten una o varias variables de entrada !
devuelven sus resultados en una o varias funciones de salida% =n al"unos casos$ se trata de
fic#eros de te3to "uardados con la e3tension .m i"uales a los :ue nosotros podemos crear
;
% La
manera de emplearlas desde la ventana de comandos de Matlab es identica a la descrita para las
funciones creadas por el usuario%
=n la tabla 2%;$ se inclu!en al"unos e9emplos de las funciones matematicas mas corrientes%
-on solo una pe:uenVa muestra de las funciones disponibles% &ara obtener una vision mas
completa de las funciones disponibles se aconse9a emplear la a!uda de Matlab%
;
=n muc#os casos las funciones incluidas en Matlab no estan escritas en fic#eros de te3to accesibles para
el usuario% &or razones de eficiencia$ se trata de versiones de las funciones escritas por lo "eneral en len"ua9e C
! compiladas%
2%@%;% +epuracion%
-iempre :ue escribimos un pro"rama$ tanto si se trata de un script como si es una funcion$ es
preciso comprobar su funcionamiento !$ en muc#os casos corre"ir los errores cometido% =l proceso
de correccion de codi"o desde su version ori"inal #asta la version definitiva se conoce con el
nombre de depuracion de codi"o% &odemos distin"uir dos tipos fundamentales de erroresD
% =rrores de sinta3is% )ormalmente son errores de escritura% Kemos escrito mal el nombre de
una funcion o un comando o bien no #emos escrito correctamente el codi"o si"uiendo las
re"las del len"ua9e% Matlab advierte directamente de estos errores$ cuando se trata de
e9ecutar el codi"o$ escribiendo en la ventana de comandos un mensa9e de error% Como
e9emplo veamos los errores del si"uiente script$
Escript con errores:
y=/1 ! 31 $ & '1 ! 30 Ea esta matriz le falta un elemento en la ultima
fila
x=/1 ! 31 $ &
'0
z=yIx Elas matrices no pueden multiplicarse entre si por que no
coinciden
Enumero de columnas de la primera con numero de filas de la segunda
-i observamos el editor de te3tos$ 2%A puede observarse al"unas de los caracteres del te3to
subra!ados en ro9o% =sto puede indicar la e3istencia de errores en esa lnea de codi"o$
como en el caso del caracter :ue se #a rodeado en la fi"ura de un crculo ro9o%
=n otros casos$ circulos azules de la fi"ura se trata de advertencias$ el pro"rama funciona
pero puede #acerlo de forma mas eficiente/ en el caso de la fi"ura simplemente nos
su"iere :ue anVadamos un punto ! coma al final de las sentencias$ para :ue Matlab no
escriba el resultado de cada calculo en la ventana de comandos% )o se trata por tanto de
errores sino de advertir al pro"ramador :ue con puntos ! comas su pro"rama se e9ecutara
mas rapido%
*i"ura 2%AD ,ista de el editor de te3to de Matlab% Circulo ro9o error en el codi"o% Circulos
azules advertencias de posible me9oras
-i e9ecutamos el script$ :ue #emos "uardado con el nombre de errores.m$
>>
errores
Rarning6 Sile6 errores.m <ine6 ! 8olumn6
$
The expression on this line will generate an error when executed. The error will be6 9rror
usi
82T arguments dimensions are not consistent.
9rror using errores ,line !-
9rror using vertcat
82T arguments dimensions are not consistent.
Matlab #a detectado el error en la construccion de la matriz y$ nos indica el tipo de
error cometido ! la lnea ! columna de codi"o donde se #a producido%
-i corre"imos el codi"o$ anVadiendo a la matriz y el elemento :ue le falta$
Escript con errores:
y=/1 ! 31 $ & '1 ! 3 80 Ea esta matriz le falta un elemento en la ultima fila
x=/1 ! 31 $ & '0
z=yIx Elas matrices no pueden multiplicarse entre si por que no coinciden
Enumero de columnas de la primera con numero de filas de la segunda
! volvemos a e9ecutar el script%
>> errores
y =
1 ! 3
$ & '
! 3 8
x =
1 ! 3
$ & '
9rror using I
Anner matrix dimensions must agree.
9rror in errores ,line &-
z=yIx Elas matrices no pueden multiplicarse entre si por que no coinciden
Matlab nos detecta el si"uiente error cometido as como la lnea en la :ue se comete%
-i intercambiamos las posiciones entre las variables x ! y en el producto$ suponiendo
:ue esta es la causa del error cometido$
y=/1 ! 31 $ & '1 ! 3 80
x=/1 ! 31 $ & '0
z=xIy
=l codi"o se e9ecuta con normalidad$
>> errores
y =
1 ! 3
$ & '
! 3 8
x =
1 ! 3
$ & '
z =
1& !1 34
3' &1 4(
2% =rrores de codificacion% =ste se"undo tipo de errores son muc#o mas difciles detectar%
=l codi"o se e9ecuta sin problemas$ pero los resultados no son los esperados% 6nte esta situaci
on$ no :ueda mas remedio :ue ir revisando el codi"o$ paso a paso para detectar donde
esta el error%
=l si"uiente codi"o del script trect.m muestra un error de este tipo$
Eeste script toma los valores de los catetos de un triangulo rectangulo del
Ewor+space de Hatlab ,variables a y b-. calcula su hipotenusa: y a partir
Ede estos datos: el seno el coseno y la tangente del angulo formado por la
Ehipotenusa y el cateto mayor que serUa siempre a
Ecalculo hipotenusa:
h=sqrt,aK!bK!-
Ecalculo del seno
s=aJh
Ecalculo del coseno
a=bJh Eerror estamos sobreescriesdo el valor del coseno en la variable que
Eguardaba e valor del cateto
Ecalculo de la
tangente t=bJa
=l pro"rama funciona perfectamente$ por e9emplo si #acemos a=$ ! bM3$
>> trect
h =
&
s
=
(.8(((
a
=
(.'(((
t
=
&
Como #emos sobre escrito en a el valor del coseno$ cuando tratamos de utilizar dic#a
variable$ como si fuera el cateto ma!or$ para obtener la tan"ente el resultado :ue obtenemos
es erroneo%
=l editor de te3to de Matlab nos permite e9ecutar un pro"rama paso a paso$ ver los valores
:ue van tomando las variable en Matlab$ etc$ mediante el depurador :ue lleva incorporado%
&ara ello$ se definen el editor de Matlab brea5points$esto es lneas en las cuales Matlab
de1 tendra la e9ecucion de un pro"rama$ entrara en modo de depuracion ! esperara
instrucciones del usuario% La fi"ura 2%> muestra el codi"o del e9emplo :ue acabamos de
ver$ en el :ue se #a definido un brea+point$ pinc#ando con el raton sobre el "uion :ue
precede a la lnea del pro"rama en la :ue se desea parar la e9ecucion% Matlab indica :ue el
brea5point esta activo$ cambiando el "uion por un crculo ro9o%
-i una vez senValado el brea5point$ e9ecutamos el
script$
>> trect
h =
3.1$..
1! s=aJh
V>>
Matlab nos indica :ue #a detenido la e9ecucion del pro"rama en la linea marcada por el
brea5point Elnea 2 en el e9emploF% ademas vuelve a mostrar el prompt en la ventana
de comandos$ pero esta vez precedido por la letra +$ para indicarnos :ue #a entrado en
modo de depuracion%
6 partir de a:u Matlab pone a nuestra disposicion las #erramientas de depuracion$ la
fi"ura
2%C muestra la lnea en :ue se #a parado la e9ecucion del pro"rama$ senValada con una
flec#a verde$ ! al"unas de estas #erraminentas% 4asicamente nos da la posibilidad de
e9ecutar el
*i"ura 2%>D 4rea5point activo
codi"o paso a paso$ de entrar e ir paso a paso en las funciones :ue llama nuestro pro"rama$
o de de continuar la e9ecucion #asta :ue el final del pro"rama o #asta el si"uiente bra5point
activo% &ara dominar los detalles del depurador se aconse9a leer la a!uda de Matlab%
-i pulsamos el boton de 8paso adelante8Matlab e9ecutara la linea de pro"rama senVala
da con la flec#a verde ! se parara en la lnea si"uiente% =n cada paso$ podemos ver el
valor :ue toman las varibles$ pidiendo su valor directamente en la ventana de comandos$
V>> a
a =
(.4&31
o bien senValando Esin pulsar botonesF con el raton en el editor de te3to la variable de
la :ue se trate% =n nuestro e9emplo del trian"ulo rectan"ulo es mu! sencillo avanzar paso en
el pro"rama con el depurador$ ! caer en la cuenta :ue$ cuando se va a calcular la tan"ente$
la variable a !a no contiene el valor del cateto%
3% 6dvertencias% &or ultimo senValar la e3istencia de los .arnin"s no se trata propiamente
de errores$ sino de simples advertencias de :ue al"o puede me9orar de forma mas
eficiente$ o puede no dar el resultado :ue esperabamos% =n "eneral$ cuando se recibe un
.arnin" al e9ecutar un pro"rama$ o cuando el editor de Matlab subra!a en ro9o al"un
caracter en el editor de te3tos$ corre"ir el pro"rama para :ue desaparezcan$ aun:ue
propiamente no se trate de errores%
*i"ura 2%CD &arada de pro"rama en brea5point ! #erramientas de depuracion
2%;% Control de *lu9o
=n la seccion anterior$ se introdu9o el modo de escribir pro"ramas en Matlab mediante el uso de
scripts ! funciones% =n todos los casos vistos$ la e9ecucion del pro"rama empezaba por la
primera lnea del pro"rama$ ! continua$ por orden$ lnea tras lnea #asta alcanzar el final del
pro"rama% -e trata de pro"ramas en los :ue el flu9o es lineal$ por:ue los resultados de cada l
nea de pro"rama se van obteniendo re"ularmente uno detras de otro%
Ka! ocasiones en las :ue$ por diferentes razones :ue e3pondremos a continuacion$ puede
in1 teresarnos alterar el orden en :ue se e9ecutan las sentencias de un pro"rama$ bien repitiendo
una parte de los calculos un determinado numero de veces o bien e9ecutando unas partes de c
odi"o u otras en funcion de :ue se satisfa"an unas determinadas condiciones%
=l control del orden en :ue se e9ecutan las sentencias de un pro"rama es lo :ue se conoce con el
nombre de control de flu9o% ,eremos dos tipos principales de control de flu9oD =l flu9o condicional
! los bucles%
2%;%% *lu9o condicional%
=mpezaremos con un e9emplo sencillo de como ! para :ue condicionar el flu9o de un
pro"rama% -upon"amos :ue :ueremos construir un pro"rama :ue reciba como variable de entrada
un numero cual:uiera ! nos muestra un mnesa9e por pantalla si el numero es par%
&ara ello$ podramos #acer uso de la funcion rem Ever tabla 2%;F% -i el resto de la division
entre dos del numero suministrado a la funcion es cero$ se trata de un numero par$ si no es un
numero impar% &odramos #acer uso de operadores relacionales$ en particular de == para
comprobar si el resto de la division entre dos es cero% &or ultimo necesitaramos al"un
mecanismos :ue permitiera al pro"rama escribir un mensa9e solo cuando el numero introducido
sea par%
2%;% CB)2?BL += *LUJB >
if 1 elseif 1 else 1 end% =l mecanismo :ue necesitamos nos lo suministra la estructura if de
Matlab% ,eamos en primer lu"ar el codi"o del e9emplo del :ue venimos #ablando$
function espar,x-
E9ste programa recibe un numero entero como variable de entrada. y muestra
Epor pantalla un mensa)e indicando si el numero recibido es par o impar.
E8alculamos el resto de la division por
dos resto=rem,x:!-1
E9mpleamos una estructura if % else %end para decidir que mensa)e
mostrar if resto==(
Esi el resto es cero el numero es par
disp,*el numero es par*-
end
=l pro"rama toma un numero como variable de entrada ! calcula el resto de su division
entre dos% 6 continuacion entra en una parte de codi"o especial$ :ue se inicia con la palabra
clave if ! termina con la palabra clave end%
La palabra clave if va siempre se"uida de una e3presion :ue da un resultado lo"icoD
verdadero
EF o falso E0F% =sta e3presion puede ser cual:uier combinacion valida de e3presiones
relacionales
o lo"icas% =sta e3presion lo"ica$ :ue si"ue al if constitu!e una condicion% =l pro"rama se"uira e9e1
cutando las si"uientes lneas solo si la condicion se cumple si no se las saltara #asta lle"ar a
la e3presion end%
=n nuestro e9emplo$ se emplea una e3presion relacional sencilla resto==(% -i se cumple$ el
pro"rama e9ecutar la si"uiente lnea de pro"rama$ escribiendo en la ventana de comandos la frase
%
el
numero es par8si no se cumple el pro"rama se salta$ lle"a #asta le end$ ! no escribe nada
por pantalla%
6cabamos de ver la estructura condicional if mas sencilla posible% &odramos complicarla
un poco pidiendo :ue tambien nos sa:ue un mensa9e por pantalla cuando el numero sea impar%
=sto supone incluir en nuestro pro"rama una dis!untiva/ si es par el pro"rama debe #acer una
cosa ! si no$ debe #acer otra% &ara incluir este tipo de dis!untivas en una estructura if$ se
emplea la palabra clave else% ,eamos nuestro e9emplo modificado$
function espar,x-
E9ste programa recibe un numero entero como variable de entrada. y muestra
Epor pantalla un mensa)e indicando si el numero recibido es par o impar.
E8alculamos el resto de la division por
dos resto=rem,x:!-1
E9mpleamos una estructura if % else %end para decidir que mensa)e
mostrar if resto==(
Esi el resto es cero el numero es par
disp,*el numero es par*-
else
end
Esi el resto no es cero el numero es
impar disp,*el numero es impar*-
La palabra clave else marca a#ora la dis!untiva$ si el numero es par$ el pro"rama e9ecuta las
lneas de codi"o entre el if ! el else$ si el numero no es par e9ecutara las lneas entre el else
! el end%
La estructura if admite todava ampliar el numero de posibilidades de eleccion mediante
la palabra clave elseif% 6l i"ual :ue con if$ elseif va se"uido de una e3presion lo"ica :ue
establece una condicion$ si se cumple se e9ecutara el codi"o de las lineas si"uientes$ si no se cumple$
el pro"rama saltar a si"uiente lnea :ue conten"a una palabra claveD otro elseif$ un else o
directamente el end :ue marca el final de la parte de codi"o condicional% &ara ver como
funciona$ vamos a modificar nuestro e9emplo anterior$ para :ue$ si el numero introducido no es
divisible por dos$ compruebe si es divisible por tres$
function divis,x-
E9ste programa recibe un numero entero como variable de entrada. y
muestra
Epor pantalla un mensa)e indicando si el numero recibido es par. 7i no
es
Epar: comprueba si es divisible por 3 y si lo es muestra un mensa)e
por
Epantalla indicandolo. 7i no es par ni divisible por tres muestra
un
Emensa)e diciendo que no es par ni disible por
tres.
E9mpleamos una estructura if%elseif%else%end para decidir que mensa)e mostrar
if rem,x:!-==(
Esi el resto es cero el numero es
par disp,*el numero es par*-
elseif rem,x:3-==(
E9l numero es divisible por tres
disp,*el numero es divisible por
3*-
else
Eel numero no es par ni divisible por tres
disp,*el numero no es par ni divisible por
3*-
end
-i llamamos a#ora a la funcion dando como valor de entrada un numero par$ =9ecutara
el codi"o situado deba9o del if ! antes del elseif ! se saltara todo lo demas #asta lle"ar al
end% -i el numero introducido no es par$ pero es divisible por tres$ se saltara el codi"o situado
por deba9o
del if$ e9ecutar el codi"o contenido deba9o del elseif #asta el else ! saltara el resto del codi"o
#asta lle"ar al end% &or ultimo si el numero no es par$ no divisible por tres$ solo e9ecutara el c
odi"o situado por deba9o del else%
Un aspecto :ue debemos resaltar$ es :ue el pro"rama e9ecutara el codi"o correspondiente a
la primera condicion :ue se cumpla$ ! se saltara el resto #asta lle"ar al end% 6s por e9emplo$
si en nuestro e9emplo introducimos el numero <$ el pro"rama nos mostrara el mensa9e %
el
numero
es par8$ puesto :ue esta es la primera condicion :ue se cumple$ pero nunca nos mostrara el
mensa9e %
el
numero es divisible por 38% &or:ue una vez comprobada ! cumplida la primera condici
on Eser parF el pro"rama salta directamente al end final de la estructura$ sin comprobar nada
mas% La fi"ura
2%0 muestra el es:uema completo de una estructura if% Los terminos entre parentesis
pueden
estar o no presentes en una implementacion concreta%
=structuras if anidadas% =n el e9emplo anterior$ #emos visto como si el numero introducido
en la funcion era par ! ademas divisible por tres$ el pro"rama nunca nos informara de esta
se"unda
if condicion
%%% codi"o
%%%
=structura if1elseif1else1end
Eelseif condicionF
%%% codi"o
%%%
Eelseif condicionF
%%% codi"o
%%%
%
Epuede #aber tantos blo:ues elseif como se necesitenF
%
EelseF
%%% codi"o
%%%
end
*i"ura 2%0D =s:uema "eneral de la estructura de flu9o condicional if los terminos escritos
entre parentesis son opcionales%
propiedad$ debido al caracter e3clu!ente de la estructura if% Una manera de resolver este problema$
es mediante el uso de estructuras if anidadas% La idea es mu! sencilla$ se constru!e una
estructura if para comprobar una determinada condicion$ si esta se cumple$ dentro de su c
odi"o se constru!e otra estructura if para comprobar una se"unda condicion$ ! as
sucesivamente$ todas las veces :ue sea necesario% -i modificamos nuestro e9emplo anterior$
inclu!endo un if anidado$
function divis!3,x-
E9ste programa recibe un numero entero como variable de entrada. y
muestra
Epor pantalla un mensa)e indicando si el numero recibido es
par.
Esi el numero es par y divisible entre
tres:
Esi es divisible entre
tres
E7i no es par ni divisible por
tres
E9mpleamos una estructura if % else
%end
Ey un if anidado para decidir que mensa)e
mostrar
if
rem,x:!-==(
Esi el resto es cero el numero es par
Ecomprobamos con un if anidado si ademas es divisible entre
tres if rem,x:3-==(
disp,*el numero es par y divisible entre tres*-
else
disp,*el numero es par*-
end
elseif rem,x:3-==(
E9l numero es divisble entre tres
disp,*el numero es divisible entre 3*-
else
Eel numero no es par ni divisible entre tres
disp,*el numero no es par ni divisible entre
tres*-
end
-.itc#1case1ot#er.ise% -e trata de otra estructura :ue permite tambien e9ecutar una parte
u otra de codi"o de acuerdo con unas codiciones preestablecida% =stas condiciones se presentan
en forma de casos$ el pro"rama comprueba al lle"ar a la estructura switch de :ue caso se
trata ! e9ecuta el codi"o correspondiente% La fi"ura 2% muestra la forma "eneral :ue toma una
estructura switch%
=structura s.itc#1case1ot#er.ise
s.itc# variable
case e3presion
%%% codi"o
case e3presion
%%% codi"o
%
&uede #aber tantos blo:ues case como se necesiten
%
ot#er.ise
%%% codi"o
end
*i"ura 2%D =s:uema "eneral de la estructura s.itc#1case1ot#er.ise
La estructura switch$ compara el valor contenido en la variable de entrada a la estructura
con las e3presiones contenidas en los casos$ e9ecutando el primer caso para el :ue coincidan% -i no
encuentra nin"uno$ e9ecuta entonces el codi"o contenido deba9o de la sentencia otherwise%
,eamos un e9emplo mu! sencillo$
function signo,x-
Eeste programa emplea una estructura switch para informarnos del signo de
Eun numero.
E"CT2 9< =LC@L2H2 "C 8CH=LD932 WD9 <2 X2LA23<9 B9 9"TL2B2 G 792 D" "DH9LC:
E7A 97 D" X98TCL C D"2 H2TLAY9< L97D<T2BC "C TA9"9 79"TABC
s=sign,x-1 Eobtnemos el signo del numero mediante la funcion sign
Econstruimos la estructura switch:
switch s
case 1
disp,*el numero es positivo*-
case %1
disp,*el numero es negativo*-
otherwise
end
disp,*el numero es cero*-
La funcion del e9emplo emplea a su vez la funcion de Matlab sign para obtener el si"no
E$ $ 0F del numero introducido% (uarda el resultado de esta operacion en la variable s$
:ue
ser precisamente la variable de entrada a la estructura switch% Los casos se limitan a c#e:uear
los posibles valores de la variable ! enviar a la ventana de comandos el mensa9e correspondiente%
2%;%2% 4ucles
=n ocasiones$ es preciso repetir una operacion un numero determinado de veces o #asta
:ue se cumple una cierta condicion% Los len"ua9es de alta nivel poseen estructuras especficas$
para repetir la e9ecucion de un trozo de pro"rama las veces :ue sea necesario% Cada repeticion
recibe el nombre de iteracion% =stas estructuras reciben el nombre "enerico de bucles% ,amos a
ver dos tipos los bucles for ! los bucles while%
4ucles for% Un bucle for repite las sentencias contenidas en el bucle un determinado nu
mero de veces$ es decir realiza un numero fi9o de iteraciones% La estructura "eneral de un bucle
for se muestra en la fi"ura$ 2%2
=structura de un bucle for
for indiceMQvector de valoresR
%%% c
odi"o
EcondicionD 4rea5F
%%%
EcondicicionD
ContinueF
%%% c
odi"o end
*i"ura 2%2D =s:uema "eneral de la estructura de un bucle for los terminos escritos entre par
entesis son opcionales%
=l bucle empieza con la palabra clave for$ se"uida de una variable a la :ue #emos dado el
nombre "enerico de ndice% =sta variable ira tomando sucesivamente los valores de los
elementos contenidos en el Qvector de valoresR% =l codi"o contenido en el bucle$ desde la lnea
si"uiente al for
#asta el end se e9ecutar tantas veces como valores ten"a el vector de valores% 6ntes de #ablar de
las sentencias brea+ ! continue$ veamos al"uno e9emplos%
function y=demofor,x-
Eeste programa emplea un bucle for sencillo para ir mostrando uno a uno
Elos elementos del vector de entrada x por pantalla. ademas los suma y
Eguarda el resultado total en el vector
y: y=(1 Einiciamos la suma a cero
for i=x
disp,i-
y=yi1
end
-i e9ecutamos el pro"rama$ usando como entrada el vector d=/1 4 $ 180$
>> d=/1 4 $
180
d
=
1 4 $ 18
>>
suma=demofor,d-
1
4
$
18
suma =
3!
Una vez :ue el pro"rama lle"a al bucle for$ i"uala la variable i al primer valor contenido en
el vector de entrada$ lo muestra por pantalla ! anVade su valor a la variable de salida% cuando
lle"a al end del bucle for comprueba :ue todava :uedan valores del vector de entrada por
recorrer$ as :ue vuelve al principio del for$ i"ual la variable i al se"undo valor del vector de
entrada$ suma dic#o valor a la variable de salida$ lle"a al end ! as sucesivamente #asta :ue
#a!a recorrido todos los valores del vector de entrada%
=l uso mas #abitual de los bucles$ es para recorrer elementos de un vector o de una matriz% por
esta razon$ lo mas frecuente es :ue no se de e3plcitamente el vector cu!os elementos debe
recorrer el ndice del for$ sino :ue se constru!a empleado el operador 6$
for indice=principio6incremento6final
,eamos un e9emplo sencillo para obtener el vector suma de dos vectores$
function s=sumafor,x:y-
Eeste programa emplea un bucle for sencillo para sumar dos
vectores
Eprimero comprueba si son del mismo tamano. 7i no lo son da un mensa)e
de
Eaviso
l1=length,x-1
l!=length,y-1
if l1==l!
Econstruimos un vector de ceros del mismo tamano que x e y paraa
Eguardar el resultado de la
suma: s=zeros,size,x--1
Esi son iguales los suma elemento a elemento usando un bucle
for for i=16l1
s,i-=x,i-y,i-1
end
else
end
disp,*los vectores son de distinto tamano*-
=n la fi"ura 2%2$ aparecen dos sentencias opcionales$ brea+ ! continue%
La sentencia brea+$ permite terminar el bucle for #a!a terminado de realizar todas las e9ecu1
ciones previstas% La sentencia brea5 va siempre incluida dentro de una condicion :ue$ si se cumple
interrumpe la e9ecucion del bucle% &or e9emplo podemos emplear un bucle for! una sentencia
brea+$ para buscar la primera vez :ue un determinado numero aparece en un vector$
function posicion=buscanum,x:n-
Eeste programa emplea un bucle for y un brea+ para buscar en el vector x:
Ela primera ves que aparece el numero n
Eobtenemos la longitud del
vector l1=length,x-1
Einiciamos la variable posicion a un valor
absurdo posicion=%11
for i=16l1
if x,i-==n
posicion=i6
brea+
end
end
if posicion==%1
disp,*el numero pedido no se encuentra en el vector x*-
end
=l pro"rama tomo coma variables de entrada un vector ! el numero :ue de debe buscar
dentro del vector% Constru!e un bucle for$ con el mismo numero de iteraciones :ue el tamanVo
del vector% el bucle va comparando los elementos del vector con el numero pedido% Cuando
encuentra un elemento i"ual$ se e9ecuta el codi"o de la estructura if contenida en el bucle/ la
variable posicion toma el valor del ndice i del bucle ! la sentencia brea+ interrumpe la e9ecuci
on del bucle$ saltando al final del mismo% &or ultimo$ se #a anVadido una condicion al
terminar el bucle$ para el caso de :ue se #a!an recorrido todos los elementos del vector sin
encontrar el numero pedido%
La sentencia continue$ se emplea para #acer :ue una determinada iteracion interrumpa
su e9ecucion ! salte directamente al comienzo de la si"uiente iteracion% +ebe ir$ como en el caso
de la sentencia brea+$ incluida en una estructura condicional% ,eamos un e9emplo para entender
como funciona% -e trata de un pro"rama :ue admite como entrada un vector de cual:uier
lon"itud ! devuelve como salida otra vector :ue contiene solo los numeros pares contenidos en
le vector de entrada$
function pares=buscapar,x-
Eeste programa emplea un bucle for y un continue para construir un vector
Ede salida con los numeros pares contenidos en el vector de entrada.
Eobtenemos la longitud del
vector l1=length,x-1
Einiciamos el vector de salida a un vector
vacQo: pares=/01
for i=16l1
if rem,x,i-:!-N=(
continue
end
end
pares=/pares x,i-01
=l funcionamiento es mu! sencillo$ en cada iteracion la sentencia if comprueba si el nu
mero es par% -i no lo es$ entra en el codi"o de la estructura if$ e9ecuta la sentencia continue$ !
se salta el resto del codi"o del bucle$ volviendo directamente a empezar la si"uiente iteracion%
bucles for anidados% Los bucles for pueden anidarse unos dentro de otros de modo analo"o a
como se #ace con las estructuras if% ,eamos un e9emplo de uso$ mu! comun/ calcular la suma
de dos matrices$
function s=suma#mat,x:y-
Eeste programa emplea dos bucles for anidados para obtener la suma de
dos
Ematrices.
Eobtenemos el tamano de las
matrices: t1=size,x-1
t!=size,y-1
if t1,1-==t!,1-OO
t1,!-==t!,!-
Esi las matrices tienen el mismo tamano pueden sumarse...
Econstruimos una matriz de dicho tamanp para guardar el resultado de
Ela suma
s=zeros,size,x--1
Econstruimos un bucle que recorre las filas de ambas
matrices for i=16t1,1-
Ey dentro: anidamos un bucle que reorre las
columnas for )=16t1,!-
E9mpleando ambos Qndices para ir sumando los elementos de las
Edos matrices:
s,i:)-=x,i:)-y,i:)-1
end
else
end
end
Esi no tienen el mismo tamano no se pueden
sumar... disp,*las matrices no son del mismo
tamano*-
=s interesante observar en este e9emplo el funcionamiento de los dos bucles anidados% Cada
interacion del bucle e3terior$ avanza una fila$ en el recorrido de las matrices$ cada iteracion
del bucle interior recorre todos los elementos de la fila indicada por el bucle e3terior%
bucle .#ile% =ste bucle tiene la misma finalidad :ue u bucle for$ repetir un trozo de codi"o
un determinado numero de veces% Lo :ue cambia$ es el mecanismo :ue determina cuantas
iteraciones
realizar el bucle% =n el caso de un bucle while las iteraciones se repiten un numero indefinido
de veces mientras se cumpla una determinada condicion impuesta al principio del bucle% La fi"ura
2%3 muestra la estructura "eneral de un bucle .#ile%
,eamos un e9emplo sencillo%
=structura de un bucle .#ile
.#ile condicion
%%% c
odi"o
EcondicionD
4rea5F
%%%
EcondicicionD
ContinueF
%%% c
odi"o end
*i"ura 2%3D =s:uema "eneral de la estructura de un bucle while los terminos escritos entre par
ente1 sis son opcionales%
function n=potencia,x:max-
Eeste programa emplea un bucle while para calcular la potencia a la que hay
Eque elevar un numero x para que el resultado sea mayor que otro
Edeterminado numero max
Eun numero.
E"CT2 9< =LC@L2H2 "C 8CH=LD932 WD9 <2 X2LA23<9 B9 9"TL2B2 G 792 D" "DH9LC:
E7i 97 D" X98TCL C D"2 H2TLAY 9< L97D<T2BC "C TA9"9 79"TABC
pot=11
n=(1
while potMmax Emientras la potencia calculada sea menor que
max n=n11
pot=xKn1
end
=l pro"rama empela un bucle while para calcular el e3ponente mnimo #a! :ue elevar
un numero para :ue rebase una determinada cantidad% =l bucle .#ile se e9ecuta mientras la
potencia calculada$ sea menor :ue la variable max$ una vez :ue la potencia rebasa dic#o valor el
bucle de9a de e9ecutarse% Un aspecto mu! importante del bucle while es :ue al pro"ramarlo #a!
:ue ase"urarse de :ue dentro del bucle e3iste la posibilidad de cambiar la condicion de entrada% -i
no$ el pro"rama no podra terminar nunca el bucle
<
%
Las sentencias brea+ ! continue son identicas a las descritas en el caso de los bucles for$
por lo :ue no insistiremos mas sobre el asunto%
4ucles .#ile anidados% +el mismo modo :ue se anidan los bucles for$ es posible anidar bucles
while% Como un e9emplo$ vamos a reproducir el pro"rama desarrollado antes para sumar dos
matrices$ empleando a#ora bucles while%
function s=suma#while,x:y-
Eeste programa emplea dos bucles while anidados para obtener la suma de
dos
Ematrices.
Eobtenemos el tamano de las
matrices: t1=size,x-1
<
Cuando se produce esta situacion por un error en el disenVo del pro"rama$ el bucle se puede parar pulsando a
la vez las teclas ctrlSc
t!=size,y-1
if t1,1-==t!,1-OO t1,!-==t!,!-
Esi las matrices tienen el mismo tamano pueden sumarse...
Econstruimos una matriz de dicho tamanp para guardar el resultado de
Ela suma
s=zeros,size,x--1
Econstruimos un bucle que recorre las filas de ambas
matrices i=11 Einicimos un contador para las filas
while iM=t1,1-
Ey dentro: anidamos un bucle que reorre las
columnas )=11 Einiciamos un contador para las
columnas
while )M=t1,!-
E9mpleando ambos Qndices para ir sumando los elementos de las
Edos matrices:
s,i:)-=x,i:)-y,i:)-1
)=)11 Evamos incrementando el indice de columnas
end
else
end
i=i11 Evamos incrementando el indice de filas
end
Esi no tienen el mismo tamano no se pueden
sumar... disp,*las matrices no son del mismo
tamano*-
=l e9emplo$ es mas complicado de pro"ramar ! menos eficiente :ue si usaramos bucles for% La
razon de incluirlo es puramente ilustrativa% =n "eneral$ un bucle while debe utilizarse solo cuando
el numero de iteraciones :ue se precisa realizar no es fi9o$ sino :ue depende de al"una condici
on propia de los resultado :ue se van obteniendo a medida :ue se van realizando iteraciones%
2%;%3% *unciones recursivas%
Una funcion recursiva es una funcion :ue se llama a s misma% Kemos esperado #asta a:u
para #ablar de ellas por:ue$ de al"una manera se comportan como un bucle$ ! necesitan una
condicion de salida para de9ar de llamarse a s mismas ! terminar s e9ecucion% =n "eneral$
son delicadas de mane9ar ! tienden a consumir muc#a memoria !a :ue cada vez :ue la
funcion se llama a s misma necesita crear un nuevo espacio de memoria independiente% ,eamos
un e9emplo de funcion recurrente :ue permite obtener el termino enesimo de la sucesion de
*ibonacci
f
0
M 0$ f

M $ f
2
M $ f
3
M 2$ f
@
M 3$ f
;
M ;$ *
<
M >$ f
i
M f
i
S f
i2

La sucesion empieza con los terminos 0 ! ! a partir de a# cada termino es la suma de
los dos anteriores% &odemos convertir directamente esta definicion en codi"o$
function s=fibonacci,n-
Eobtiene el termino enesimo de la sucesion de fibonacci empleando una
Efuncion recursiva. que funcione no quiere decir que sea eficiente...
En numero del termino que se desea obtener
if nM!
Eel valor del termino de fibonacci es el
mismo s=n1
else
end
Esi nUo es la suma de los dos
anteriores... s=fibonacci,n%
1-fibonacci,n%!-1
-i n es menor :ue dos$ la funcion da como valor el termino correspondiente E o 0F% -i n
es ma!or :ue dos$ vuelve a llamarse a si misma con entrada n%1 ! n%!$ para calcular el valor en
esimo de la sucesion a partir de la suma de los dos anteriores$ la funcion se ira llamando a s
misma #asta lle"ar a n f 2% 6 partir de a# ira devolviendo los valores obtenidos en cada llamada
#asta obtener el enesimo termino%
2%;%@% 6l"oritmos ! dia"ramas de flu9o%
Un al"oritmo es$ en la definicion de la ?eal academiaD
Un con9unto ordenado ! finito de operaciones :ue permite #allar la solucion de
un problema%
La palabra al"oritmo #a lle"ado #asta nosotros transcrita del nombre del matematico
arabe 6l1Juarismi Ecirca A>01>;0 dcF% =n pro"ramacion los al"oritmos son importantes$ por:ue
suponen un paso previo a la creacion de un pro"rama%
Kabitualmente$ partimos de un problema para el :ue tenemos un enunciado concreto% &or
e9emploD obtener los n primeros numeros primos%
=l si"uiente paso$ sera pensar ! definir un al"oritmo :ue permita resolver nuestro
problema$ es importante caer en la cuenta de :ue un mismo problema puede resolverse$ en
muc#os casos$ por distintos caminos% &or tanto es posible disenVar distintos al"oritmos para
resolver un mismo problema% Un posible al"oritmo para el problema de los numeros primos ser
a el si"uiente$
Considerar 2 como el primer numeros primo% Eun numero primo es a:uel :ue solo es
divisible por si mismo o por uno%F
?ecorrer todos los numeros impares desde 3 #asta :ue se complete el numero n de nu
meros primos solicitados%
&ara cada numero$ probar a dividirlo por todos los primos obtenidos #asta ese momento%
-i no es divisible por nin"uno$ el numero es primo ! se "uarda$ si es divisible por al"uno
de ellos$ se interrumpe el proceso ! se prueba con el si"uiente%
=n ocasiones$ facilita la comprension de un al"oritmo representarlo "raficamente mediante un
dia"rama de flu9o% Los dia"ramas de flu9o emplean smbolos bien definidos para representar los
distintos paso de un al"oritmo ! flec#as para indicar la relacion entre ellos/ la relacion en la :ue
informacion flu!e de un paso del al"oritmo a otro%
)o #a! una norma r"ida para realizar un dia"rama de flu9o$ el "rado de detalle con :ue
se describe el al"oritmo va en funcion de las necesidades del pro"ramador$ o de los destinatarios
a :uien va diri"ido el dia"rama% La idea fundamental es :ue facilite la comprension del al"oritmo%
-e utilizan diversos smbolos para indicar$ procedimientos$ condiciones$ almacenamiento de
resultados$ etc% La fi"ura 2%@ muestra los tres smbolos mas empleados%
&ara indicar el inicio ! el fin de un al"oritmo se emplea como smbolo una elipse% &ara
indicar un procedimiento concreto$ como por e9emplo realizar un calculo$ asi"nar un valor a una
variable$ etc$ se emplea como smbolo un rectan"ulo% &or ultimo se emplea un rombo como s
mbolo$ para representar una condicion%
0nicio ! fin del al"oritmo
procedimentos
flu9o condicional
*i"ura 2%@D -mbolos empleados en dia"ramas de flu9o
Los smbolos s relacionan mediante flec#as :ue indican el sentido en :ue se e9ecuta el al"oritmo%
los rombos suelen tener dos flec#as de salida marcadas con las palabras 8si 8no8$ para indicar por
donde si"ue el flu9o de informacion dependiendo de si la condicion representada se cumple o no%
&or ultimo un bucle se representa #abitualmente mediante una flec#a :ue devuelve el flu9o
a un smbolo !a recorrido anteriormente%
La fi"ura 2%; muestra un posible dia"rama de flu9o para el problema de los numeros primos%
Como puede observarse$ contiene mas informacion :ue la version :ue #emos dado del
al"oritmo descrito con palabras%
Las lneas :ue marcan los flu9os de informacion nos indican :ue sera necesario implementar
un bucle e3terior #asta :ue se complete el numero n de primos solicitados ! un bucle interior
:ue
deber comprobar si cada nuevo numero impar :ue probamos$ es divisible por los numeros primos
encontrados #asta ese momento%
Ka! una tercera condicion :ue debe interrumpir la comprobacion para el primer numero
impar :ue resulte ser divisor del numero :ue se esta comprobando%
=s facil e3traer del dia"rama de flu9o las estructuras de pro"ramacion :ue necesitaremos para
elaborar un codi"o :ue nos permita resolver el problema planteado% &or e9emplo$ parece l
o"ico implementar el bucle e3terior empleando un bucle while$ implementar el bucle interior
con un for$ :ue de tantas iteraciones como primos se #an encontrado #asta ese momento$
=mplear un brea+ para interumpir la comprobacion$ etc%
&or supuesto es posible realizar un dia"rama de flu9o mas detallado$ en el :ue incluso se inclu!an
e3plcitamente parte del codi"o :ue se va a utilizar% &or e9emplo se podra indicar :ue se emplear
a la funcion rem para comprobar si un numero es divisble entre otro% -in embar"o$ #a! :ue
tener cuidado para evitar :ue un e3ceso de detalle dificulte entender la lo"ica del al"oritmo
contenida en el dia"rama%
&or ultimo el al"oritmo se codifica dando lu"ar a un pro"rama de ordenador :ue permite
resolver el problema% &ara ello$ #a! :ue identificar las instrucciones del al"oritmo con estructuras
de pro"ramacion validasD bucles$ condicionales$ etc% ,eamos un posible codi"o para "enerar nu
meros primos$ si"uiendo el al"oritmo descrito%
function p=primos,n-
Egenerador de numeros primos. @enera un vector con los primeros n
numeros
Eprimos. ,si n es muy grande
tardar
mucho en acabar.
Ecreamos un vector de salida en el que incluimos el ! como primer numero
inicio
0ntroducir cuantos
numeros primos se desea obtener
EnF
"uardar el numero 2
como primer numero
primo
]-e #a alcanzado -i
la cifra pedida de primosO
fin
)o
tomar el si"uiente numero impar
tomar el primer numero primo
de los !a encotrados
s
]=s divisible el impar entre el primoO
no
anVadir el numero
impar a la lista de
primos encontrados
s

]-e #an acabado


los numeros
primos !a
encontradosO
no
2omar el si"uinte numero
primo de la lista de los !a
encontrados
*i"ura 2%;D +ia"rama de flu9o para el problema de los numeros primos
Eprimo...
p=zeros,1:n-1
p,1-=!1
Einiciamos un contador a 1: puesto que ya tenemos el primer numero
primo )=11
Ecreamos un segundo contador que recorra los numeros impares: a a partir
Edel 3
s=31
Ecreamos un bucle while: que realiza las iteraciones necesarias hasta tener
Elos n numeros primos deseados.
while )Mn
Ecreamos un bucle for que recorra todos los primos encontrados hasta la
Efecha
pr=11 E2ctivamos aviso de numero
primo for i=!6)
Ecalculamos el resto de la divisiUon entera con cada primo
de p if rem,s:p,i--==(
Esi el numero es divisible por algun primo anterior
pr=(1 EBesactivamos el aviso6 el numero no el
primo... brea+ E... y cortamos la busqueda
end
end
if pr==1 Esi el numero es
primo p,)1-=s1 Elo
guardamos...
E...e incrementamos el contador de numeros primos
encontrados )=)11
end
end
Epor ultimo: generamos un nuevo candidato para ver si es
primo... s=s!1
2%<% ?epresentacion (r
afica
La posibilidades "raficas constitu!en$ 9unto a la facilidad para mane9ar matrices$ uno de los
aspectos mas atractivos de Matlab como #erramienta de calculo cientfico% Matlab permite
realizar "raficos en dos ! tres dimensiones de mu! diversos tipos%
2%<%% =l comando plot ! las fi"uras en Matlab%
plot% =l comando de dibu9o mas sencillo de Matlab es el comando plot% La filosofa de dibu9o
es mu! sencilla se pasan como variables de entrada do vectores$ el primero de ellos con las
coordenadas x ! el se"undo con las correspondientes coordenadas y de los puntos :ue se desea
dibu9ar% -i no se
indica nada$ Matlab unir los puntos mediante lneas rectas% -upon"amos :ue deseamos representar
"raficamente los puntos E3%!F de la si"uiente tabla de datos$
2%<% ?=&?=-=)26C0B

) (?6

*0C6
C;
2abla 2%<D +atos de prueba
3 !
0 0
2 3
1 2
12 1@
&ara ello$ lo primero :ue #acemos es construir dos vectores/ uno con las coordenadas 3 de los
puntos$
>> x=/( ! %1 %!0
x =
( ! %1 %!
! el otro con las coordenadas ! de los puntos$
>> y=/( 3 ! %$0
y =
( 3 ! %$
&or ultimo empleamos el comando plot$ dando como variables de entrada los dos
vectores construidos$
>> plot,x:y-
Matlab responde al comando abriendo una ventana "rafica$ como la :ue muestra la fi"ura
2%<$ con la fi"ura correspondiente a los puntos de la tabla$ unidos mediante lneas rectas%
La ventana "rafica de Matlab$ tiene en su parte superior una barra de #erramientas ! un
menu desple"able con funciones especficas para la manipulacion de los "raficos% -e aconse9a
leer la a!uda de Matlab sobre el uso de dic#as #erramientas%
Una de las opciones del menu desple"able$ permite "uardar la fi"ura "enerada como un
ar1 c#ivo "rafico% -i salvamos el "rafico de la fi"ura 2%< ! lo importamos directamente en el
te3to obtendramos un "rafico como el de la fi"ura$ 2%A% 6 partir de a#ora importaremos de esta
manera todas las fi"uras :ue costru!amos con Matlab%
=l comando plot admite un tercer parametro de entrada% -e trata de smbolos$ escritos entre
comillas simples$ :ue permiten definirD
=l tipo de lnea :ue se empleara en el "rafico% por e9emplo plot,x:y:*%.Z*- une los
puntos mediante una lnea de puntos ! "uiones%
=l smbolo :ue se
emplear
para representar los puntos% &or e9emplo$ plot,x:y:*o*- dibu9a
un crculo en la posicion de dada punto ! no los unes entre s mediante lneas rectas%
=l color :ue se emplear
color ro9o%
para dibu9ar% &or e9emplo$ plot,x:y:*r*-% +ibu9a la "rafica en
-i no se define este tercer parametro$ plot dibu9ar los "raficos$ por defecto$ en color azul$
uniendo los puntos con lneas continuas ! no usara nin"un smbolo para dibu9ar los puntos
indivi1 duales%
rrador$9uan%9imen
*i"ura 2%<D ,entana "rafica de Matlab% representacion de los punto de la tabla A%2%
La tabla 2%A muestra los smbolos disponibles para dibu9ar con el comando plot%
-e puede combinar un smbolo de cada tipo en un mismo plot% 6s por e9emplo si :ueremos
representar los datos de la tabla A%2% unidos mediante una linea de puntos$
plot,x:y:*6*-
-i :ueremos :ue pinte solo los puntos sin unirlos con lneas ! en color ro9o$
plot,x:y:*.r*-
-i :ueremos :ue pinte los puntos representados por trian"ulos con el vertice #acia arriba$
unidos mediante una lnea continua ! en color ne"ro$
plot,x:y:*%K+*-
La fi"ura 2%> muestra los resultados de las combinaciones de smbolos :ue acabamos de
des1 cribir%
*i"uras% Cada vez :ue escribimos en la ventana de comandos de Matlab$ un comando "r
afico como por e9emplo plot Matlab comprueba si e3iste al"una fi"ura Eventana de "raficosF
abierta% &ueden darse entonces tres situaciones distintas%
% )o #a! nin"una fi"ura abierta% Matlab crea entonces una fi"ura nueva ! representa en en ella
el "rafico pedido%
3
2
1
0
1
2
3
4
2 1.5 1 0.5 0 0.5 1 1.5 2
*i"ura 2%AD "rafico de los puntos de la tabla A%2% obtenida con el comando plot
2% Ka! una fi"ura abierta% Matlab empleara dic#a fi"ura para representa el "rafico pedido%
&or
defecto$ Matlab borrar cual:uier "rafico anterior :ue contuviese la fi"ura%
3% e3iste mas de una fi"ura abierta% Matlab empleara para dibu9ar la llamada fi"ura activa$
:ue corresponde con la fi"ura :ue se #a!a utilizado o :ue se #a!a seleccionado por ultima
vez con el raton%
=s posible crear varias fi"uras distintas empleando directamente el comando figure% Cada vez
:ue lo introduzcamos en la ventana de comandos$ Matlab creara una fi"ura nueva asi"n
andole un numero Efi"ura $ 2 $3 etc%F% -i empleamos el comando figure$ se"uido de un nu
mero entre parentesis$ figure,!&-$ Matlab creara una nueva fi"ura asi"nandole dic#o nu
mero ! si !a e3iste
la fi"ura la convertir
! plot combinados%
en la fi"ura activa% =l si"uente script muestra un e9emplo del uso de figure
Eeste script ,figuras.m-muestra el uso de los comandos figure y plot para
pintar
Evarias funciones se aconse)a copiarlo y probarlo en Hatlab para entender
Eme)or como funciona.
Evamos a pintar un trozo de la funcion eKx: en concreto para el intervalo
Ex=/(:10
E8onstruimos un vector de 1(( puntos equiespaciados en el intervalo /(:10
x=linspace,(:1:1((-1
Ecalculamos el valor de la funcion eKx para los puntos cosntruidos:
2abla 2%AD tipos de lnea ! color del comando plot
2ipo de lnea -
mbolo
2ipo de punto -mbolo Color -mbolo
continua 1
puntos D
puntos ! "uiones 1%
"uiones
punto %
crculo
o e:uis 3
mas S
asterisco e
diamante d
trian"ulo vertice aba9o v
trian"ulo vertice arriba g
trian"ulo vertice iz:uierda
f trian"ulo vertice derec#a
_ trian"ulo vertice arriba g
cuadrado s
penta"ono p
#e3a"ono #
azul b
verde "
ro9o r
c!an c
amarillo !
ne"ro 5
blanco .
y1=exp,x-1
Epintamos los puntos y frente a x:
plot,x:y1- Eplot ha construido una figura en Hatlab: la figura 1.
E8onstruimos una segunda figura en
Hatlab figure Ese ha construido la
figura !
Econstruimos una tercera figura
figure Ese ha construido la figura
3
Ecalculamos los valores que tomar
la funcion sin,!IpiIx- para los puntos
Ex del intervalo /(:10 que ya
tenemos y!=sin,!IpiIx-1
Ehacemos activa la figura
! figure,!-
Epintamos en esta figura los puntos de la funcion
sin... plot,x:y!-
Evolvemos a hacer activa la figura
1 figure,1-
Epintamos ahora los puntos de la de la funcion y=eKx: pero invertidos x
Efrente a y: <a grafica anterior se borra y es sustituida por la
nueva: plot,y1:x-
Ecreamos una nueva figura asignandole un numero al crearla:
plot(x,y)
4
plot(x,y,:)
4
2 2
0 0
2 2
4
2 1 0 1 2
4
2 1 0 1 2
plot(x,y,or)
4
plot(x,y, ^ k)
4
2 2
0 0
2 2
4
2 1 0 1 2
4
2 1 0 1 2
*i"ura 2%>D +atos de la tabla A%2% representados mediante distintos tipos de lineas ! colores
figure,13-
Evolvemos activar la figura
3 figure,3-
Evolvemos a pintar: ahora en la figura 3: la funcion
y=eKx: plot,x:y1-
Evolvemos a activar la figura 13 y pintamos en ella de nuevo la funcion
Esin..
figure,13-
plot,x:y!-
Como se #a senValado antes$ cual:uier comando "rafico :ue se e9ecute borra por defecto
el contenido anterior de la fi"ura activa% =s posible cambiar este comportamiento$ empleando
para ello el comando hold% -i en la ventana de comandos escribimos hold on$ a partir de ese
momento
la ventana activa mantendr cual:uier "rafico :ue conten"a ! anVadira a este los nuevos "r
aficos
:ue se creen% =ste comportamiento se mantiene #asta :ue vuelva a escribirse en la ventana de
comandos la sentencia hold off% =l si"uiente script muestra un e9emplo del uso de este comando
! La fi"ura 2%C el "rafico resultante%
Ee)emplo de uso de hold on para representar dos funciones en el
mismo
Egrafico
Evamos a representar las funciones seno y coseno en el intervalo /%pi: pi0
Ecreamos un vector de 1(( puntos en el
intervalo: x=/%pi6!IpiJ446pi01
Ecalculamos el valor de la funcion seno sobre los puntos
x seno=sin,x-1
Ecalculamos el valor de la funcion coseno sobre los puntos
x coseno=cos,x-1
Epintamos la funcion seno: con linea continua
azul plot,x:seno-
Ele pedimos que mantenga el grafico
creado hold on
Epintamos encima la funcion coseno en linea continua
ro)a plot,x:coseno:*r*-
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
1
4 3 2 1 0 1 2 3 4
*i"ura 2%CD "raficas de las funciones seno ! coseno en el intervalo EL$ LF% ?epresentadas en la
misma fi"ura$ usando el comando hold on%
=s posible tambien incluir varios "rafico separados en la misma fi"ura% &ara ello se emplea
el comando subplot,i:):+-% =ste comando divide la fi"ura en un total de i 9 "rafico ! activa
el situado en la posicion 5$ las posiciones se cuentan fila a fila de arriba a aba9o% =l si"uiente script
muestra el uso del comando suplot La fi"ura 2%20 muestra el resultado obtenido%
E9ste script muestra el uso del comando subplot
Evamos a crear una figura con !G3=' graficas: se disponen en la figura como
Esi fueran los elementos de una matriz...
Eusamos el comando subplot de modo que cree el primer e)e de los
' subplot,!:3:1-
Edefinimos un vector x de puntos equiexpacios en el intervalo ,%1:1-
x=linspace,%1:1:!(-1
Ecalculamos los valores de polinomio 3xK!!Kx%
1 y=3Ix.K!!Ix%11
Edibu)amos la funcion en los
e)es plot,x:y-
E2nadimos rotulos a los e)es
xlabel,*e)e x*-
ylabel,*e)e y*-
E2nadimos un titulo al
grafico title,*grafico 1*-
E@eneramos los siguientes e)es ,a la derecha del anterior-
subplot,!:3:!-
Edubu)amos la misma funcion pero ahora en linea discontinua
ro)a plot,x:y:*6r*-
E2nadimos rotulos a los e)es
xlabel,*e)e x*-
ylabel,*e)e y*-
E2nadimos un titulo al
grafico title,*grafico !*-
E@eneramos los siguientes e)es ,a la derecha del anterior-
subplot,!:3:3-
Edubu)amos la misma funcion pero ahora en linea de punto y raya
negra plot,x:y:*%.+*-
E2nadimos rotulos a los e)es
xlabel,*e)e x*-
ylabel,*e)e y*-
E2nadimos un titulo al
grafico title,*grafico 3*-
E@eneramos los siguientes e)es ,deba)o de los primeros-
subplot,!:3:$-
Edubu)amos la misma funcion pero ahora solo con circulos
azules plot,x:y:*o*-
E2nadimos rotulos a los e)es
xlabel,*e)e x*-
ylabel,*e)e y*-
E2nadimos un titulo al
grafico title,*grafico $*-
E@eneramos los siguientes e)es ,a la derecha del anterior-
subplot,!:3:&-
Edubu)amos la misma funcion pero ahora solo con cruce
ro)as plot,x:y:*r*-
E2nadimos rotulos a los e)es
xlabel,*e)e x*-
ylabel,*e)e y*-
E2nadimos un titulo al
grafico title,*grafico &*-
E@eneramos los ultimos e)es ,a la derecha del anterior-
subplot,!:3:'-
Edubu)amos la misma funcion pero ahora en linea continua y asteriscos
Enegros
plot,x:y:*%I+*-
E2nadimos rotulos a los e)es
xlabel,*e)e x*-
ylabel,*e)e y*-
E2nadimos un titulo al
grafico title,*grafico '*-
=n el e9emplo$ se #a #ec#o usos de al"unos comandos para "raficos :ue permiten
introducir ttulos% =stos sonD
title$ introduce un titulo a un "rafico$ por e9emplo$
title,*grafico de temperaturas*-
xlabel$ anVade un rotulo al e9e 3$ por e9emplo$
xlabel,*tiempo en segundos*-
ylabel anVade un rotulo al e9e ! $ por e9emplo$
ylabel,*distancia en metros*-
2%<%2% (raficos en 2+
Kasta a#ora$ #emos visto tan solo el comando plot$ :ue nos #a servido para introducir las ca1
pacidades "raficas en Matlab% Como #emos visto$ plot permite representar "raficamente
colecciones de datos en dos dimensiones% Ka! otros muc#os comandos :ue permiten obtener
representaciones especializadas de datos en dos dimensiones% 6 continuacion veremos al"unos de
los mas destacables%
1 0 1 1 0 1 1 0 1
eje x eje x eje x
e
j
e

y
e
j
e

y
e
j
e

y
e
j
e

y
e
j
e

y
e
j
e

y
2
grfio 1
4
grfio 2
4
grfio 3
4
2 2 2
0 0 0
2
1 0 1
eje x
grfio 4
4
2
1 0 1
eje x
grfio 5
4
2
1 0 1
eje x
grfio 6
4
2 2 2
0 0 0
2 2 2
*i"ura 2%20D =9emplo de empleo del comando subplot
fplot% &ermite dibu9ar directamente una funcion en un intervalo de valores% =l nombre de la fun1
cion #a! :ue introducirlo entre comillas simples ! el intervalo como un vector de dos componentes%
&or e9emplo$
>> fplot,*exp,%x.K!-.Icos,'IpiIx-*:/%3 30-
dibu9a la funcion$
en el intervalo Q3$ 3R Efi"ura 2%2%
f E3F M e
3
cosE<L3F
semilo"3% =l comando semilog representa el e9e de las 3 en escala lo"artmica$ =s decir$ en
lu"ar de representar frente a la variable 3$ se representa frente a lo"
0
E3F% -i dibu9amos
empleando este tipo de "rafico la funcion ! M lo"
0
E3F deberamos obtener una linear recta de
pendiente unidad% La fi"ura 2%22 muestra el resultado$ empleando para las e:uis el intervalo E0$
F%
>>
x=linspace,(:1:1((-1
>>
y=log1(,x-1
>>
semilogx,x:y-
>> grid
on
Un par de observaciones sobre este e9emploD =n primer lu"ar las divisiones del e9e 3 aparecen
marcadas como potencias de 0% Como estamos representando empleando el lo"aritmo decimal de
la variable 3$ las divisiones se corresponden con el e3ponente de la potencia de 0 de cada division$
lo"
0
E0
n
F M n%
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
1
3 2 1 0 1 2 3
*i"ura 2%2D =9emplo de empleo del comando fplot
=n se"undo lu"ar #emos empleado un nuevo comando "rafico/ se trata del comando grid%
=ste comando anVade una retcula al "rafico de modo :ue sea mas facil ver los valores :ue
toman las variables en cada punto de la "rafica% grid on$anVade la retcula ! grid off la
retira%
semilo"!% 6nalo"a al anterior$ simplemente :ue a#ora es el e9e ! el :ue se representa en escala
lo"artmica% =n este caso
ser recta$
>> x=linspace,(:1:1((-1
>> y=1(.Kx1
>> semilogy,x:y-
>> grid on
si representamos la funcion ! M 0
3
cuando obten"amos una linea
lo"lo"% 6nalo"a a las anteriores$ loglog,x:y- representa y frente a x empleando en ambos
e9es una escala lo"artmica%
polar% ?epresenta funciones en coordenadas polares polar,theta:r% La primera variable es un
an"ulo en radianes ! la se"unda el correspondiente radio% La fi"ura 2%2@ muestra la espiral$

&ara el intervalo an"ular Q0$ >LR%
>> theta=linspace,(:8Ipi:1((-1
r M 2 N
0
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8
2
2 1 0
10 10 10
*i"ura 2%22D ?epresentacion de la funcion ! M lo"
0
E3F empleando el comando semilogx
>>
r=!Itheta1
>>
polar,theta:r-
>>
r=sqrt,theta-1
>>
polar,theta:r-
stem$ bar$ stairs% =n los tres casos$ se obtienen representaciones discretas de un con9unto de
datos% stem representa los datos mediante lineas verticales :ue parten del e9e 3 ! lle"an #asta el
valor correspondiente de !% Las lneas van rematadas por un crculo% bar =mplea barras
solidas verticales ! stairs realiza una representacion en escalera% La fi"ura 2%2; muestra el
resultado de dibu9ar$ empleando estos tres tipos de "raficos$ los datos correspondientes al nu
mero de coc#es por cada 000 #abitantes en 200A para cincuenta pases distintos Elos datos se
"uardaban en una matriz llamada auto ;0 200AF$
>>
subplot,1:3:1-
>>
stem,auto#&(#!((.-
>>
subplot,1:3:!-
>>
bar,auto#&(#!((.-
>>
subplot,1:3:3-
>>
stairs,auto#&(#!((.-
#ist% =ste comando permite dibu9ar el #isto"rama de una coleccion de datos% =l #isto"rama
es una forma de representar cuantas veces se repite un datos$ o mas e3actamente cuantos datos
de la coleccion caen dentro de un intervalo dado% La funcion hist,x:n- admite dos parametros
de entrada$ un vector de datos x ! un valor entero n :ue representa el numero de intervalos
en :ue
se dividir el ran"o de valores de x$ para obtener el #isto"rama% -i no se introduce esta se"unda
variable$ Matlab por defecto divide el ran"o de los datos en 0 intervalos% ,eamos un e9emplo de
uso de #ist$ empleando los datos del e9emplo anterior relativos a numero de coc#es por cada
mil
1
10
0
10
0 0.2 0.4 0.6 0.8 1
*i"ura 2%23D ?epresentacion de la funcion ! M 0
3
empleando el comando semilogy
#abitantes% ?epresentaremos el #isto"rama para un total de 23 pases% &ara tener una idea$
del ran"o de los dato$ calculamos el valor mnimo ! ma3imo de los datos disponibles$
>> minimo=min,auto!((.-
minimo =
(
>> maximo=max,auto!((.-
maximo =
8.$
=l ran"o va de 0 a >AC automoviles por cada mil #abitantes% La fi"ura 2%2< muestra los #isto1
"ramas obtenidos sin indicar el numero de intervalos$ por lo :ue se tomaran 0$ tomando ;
intervalos ! tomando 20%
>> subplot,1:3:1-
>> hist,auto!((.-
>> subplot,1:3:!-
>> hist,auto!((.:&-
>> subplot,1:3:3-
>> hist,auto!((.:!(-
>> subplot,1:3:1-
>> title,*1( intervalos*-
>> subplot,1:3:!-
>> title,*& intervalos*-
>> subplot,1:3:3-
>> title,*!( intervalos*-
120
!0
6
60
4
150 30
2
180 0
210
330
240
2"0
300
*i"ura 2%2@D ?epresentacion de la funcion r M

N empleando el comando polar


La interpretacion del los #isto"ramas depende lo"icamente del numero de intervalos% =n el
caso de 0 intervalos$ estos dividen los datos en "rupos de apro3imadamente 00 coc#es% -i
observamos el #isto"rama resultante$ podemos concluir :ue #a! unos 20 pases en los :ue #a!
entre 0 ! 00 automoviles por cada 000 #abitante$ unos 30 pases en los :ue #a! entre 00 !
200 automoviles por cada 000 #abitante$ etc% -i miramos el si"uiente #isto"rama$ en el :ue se
#an empleado tan solo ; intervalos$ los "rupos son a#ora de apro3imadamente 200 coc#es% La
primera barra de este se"undo #isto"rama establece :ue #a! unos ;0 pases en los :ue #a!
entre 0 ! 200 coc#es por cada 000 #abitantes% ?esultado :ue corresponde a la suma de los de
dos primeros intervalos del #isto"rama anterior% &ara el tercer #isto"rama los intervalos son a#ora
de ;0 automoviles$ lo :ue permite observar mas en detalle :ue en los #isto"ramas anteriores la
distribucion de ve#culosD 0 pases tienen menos de ;0 automoviles por cada 000 #abitantes%
plot!!% =ste comando permite representar dos "raficas en la misma fi"ura de modo :ue
com1 parten el mismo e9e 3 ! cada una tiene su propio e9e !% La fi"ura 2%2> muestra el
resultado del si"uiente e9emplo$
>>
x1=linspace,(:1(:1((-1
>> x!=linspace,(:1!:&(-1
>>
y1=x1.K!1
>>
y!=x!.K,!J3-1
>> plotyy,x1:y1:x!:y!-
>> grid
on
:uiver% =sta funcion de Matlab permite dibu9ar vectores en el plano% =n realidad esta
pensada para dibu9ar campos vectoriales$ con lo :ue #a! :ue mane9arla con cierto cuidado% =n
primera
0 10 20 30 40 50 0 20 40 60 0 10 20 30 40 50
2500
2500 2500
2000
2000 2000
1500
1500 1500
1000
1000 1000
500
500 500
0 0 0
*i"ura 2%2;D Comparcion entre los comandos stem$ bar ! stairs representando la misma colecci
on de datos%
140
120
100
80
60
40
20
10 i#ter$%lo&
200
150
100
50
5 i#ter$%lo&
120
100
80
60
40
20
20 i#ter$%lo&
0
0 200 400 600 800 1000
0
0 200 400 600 800 1000
0
0 200 400 600 800 1000
*i"ura 2%2<D #isto"ramas del numero de automoviles por cada 000 #abitantes para 23 pases
apro3imacion diremos :ue quiver necesita ; variables de entradaD la coordenada 3 del ori"en
del vector$ la coordenada ! del ori"en del vector$ la componente 3 del vector ! la componente !
del vector$ pro ultimo$ un factor de escala al :ue daremos el valor 0 para :ue dibu9e los vectores
a su tamanVo real$ sin modificar su escala% &or e9emplo si :ueremos dibu9ar el vector hv M E$ 2F
situado en el ori"en de coordenadas$
quiver,(:(:1:!:(-
-i :ueremos representar el mismo vector pero situado en el punto E3$ F$
>>quiver,3:%1:1:!:(-
&odemos dibu9ar un con9unto de vectores con :uiver$ para ello empleamos como variables de
entradas vectores$ en lu"ar de escalares/ un vector :ue conten"a las posiciones 3 del los or
"enes$ un se"undo vector :ue conten"a la posiciones ! de los or"enes$ un tercer vector :ue
conten"a las componentes 3 de los vectores ! un cuarto :ue conten"a las componentes !$ por u
ltimo anVadiramos el parametro de escala 0$ :ue si"ue siendo un escalar%
&or tanto$ si :ueremos dibu9ar a la vez los dos vectores de los e9emplos anteriores$
>>quiver,/( 30:/( %10:/1 10:/! !0:(-
La fi"ura OO muestra los resultados del e9emplo :ue acabamos de ver$
errorbar% &ermite anVadir barras de error a un "rafico de puntos e3perimentales%
-upon"amos :ue tenemos la si"uiente tabla EOOF de resultados de la medida de la velocidad de un
movil frente al tiempo$
La primera columna representa el instante de tiempo en :ue se tomo la medida$ la se"unda
columna representa el valor medido de la velocidad ! la tercera columna la incertidumbre de cada
medida de velocidad%
100 10
50 5
0 0
0 2 4 6 8 10 12
*i"ura 2%2AD =9emplo de uso de la funcion plotyy
podemos emplear el comando ,errorbarF para representar la velocidad frente al tiempo$
anVadien1 do una barra de error en cada medida :ue represente la incertidumbre$
>> vel=/( !.8 $.( $.3 $.! $.8 '.3 ..4 8.4 4.( 8..0
vel =
8olumns 1 through .
( !.8((( $.(((( $.3((( $.!((( $.8((( '.3(((
8olumns 8 through
11
..4((( 8.4((( 4.(((( 8..(((
>> inc=/( (.8 (.8
(.4 inc =
(.4 1.( 1.( 1.( 1.1 1.1 1.10
8olumns 1 through .
( (.8((( (.8((( (.4((( (.4((( 1.(((( 1.((((
8olumns 8 through 11
1.(((( 1.1((( 1.1((( 1.1(((
>> t=(61(
t =
( 1 ! 3 $ & ' . 8 4 1(
2
1.5
1
0.5
0
0.5
1
0 0.5 1 1.5 2 2.5 3 3.5 4
*i"ura 2%2>D =9emplo de uso de la funcion quiver
>> errorbar,t:vel:inc-
>> xlabel,*tiempo
s*-
>> ylabel,*velocidad
mJs*-
=L resultado se muestra en la fi"ura 2%2C% =s interesante #acer notar :ue la lon"itud total de
cada barra de error es el doble del valor de la incertidumbre correspondiente al punto% &or e9emplo
para t M s$ v S iv M 2$> 0$>m's la lon"itud de la barra de error es 2 iv M $<m'sF%
=l comando errobar$ puede tambien emplearse para representar incertidumbre asimetricos% &ara
ello e es preciso suministrar dos vectores uno D para dibu9ar la parte superior de la barra de
error ! otro < para dibu9ar la parte inferior/ errorbar,x:y:<:D-%
2%<%3% (raficos en
3+%
=n tres dimensiones es posible representar dos tipos de "raficosD puntos ! curvas$ analo"os
a los representados en dos dimensiones ! ademas superficies en el espacio%
plot3% &ara dibu9ar lneas ! puntos Matlab emplea los mismos comandos a los :ue #emos
descrito para dos dimensiones$ anVadiendo al nombre de comando la terminacion 3 para indicar
:ue se trata de un "rafico en tres dimensiones% 6s por e9emplo el comando plot3 nos permite
dibu9ar puntos ! curvas en el espacio% =l mane9o es identico al de plot$ simplemente :ue a#ora
es preciso anVadir un vector :ue conten"a los datos de la tercera coordenada z%
&or e9emplo$ podemos representar la curva$
! M sinE2L3F
z M cosE2L3F
&ara ello$ seleccionamos un intervalo de valores para 3 E0$ 2F$ ! calculamos los
correspondien1 tes valores de ! ! z$
2abla 2%>D ?esultados e3 p erim e n tales de la medida de la v elocidad de un m
ovil tiempo velocida incertidumbre
t EsF v Em'sF iv Em'sF
0 0 0
2%> 0%>
2 @%0 0%>
3 @%3 0%C
@ @%2 0%C
; @%> %0
< <%3 %0
A A%C %0
> >%C %
C C%0 %
0 >%A %
>>
x=linspace,(:!:1((-1
>>
y=sin,!IpiIx-1
>>
z=cos,!IpiIx-1
&odemos a#ora representar la "rafica de nuestra funcion empleando el comando plot3$
>>
plot3,x:y:z-
>> grid
on
>>
xlabel,*x*-
>>
ylabel,*y*-
>>
zlabel,*z*-
Kemos anVadido los comandos grid on para obtener una trama en 3+ :ue permita ver me9or
el resultado% La fi"ura 2%30EaF muestra la fi"ura de Matlab obtenida$ donde se #a senValado adem
as un boton :ue permite rotar la fi"ura$ cambiando la vista% &ara ellos$ una vez pulsado el bot
on$ basta con arrastrar el raton sobre la fi"ura manteniedo pulsado el boton iz:uierdo% La
fi"ura 2%30EbF$ muestra la misma "rafica en 3+$ pero a#ora vista de frente Ecomo si nos
situaramos en el e9e 3F% La fi"ura 2%30EcF$ nos muestra la "rafica vista desde arriba Edesde el e9e
zF$ por ultimo$ la fi"ura
2%30EdF muestra una vista lateral de la "rafica Etomada desde el e9e
!F%
=s posible rotar la fi"ura par a obtener una vista concreta mediante el comando view,2z: 9-l%
=ste comando admite dos parametros/ 2z$ representa el azimut# o an"ulo de rotacion
#orizontal$ 9l representa el an"ulo de elevacion% 6mbos an"ulos se introducen en "rados% 6s$
por e9emplo las vistas representadas en las fi"uras anteriores$ se pueden obtener como$
>>
view,4(:(-
>>
view,(:4(-
>>
view,(:(-
bar3$ stem3$ #ist3$ :uiver3% =3isten versiones 3+ de los comandos bar$ stem$ hist !
quiver% -u funcionamiento es similar aun:ue no siempre i"ual al de la version 2+ :ue
vimos en la seccion anterior% =n al"unos casos necesitan tres variables de entrada$
correspondientes a las com1 ponentes E3$!$zF de los datos :ue se :uiere representar$ ! en otros
necesitan :ue los datos de entrada se le suministren en forma de matriz% &ara conocer en detalle
su funcinamiento$ lo ideal es acudir a la a!uda de Matlab%
E0$ 0F E$ 0F E2$ 0F E3$ 0F
| | | |
2
2
2
$
e
l
o

i
'
%
'

(
)
&
12
10
8
6
4
2
0
2 0 2 4 6 8 10 12
tie(po &
*i"ura 2%2CD +atos de la tabla OO representados empleando el comando errorbar
-uperficies% &ara trazar superficies en el espacio$ Matlab necesita en primer lu"ar :ue se defina
una retcula en el plano E3$ !F :ue sirve de base sobre la :ue calcular los puntos z sobre los :ue
se
alzar la superficie%
&ara definir dic#a retcula Matlab emplea dos matrices% una de ellas P
m
contiene las
coorde1 nadas 3 de los nodos de la retcula ! la otra I
m
las coordenadas !% Los elementos
:ue ocupan la misma posicion en ambas matrices$ representas$ 9untos$ un punto en el plano%
Matlab emplea dic#as matrices como matrices de ad!acencia% Cada nodo$ E3
m
Ei$ 9F$ !
m
Ei$ 9F$
aparecera en la "rafi1 ca conectado por una arista a cada uno de sus cuatros puntos vecinos$
E3
m
Ei $ 9F$ !
m
Ei $ 9F$ E3
m
Ei$ 9 F$ !
m
Ei$ 9 F$ E3
m
Ei S $ 9F$ !
m
Ei S $ 9F$ E3
m
Ei$ 9 S
F$ !
m
Ei$ 9 S F% -upon"amos :ue empleamos las si"uientes matrices$ P
m
! I
m
para definir una
retcula sobre la :ue dibu9ar una superficie$
`
0 3
` `
0 0 0 0
`
E0$ F E$ F E2$ F E3$ F
Pm M
`
0 3
`
$Im
`

`
posiciones
`
0 3
` `
2 2 2 2
`

d
o

| | |
|
` ` ` `
E0$ 2F E$ 2F E2$ 2F E3$ 2F
0 2 3 3 3 3 3
| |
| |
E0$ 3F E$ 3F E2$ 3F
E3$ 3F
La retcula definida por Matlab$ a partir de dic#as matrices tendra el aspecto :ue se
muestra en la fi"ura 2%3%
-i nos fi9amos en los e9es de la fi"ura es facil obtener las coordenadas de los nodos ! comprobar
como$ estan unidos entre s por aristas los :ue ocupan posiciones ad!acentes en las matrices P
m
e I
m
%
&ara construir una superficie sobre la retcula$ lo unico :ue #ace falta es definir una altura EzF$
rador$9ua %9imenez
0 0
2
3 @
`
0 0
y
*
*
`
`
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
1
1 0.5 0 0.5
y
1
x
EaF ventana "rafica EbF vista frontal Ee9e 3F
1
1
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
0
0
0.2
0.2
0.4 0.4
0.6 0.6
0.8 0.8
1
0 0.5 1 1.5 2
x
1
0 0.5 1 1.5 2
x
EcF vista desde arriba Ee9e zF
EdF vista lateral Ee9e !Fl
*i"ura 2%30D (rafico en 3+ ! rotaciones%
para cada punto de la retcula% &ara ello$ Matlab emplea una matriz$ del mismo tamanVo :ue
P
m
! 3
m
% 6s por e9emplo$ si definimos$
`
0
`
W
m
M
`
0 0
`
`
0 0 0 0
Cada elemento de la matriz W
m
representa la altura del nodo correspondiente a las posiciones
marcadas por las matrices P
m
e I
m
$ tal ! como se muestra en la fi"ure 2%32%
La estructura de las matrices P
m
e I
m
de los e9emplo anteriores$ es la tpica de las
matrices de ad!acencia de una retcula cuadrada/ la matriz P
m
tiene la filas repetidas ! la matriz
I
m
tiene repetidas la columnas% =n el e9emplo las matrices son cuadradas ! definen una ret
cula de @ @ nodos% =n "eneral$ podemos definir una retcula rectan"ular de m n nodos%
=n este caso las matrices empleadas para definir la retcula tendran dimension m n%
&ara dibu9ar en Matlab superficies podemos en primer lu"ar emplear defnir la retcula a
partir de dos vectores de coordenadas empleando el comando meshgrid% =n el e9emplo :ue
acabamos de ver$ #emos empleado una retcula :ue cubre el intervalo$ 3 Q0$ 3R e ! Q0$ 3R%
para definirlo
*
1
0.5
0
0.5
1
3
2
1
y
0
0
1
0.5
2
1.5
x
3
2.5
*i"ura 2%3D ?etcula para representar superficies% Los puntos ne"ros son los nodos definidos
por las matrices P
m
e I
m
%
creamos los vectores$
>> x=(63
x =
( 1 ! 3
>> y=(63
y =
( 1 ! 3
6 continuacion empleamos el comando mesgrid para construir las dos matrices de ad!acencia%
Matlab se encar"ar de repetir las filas ! columnas necesarias$
>> /Gm:5m0=meshgrid,x:y-
Gm =
( 1 ! 3
( 1 ! 3
( 1 ! 3
( 1 ! 3
*
4
3.5
3
2.5
2
1.5
1
0.5
0 3
3
2
2
1
1
0 0
y
x
*i"ura 2%32D -uperficie elemental obtenida elevando los cuatros puntos centrales de la fi"ura 2%3%
5m
=
( ( ( (
1 1 1 1
! ! ! !
3 3 3 3
Una vez construidas las matrices de ad!acencia$ solo necesitamos una matriz de valores para
z
m
si defimos por e9emplo$
>> Ym=zeros,size,Gm--
Ym
=
( ( ( (
( ( ( (
( ( ( (
( ( ( (
&odramos representar la retcula plana de la fi"ura 2%3$ empleando por e9emplo el
comando
mesh,Gm: 5m: Ym-%
mes# ! surf% Una vez :ue #emos visto como construir una retcula rectan"ular sobre la
:ue construir una superficie$ veamos como dibu9arla con un e9emplo% -upon"amos :ue :ueremos
dibu9ar
la superficie$
z M 3
3
S !
2
=n la re"ion del plano$ 3 Q$;$ $;R$ ! Q2$ 2R%
0"ual :ue en el e9emplo inicial$ lo primero :ue debemos #acer es construirnos una matrices de
ad!acencia :ue definan una retcula en la re"ion de interes$
>> x=linspace,%1.&:1.&:!&-1
>> y=linspace,%!:!:&(-1
>> /Gm:5m0=meshgrid,x:y-1
=s interesante notar :ue la re"ion de interes no es cuadrada ! :ue las matrices de ad!acencia
tampoco los son E;0 2;F% 6demas los puntos no estan espaciados i"ual en los dos e9es%
6 continuacion obtenemos la matriz de coordenadas z$ aplicando la funcion a los puntos de la
retcula$
>> Ym=Gm.K35m.K!1
&ara representar la superficie podemos emplear el comando mesh%
>> mesh,Gm:5m:Ym-
=ste comando admite como variables de entrada las dos matrices de ad!acencia empleadas
para definir la retcula ! la matriz W
m
:ue contiene los valores calculados para la variable z$
en todos los puntos de la retcula% mesh traza la superficie en forma reticular$ es decir$ nos dibu9a
una malla en el espacio% =l color de la malla depende del valor :ue toma la coordenada z%
&odemos tambien representar la superficie #aciendo uso del comando surf$ empleando las
mismas variables de entrada :ue en el caso de mesh%
>> surf,Gm:5m:Ym-
La diferencia est
en :ue a#ora la superficie muestra las caras definidas por la malla de colores$
se"un el valor :ue toma la variable z% la fi"ura 2%33EaF muestra el resultado de nuestro
e9emplo empleando mesh ! la fi"ura 2%33EbF muestra el resultado empleando surf%
&ara fi"urar :ue presentan simetra radial$ puede ser mas conveniente$ definir las retcula
en
coordenadas polares% as por e9emplo$
>> r=(6!J!(6!1
>> theta=(6!IpiJ3'6!Ipi1
>> /rm:them0=meshgrid,r:theta-1
Kemos cosntruido una retcula en las variables r ! N$ si a#ora definimos las matrices de
ad!a1 cencia como las pro!ecciones sobre los e9es 3 e !$
>> xm=rm.Icos,them-1
>> ym=rm.Isin,them-1
Bbtenemos una retcula con simetra radial$ centrada en el ori"en de coordenadas% Como la
:ue se muestra en la fi"ura$ 2%3@%
La retcula resulta mu! adecuada para dibu9ar por e9emplo un cono Efi"ura reffi"DconoF$
>> zm=!%sqrt,xm.K!ym.K!-1
>> mesh,xm:ym:zm-
6 continuacion$ se inclu!e el codi"o de un script con varios e9emplos mas de disenVo de ret
culas circulares ! "raficos de superficies en 3+% Los resultados se muestran en la fi"ura 2%3>
Eeste script ,varios#g3d.m- incluye el diseno de varias retQculas
Ecirculares para trazar graficos de superficies en el espacio.
EretQcula circular para un
cono r=(6!J!(6!1
theta=(6!IpiJ3'6!Ipi1
/rm:them0=meshgrid,r:theta-1
Ecalculamos las compontes en x e y partir de rm y
thm: xm=rm.Icos,them-1
ym=rm.Isin,them-1
EBefinimos la componente z: a partir de la ecuacion de un
cono: zm=!%sqrt,xm.K!ym.K!-1
Elo dibu)amos empleando el comando
mesh mesh,xm:ym:zm-
E=ara dibu)ar una esfera: podrQamos emplear la misma retQcula: pero sale
Emas proporcionada: si de emplear intevalos de r equispaciodos: los hacemos
Eproporcionales al agulo de elevacion ,(:piJ!-. 2sique recalculamos r.
r=!Icos,(6piJ!J186piJ!-1 Etomamos 1' intervalos entre r= y r=!
Epara theta usamos el mismo de antes: no hace falta volver a calcularlo.
Ecalculamos los puntos de la retQcula en
polares: /rm:them0=meshgrid,r:theta-1
Ecalculamos las componentes x e y a partir de rm y
thm xm=rm.Icos,them-1
ym=rm.Isin,them-1
Edefinimos la componente z: como es la ecuacion de una esfera: debemos
Ecalcularla en dos partes:
zm#mas=sqrt,$%,xm.K!ym.K!--1
zm#menos=%sqrt,$%,xm.K!ym.K!--1
Evamos a emplear la misma ventana grafica en la que hemos dibu)ado el
Econo: asi que pedimos a Hatlab que retenga lo ya
dibu)ado: hold on
Epara que no salga un dibu)o encima del otro: dibu)amos la esfera
Edesplazando su origen al punto ,3:3:(-
Eemplearemos ahora el comando surf para representarla
Eprimero representamos la mitad
superior surf,xm3:ym3:zm#mas-
Ey despues la parte
inferior
surf,xm3:ym3:zm#menos-
Epor ultimo vamos a obtener la grafica de un cilidro vertical: =ara ello:
Evolvemos a alterar los valore de r. 8ostruimos un vector que repita
Esiempre los mismos valores y le damos tanto elementos como divisiones
E*verticales queramos que tenga el cilindro: por e)emplo
!( r=!Iones,1:!(-1
Evolvemos a crear la reticula
/rm:them0=meshgrid,r:theta-1
Ecalculamos las componentes x e y a partir de rm y
thm xm=rm.Icos,them-1
ym=rm.Isin,them-1
E =ara calcular los valores de z: debemos dividir la altura total que
E queremos dar al cilindro entre el numero de divisiones en r que tiene la
E retQcula original por e)emplo si la altura fuera
! z=!J,length,r-%1-I,(6length,r-%1-1
E Tenemos una columna de la matriz z: pero necesitamos repetirlas para
E cada valor de them:
zm=ones,size,xm--Idiag,z-1
Epodemos ahora dibu)ar en cilindro. 8omo hemos hecho con la esfera: lo
Evamos a desplazar a una posicion en la que no se sobreponga a otra
Efigura: por e)emplo al punto ,3 %3 %1-.
Elo vamos a representar usando de nuevo en comando
mesh mesh,xm3:ym%3:zm%1-
contour$ contour3$ mes#c ! surfc% =ste comandos permiten obtener ! dibu9ar las curvas del
nivel de una superficie% -u uso es identico al de los comandos anteriores% =s decir$ tambien
necesitan :ue se defina una retcula en el plano E3$ !F$ ! se calculen los valores :ue tomara la
variable z sobre los puntos de la retcula%
,eamos su funcionamiento con un ultimo e9emplo% Bbtenemos una retcula cuadrada$
calcula1 mos sobre ella los puntos de la superficie$
z M sinE2L3F S cosE2L!F
>> x=/%
16(.(&6101
>>
y=x1
>>
/xm:ym0=meshgrid,x:y-1
>> zm=sin,!IpiIxm-cos,!IpiIym-1
>>
contour,xm:ym:zm-
>>
contour3,xm:ym:zm-
>>
meshc,xm:ym:zm-
>>
surfc,xm:ym:zm-
La fi"ura 2%3AEaF muestra los resultados de aplicar el comando contour la "rafica
representa las curvas de nivel de la superficie dibu9adas sobre el plano E3$ !F% =l comando
contour3 E fi"ura
2%3AEbFF representa de nuevo las curvas de nivel$ pero situa cada una a su correspoondiente
altura z% &or ultimo meshc ! surfc representan la superficie ! anVaden en el plano E3$ !F la
representacion de las curvas de nivel correspondiente a la superficie%
&ara terminar la seccion dedicada a los "raficos$ vamos a combinar el comando mesh con
el comando plot3 para dibu9ar una curva sobre una superficie% 2omaremos como e9emplo la
superficie$
sin

EL3F
2
S EL!
2
F

z M
sin EEL3F
2
S EL!
2
FF
-obre la :ue trazamos la curva$
! M sinEpi3F$
>> x=/%16(.(&6101
>> y=x1
>> /xm:ym0=meshgrid,x:y-1
>> zm=sin,,piIxm-.K!,piIym-.K!-.J,,piIxm-.K!,piIym-.K!-1
>> mesh,xm:ym:zm-
>> y=sin,piIx-1
>> zm=sin,,piIxm-.K!,piIym-.K!-.J,,piIxm-.K!,piIym-.K!-1
>> z=sin,,piIx-.K!,piIy-.K!-.J,,piIx-.K!,piIy-.K!-1
=s importante insistir en :ue a lo lar"o de esta seccion nos #emos limitado a introducir
al"u1 nas de las posibilidades "raficas de Matlab% &ara obtener una vision completa de las
mismas es imprescindible leer con detenimiento la a!uda de Matlab%
dor$9uan%9im
*
*
8
6
4
2
0
2
4
2
1 2
0
1
0
1
1
y
2
2
x
EaF *uncion z M 3
3
S !
2
representada con mesh
8
6
4
2
0
2
4
2
1 2
0
1
0
1
1
y
2
2
x
EbF *uncion z M 3
3
S !
2
representada con
surf
*i"ura 2%33D Comparacion entre mesh !
surf
ador$9uan%9imene
y
2.5
2
1.5
1
0.5
0
0.5
1
1.5
2
2.5
2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5
x
*i"ura 2%3@D retcula con simetra circular
*
*
2
1.5
1
0.5
0
2
1 2
0
1
0
1
1
y
2
2
x
*i"ura 2%3;D Cono representado sobre una retcula circular
2
1
0
1
2
5
0
4
2
0
y
5
2
x
*i"ura 2%3<D retcula con simetra circular
rrador$9ua %9imenez
*
*
*
1
0.8
1.5
1
0.6
0.4
0.5
0
0.2
0
0.5
0.2
1
0.4 1.5
1
0.6 0.5 1
0.8
1
1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1
0
0.5
y 1 1
0
0.5
x
0.5
EaF contour
EbF contour3
2
1.5
2
1
0.5
1
0
0
0.5
1
1.5
2
1

0.5

0
0.5

0.5

0
1
0.5
1
2
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0
0.2
0.4
0.6
0.2
0.4
0.6
1
0.8
y
1 1
x
y
0.8
1 1
0.8
x
EcF mes#c
EdF surfc
*i"ura 2%3AD Comparacion entre los resultados de contour$ contour3$ meshc ! surfc$ para la
obtencion de las curvas de nivel de una superficie%
orrador$9uan%9imene
*
1
0.8
0.6
0.4
0.2
0
0.2
1
0.4
1
0.8
0.6
0.4
0.2
0
0.2
0.4
y
0.6
0.8
1
1
0.5
0.5
0
x
*i"ura 2%3>D Curva trazada sobre una superficie
Captulo 3
6ritmetica del Computador !
*uentes de error
=n el captulo $ introdu9imos la representacion binaria de numeros as como la conversion
de binario a decimal ! decimal a binario% 6 lo lar"o de este captulo vamos a profundizar mas
en el modo en :ue el ordenador representa ! opera con los numeros as como una de sus
consecuencias inmediatasD la imprecision de los resultados%
3%% ?epresentacion binaria ! decimal
Los numeros reales pueden representarse empleando para ello una recta :ue se e3tiende entre
! S% La ma!ora de ellos no admiten una representacion numerica e3acta$ puesto :ue
poseen infinitos decimales%
Los numeros enteros$ $ $ 2$ 2$ 3$ 3$ admiten una representacion numerica
e3acta% =n cual:uier caso$ rara vez mane9amos numeros enteros con una cantidad "rande de d
"itos$ #abitual1 mente$ los apro3imamos$ e3presandolos en notacion cientfica$ multiplic
andolos por una potencia de 0% 2omemos un e9emplo de la :umicaD la cantidad de atomos
o moleculas :ue constitu!en un mol de una sustancia se e3presa por el numero de 6vo"adro$
)
6
M <$022@AC 0
23
$ dic#o numero$ :ue debera ser un entero se e3presa empleando tan
solo C de sus 23 cifras si"nificativas Ea veces tan solo se dan las tres primerasF%
Cuando truncamos un numero$ es decir$ despreciamos todos sus d"itos #acia la derec#a a
partir de uno dado$ estamos apro3imando dic#o numero por un numero racional$ es decir$ por un
numero :ue puede e3presarse como el cociente entre dos numeros enteros% '2$ 3'@$
6l"unos numeros racionales se reducen a su vez a numeros enteros$ <'3$ otros dan lu"ar
a numeros cu!a representacion e3i"e un numero finito de d"itosD
'2 M E;$;F
0
M ; 0
0
S ;
0

-i representamos el mismo numero en base 2 obtenemos$


'2 M E0$F
2
M 2
2
S 0 2

S 2
0
S
2

-in embar"o$ el :ue un numero racional admita una representacion finita$ depende de la base
en :ue se representa% &or e9emploD '0 M E0$F
0
no admite representacion finita en base 2%
'0 M E0$0000000 F
2
M 2
@
S 2
;
S 0 2
<
S 0 2
A
S
2
>
S
2;
C6&

02ULB 3% 6?02M=

20C6 +=L CBM&U26+B? I *U=)2=- +=


=??B?
2<
=n este ultimo caso$ se trata de una representacion :ue$ aun:ue no termina$ es repetitiva
o periodica/ tras el primer cero decimal se repite indefinidamente la secuenciaD 00% Los nu
meros racionales admiten siempre una representacion finita o infinita periodica%
=l numero racional '3 M E0$333 F
0
M 0$000 F
2
solo admite representaci
on infinita
periodica tanto en base 0 como en base 2% -in embar"o$ admite representacion finita si lo
repre1 sentamos en base 3D '3 M E0$F
3
M 0 3
0
S 3

%
Kabitualmente$ en la vida normal$ representamos los numeros en base 0$ sin embar"o$ como
#emos visto en el captulo el ordenador emplea una representacion binaria% Como acabamos
de ver$ una primera consecuencia de esta diferencia$ es :ue al pasar numeros de una
representacion a otra estemos alterando la precision con la :ue mane9amos dic#os numeros%
=sta diferencia de representacion supone !a una primera fuente de errores$ :ue es preciso tener
en cuenta cuando lo :ue se pretende es #acer calculo cientfico con un ordenador% Como iremos
viendo a lo lar"o de este
captulo$ no
ser
la unica%
3%2% ?epresentacion de numeros en el
ordenador
=nteros positivos La forma mas facil de representar numeros sera empleando directamente
los re"istros de memoria para "uardar numeros en binario% -i suponemos un ordenador :ue ten"a
re"is1 tros de < bits% &odramos "uardar en ellos numeros comprendidos entre el 0 ! el 2
<

M <;;3<
% =ste ultimo se representara con un en cada una de las posiciones del re"istro$ en total <
unos% -e trata del entero mas "rande :ue podramos representar con un re"istro de < bitsD
posicion 2 3 @ ; < A > C 0 2 3 @ ; <
valor
Kasta a#ora$ nuestro sistema de representacion solo admite numeros enteros% =l menor nu
mero :ue podemos representar es el cero$ ! el ma!or$ dependera del tamanVo n de los
re"istros del ordenador 2
n
% =s evidente :ue este sistema de representacion resulta insuficiente%
=nteros positivos ! ne"ativos Un primera me9ora consistira en ampliar el sistema de
repre1 sentacion para :ue admita tambien numeros ne"ativos% Una posibilidad sera reservar
uno de los bits del arra! para representar el si"no $ ! usar los restantes para representar el numero%
=n nuestro e9emplo de un re"istro de < bits$ el numero mas "rande sera a#ora 2
;
! el m
as pe:uenVo sera
2
;
S % el cero tendra una doble representacion$ una de ellas con si"no mas ! la otra con
si"no menos%
Una representacion alternativa$ cu!o uso esta mu! e3tendido en las ma:uinas es la
represen1 tacion conocida con el nombre de Complemento a 2% -upon"amos un re"istro de n bitsD
Un entero 3 no ne"ativo se almacena empleando directamente su representacion binaria%
el intervalo de enteros no ne"ativos representables esD 0 3 2
EnF
%
Un entero ne"ativo 3$ donde 3 2
EnF
$ se almacena como la representacion
binaria del entero positivoD 2
n
3
=l numero as construido$ recibe el nombre de complemento a 2 de 3%
=n "eneral$ dado un numero entero ) f 2
n
su complemento a dos en una representacion
binaria de n d"itos se define comoD
C
) n
2
M 2 )
,eamos un e9emplo de esta representacion$ para el caso de un re"istro de @ bitsD
La representacion en complemento a 2 tiene las si"uientes caractersticasD
+ecimal E@ bitsF C
2
M 2
n


3 n% represe n tado
; E< F M ; 1
@ 0 E< 2F M @ 12
3 0 E< 3F M 3 13
2 00 E< @F M 2 1@
0 E< ;F M 1;
0 00 E< <F M 0 1<
C 00 E< AF M C 1A
> 000 E< >F M > 1>
A 0 A
< 00 <
; 00 ;
@ 000 @
3 00 3
2 000 2
000
0 0000 0
La representacion de los numeros positivos coincide con su valor binario
La representacion del numero 0 es unica%
=l ran"o de valores representables en una representacion de ) bits es 2
)
3 2
)
% Los numeros ne"ativos se obtienen como el complemento a dos$ $ cambiado de si"no$
del valor
binario :ue los representa%
Una forma practica de obtener el complemento a dos de un numero binario es copiar el nu
mero ori"inal de de derec#a a iz:uierda #asta :ue aparezca el primer % Lue"o de copiar el primer
$ se complementan el resto de los bits del numero Esi es 0 se pone un ! si es se pone un
0F% &or e9emplo el complemento a dos del numero 2$ E000 en una representacion de @ bitsF ser
a 0$
000
000
000
000
copia bit derec#a
0
copia primer bitM
0
complemento bit 0
0
complemento bit 0
0
Una propiedad importante de la representacion de complemento a dos$ es :ue la diferencia
de dos numeros puede realizarse directamente sumando al primero el complemento a dos del
se"undo% &ara verlo podemos usar los dos numeros del e9emplo anteriorD 000 es la representaci
on binaria del numero 2$ si empleamos un re"istro de cuatro bits% -u complemento a dos$ 0
representa al numero 2% -i los sumamos

D
=l resultado de la suma nos da un numero cu!os primeros cuatro bits son 0% =l bit
distinto de cero$ no puede ser almacenado en un re"istro de cuatro bits$ se dice :ue el
resultado de la operacion desborda el tamanVo del re"istro% =se bit :ue no puede almacenarse se
descarta al realizar

-umar en binario es como sumar en decimal% -e procede de bit a bit$ de derec#a a iz:uierda ! cuando se suman
! $ el resultado es 0 Ebase 2F$ de modo :ue el bit resultante se coloca en 0 ! se lleva el #acia el si"uiente bit
de la iz:uierda%
0 0 0
0
0 0 0 0
0 0 0 0
la operacion de suma$ con lo :ue el resultado sera cero$ como corresponde a la suma de 2 S
E2F% =sta es la motivacion fundamental para emplear una representacion en complemente a
dosD )o #ace falta emplear circuitos especiales para calcular la diferencia entre dos numeros$ !a
:ue esta se representa como la suma del minuendo con el complemento a dos del sustraendo%
3%2%% )umeros no enterosD ?epresentacion en punto fi9o ! en
punto flotante
La representacion de numeros no enteros se emplea para representar de modo
apro3imado numeros reales% Como #emos dic#o antes$ los numeros racionales periodicos !
los numeros irra1 cionales no pueden representarse de forma e3acta mediante un numero
finito de decimales% &or esta razon$ su representacion es siempre apro3imada% &ara los numeros
racionales no periodicos$
la representacion ser e3acta o apro3imada dependiendo del numero :ue se trate$ el tamanVo de los
re"istros del ordenador ! el sistema empleado para la representacion% Los do sistemas de repre1
sentacion mas conocidos son la representacion en punto fi9o !$ de especial interes para el c
alculo cientfico$ la representacion en punto flotante%
?epresentacion en punto fi9o% =n la representacion en punto fi9o$ el re"istro empleado para
almacenar un numero se divide en tres partesD
bit para almacenar el si"no del numero%
Un campo de bits de tamanVo fi9o para representar la parte entera del numero%
Un campo para almacenar la parte decimal del numero
&or e9emplo$ si tenemos un re"istro de < bits podemos reservar bit para el si"no$ A para
la parte entera ! > para la parte decimal% La representacion en punto fi9o del numero binario
1
0%0000 seraD
s p% entera p% decimal
0 0 0 0 0 0
=s interesante notar como para representar la parten entera$ nos sobran dos bits en el re"istro$
!a :ue la parte entera solo tiene cinco cifras ! tenemos A bits para representarla% -in embar"o$
la parte decimal tiene 0 cifras/ como solo tenemos > bits para representar la parte decimal$ la
representacion trunca el numero eliminando los dos ultimos decimales%
-i asociamos cada bit con una potencia de dos$ en orden creciente de derec#a a iz:uierda$ po1
demos convertir directamente el numero representado de binario a decimal$
s p% entera p% decimal
0 0 0 0 0 0
1 2
<
2
;
2
@
2
3
2
2
2

2
0
2

2
2
2
3
2
@
2
;
2
<
2
A
2
>
&or tanto el numero representado sera$
E0 2
<
S 0 2
;
S 2
@
S 0 2
3
S 2
2
S 2

S 2
0
S 0 2

S 0 2
2
S 2
3
S 2
@
S 2
;
S
S 0 2
<
S 2
A
S >F M 23$230@<>A;
+e modo analo"o podemos calcular cual sera el numero mas "rande representable$
s p% entera p% decimal
0
2
<
2
;
2
@
2
3
2
2
2

2
0
2

2
2
2
3
2
@
2
;
2
<
2
A
2
>
2
<
S 2
;
S 2
@
S 2
3
S 2
2
S 2

S 2
0
S 2

S 2
2
S 2
3
S
2
@
S 2
;
S
S 2
<
S 2
A
S 2
>
M 2A$CC<0C3A;
=l numero menor representable$
s p% entera p% decimal

1 2
<
2
;
2
@
2
3
2
2
2

2
0
2

2
2
2
3
2
@
2
;
2
<
2
A
2
>
E 2
<
S 2
;
S 2
@
S 2
3
S 2
2
S 2

S 2
0
S 2

S 2
2
S 2
3
S 2
@
S 2
;
S
S 2
<
S 2
A
S 2
>
F M 2A$CC<0C3A;
=l numero entero mas "rande$
s p% entera p% decimal
0 0 0 0 0 0 0 0 0
2
<
2
;
2
@
2
3
2
2
2

2
0
2

2
2
2
3
2
@
2
;
2
<
2
A
2
>
2
<
S 2
;
S 2
@
S 2
3
S 2
2
S 2

S 2
0
S 0 2

S 0 2
2
S 0 2
3
S 0
2
@
S 0 2
;
S
S 0 2
<
S 0 2
A
S 0 2
>
M 2A
=l numero decimal positivo mas pro3imo a $
s p% entera p% decimal
0 0 0 0 0 0 0 0
2
<
2
;
2
@
2
3
2
2
2

2
0
2

2
2
2
3
2
@
2
;
2
<
2
A
2
>
0 2
<
S 0 2
;
S 0 2
@
S 0 2
3
S 0 2
2
S 0 2

S 0 2
0
S 2

S 2
2
S 2
3
S
2
@
S 2
;
S
S 2
<
S 2
A
S 2
>
M 0$CC<0C3A;
B el numero decimal positivo mas pro3imo a 0$
s p% entera p% decimal
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2
<
2
;
2
@
2
3
2
2
2

2
0
2

2
2
2
3
2
@
2
;
2
<
2
A
2
>
;$3;A2e
03
0 2
<
S 0 2
;
S 0 2
@
S 0 2
3
S 0 2
2
S 0 2

S 0 2
0
S 0 2

S 0 2
2
S 0 2
3
S 0 2
@
S 0 2
;
S
S 0 2
<
S 0 2
A
S 2
>
M
0$003C0<2;
La representacion en punto fi9o fue la mas usada en los primeros computadores% -in embar"o$ es
posible con el mismo tamanVo de re"istro representar un espectro muc#o mas amplio de nu
meros empleando la representacion en punto flotante%
?epresentacion en punto flotante La representacion de numeros en el ordenador en
formato de punto flotante$ es similar a la forma de representar los numeros en la llamada notacion
cientfica% =n notacion cientfica los numeros se representan como el producto de una
cantidad por una potencia de diezD 23@$2; 2$3@; 0
2
$ 0$00023@ 2$3@ 0
;
$ ;<$23>
;$<23> 0

% La idea es desplazar el punto decimal #asta :ue solo :uede una cifra si"nificativa
en la parte entera del numero ! multiplicar el resultado por 0 elevado a la potencia adecuada
para recuperar el numero ori"inal%
Muc#as calculadoras ! pro"ramas de calculo cientfico presentan los resultados por pantalla
en formato cientfico% Kabitualmente lo #acen con la si"uiente notacion$
;$3;A2 0
3
calculadora
=s decir$ en primer lu"ar se representa el si"no del numero si es ne"ativo% Esi es positivo lo
#abitual es omitirloF% 6 continuacion la parte si"nificativa$ ;$3;A2$ :ue recibe el nombre de
mantisa % I por ultimo se representa el valor del e3ponente de la potencia de 0$ 3$
precedido por la letra e$ e de e3ponente% =n notacion cientfica se asume :ue el e3ponente
corresponde siempre a una potencia de diez% =s evidente :ue tenemos el numero perfectamente
descrito sin mas :ue indicar los valores de su si"no$ mantisa ! e3ponente$
numero r% cientfica r% calculadora si"no mantisa e3ponente
32A$@3 3$2A@3 0
2
3$2A@3e0 3$2A@3 2
La representacion binaria en punto flotante si"ue e3actamente la misma representacion
:ue acabamos de describir para la notacion cientfica% La unica diferencia es :ue en lu"ar de
traba9ar con potencias de diez$ se traba9a con potencias de dos$ :ue son la :ue corresponden a la
representacion de numeros en binario% 6s por e9emplo$ el numero binario 0$000 se
representara como
$0000 2
3
$ ! el numero 0$0000 se representara como $00 2
3
%
=l termino punto flotante viene del #ec#o de :ue el punto decimal de la mantisa$ no separa
la parte entera del numero de su parte decimal% &ara poder separar la parte entera de la parte
decimal del numero es preciso emplear el valor del e3ponente% 6s$ para e3ponente 0$ el punto
decimal de la mantisa estara en el sitio :ue corresponde al numero representado$ para e3ponente
#abra :ue desplazarlo una posicion a la iz:uierda$ para e3ponente #abra :ue desplazarlo
una posicion a la derec#a$ para e3ponente 2$ dos posiciones a la iz:uierda$ para e3ponente 12$ dos
posiciones a las derec#a$ etc%
]Como representar numeros binarios en punto decimal empleando los re"istros de un compu1
tadorO Una solucion inmediata es dividir el re"istro en tres partes% Una para el si"no$ otra para la
mantisa ! otra para le e3ponente% -upon"amos$ como en el caso de la representacion en punto
fi9o$ :ue contamos con re"istros de < bits% &odemos dividir el re"istro en tres zonas$ la primera$
de un solo bit la empleamos para "uardar el si"no% La se"unda de$ por e9emplo bits$ la empleamos
para "uardar la mantisa del numero ! por ultimo los cuatro bits restantes los empleamos para
"uardar el e3ponente en binario% &odramos entonces representar el numero $0000 2
3
como$
si"% mantisa e3ponente
0 0 0 0 0 0 0 0
1 2
0
2

2
2
2
3
2
@
2
;
2
<
2
A
2
>
2
C
2
0
2
3
2
2
2

2
0
-i bien la representacion :ue acabamos de ver sirve para el numero representado$ es evidente
:ue no podemos representar as un numero con e3ponente ne"ativo como por e9emplo $00
2
3
% 6demas la division :ue #emos #ec#o del re"istro de < bits es arbitraria/ podramos
#aber ele"ido un reparto distinto de bits entre mantisa ! e3ponente% +e #ec#o #asta la decada
de los noventa del si"lo PP$ cada ordenador adoptaba su propia representacion de numeros
en punto flotante% La consecuencia era :ue los mismos pro"ramas$ e9ecutados en ma:uinas
distintas daban diferentes soluciones%
Ia en CA< Jo#n &almer$ de la companVa 0)2=L$ promueve la creacion de un est
andar$ es decir$ de una representacion en punto flotante :ue fuera adoptada por todos los
fabricantes de computadoras% =l primer borrador del estandar fue elaborado por Jilliam Ha#an
E0ntelF$ Jerome Coonen E4er5ele!F ! Karold -tone E4er5ele!FD documento H1C1-% 0nspirado en el
traba9o de Ha#an en el 04M A0C@ EC<>F% =l proceso de estandarizacion fue bastante lento% La
primera version no fue operativa #asta C>;% =l resultado de estos traba9os fue el estandar
actual% Conocido como 0=== A;@% 0=== son la si"las de 0nstitute of =lectrical and =lectronics
=n"ineers% -e trata de
una asociacion :ue naci en =stados Unidos en el si"lo P0P ! :ue "oza actualmente de caracter
internacional% =l 0=== se ocupa$ entre otras cosas$ de establecer estandares industriales en
los campos de la electricidad$ la electronica ! la computacion% ,eamos en detalle el estandar
0===
A;@%
=l estandar 0=== A;@ =n primer lu"ar$ el estandar se establecio pensando en dos
tamanVos de re"istro el primero de ellos emplea 32 bits para "uardar los numeros en punto
flotante ! recibe el nombre de estandar de precision simple% =l se"undo emplea <@ bits ! se conoce
como estandar de precision doble%
-imple precision% =mpecemos por describir el estandar de precision simple% =n primer
lu"ar$ se reserva un bit para contener el si"no% -i el bit vale $ se trata de un numero ne"ativo$
! si vale
0 de un numero positivo% +e los restantes 3 bits$ 23 se emplean para representar la mantisa !
> para representar el e3ponente%
-i analizamos como es la mantisa de un numero binario en representacion de punto
flotante$ nos damos cuenta de :ue la parte entera siempre debera valer % &or tanto$ podemos
"uardar en la mantisa solo la parte del numero :ue esta a la iz:uierda del punto decimal$ !
considerar :ue el correspondiente a la parte entera esta implcito% &or e9emplo$ si tenemos
el numero binario
$00 2
3
solo "uardaramos la cifra 00% =l de la parte entera sabemos :ue esta a#
pero
no lo representamos% 6 este tipo de mantisa la llamaremos normalizada$ mas adelante veremos por
:ue%
=n cuanto a e3ponente$ es preciso buscar una forma de representar e3ponentes positivos !
ne"ativos% =l estandar establece para ello lo :ue se llama la representacion en e3ceso% Con
oc#o bits podemos representar #asta 2
>
M 2;< numeros distintos% =

stos iran desde el
Q00000000R M 0 #asta el QR M 2;;% -i partimos nuestra coleccion de numeros en dos$
podramos emplear la primera mitad para representar numeros ne"ativos$ reservando el ma!or
de ellos para representar el cero$ ! la se"unda para representar numeros positivos% &ara obtener el
valor de un numero basta restar al contenido del e3ponente el numero reservado para
representar el cero% -e dice entonces :ue la representacion se realiza en e3ceso a dic#o numero%
=n el caso del estandar de simple precision la primera mitad de los numeros disponibles ir
a
=3ceso a 2A
4its de e3ponente e:uivalente decimal =3ponente representado
00000000 0 0 2A M 2A
0000000 2A M 2<
00000000 0 2 2A M 2;
% % %
00 0 2< 2A M
0 0 2A 2A M 0
0000000 0 2> 2A M
% % %
0 2;@ 2;@ 2A M 2A
2;; 2;; 2A M 2>
2abla 3%D ?epresentacion en e3ceso a 2A$ para un e3ponente de > bits%
del 0 al 2A ! la se"unda mitad del 2> al 2;;% La representacion se realiza entonces en e3ceso
a
2A% La tabla 3% muestra unos cuanto e9emplos de calculo de la representacion en e3ceso%
2enemos por tanto :ue el e3ponente de > bits del estandar de precision simple permite
repre1 sentar todos los e3ponentes enteros desde el 12A al 2>%
Ia tenemos casi completa la descripcion del estandar% -olo faltan unos detalles aun:ue mu!
importantes relativos a la representacion de numeros mu! "randes ! mu! pe:uenVos%
=mpecemos con los numeros mu! "randes%
]Cual es el numero mas "rande :ue podramos representar en estandar de simple precisi
onO =n principio cabra suponer :ue el correspondiente a escribir un en todos los bits
correspondientes a la mantisa Ela ma!or mantisa posibleF ! escribir tambien un en todos los bis
correspondientes al e3ponente Eel ma!or e3ponente posibleF% -in embar"o$ el estandar esta
pensado para prote"er las operaciones del computador de los errores de desbordamiento% &ara
ello reserva el valor mas alto del e3ponente% 6s cuando el e3ponente contenido en un re"istro es
2>$ dic#o valor no se considera propiamente un numero$ de #ec#o es preciso mirar el contenido
de la mantisa para saber :ue es lo :ue representa el re"istroD
-i los bits de la mantisa son todos cero$ el re"istro contiene la representacion del infinito %
=l estandar especfica el resultado de al"unas operaciones en el infinitoD ' M 0$
arctanEF M L'2%
-i por el contrario$ el contenido de la mantisa es distinto de cero$ se considera el contenido
del re"istro como no numerico E)a)$ abreviatura en in"les de )ot a )umber F% =ste tipo
de resultados$ considerados no numericos$ sur"en en al"unas operaciones :ue carecen de
sentido matematicoD 0'0$ 0$ %
2odo esto #ace :ue el e3ponente ma!or :ue realmente representa un numero sea el 2A% Como
e9emplo podemos construir el numero mas "rande :ue podemos representar distinto de
infinito% -e trata del numero con la mantisa mas "rande posible$ una mantisa formada
e3clusivamente por unos$ se"uida por el e3ponente mas "rande posible% =l e3ponente mas
"rande en e3ceso es 2A$ :ue corresponde a un e3ponente en binario 2A S 2A M 2;@
Q0R% &or tanto el numero se representara como$
si"% mantisa$ 23 bits e3ponente$ > bits
0 0
=n base 0 el numero representado sera$ E 2
0
S 2

S 2
2
S S
2
23
F 2
2A

3$@02>23@<<3>;2>C 0
3>
% +onde #emos representado en ne"rita el implcito$ no presente en la
mantisa%
,eamos a#ora los numeros mas pe:uenVos$ de acuerdo con los dic#o$ el numero mas
pro3imo a cero :ue podramos construir sera a:uel :ue tuviera la mantisa mas pe:uenVa ! el
e3ponente mas pe:uenVo$ es decir una mantisa formada solo por ceros ! un e3ponente formado solo
por ceros% =se numero sera E 2
0
F 2
2A
Ese debe recordar :ue la mantisa en la representaci
on del estandar esta normalizada/ lleva un entero implcitoF%
=s evidente :ue si no fuera por el implcito de la mantisa sera posible representar nu
meros aun mas pe:uenVos% &or otro lado$ si consideramos siempre la mantisa como normalizada$
es imposi1 ble representar el numero 0% &ara permitir la representacion de numeros mas
pe:uenVos$ incluido el cero$ los desarrolladores del estandar decidieron anVadir la si"uiente re"laD
-i los bits del e3ponente de un numero son todos ceros$ es decir$ si el e3ponente representado es
12A$ se considera :ue la mantisa de ese numero no lleva un entero implcito% 6demas el
e3ponente del numero se toma como 12<% Los numeros as representados reciben el nombre de
numeros desnormalizados% ,eamos al"unos e9emplos%
si"% mantisa$ 23 bits e3ponente$ > bits
0 000000000000000000000 00000000
=l e3ponente del numero representado en la tabla anterior es 0% &or tanto$ en e3ceso a 2A el
e3ponente sera 0 2A M 2A% =ste e3ponente corresponde a un numero desnormalizado
por tanto el numero en e3presado base 0 sera$
E 2

S 0 2
2
S 2
3
S 0 F 2
2<
)otese como el e3ponente #a sido reducido en una unidad E2<F a la #ora de calcular la
representacion decimal del numero%
=l numero mas pro3imo a cero :ue podemos representar mediante numeros desnormalizados$
ser a:uel :ue ten"a la menor mantisa posible distinta de cero$
si"% mantisa$ 23 bits e3ponente$ > bits
0 000000000000000000000 00000000
:ue representado en base 0 sera el numeroD E0 2

S 0 S 2
23
F 2
2<
M 2
@C

$@02C>@<@32@>A0
@;
% &odemos calcular para comparar cual sera el numero normalizado
mas
pro3imo a cero$ se trata del numero :ue tiene una mantisa formada solo por ceros$ multiplicada
por el e3ponente mas pe:uenVo distinto de cero Eun e3ponente i"ual a cero$ implica autom
aticamente un numero desnormalizadoF$
si"% mantisa$ 23 bits e3ponente$ > bits
0 0000000000000000000000 0000000
-i lo representamos en formato decimal obtenemosD E 2
0
S 0 2

S 0 S 0 2
23
F
2
2<
M
2
2<
$A;@C@3;0>222>> 0
3>
Como un ultimo e9emplo$ podemos calcular cual es el numero desnormalizado mas
"rande% +ebera tener la mantisa mas "rande posible Etodo unosF con un e3ponente formado
e3clusivamente por ceros$
si"% mantisa$ 23 bits e3ponente$ > bits
0 00000000
=n formato decimal$ el numero seraD E2

S2
2
S S2
23
F2
2<

$A;@C@20<C2@@
0
3>
% Los dos ultimos numeros representados$ son mu! pro3imos entre s% +e #ec#o$ #emos
cal1
culado !a su diferencia$ al obtener el numero desnomarlizado mas pro3imo a cero
representa1 ble$ E 2
0
S 0 2

S 0 S 0 2
23
F 2
2<
E 2

S 2
2
S
S 2
23
F 2
2<
M E0 2

S 0 S 2
23
F 2
2<
M 2
@C

$@02C>@<@32@>A 0
@;
%
+oble precision La diferencia entre los estandares de simple ! doble precision esta
en el tamanVo de los re"istros empleados para representar los numeros% =n doble precision
se emplea un re"istro de <@ bits% =s decir$ el tamanVo de los re"istros es el doble :ue el empleado
en simple precision% =l resto del estandar se adapta al tamanVo de la representacion/ se emplea
bit para el si"no del numero$ ;2 bits para la mantisa ! bits para el e3ponente%
=n este caso el e3ponente puede almacenar 2

M 20@> numeros Edesde el 0 al 20@AF
como en el caso de estandar de simple precision se dividen los numeros por la mitad$ con lo
:ue los e3ponentes se representan a#ora en e3ceso a 023% por tanto el e3ponente 0 representa
el valor
0 023 M 023 ! el e3ponente 20@A representa el valor 20@A 023 M
02@%
+e nuevo$ el valor ma!or del e3ponente$ 02@ se emplea para representar el infinito $ si va
acompanVado de una mantisa formada e3clusivamente por ceros% =n caso de :ue acompanVe a
una mantisa no nula$ el contenido del re"istro se considera :ue no representa un numero )a)
Eerror de desbordamientoF% % &odemos$ como e9emplo$ obtener para el estandar de doble precisi
on el numero mas "rande representable$
si"% mantisa$ ;2 bits e3ponente$ bits
0 0
=l numero representado toma en base 0 el valorD E 2
0
S2

S2
2
S S2
;2
F
2
023

$ACA<C33@><23< 0
30>
&or ultimo$ para e3ponente 1023 es decir$ un e3ponente formado e3clusivamente por ceros$ el
numero representado se considera desnormalizado/ se elimina el entero implcito de la
represen1 tacion de la mantisa ! se aumenta en una unidad el e3ponente$ :ue pasa as a valer
1022% Como e9emplo$ podemos calcular el numero mas pro3imo a cero representable en doble
precision$
si"% mantisa$ ;2 bits e3ponente$ bits
0 00000000000000000000000000000000000000000000000000 00000000000
=l numero representado toma el base 0 el valorD E0 2

S 0 2
2
S 0 S 2
;2
F
2
022

@$C@0<;<@;>@2@<; 0
32@
La tabla 3%2 resume ! compara las caractersticas de los dos estandares vistos$
&ara terminar veamos al"unos e9emplos de representacion de numeros en el estandar 0===
A;@D
% ]Cual es el valor decimal del si"uiente numero e3presado en el estandar del 0===
A;@ de simple precision precisionO
si"% mantisa$ 23 bits e3ponente$ > bits
000000000000000000000 000
=l bit de si"no es $ por lo tanto el numero es ne"ativo%
=l e3ponente sera$ 02
A
S2
<
S2
;
S2
@
S2
3
S2
2
S02

S02
0
2A M
2@2A M 3
6 la vista del e3ponente$ la mantisa esta normalizada$ S 2

S 2
2
M $A;
&or tanto el numero en representacion decimal esD EF

E$A;F 2
3
M 0$2>A;
2% ]Cual es el valor decimal del si"uiente numero e3presado en el estandar del 0===
A;@ de simple precisionO


0000
0
&recision simple% ?e"istro de 32 bits% =3ponente e3ceso a 2A
Mantisa e3ponente E> bitsF numero representado
E23 bitsF
0 0 2A M 2A EF
bs
E0 2

S S 0 2
23
F 2
02A
M
0
M 0 0 2A 2< EF
bs
Em

2

S S m
23
2
23
F
2
02A2<
2A M 2<
> 0

#asta
EF
bs
E S m

2

S S m
23
2
23
F 2
Ee
>
2
SSe

2 F2A
2;@ 2A M 2A
0 2;; 2A M 2> EF
bs
E0 2

S S 0 2
23
F 2
2;;2A

M 0 2;; 2A M 2> EF
bs
Em

2

S S m
23
2
23
F
2
2;;2A
)a)
&recision doble% ?e"istro de <@ bits% =3ponente e3ceso a 023
Mantisa e3ponente E bitsF numero representado
E;2 bitsF
0 0 023 M 023 EF
bs
E0 2

S S 0 2
;2
F 2
0023
M
0
M 0 0 023 022 EF
bs
Em

2

S S m
23
2
;2
F
2
0023022
023 M 022

#asta
EF
bs
E S m

2

S S m
;2
2
;2
F 2
Ee

2
SSe

2
0
F
023
20@< 023 M 023
0 20@A 023 M 02@ EF
bs
E0 2

S S 0 2
;2
F 2
20@A023

M 0 20@A 023 M 02@ EF


bs
Em

2

S S m
;2
2
;2
F
2
20@A023
)a)
2abla 3%2D Comparacion entre los estandares del 0=== para la representacion en punto
flotante% Ebs bit de si"no$ m
i
bit de mantisa$ e
i
bit de e3ponenteF
si"% mantisa$ 23 bits e3ponente$ > bits
0 0000000000000000000000 000000
=l bit de si"no es 0$ por lo tanto el numero es positivo%
=l e3ponente sera$ 2
A
S02
<
S02
;
S02
@
S02
3
S02
2
S0

S2
0
2A M 2C2A
M 2
6 la vista del e3ponente$ la mantisa esta normalizada$ 2
0
S 2
2
M 0$2;
&or tanto el numero en representacion decimal esD EF
0
E0$2;F 2
2
M S;$0
3% ]Cual es la representacion en el estandar 0=== A;@ de simple precision del numeroD
3@A$<2;O
Convertimos el numero a binario$ 3@A$<2; M 000$0
?epresentamos el numero en formato de coma flotante$ $0000 2
>
mantisaD 0000 EnormalizadaF
e3ponenteD >
e3ceso 2A
si"noD 0 EpositivoF
2A S > M 3;
binario > bits
Con lo cual la representacion de 3@A$<2; es$
3
si"% mantisa$ 23 bits e3ponente$ > bits
0 000000000000000 0000
@% ]cual el la representacion en el estandar 0=== A;@ de simple precision del numeroD
;
;
binario


0
3
3
M $<<<<<
&asamos la parte entera a binarioD M 2
0
&asamos la parte decimal a binarioD
0$<<<<<< 2 M $333333
0$333333 2 M 0$<<<<<<
6 partir de a:u se repite el periodo 0 indefinidamenteD
$<<<<<<
0$000

MantisaD el numero en binario :uedaraD $000 $ con la misma
representacion en punto flotante$ $000 2
0
% La mantisa sera$
00000000000
=3ponenteD 0
e3ceso 2A
-i"noD 0 EpositivoF
2A S 0 M 2A
binario > bits
Con lo cual la representacion de
;
es$
si"% mantisa$ 23 bits e3ponente$ > bits
0 00000000000 0
3%3% =rrores en la representacion numerica%
Como se #a indicado anteriormente$ cual:uier representacion numerica :ue empleemos con
el ordenador$ esta sometida a errores derivados del tamanVo finito de los re"istros empleados%
,amos a centrarnos en el estudio de los errores cometidos cuando representamos numeros
empleando el formato de punto flotante del estandar del 0===A;@%
=n primer lu"ar$ solo #a! una cantidad finita de numeros :ue admiten una representaci
on e3acta$ son los :ue se obtienen directamente de los valores unos ! ceros contenidos en un
re"istro al interpretarlos de acuerdo con las especificaciones del estandar% =stos numeros reciben
el nombre de numeros ma:uina%
Un numero real no
ser
un numero ma:uina si$
% Una vez representado en formato de punto flotante su e3ponente esta fuera del ran"o admitido
para los e3ponentesD es demasiado "rande o demasiado pe:uenVo%
2% Una vez representado en formato de punto flotante su mantisa contiene mas d"itos de
los bits :ue puede almacenar la mantisas del formato%
-i el e3ponente se sale del ran"o admitido$ se produce un error de desbordamiento% -i se trata
de un valor demasiado "rande$ el error de desbordamiento se produce por e3ceso Eoverflo. F% =l
ordenador 6si"nar al numero el valor % -i el e3ponente es demasiado pe:uenVo $ entonces e
desbordamiento se produce por defecto Eunderflo. F ! el ordenador asi"nara al numero el
valor cero%
-i el tamanVo de la mantisa del numero e3cede el de la mantisas representables$ la
mantisa se trunca al tamanVo adecuado para :ue sea representable% =s decir$ se sustitu!e el nu
mero por un numero ma:uina cercado$ este proceso se conoce como redondeo ! el error
cometido en la representacion como error de redondeo%
3%3%% =rror de redondeo unitario
-upon"amos :ue tenemos un numero no ma:uina 3 M E%a

a
2
a
23
a
2@
F 2
e3p
%
3%3% =??B?=- =) L6 ?=&?=-=)26C0B

) )UM=

?0C6%
3A

2
|3
=
3
2
|

2
|3
=
3
2
|
3
2
3
=
2
6pro3imacion por truncamiento% -i :ueremos representarlo empleando el estandar de
simple precision$ solo podremos representar 23 bits de los :ue compone su mantisa% Una soluci
on es truncar el numero$ eliminando directamente todos los bits de la mantisa mas alla del 23
3 3
2
M E%a

a
2
a
23
F 2
e3p
% Como #emos eliminado al"unos bits$ el numero m
a:uina 3
2
$ por el :ue #emos apro3imado nuestro numero$ es menor :ue el%
6pro3imacion por e3ceso% Btra opcion sera apro3imarlo empleando el numero m
a:uina in1 mediatamente superior% =sto sera e:uivalente a eliminar todos los bits de la mantisa
mas alla del
23 ! sumar un bit en la posicion 23 de la mantisa 3 3
=
M E%a

a
2
a
23
S 2
23
F 2
e3p
%
=n este
caso$ estamos apro3imando por un numero ma:uina ma!or :ue el numero
apro3imado%
?edondeo =s evidente :ue cual:uier numero real :ue admita una representacion
apro3imada
en el formato del estandar estar comprendido entre dos numeros ma:uinaD 3
2
3 3
=
%
=n "eneral$ el criterio :ue se si"ue es apro3imar cada numero real$ por truncamiento o e3ceso$
empleando en cada caso el numero ma:uina mas cercano% -iempre :ue redondeamos un nu
mero cometemos un error$ :ue podemos definir como el valor absoluto de la diferencia entre el
valor real del numero ! su apro3imacion% =ste error recibe el nombre de error absoluto$
+onde 3
r
M 3
2
si se redonde
=rror absoluto M |3 3
r
|
por truncamiento o 3
r
M 3
=
si se redondeo por e3ceso%
=l intervalo entre dos numeros ma:uina consecutivos puede obtenerse restando el menor
del
ma!or$
3
=
3
2
M E%a

a
2
a
23
S 2
23
F 2
e3p
E%a

a
2
a
23
F 2
e3p
M 2
23
2
e3p
-i apro3imamos a#ora cual:uier numero real comprendido en el intervalo 3
2
! 3
=
por el
mas cercano de estos dos$ el error absoluto :ue cometemos$ sera siempre menor o como muc#o
i"ual :ue la mitad del intervalo$

23
e3p
|3 3
r
|
2
|3
=
3
2
| M
2
2

2
=ste resultado se ilustra "raficamente en la fi"ura 3%
3 M E%a

a
2
a
23
a
2@

F 2
e3p
*i"ura 3%D &osicion relativa de un numero no ma:uina 3 ! su redondeo a numero ma:uina
por truncamiento 3
2
! por e3ceso 3
=
-i redondeamos al mas pro3imo de los dos$ el error es
siempre menor o i"ual a la mitad del intervalo 3
e
3
2
%
=3aminando con un poco de detalle el resultado anterior$ vemos :ue consta de tres t
erminos% =l termino

-ur"e de apro3imar un numero real por su numero ma:uina mas
cercano$ =l termino
2
e3p
depende del tamanVo del numero% &ara numeros "randes este factor sera "rande ! para nu
meros
pe:uenVos
ser
un factor pe:uenVo% &or ultimo :ueda el factor 2
23
/ este factor esta
directamente
relacionado con la mantisa empleada en la representacion% =fectivamente$ si #ubieramos
C6&

02ULB 3% 6?02M=

20C6 +=L CBM&U26+B? I *U=)2=- +=


=??B?
3>
represen1 tado el numero en el estandar de doble precision$ es facil demostrar :ue el error
absoluto cometido #abra :uedado acotado como$
e3p

;2
e3p
|3 3
r
|
2
|3
=
3
2
| M
2
2

2
=s decir$ el unico factor :ue cambia en el error es precisamente el termino relacionado con
el tamanVo de la mantisa% =ste termino recibe el nombre de precision del computador o epsilon
del computador EepsF% I vale siempre 2 elevado a menos EF el numero de bits de la
mantisa% &or tanto$ podemos "eneralizar la e3presion parar la cota del error absoluto como$

e3p
|3 3
r
|
2
|3
=
3
2
| M
2
eps 2
=l si"nificado del epsilon del computador :ueda aun mas claro si definimos el error relativo%%
=rror relativo M
|3 3
r
|

|3
=
3
2
|
M


eps 2

eps
|3| 2 |
3|
2 E%a

a
2
a
23
a
2@
F 2
e3p

2
=l error relativo pondera el valor del error cometido con la ma"nitud del numero
representado% Un e9emplo sencillo a!udara a entender me9or su si"nificado% 0ma"inemos :ue tuvi
eramos un sistema de representacion :ue solo nos permitiera representar numero enteros% -i
:ueremos representar los numeros $; ! 000000$; su representacion sera ! 000000 en
ambos casos #emos cometido un error absoluto de 0%;% -in embar"o si comparamos con los nu
meros representados$ en el primer caso el error vale la mitad del numero mientras :ue en el
se"undo no lle"a a una millonesima parte%
=n el caso de la representacion :ue estamos estudiando$ el error relativo cometido para cual:uier
numero representable es siempre mas pe:uenVo :ue la mitad del epsilon del computador$

3
r
M 3 E S jF/ |j|
2
eps
Un ultimo comentario sobre el epsilon del computador$ entendido como precision% La
diferencia entre dos numeros ma:uina consecutivos esta estrec#amente relacionada con el
epsilon% -i tenemos un numero ma:uina ! :ueremos incrementarlo en la cantidad mas pe:uenVa
posible$ dic#a cantidad es precisamente el epsilon$ multiplicado por 2 elevado al e3ponente del
numero% La razon de :ue
esto sea as
est
relacionada con el modo en :ue se suman dos numeros en la representacion en
punto flotante% -upon"amos :ue tenemos un numero cual:uiera representado en el estandar
de precision simple$
si"% mantisa$ 23 bits e3ponente$ > bits
0 0000000000000000000 0000000
=l numero representado tiene de e3ponente 2
A
2A M % -upon"amos a#ora :ue
:uisieramos sumar a este numero la cantidad 2
22
su representacion en el estandar emplear
a una mantisa de ceros Erecordar el mplicitoF ! un e3ponente 22 S 2A M 0;% -era por
tanto$
si"% mantisa$ 23 bits e3ponente$ > bits
0 00000000000000000000000 0000
&ara sumar dos numeros en notacion cientfica es imprescindible :ue los dos esten
representados con el mismo e3ponente$ para entonces poder sumar directamente las mantisas%
+isminuir el e31 ponente del ma!or de ellos #asta :ue coincida con el del menor no es posible$ !a
:ue eso supondra anVadir d"itos a la parte entera de la mantisa$ pero no #a! bits disponibles
para ello entre los asi"nados a la mantisa% &or tanto$ la solucion es aumentar el e3ponente del
menor de los numeros$ #asta :ue alcance el valor del ma!or$ ! disminuir el valor de la mantisa
desnormalizandola$ es decir sin considerar el implcito% &or tanto en nuestro e9emplo$
debemos representar 2
22
empleando un e3ponente $ 2
22
2
23
2

$
si"% mantisa Edesnorm%F$ 23 bits e3ponente$ > bits
0 0000000000000000000000 00000000
La suma de ambos numeros se obtiene sumando directamente las mantisas$
si"% mantisa$ 23 bits e3ponente$ > bits
0 000000000000000000 0000000
]Gue pasa si tratamos de sumar un numero mas pe:uenVo$por e9emplo 2
23
O% 6l
representarlo con e3ponente para poder sumarlo el numero tomara la forma$ 2
23
2
2@

2

% =s facil ver el problema$ con una mantisa de 23 bits nos se puede representar el numero
2
2@
por:ue !a no #a! #ueco para el% La mantisa sera cero ! dado :ue se trata de una
representacion desnormalizada$ el numero resultante sera cero% &or tanto$ al sumarlo con el
numero inicial nos dara este mismo numero%
=sto nos lleva a :ue la precision del computador no es i"ual para todos los numeros
represen1 table$ sino :ue depende de su ma"nitud% la precision$ tomada en funcion de la distancia
entre dos numeros consecutivos$ esD precision M eps 2
e3p
! su valor se duplica cada vez :ue
aumentamos el e3ponente en una unidad% La fi"ura 3%2 muestra es:uematicamente este
fenomeno%
*i"ura 3%2D 0lustracion del cambio de precision con la ma"nitud de los numeros representados%
3%3%2% =rrores de desbordamiento
=n el apartado anterior #emos visto una de las limitaciones de la representacion numerica de
los ordenadores/ el #ec#o de usar una mantisa finita #ace :ue solo unos pocos numeros ten"an
repre1 sentacion e3acta$ el resto #a! :ue apro3imarlos cometiendo errores de redondeo% =n este
apartado nos centraremos en estudiar las limitaciones debidas al #ec#o de usar un e3ponente finito/
-olo po1 demos representar un ran"o limitado de valores% La fi"ura 3%3 muestra es:uem
aticamente el ran"o de numeros representables% =l numero ne"ativo mas pe:uenVo
representable$ viene definido$ por un bit de si"no $ para indicar :ue se trata de un numero
ne"ativo$ la mantisa mas "rande ! el e3po1 nente mas "rande :ue$ dentro de las especificaciones
del estandar$ todava representan un numero finito% Cual:uier numero ne"ativo menor :ue
este$ produce un error de desbordamiento conocido en la literatura tecnica con el nombre de
overflo. ne"ativo% =l numero ne"ativo mas pro3imo a
cero$ :ue se puede representar ser a:uel :ue ten"a bit de si"no $ la mantisa EdesnormalizadaF
mas pe:uenVa posible ! el e3ponente mas pe:uenVo posible% Cual:uier numero mas pro3imo a
cero
:ue este$ ser representado por el ordenador como cero% -e #a producido en este caso un error de
desbordamiento conocido como underflo. ne"ativo%
+e modo analo"o a como #emos definido el numero mas ne"ativo mas pe:uenVo
representable$ podemos definir el numero mas "rande representable% La unica diferencia sera
:ue este caso el bit de si"no toma valor cero para indicar :ue es un numero positivo% Cual:uier nu
mero ma!or :ue este :ue :ueramos representar$ provocara un error de desbordamiento
Eoverflo. positivo%F &or ultimo el numero positivo mas pro3imo a cero representable coincide
con el ne"ativo$ de nuevo salvo en el bit de si"no :ue a#ora debe ser cero% =n el caso de tratar de
representar un numero mas pe:uenVo
el ordenador no lo distin"uir
positivo%
de cero$ produciendose un desbordamiento denominado underflo.
*i"ura 3%3D )umeros representables ! desbordamientos en el estandar 0=== A;@ de precision
simple%
3%@% =rrores derivados de las operaciones aritmeticas
Kasta a#ora$ nos #emos centrado siempre en el problema de la representacion numerica
del computador% =n esta seccion vamos a introducir un nuevo tipo de errores :ue tienen si cabe
todava mas importancia desde el punto de vista del calculo cientfico% -e trata de los errores
derivados de las operaciones aritmeticas%
0ndirectamente !a se introdu9o el problema en la seccion anterior al #ablar de la precision del
computador$ ! de la necesidad de i"ualar los e3ponentes de los sumandos al ma!or de ellos antes
de poder sumar en formato de punto flotante% ,eamos en mas detalle al"unas consecuencias de
la aritmetica en punto flotante%
3%@%% 6cumulacion de errores de redondeo
&ara empezar$ se ilustrar el proceso de la suma de dos numeros representados en base 0 en
formato de punto flotante% -upon"amos :ue :ueremos sumar los numeros CC$CC ! 0$<% -upon"a1
mos ademas :ue se"uimos una representacion en punto flotante con las si"uientes limitaciones la
mantisa es de cuatro d"itos$ el e3ponente es de dos d"itos%
-i sumamos los numeros$ tal ! como los #emos escrito mas arriba$ sin se"uir formato de
punto flotante$ el resultado sera$
CC$CC S 0$< M 00$;
-upon"amos :ue los representamos a#ora en el formato de punto flotante descrito mas arriba$
CC$CC M C$CCC 0

$ 0$< M $<0 0

% ,amos a descomponer el proceso de sumar estos
dos numeros en cuatro pasos$ :ue refle9an$ es:uematicamente$ el proceso :ue se"uira un
computador%
% 6lineamiento% Consiste en representar el numero mas pe:uenVo empleando el e3ponente
del ma!or% &ara ellos se desplazan #acia la derec#a los d"itos del numero mas pe:uenVo
tantas posiciones como indi:ue la diferencia de los e3ponentes de los dos numeros ! se
cambiar el e3ponente del numero mas pe:uenVo por el del mas "rande%
$<0 0

0$0<
0

Como caba esperar$ el desplazamiento #acia la derec#a de la mantisa produce la perdida


de los ultimos d"itos del numero% 2enemos a:u un primer error de redondeo en el
proceso de alineamiento%
2% Bperacion% Una vez :ue los operandos estan alineados$ se puede realizar la operacion% -i
la operacion es suma ! los si"nos son i"uales o si la operacion es resta ! los si"nos son
diferentes$ se suman las mantisa% =n otro caso se restan%
=s importante comprobar tras realizar la operacion si se #a producido desbordamiento de
la mantisa en el e9emplo propuestoD
3%@% =??B?=- +=?0,6+B- += L6- B&=?6C0B)=- 6?02M=

20C6-
@

C$CCC 0

S 0 $0< 0




0$0; 0

)o es posible emplear directamente el resultado de la suma de las mantisas de los sumandos


como matisa de la suma !a :ue re:uerira emplear un d"ito mas% =l resultado
obtenido desborda el tamanVo de la mantisa%
3% )ormalizacion% -i se #a producido desbordamiento de la mantisa$ es preciso volver a nor1
malizarla$
0$0; 0

M $00; 0
2
@% ?edondeo% =l desplazamiento de la mantisa #ace :ue no :uepan todo los d"itos$ por lo
:ue es necesario redondearla Epor truncamiento o por e3cesoF$
$00; 0
2
M $002 0
2
&or ultimo$ se comprueba si las operaciones realizadas #an producido desbordamiento
del e3ponente$ en cu!o caso el resultado sera un numero no representableD o 0%
;% ?enormalizacion &ara numeros en representacion binaria es preciso a veces volver a
nor1 malizar la mantisa despues del redondeo% -upon"amos$ como en el e9emplo
anterior$ una mantisa de cuatro bits$ a#ora con numeros representados en binario !
:ue tras realizar una operacion suma el resultado :ue se obtiene es $ 2

% La
mantisa #a desbordado ! #a! :ue normalizarla $ 2

$ 2
2
% 2enemos :ue
redondear la mantisa ! lo normal en este caso dado :ue el numero estara e3actamente en
la mitad del intervalo entre dos numeros representables$ es #acerlo por e3cesoD $
2
2
0$000 2
2
% la operacion de redondeo por e3ceso #a vuelto a desbordar la mantisa
!$ por tanto$ #a! :ue volver a normalizarlaD 0$000 2
2
$000 2
3
%
6nalicemos el error cometido para la suma empleada en los e9emplos anteriores% =n aritmetica
e3acta$ el numero obtenido tras la suma es 00$;2% =mpleando la representacion en punto
flotante$ con una mantisa de cuatro d"itos el resultado es $002 2
2
M 00$2% por tanto$ el
error absoluto cometido es$
! el error relativo$
|00$; 00$2| M 0$0@C

00$; 00$2

00$;2

0$000@>C
=n "eneral puede comprobarse :ue para cual:uier operacion aritmetica basica Esuma$
resta$ multiplicacion divisionF ! dos numeros ma:uina 3$ ! se cumple$
flotanteE3 !F M E3 !F E S jF |j| eps
=sto enunciado se conoce como el a3ioma fundamental de la aritmetica en punto flotanteD
=l eps del computador es la cota superior del error relativo en cual:uier operacion aritmetica b
asica realizada en punto flotante ente numeros ma:uina%
=l a3ioma fundamental de la aritmetica en punto flotante establece una cota superior para
el error% =n la practica$ es frecuente :ue se encadenen un "ran numero de operaciones aritm
eticas elementales% 6l encadenar operaciones$ los errores cometidos en cada una de ellas se
acumulan%
-upon"amos por e9emplo :ue :ueremos realizar la operacion 3 E! S zF en aritmetica
flotante la operacion podramos describirla como$
flotante E3 E! S zFF M E3 flotanteE3 S !FF E
S j

F
M E3 E! S 3FF E S j
2
F E S j

F
E3 E! S zF E S
2jF
+onde j

representa el error relativo cometido en el producto ! j
2
el error relativo cometido
en la suma% 6mbos errores estan acotados por el eps del ordenador Ej

$ j
2
epsF% =l valor j
se puede obtener como$
E S j

F E S j
2
F M S j

j
2
S j

S j
2
S 2j$ j M m
a3Ej

$ j
2
F
&odemos concluir :ue$ este caso$ el error de redondeo relativo duplica al de una operaci
on aritmetica sencilla% =n "eneral$ el error tendera multiplicarse con el numero de operaciones
aritmeti1 cas encadenadas%
Ka! situaciones en las cuales los errores de redondeo :ue se producen durante una operacion
aritmetica son considerables por e9emplo$ cuando se suman cantidades "randes con
cantidades pe:uenVas$
$; 0
3>
S $0 0
0
M $; 0
3>
S $0 0
0
=n este caso$ durante el proceso de alineamiento$ es preciso desplazar la mantisa del nu
mero pe:uenVo 3> posiciones decimales para poder sumarlo% Con cual:uier mantisa :ue ten"a
menos de
3> d"itos el resultado es e:uivalente a convertir el se"undo sumando en cero%
Btro e9emplo es la perdida de la propiedad asociativa$
3 M $; 0
3>
F
! M $;
0
3>
E3 S !F S M 3 S E! S
F
E
E3 S !F S M
E3 S E! S F M 0
Los resultados pueden estar sometidos a errores mu! "randes cuando la operacion aritm
etica es la sustraccion de cantidades mu! parecidas% -i$ por e9emplo$ :ueremos realizar la
operacion
00$ CC$3; M 0$A; ! suponemos :ue estamos empleando una representacion en punto flotante
con una mantisa de cuatro d"itos ! los numeros representados en base 0 E00$ M $00
0
2
$
CC$3; M C$C3; 0

F
% 6lineamiento
C$C3; 0

0$CC@
0
2
2% Bperacion
$00 0
2
0$ CC@ 0
2





0$00A 0
2
3% normalizacion
0$00A 0
2
A$000 0

Los pasos @ ! ; no son necesarios en este e9emplo% -i calculamos a#ora el error absoluto de
redondeo cometido$
|0$A; 0$A| M
0$0;



I el error relativo$

0$A; 0$A

0$A;

0$0<<<
=s decir$ se comete un error de un <$ A T% =l problema en este caso sur"e por:ue en el proceso de
alineamiento perdemos un d"ito si"nificativo%
=n un sistema de representacion en punto flotante en :ue los numeros se representan en
base k ! el tamanVo de la mantisa es p$ -i las sustracciones se realizan empleando p d"itos$ el
error de redondeo relativo puede lle"ar a ser k %
,eamos un e9emplo para numeros en base 0 Ek M 0F% -upon"amos empleamos una
mantisa de cuatro d"itos ! :ue :ueremos realizar la operacion $000 0
0
C$CCC 0

% =l
resultado e3acto sera$ 0$CCCC$000% -in embar"o$ en el proceso de alineamiento$
C$CCC

0$CCC
0
0
-i redondeamos el numero por e3ceso$ el resultado de la sustraccion sera cero% -i lo
redondeamos por defecto$
$000 0
0
0$ CCC 0
0





0$00 0
0
! el error relativo cometido sera$

$000 0
@
$000
0
3

0
@
E0 F
$000 0
@

M
0
@
M 0 k
&ara paliar estos problemas$ el estandar 0=== A;@ establece :ue las operaciones arim
eticas deben realizarse siempre empleando dos d"itos e3tra para "uardar los resultados
intermedios% =stos dos d"itos e3tra reciben el nombre de d"itos de proteccion o d"itos
de "uarda E"uard di"its F% -i repetimos la sustraccion del e9emplo anterior empleando los dos d
"itos de "uardia$
% 6lineamiento
C$C3;00 M 0

0$CC3;0 0
2
$0000 0
2
2% Bperacion 0$ CC3 ;0 0
2





0$00A;0 0
2
3% normalizacion
0$00A;0 0
2
A$;00 0

=n este caso$ obtenemos el resultado e3acto% =n "eneral$ empleando dos bits de "uarda para realizar
las sustracciones el error de redondeo es siempre menor :ue el eps del computador%
3%@%2% 6nulacion catastrofica
La anulacion catastrofica se produce cuando en una operacion aritmetica$ tpicamente la
sus1 traccion$ los d"itos mas si"nificativos de los operandos$ :ue no estan afectados por el
redondeo$ se cancelan entre s% =l resultado contendra fundamentalmente d"itos :ue s estan
afectados por errores de redondeo% ,eamos un e9emplo$
n
-upon"amos :ue :ueremos realizar la operacion b
2
@ a c empleando numeros en
base
0$ ! una mantsa de ; d"itos% -upon"amos :ue los numeros empleados sonD b M 3$33;A
0
0
$
a M $2200 0
0
$ c M 2$2>00 0
0
% =l resultado e3acto de la operacion es$
b
2
@ a c M @$@@C 0
@
E3%F -i realizamos las operaciones en la representacion pedida$
b
2
M $2<>C
0

@ a c M $2<<@
0

b
2
@ a c M @$C000
0
@
=l error relativo cometido es apro3imadamente un 0 T% Come se #an utilizado dos bits de
"uarda en las operaciones intermedias$ la sustraccion no comente en este caso error al"uno%
=l error se debe a los redondeos de los resultados anteriores% Una vez realizada la sustracci
on$ el resultado solo contiene los d"itos sometidos a redondeo !a :ue los anteriores se #an
anulado en la operacion%
Como re"la practica se debe evitar al realizar operaciones aritmeticas a:uellas situaciones en
la :ue se sustraen cantidades casi i"uales% ,eamos otro e9emplo$ para ilustrar esta
idea%-upon"amos :ue :ueremos realizar la operacion$
! M
p
3
2
S

&ara valores pe:uenVos de 3$ esta operacion implica una anulacion con perdida de d"itos
si"nificati1 vos% Una posible solucion es utilizar una forma alternativa de construir la ecuacion% -i
multiplicamos ! dividimos por el con9u"ado$


2
l
2
! M E
p
3
2
S F

3 S S

3
2
S S
3
M
3
2
S S
3%@%3% =rrores de desbordamiento
6l$#ablar del ran"o finito de los numeros representables$ se indico como trata el estandar 0===
A;@ los numeros :ue desbordan los lmites de representacion% 6l realizar operaciones aritm
eticas$ es posibles lle"ar a situaciones en las :ue el resultado sea un numero no representable
bien por se demasiado "rande en ma"nitud$ EBverflo. positivo o ne"ativoF o por ser demasiado
pe:uenVo$ Eunderflo. positivo o ne"ativo%F Un e9emplo :ue nos permite ilustrar este fenomeno es el
del calculo del modulo de un vector$
v
u
||hv|| M ||Ev $ v2 vn || M
uP
v
2 t
i
iM
-upon"amos :ue creamos el si"uiente pro"rama en Matlab para calcular el modulo de un vector
function m=norma,x-
Einicializamos a cero la variable que
contendraU
m=(1
n=length,x- Ecalculamos la longitud del vector.
la norma del vector.
Ecreamos un bucle para ir sumando los cuadrados de las
componentes for i=16n
m=mx,i-K!1
v
2
end
Ecalculamos la raQz cuadrada del resultado del
bucle m=sqrt,m-
=l pro"rama anterior provocara un error de desbordamiento incluso para nM$ si introducimos
un numero cu!o cuadrado sea ma!or :ue el ma!or numero representable% &or e9emplo si
introduci1 mos el numero$ 2
02@'2
M $3@0A>0AC2CC@2<0e S ;@ en nuestro pro"rama Matlab
devolvera como solucion inf% =s decir$ el resultado produce un error de desbordamiento% =l
problema se produce en el bucle$ al calcular el cuadrado del numero$

2
02@'2

2
M 2
02@
_ E2

2
;2
F 2
023
Una vez producido el desbordamiento el resto de las operaciones :uedan invalidadas% Como en
casos anteriores$ la solucion a este tipo de problemas e3i"e modificar la forma en :ue se realizan los
calculos% Un primer paso sera i"ualar el modulo al valor absoluto del numero cuando nM% +e
este modo$ el modulo del numero propuesto en el e9emplo anterior se podra calcular
correctamente%
2odava es posible me9orar el pro"rama$ ! ampliar el ran"o de vectores para los :ue es posible
calcular el modulo% &ara ello es suficiente recurrir a un pe:uenVo artificioD dividir los elementos del
vector por el elemento de ma!or tamanVo en valor absoluto$ calcular el modulo del vector
resultante$ ! multiplicar el resultado de nuevo por el elemento de ma!or tamanVo$
v v
u
n
uP
t
iM
i
M | ma3
v
i
|
u
n
uP
t
iM


v
i

2
| ma3
v
i
|
=l si"uiente codi"o permite calcular el modulo de un vector usando este procedimiento
2
$
function m=norma,x-
n=length,x-1 Ecalculamos la longitud del vector.
Esi n=1 nos limitamos a devolver el valor absoluto del numero
introducido if n==1
x=abs,x-1
else
Einicializamos con el primer elemento la variable que contendraU
E al mayor de los elementos del
vector mayor=abs,x,1--1
Einicialimos a 1 la variable que
contendr
la suma de
Elos cuadrados de los elementos divididos por el valor de
ello nscalado=1
Ecreamos un bucle para ir sumando los cuadrados de las componentes.
Eempezamos en el segundo elemento: puesto que el primero ya lo
tenemos. for i=!6n
Ecalculamos el valor absoluto del elemento
i modxi=abs,x,i--
Ecomparamos con modxi con el mayor elemento obtenido hasta
2
=l pro"rama no funcionara correctamente para vectores cu!os primeros elementos sean 0$ E0$ 0$ 0 m m m
EaquQU
if mayorMmodxi
Esi modxi es mayor:
ser
Ehasta esta iteracion
el elemento mas grande encontrado
Ecambiamos el valor de la suma
mscalado=1mscaladoI,modxiJmayor-K!1
E definimos mayor como el nuevo valor
encontrado mayor=modxi1
else
Esi es el mas grande: nos limitamos a sumarlo al
resto mscalado=mscalado,modxiJmayor-K!1
end
Euna vez completado el bucle que calcula la suma de cuadrados:
Eobtenemos la raQz cuadrada: y multiplicamos por el
mayor. m=mayorIsqrt,mscalado-
-i aplicamos este pro"rama a obtener la norma del vector$
3 M Q2
02@'2
2
02@'2
R
obtenemos como resultado$
m M $>C<;03><2>3< 0
;@
=n lu"ar de un error de desbordamiento Einf F%
Captulo @
Calculo de races de una funcio
n
@%% ?aces de una funcion
-e entiende por races de una funcion real f E3F D ? ?% los valores 3 M r :ue
satisfacen$
f ErF M 0
=l calculo de las races de una funcion$ tiene una "ran importancia en la ciencia$ donde un
numero si"nificativo de problemas pueden reducirse a obtener la raz o races de una ecuaci
on%
La obtencion de la raz de una ecuacion es inmediata en a:uellos casos en :ue se conoce
la forma analtica de funcion inversa f

$ Ef E3F M ! f

E!F M 3F% =n este caso$ r M f

E0F% &or e9emplo$
f E3F M 3
2

@
f

E!F M
p
! S @ r M f

E0F M
2
-in embar"o$ en muc#os casos de interes las funciones no pueden invertirse% Un e9emplo$ e3tra
do de la fsica es la ecuacion de Hepler para el calculo de las orbitas planetarias$
3 a sinE3F M b
+onde a ! b son parametros conocidos ! se desea conocer el valor de 3% La solucion de la
ecuacion de Hepler es e:uivalente a obtener las races de la funcion f E3F M 3 a sinE3F b%
ELa fi"ura @% muestra un e9emplo de dic#a funcion%F =n este caso$ no se conoce la funcion
inversa$ ! solo es posible conocer el valor de la raz$ apro3imadamente$ empleando metodos
numericos%
Metodos iterativos 2odos los metodos :ue se describen en este captulo$ se basan en
procedi1 mientos iterativos% La idea es estimar un valor inicial para la raz r
0
$ ! a partir de el
ir refinando paso a paso la solucion$ de modo :ue el resultado se acer:ue cada vez mas al valor
real de la raz% Cada nueva apro3imacion a la raz se obtiene a partir de las apro3imaciones
anteriores%
r
0
r

r
2
r
5

|f Er
0
F| |f Er

F| |f Er
2
F|
|f Er
5
F|
=l proceso :ue lleva de una solucion apro3imada a la si"uiente se conoce con el nombre
de iteracion% Lo #abitual es :ue en cada iteracion se realicen las mismas operaciones matem
aticas una ! otra vez%
=l proceso se detiene cuando la solucion alcanzada se estima lo suficientemente pro3ima a la
solucion real como para darla por buena% &ara ello$ se suele establecer un valor Etolerancia F :ue
@A
C6&

02ULB @% C6

LCULB += ?6

0C=- += U)6
*U)C0B

)
@>
rrador$9uan%9imen
y
+
x

4
0
&
i
#
(
x
)

2
80
0
0 5 10 15 20 25 30 35 40
x
*i"ura @%D =9emplo de ecuacion de Hepler para a M @0 ! b M 2
actua como criterio de conver"encia% +e este modo$ las iteraciones se repiten #asta :ue se lle"a
a un valor r
n
:ue cumple$
|f Er
n
F|
EtolF
-e dice entonces :ue el al"oritmo empleado para obtener la raz #a conver"ido en n
iteraciones% &or otro lado$ es importante senValar :ue los al"oritmos para el calculo de races de
una funcion no siempre conver"en% Ka! veces en :ue no es posible apro3imarse cada vez mas
al valor de la raz bien por la naturaleza de la funcion o bien por :ue el al"oritmo no es
adecuado para obtenerla%
4us:ueda local% Una funcion puede tener cual:uier numero de races$ incluso infinitas$
basta pensar por e9emplo en funciones tri"onometricas como cosE3F% Una caracterstica
importante de los metodos descritos en este captulo es :ue solo son capaces de apro3imar
una raz% La raz de la funcion a la :ue el metodo conver"e depende de el valor inicial r
0
con el :ue se comienza la bus:ueda iterativa

% &or ello reciben el nombre de metodos locales%
-i :ueremos encontrar varias Eo todasF las races de una determinada funcion$ es preciso
emplear el metodo para cada una de las races por separado$ cambiando cada vez el punto de
partida%

=n ocasiones$ como veremos mas adelante no se suministra al al"oritmo un valor inicial$ sino un intervalo en
el :ue buscar la raz
rrador$9uan%9imenez
y
@%2% M=2B+B- 02=?620,B- LBC6L=- @C
@%2% Metodos iterativos locales
@%2%% Metodo de la biseccion
2eorema de 4olzano%
-i una funcion f E3F$ continua en el intervalo Qa$ bR$ cambia de si"no en los e3tremos
del intervaloD f EaF f EbF 0$ debe tener una raz en el intervalo Qa$ bR% Efi"uraD
@%2F
6
4
2
0
,%-*+0."0346"422514226
2
4
6
2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5
x
*i"ura @%2D 0lustracion del teorema de 4olzano
=l conocido teorema de 4olzano$ suministra el metodo mas sencillo de apro3imar la raz
de una funcionD -e parte de un intervalo inicial en el :ue se cumpla el teorema% I se va
acotando sucesivamente el intervalo :ue contiene la raz$ reduciendolo a la mitad en cada iteraci
on$ de forma :ue en cada nuevo intervalo se cumpla siempre el teorema de 4olzano%
=n la fi"ura @%3 se muestra un dia"rama de flu9o correspondiente al metodo de la biseccion% =l
punto de partida es un intervalo Qa$ bR en el :ue se cumple el teorema de 4olzano$ ! :ue contiene por
tanto al menos una raz% =s interesante #acer notar :ue el teorema de 4olzano se cumple
siempre :ue la funcion sea continua en el intervalo Qa$ bR ! e3istan un numero impar de ra
ces% &or esto es importante realizar cuidadosamente la eleccion del intervalo Qa$ bR$ si #a! m
as de una raz$ el al"oritmo puede no conver"er%
Una vez :ue se tiene el intervalo se calcula el punto medio c% 6 continuacion se compara el
valor :ue toma la funcion en c$ es decir f EcF con la tolerancia% -i el valor es menor :ue esta$ el
al"oritmo #a encontrado un valor apro3imado de la raz con la tolerancia re:uerida$ con lo :ue c
es la raz ! no #ace falta se"uir buscando% -i por el contrario$ f EcF esta por encima de la
tolerancia re:uerida$
2
C6&

02ULB @% C6

LCULB += ?6

0C=- += U)6
*U)C0B

)
;0
&artimos de Qa$ bR
con
f EaF f EbF f
0
Calculamos c M
aSb
$ f EcF
es |f EcF| tolO
-

conver"enciaD
terminar
)o
es f EaF f EcF f
0O
-

b M c f
EbF M f EcF
)o
a M c f EaF
M f EcF
*i"ura @%3D +ia"rama de flu9o del metodo de la biseccion
comparamos su si"no con el :ue toma la funcion en uno cual:uiera de los e3tremos del intervalo$
=n el dia"rama de flu9o se #a ele"ido el e3tremo a$ pero el al"oritmo funcionara i"ualmente si
eli"ieramos b% -i el si"no de f EcF coincide con el :ue toma la funcion en el e3tremo del
intervalo ele"ido$ c sustitu!e al e3tremo$ E#acemos a M c ! f EaF M f EcFF si por el contrario
el si"no es distinto$ #acemos :ue c sustitu!a al otro e3tremo del intervalo% E#acemos b M c ! f
EbF M f EcFF%
=ste proceso se repetir #asta :ue se cumpla :ue f EcF tol
=l proceso se muestra "raficamente en la fi"ura @%@$ para un caso particular% -e trata de obtener
la raz de la funcion mostrada en la fi"ura @%2$ f E3F M e
3
3
2
% esta funcion tiene una unica
razD r 0$0A3;% &ara iniciar el al"oritmo se #a ele"ido un intervalo Qa M 2$ b M 2R% La
fi"ura @%@$ muestra tres iteraciones sucesivas$! la solucion final$ :ue se obtiene al cabo de oc#o
iteraciones en este e9emplo$ para el :ue se a empleado una tolerancia tol M 0$0% =n la secuencia
de "raficas se puede observar tambien la evolucion del intervalo de bus:ueda$ Q2$ 2R
Q2$ 0R Q$ 0R Q$ 0$;R / as como el cambio alternativo del lmite derec#o o
iz:uierdo$ para ase"urar :ue la raz :ueda siempre dentro de los sucesivos intervalos de bu
s:ueda obtenidos%
@%2%2% Metodo de interpolacion lineal o E?e"ula falsi F
=ste metodo supone una me9ora del anterior !a :ue$ en "eneral$ conver"e mas
rapidamente% La idea es modificar el modo en :ue calculamos el punto c% =n el caso del metodo
de la biseccion el criterio consista en ir tomando en cada iteracion el punto medio del
intervalo :ue contiene la raz% =l metodo de interpolacion lineal$ eli"e como punto c el punto
de corte con el e9e 3$ de la recta :ue pasa por los puntos Ea$ f EaFF ! Eb$ f EbFF% =s decir la recta
:ue corta a la funcion f E3F en ambos lmites del intevalo :ue contiene a la raz buscada% La
recta :ue pasa por ambos puntos
orrador$9ua %9imenezY
%
y
y
y
y
y
1
2
2
%
%
2
6 6
4 4
2 2
% %
0 0
. .
2 2
4 4
6
2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5
x
6
2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5
x
EaF intervalo inicial
EbF iteracion
6 6
4 4

1 1

3
%
2
0 0
. . . .
1 1

2 2
2 2
4 4
6
2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5
x
6
2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5
x
EcF iteracion 2
EdF iteracion 3
6
4

3
%
2
0
,
. .
1

2
2
4
6
2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5
x
EeF iteracion <D raz
alcanzada
*i"ura @%@D proceso de obtencion de la raz de una funcion por el metodo de la bisecci
on
orrador$9uan%9imene
y
puede construirse a partir de ellos como$
! M
f EaF f EbF
a b
E3 bF S f EbF
el punto de corte con el e9e 3$ :ue ser el valor :ue tomaremos para c$ se obtiene cuando ! M 0$
0 M
f EaF f EbF
a b
E3 bF S f EbF
! despe9ando c 3 en la ecuacion anterior obtenemos$
f EbF
c M b
f EbF f EaF
Eb
aF
La fi"ura @%; muestra "raficamente la posicion del punto c obtenido mediante el metodo
de interpolacion%
6
4
2
%
0
.
2
4
6
2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5
x
*i"ura @%;D Bbtencion de la recta :ue une los e3tremos de un intervalo Qa$ bR :ue contiene una ra
z de la funcion
&or lo demas$ el procedimiento es el mismo :ue en el caso del metodo de la biseccion% -e
empieza con un intervalo Qa$ bR :ue conten"a una raz$ se obtiene el punto c por el
procedimiento descrito ! se intercambia c con el e3tremo del intervalo cu!a ima"en f EaF o f EbF
ten"a el mismo si"no :ue f EcF el procedimiento se repite iterativamente #asta :ue fEcF sea menor
:ue el valor de tolerancia preestablecido%
c M b
f
EbF
&artimos de Qa$ bR
con
f EaF f EbF f
0
Calculamos
f EbFf EaF
Eb aF$ f
EcF
es |f EcF| tolO
-

conver"enciaD
terminar
)o
es f EaF f EcF f
0O
-

b M c f
EbF M f EcF
)o
a M c f EaF
M f EcF
*i"ura @%<D +ia"rama de flu9o del metodo de interpolacion lineal
=n la fi"ura @%< se muestra el dia"rama de flu9o para el metodo de interpolacion lineal%
Como puede verse$ es identico al de la biseccion e3cepto en el paso en :ue se obtiene el valor de
c$ donde se #a sustituido el calculo del punto medio del intervalo de bus:ueda$ por el calculo
del punto de corte con el e9e de abscisas de la recta :ue une los e3tremos del intervalo%
La fi"ura @%A Muestra "raficamente el proceso iterativo se"uido para obtener la raz de una
funcion en un intervalo mediante el metodo de interpolacion lineal% -e #a empleado la
misma funcion ! el mismo intervalo inicial :ue en el caso de la biseccion%
=s facil ver$ sin embar"o$ :ue los puntos intermedios :ue obtiene el al"oritmo #asta conver"er a
la raz son distintos% +e #ec#o$ el al"oritmo emplea a#ora tan solo siete iteraciones para obtener
la raz$ empleando el mismo valor para la tolerancia$ 0%0$ :ue se empleo en el metodo de la
biseccion%
Una observacion final$ se #a dic#o al principio :ue este metodo supone una me9ora al m
etodo anterior de la biseccion% =sto no siempre es cierto% =l metodo de la biseccion tiene una
tasa de conver"encia constante$ cada iteracion divide el espacio de bus:ueda por la mitad% -in
embar"o la conver"encia del metodo de interpolacion lineal depende de la funcion f E3F ! de la
posicion relativa de los puntos iniciales Ea$ f EaFF ! Eb$ f EbFF con respecto al la raz% &or esto no
es siempre cierto :ue conver9a mas rapido :ue el metodo de la biseccion% &or otro lado$ el c
alculo de los sucesivos valores del punto c$ re:uiere mas operaciones aritmeticas en el metodo
de interpolacion$ con lo :ue cada iteracion resulta mas lenta :ue en el caso de la biseccion%
orrador$9u n%9imenez
y
y
y
y
6 6
4 4
2 2

1
% %
. . .
1
2 2
4 4
6
2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5
x
6
2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5
x
EaF intervalo inicial
EbF iteracion
6 6
4 4
2

2
%
0
. . .
2

%
3
0
. . .
2 1 . 2 1
3
2 2
4 4
6
2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5
x
6
2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5
x
EcF iteracion 2
EdF iteracion 3
6
4
2

,

1

2
%
3
0
. . . .
3 2 1
2
4
6
2.5 2 1.5 1 0.5 0 0.5 1 1.5 2 2.5
EeF iteracion <D raz alcanzada
*i"ura @%AD &roceso de obtencion de la raz de una funcion por el metodo de interpolacion
lineal
rrador$9uan%9imenez
0
y
@%2%3% Metodo de )e.ton1?ap#son
=l metodo de )e.ton se basa en la e3pansion de una funcion f E3F en serie de 2a!lor en
el entorno de un punto 3
0
$

2
f E3F f E3
0
F S f
0
E3
0
FE3 3
0
F S
2
f
00
E3
0
FE3 3
0
F

S
S
nl
f
EnF
E3
0
FE3 3
0
F
n
S
&ertenece a una familia de metodos ampliamente empleados en calculo numerico% La idea
en el caso del metodo de )e.ton es apro3imar la funcion para la :ue se desea obtener la raz$
mediante el primer termino de la serie de 2a!lor% =s decir apro3imar localmente f E3F$ en el
entorno de 3
0
por la recta$
f E3
0
F S f
0
E3
0
FE3 3
0
F
=sta recta$ es precisamente la recta tan"ente a la curva f E3F en el punto 3
0
Efi"ura @%>F
12
10
8
6
y+f(x )/f(x )(xx )
0 0 0
4
2
0
x x
1 0
2
4
3 2 1 0 1 2 3
x
Q#R
*i"ura @%>D ?ecta tan"ente a la funcion f E3F en el punto 3
0
=l metodo consiste en obtener el corte de esta recta tan"ente con el e9e de abscisas$
0 M f E3
0
F S f
0
E3
0
FE3
3
0
F
! despe9ando 3$
f E3
0
F
3 M 3
0

f
0
E3
F
3 M 3
0

f
E3
0
F
6 continuacion se evalua la funcion en el punto obtenido 3 f E3F% Como en los m
etodos anteriores$ se compara el valor de f E3F con una cierta tolerancia preestablecida% -i es
menor$ el valor de 3 se toma como raz de la funcion% -i no$ se vuelve aplicar el al"oritmo$
empleando a#ora el valor de 3 :ue acabamos de obtener como punto de partida% Cada calculo
constitu!e una nueva iteracion ! los sucesivos valores obtenidos para 3$ conver"en a la raz$
f E3
0
F
f E3

F
f E3
n
F
3
0
3

M 3
0

f
0
E3 F
3
2
M 3


f
0
E3 F

3
n
M
f
0
E3
F

0 n
La fi"ura @%C muestra un dia"rama de flu9o correspondiente al metodo de )e.ton% -i se
compara con los dia"ramas de flu9o de los al"oritmos anteriores$ el al"oritmo de )e.ton resulta
al"o mas simple de implementar% -in embar"o es preciso evaluar en cada iteracion el valor de la
funcion ! el de su derivada%
=l calculo de la derivada$ es el punto debil de este al"oritmo$ !a :ue para valores 3
0
pro3imos a un mnimo o ma3imo local obtendremos valores de la derivada pro3imos a cero$ lo
:ue puede causar un error de desbordamiento al calcular el punto de corte de la recta tan"ente
con el e9e de abscisas o #acer :ue el al"oritmo conver9a a una raz ale9ada del punto inicial de bu
s:ueda%
&artimos de un punto inicial 3
0
Calculamos
f
0
E3
0
F
$ f
E3F
es |f E3F| tolO
-

conver"enciaD
terminar
)o
3
0
M 3
*i"ura @%CD +ia"rama de flu9o del metodo de )e.ton1?ap#son
La fi"ura @%0 muestra un e9emplo de obtencion de la raz de una funcion mediante el m
etodo de )e.ton% =l metodo es mas rapido :ue los dos anteriores$ es decir$ partiendo de una
distancia comparable a la raz$ es el :ue conver"e en menos iteraciones%
=n el e9emplo de la fi"ura se #a obtenido la raz para la misma funcion :ue el los e9emplos del
metodo de la biseccion e interpolacion lineal% -e #a empezado sin embar"o en un punto mas
ale9ado de la raz$ para :ue pueda observarse me9or en la fi"ura la evolucion del al"oritmo% =n
cada uno de los "raficos :ue componen la fi"ura pueden observarse los pasos del al"oritmoD dado
el punto 3
i
$ se calcula la recta tan"ente a la funcion f E3F en el punto ! se obtiene un nuevo
punto 3
iS
$ como el corte de dic#a recta tan"ente con el e9e de abscisas%
=n este e9emplo el al"oritmo conver"e en las cinco iteraciones :ue se muestran en la fi"ura$ para
la misma tolerancia empleada en los metodos anteriores$ tol M 0$0% =l punto de inicio
empleado fue 3
0
M 2$;$ por tanto esta fuera del intervalo Q2$ 2R ! mas ale9ado de la raz :ue
en el caso de los metodos anteriores%
orrador$9ua %9imenezY
y
y
y
y
y
y
12 12
10 10
8 8
6 6
4 4
2 2
0
x x
0
1 0
x
1
x
0
2 2
4
3 2 1 0 1 2 3
x
4
3 2 1 0 1 2 3
x
EaF intervalo inicial
EbF iteracion
12 12
10 10
8 8
6 6
4 4
2 2
0
x x x
2 1 0
x
3
0
x x x
2 1 0
2 2
4
3 2 1 0 1 2 3
x
4
3 2 1 0 1 2 3
x
EcF iteracion 2
EdF iteracion 3
12
12
10
10
8
8
6
6
4
4
2
x x
3 4
0
x x x
2 1 0
2
2
x
3
x
4
0
x x x
2 1 0
2
,%-*
4
3 2 1 0 1 2 3
x
4
3 2 1 0 1 2 3
x
EeF iteracion @
Ef F iteracion ;D raz de la funcion
*i"ura @%0D &roceso de obtencion de la raz de una funcion por el metodo de )e.ton
orrador$9uan%9imene
y
n
@%2%@% Metodo de la secante
=l metodo de la secante podra considerarse una variante del metodo de ne.ton en el
:ue se sustitu!e la recta tan"ente al punto 30 por la recta secante :ue une dos puntos obtenidos
en iteraciones sucesivas% La idea es apro3imar la derivada a la funcion f en el punto 3
n
por la
pendiente de una recta secante$ es decir de una recta :ue corta a la funcion en dos puntos$
f E3
n
F f
E3
n
F
f
0
E3
n
F
3
n
3
n
Las sucesivas apro3imaciones a la raz de la funcion se obtienen de modo similar a las
del metodo de )e.ton$ simplemente sustitu!endo la derivada de la funcion por su valor
apro3imado$
f E3
n
F
E3
n
3
n
F f E3
n
F
3
nS
M 3
n

f
0
E3
F
3
n

f E3
n
F f
E3
n
F
&ara iniciar el al"oritmo$ es preciso emplear en este caso dos puntos iniciales% La fi"ura @%
muestra un e9emplo%
2
x
0
0
x x
2 1
2
4
6
8
10
3 2.5 2 1.5 1 0.5 0 0.5 1
x
*i"ura @%D ?ecta secante a la funcion f E3F en los puntos 3
0
! 3

=l metodo podra en este punto confundirse con el de interpolacion$ sin embar"o tiene
dos diferencias importantesD =n primer lu"ar$ la eleccion de los dos puntos iniciales 3
0
e 3

$ no
tienen por :ue formar un intervalo :ue conten"a a la raz% =s decir$ podran estar ambos situados
al mismo lado de la raz% =n se"undo lu"ar$ los puntos obtenidos se van sustitu!endo por orden$
de manera :ue la nueva recta secante se constru!e siempre a partir de los dos ultimos puntos
obtenidos$ sin
f E3

Ff E3
0
F
$ f
E3F
prestar atencion a :ue el valor de la raz este contenido entre ellos% E)o se comparan los si"nos
de la funcion en los puntos para ver cual se sustitu!e$ como en el caso del metodo de interpolaci
onF%
La fi"ura @%2 muestra un dia"rama de flu9o para el metodo de la secante% =l dia"rama es
basi1 camente el mismo :ue el empleado para el metodo de )e.ton% Las dos diferencias
fundamentales son$ :ue a#ora en lu"ar de evaluar la funcion ! la derivada en cada iteracion$ se
calcula el valor del punto de corte de la recta :ue pasa por los dos ultimos puntos obtenidos Ees
decir$ empleamos una recta secante$ :ue corta a la curva en dos puntos$ en lu"ar de emplear una
recta tan"enteF%
6demas es preciso actualizar$ en cada iteracion$ el valor de los dos ultimos puntos
obtenidosD el mas anti"uo se desec#a$ el punto recien obtenido sustitu!e al anterior ! este al
obtenido dos iteraciones antes%
&artimos de dos puntos inicial 3
0
$ 3

Calculamos
3 M 3


E3

3
0
Ff E3

F
es |f E3F| tolO
-

conver"enciaD
terminar
)o
3
0
M 3

3

M 3
*i"ura @%2D +ia"rama de flu9o del metodo de la secante
La fi"ura @%3 muestra un e9emplo de la obtencion de una raz por el metodo de la
secante% -e #a empleado de nuevo la misma funcion :ue en los e9emplos anteriores$ tomando como
valores iniciales$ 3
0
M 2$; ! 3

M 0$;% La tolerancia se #a fi9ado en tol M 0$0 tambien
como en los anteriores al"oritmos descritos% =n este caso$ el al"oritmo encuentra la raz en
cinco iteraciones% Cada uno de los "raficos :ue compone la fi"ura @%3$ muestra la obtencion de
un nuevo punto a partir de los dos anteriores%
=n la iteracion 2$ puede observarse como el nuevo punto se obtiene a partir de dos puntos :ue
estan ambos situados a la derec#a de la raz$ es decir$ no forman un intervalo :ue conten"a a
la raz% 6:u se pone claramente de manifiesto la diferencia con el metodo de interpolacion
lineal% +e #ec#o$ com !a se #a dic#o$ el metodo de la secante puede iniciarse tomando los dos
primeros puntos a uno de los lados de la raz%
=l metodo es$ en principio$ mas eficiente :ue el de la biseccion ! el de interpolacion
lineal$ ! menos eficiente :ue el de )e.ton%
La venta9a de este metodo respecto al de )e.ton es :ue evita tener :ue calcular e3pl
citamente la derivada de la funcion para la :ue se :uiere calcular la raz% =l al"unos casos$ la
obtencion de la forma analtica de dic#a derivada puede ser comple9a%
orrador$9u n%9imenez
y
y
y
y
y
y
x
x
4
2 2
x x
0 0
x x x x
2 1 2 1
2 2
4 4
6 6
8 8
10
3 2.5 2 1.5 1 0.5 0 0.5 1
x
10
3 2.5 2 1.5 1 0.5 0 0.5 1
x
EaF intervalo inicial
EbF iteracion
2 2
x
0
x
3
0
x x
2 1
x
0
x
3
0
x
4
x
2
x
1
2 2
4 4
6 6
8 8
10
3 2.5 2 1.5 1 0.5 0 0.5 1
x
10
3 2.5 2 1.5 1 0.5 0 0.5 1
x
EcF iteracion 2
EdF iteracion 3
2 2
x
0
x
3
5
0
x x
4 2 1
x x
0
0 3
x
x x
2 1
2 2
4 4
,%-*
6 6
8 8
10
3 2.5 2 1.5 1 0.5 0 0.5 1
x
10
3 2.5 2 1.5 1 0.5 0 0.5 1
x
EeF iteracion @
Ef F iteracion ;
*i"ura @%3D proceso de obtencion de la raz de una funcion por el metodo de la secante
orrador$9uan%9imenez
y+&0rt(e
x
)
y + x
p1#to fijo
2 1 0 1 2 3
@%2%;% Metodo de las apro3imaciones sucesivas o del punto fi9o
=l metodo del punto fi9o es$ como se vera a lo lar"o de esta seccion$ el mas sencillo de
pro"ramar de todos% +esafortunadamente$ presenta el problema de :ue no podemos aplicarlo a
todas las funciones% Ka! casos en los :ue el metodo no conver"e$ con lo :ue no es posible
emplearlo para encontrar la raz o races de una funcion%
&unto fi9o de una funcion% -e dice :ue un punto 3
f
es un punto fi9o de una funcion "E3F si se
cumple$
"E3
f
F M 3
f
=s decir$ la ima"en del punto fi9o 3
f
es de nuevo el punto fi9o% 6s por e9emplo la funci
on$
"E3F M

e
3
2iene un punto fi9o en 3
f
M 0$A03@<A$ por:ue "E0$A03@<AF M 0$A03@<A% La e3istencia
de un punto fi9o puede obtenerse "raficamente$ representando en un mismo "rafico la funcion ! M
"E3F ! la recta ! M 3% -i e3iste un punto de corte entre ambas "raficas$ se trata de un punto
fi9o% La
fi"ura @%@$ muestra "raficamente el punto fi9o de la funcion "E3F M

e
3
del e9emplo anterior%
Una funcion puede tener uno o mas puntos fi9os o no tener nin"uno% &or e9emplo$ la funcion
! M

e
3
no tiene nin"un punto fi9o%
3
2
1
0
1
2
3
4
5
3
*i"ura @%@D Bbtencion "rafica del punto fi9o de la funcion$ "E3F M

e
3
&unto fi9o atractivo% -upon"amos a#ora :ue$ a partir de la funcion "E3F creamos la
si"uiente sucesion$
3
nS
M "E3
n
F
=s decir$ empezamos tomando un punto inicial 3
0
! a partir de el vamos obteniendo los
si"uiente valores de la sucesion como$
3
0
3

M "E3
0
F 3
2
M "E3

F M " E"E3
0
FF 3
nS
M "E3
n
F M " E" E
E"E3
0
FFFF
+ecimos :ue un punto fi9o 3
f
de la funcion "E3F es un punto fi9o atractivo si la sucesion 3
nS
M "E3
n
F conver"e al valor 3
f
$ siempre :ue 3
0
se tome suficientemente cercano a 3
f
% Como de
cerca tienen :ue estar 3
0
! 3
f
para :ue la serie conver9a$ es una cuestion delicada% +e
entrada$ es importante descartar :ue #a! funciones :ue tienen puntos fi9os no atractivos$ por
e9emplo$ la funcion "E3F M 3
2
tiene dos puntos fi9os 3 M 0 ! 3 M % =l primero es el lmite
de la sucesion 3
nS
M "E3
n
F para cual:uier valor inicial 3
0
contenido en el intervalo abierto
E$ F% =l punto 3 M resulta inalcanzable para cual:uier sucesion e3cepto :ue el punto de
inicio sea el mismo 3
0
M 3
f
M %
Ka! al"unos casos en los :ue es posible$ para determinadas funciones$ saber cuando uno de sus
puntos fi9os es atractivo$
2eorema de e3istencia ! unicidad del punto fi9o% +ada una funcion "E3F$ continua !
diferen1 ciable en un intervalo Qa$ bR$ si se cumple :ue$ 3 Qa$ bR "E3F Qa$ bR$ entonces "E3F
tiene un punto fi9o en el intervalo Qa$ bR%
-i ademas e3iste una constante positiva 5 f ! se cumple :ue la derivada |"
0
E3F | 5$ 3

Ea$ bF$ entonces el punto fi9o contenido en Qa$ bR es u


nico%
&ara demostrar la primera parte del teorema$ se puede emplear el teorema de 4olzano% -i se
cumple :ue "EaF M a o :ue "EbF M b$ entonces a o b seran el punto fi9o% -upon"amos :ue
no es as/ entonces tiene :ue cumplirse :ue "EaF _ a ! :ue "EbF f b% -i construimos una
funcion$ f E3F M "E3F 3 esta funcion$ :ue es continua por construccion$ cumple :ue f EaF M
"EaF a _ 0 ! f EbF M "EbF b f 0% &ero entonces$ debe e3istir un punto$ 3
f
Qa$ bR para el
cual f E3
f
F M 0 !$ por tanto$ f E3
f
F M "E3
f
F 3
f
M 0 "E3
f
F M 3
f
% =s decir$ 3
f
es un punto
fi9o de "E3F%
La se"unda parte del teorema puede demostrarse empleando el teorema de valor medio% -i
suponemos :ue e3isten dos puntos fi9os distintos 3
f
M 3
f 2
en el intervalo Qa$ bR$ se"un el
teorema del valor medio$ e3iste un punto n comprendido entre 3
f
! 3
f 2
para el :ue se cumple$
" E3
f
F " E3
f 2
F
M "
0
EnF
3
f
3
f
2
&or tanto$
|"E3
f
F "E3
f 2
F| M |3
f
3
f 2
| |"
0
EnF| |3
f
3
f 2
|
5 f |3
f
3
f 2
|
&ero como se trata de puntos fi9os |"E3
f
F "E3
f 2
F| M |3
f
3
f 2
|% con lo :ue lle"ar
amos al resultado contradictorio$
|3
f
3
f 2
| M |"E3
f
F "E3
f 2
F| |3
f
3
f 2
| 5
f |3
f
3
f 2
|
-alvo :ue$ en contra de la #ipotesis inicial$ se cumpla :ue 3
f
M 3
f 2
% =n cu!o caso$ solo
puede e3istir un unico punto fi9o en el intervalo Qa$ bR ba9o las condiciones impuestas por el
teorema%
2
2eorema de punto fi9o EatractivoF%
2
+ada una funcion "E3F$ continua ! diferenciable en un
intervalo Qa$ bR$ :ue cumple :ue$ 3 Qa$ bR "E3F Qa$ bR ! :ue |"
0
E3F | 5$ 3 Ea$
bF$ con
0 f 5 f $ entonces se cumple :ue$ para cual:uier punto inicial 3
0
$ contenido en el intervalo Qa$
bR$ la sucesion 3
nS
M "E3
n
F conver"e al unico punto fi9o del intervalo Qa$ bR%
La demostracion puede obtenerse de nuevo a partir del teorema del valor medio% -i lo aplicamos
al valor inicial 3
0
! al punto fi9o 3
f
$ obtenemos$
|"E3
0
F "E3
f
F| M |3
0
3
f
| |"
0
EnF| |
3
0
3
f
| 5
&ara la si"uiente iteracion tendremos$
|"E3

F "E3
f
F| |3

3
f
| 5 |3
0
3
f
| 5
2
puesto :ue$ 3

M "E3
0
F%
&or simple induccion tendremos :ue para el termino enesimo de la sucesion$
&ero
|"E3
n
F "E3
f
F| |3
n
3
f
| 5 |
3
n2
3
f
| 5
|3
0
3
f
| 5
n
lim 5
n
M 0 lim |3
n
3
f
| lim |3
0
3
f
|5
n
M 0
n n n
=s decir$ la sucesion 3
nS
M "E3
n
F conver"e al punto fi9o 3
f
%
=l metodo del punto fi9o% Como !a #emos visto$ obtener una raz de una funcion f E3F$
consiste en resolver la ecuacion f E3F M 0% -upon"amos :ue podemos descomponer la funcion f E3F
como la diferencia de dos terminos$ una funcion au3iliar$ "E3F$ ! la propia variable 3
f E3F M "E3F
3
=ncontrar una raz de f E3F resulta entonces e:uivalente a buscar un punto fi9o de "E3F%
f E3F M 0 "E3F 3 M 0 "E3F M
3
=n "eneral$ a partir de una funcion dada f E3F$ es posible encontrar distintas funciones
"E3F :ue cumplan :ue f E3F M "E3F 3% )o podemos "arantizar :ue cual:uiera de las
descomposiciones :ue #a"amos nos "enere una funcion "E3F :ue ten"a un punto fi9o% 6demas$
para funciones :ue ten"an mas de una raz$ puede suceder :ue distintas descomposiciones de la
funcion conver9an a distintas races% -i podemos encontrar una :ue cumpla las condiciones del
teorema de punto fi9o :ue acabamos de enunciar$ en un entorno de una raz de f E3F$ podemos
desarrollar un metodo :ue obten"a iterativamente los valores de la sucesion 3
nS
M "E3
n
F$ a
partir de un valor inicial
3
0
% =l resultado se apro3imar al punto fi9o de "E3F$ ! por tanto a la raz de f E3F tanto
como
:ueramos% 4astara$ como en los metodos anteriores$ definir un valor EtoleranciaF$ por deba9o del
cual consideramos :ue el valor obtenido es suficientemente pro3imo a la raz como para darlo
por valido%
La fi"ura @%; muestra un dia"rama de flu9o del metodo del punto fi9o%
La idea es ele"ir cuidadosamente el punto inicial 3
0
$ para ase"urar :ue se encuentra dentro del
intervalo de conver"encia del punto fi9o% 6 continuacion$ calculamos el valor de "E3
0
F$ el
resultado
ser un nuevo valor 3 % Comprobamos la diferencia entre el punto obtenido ! el anterior ! si es
menor :ue una cierta tolerancia$ consideramos :ue el metodo #a conver"ido$ de9amos de iterar$
! devolvemos el valor de 3 obtenido como resultado% -i no$ copiamos 3 en 3
0
! volvemos a
empezar
2
Ka! varios teoremas de punto fi9o definidos en distintos conte3tos matematicos% 6:u se da una version
reducida a funciones f E3F D ? o ?
&artimos de un punto inicial 3
0
Calculamos
3 M "E3
0
F
es |3 3
0
| tolO
-

conver"enciaD
terminar
)o
3
0
M 3
*i"ura @%;D +ia"rama de flu9o del metodo del punto fi9o% La raz obtenida corresponde a la
funcion
f E3F M "E3F
3
todo el proceso% =s interesante #acer notar :ue :ue el al"oritmo conver"e cuando la diferencia entre
dos puntos consecutivos es menor :ue un cierto valor% +e acuerdo con la condicion de punto
fi9o "E3
0
F M 3
0
$ dic#a distancia$ sera e:uivalente a la :ue media entre f E3
0
F M "E3
0
F 3
0
$ la
funcion para la :ue :ueremos obtener la raz$ ! 0%
,eamos un e9emplo% -upon"amos :ue :ueremos calcular por el metodo del punto fi9o la raz
de la funcion ! M e
3
3
2
$ :ue #emos empleado en los e9emplos de los metodos anteriores%
=n primer lu"ar$ debemos obtener a partir de ella una nueva funcion :ue cumpla :ue f E3F M
"E3F 3% &odemos #acerlo de varias maneras despe9ando una ^3^$ de la ecuacion e
3
3
2
M 0%
&ara ilustrar los distintos casos de conver"encia$ despe9aremos 3 de tres maneras distintas %
`
3 M
`
`

e
3
2
e
3
3
2
M 0
3 M lnE3 F M 2 lnE|3|F
`
e
3
3 M
3
=n nuestro e9emplo #emos obtenido tres formas distintas de despe9ar la variable 3% La cuesti
on :ue sur"e inmediatamente es$ si todas las funciones obtenidas$ tienen un punto fi9o !$ en caso
de tenerlo$ si es posible alcanzarlo iterativamente%
=n el primer caso$ 3 M

e
3
$ obtenemos las dos ramas de la raz cuadrada% Cada una de
ellas constitu!e a los efectos de nuestro calculo una funcion distinta% -i las dibu9amos 9unto a la
recta ! M 3 Efi"ura @%<F$ observamos :ue solo la rama ne"ativa la corta% Lue"o sera esta
rama
"E3F M

e
3
$ la :ue podremos utilizar para obtener la raz de la funcion ori"inal por el metodo
del punto fi9o% La rama positiva$ al no cortar a la recta ! M 3 en nin"un punto$ es una funcion
:ue carece de punto fi9o%
)o es difcil demostrar$ :ue la funcion "E3F M

e
3
cumple las condiciones del teorema de
punto fi9o descrito mas arriba para el intervalo E$ 0R% Lue"o el al"oritmo del punto fi9o debera
conver"er para cual:uier punto de inicio 3
0
contenido en dic#o intervalo% +e #ec#o$ para esta
funcion$ el al"oritmo conver"e desde cual:uier punto de inicio E-i empezamos en punto positivo$
y
5
4
y+&0rt (e
x
)
y+x
3
y+&0rt(e
x
)
2
1
0
1
2
3
4
5
3 2 1 0 1 2 3
x
*i"ura @%<D "E3F M

e
3
$ -olo la rama ne"ativa tiene un punto fi9o%
el si"uiente punto$ 3

ser
ne"ativo$ ! por tanto estara dentro del intervalo de conver"enciaF%
=sta
funcion es un e9emplo de :ue el teorema suministra una condicion suficiente$ pero no
necesaria
para :ue un punto fi9o sea atractivo%
La fi"ura @%A mue stra un e9emplo del calculo de la raz de la funcion f E3F M e
3
3
2
empleando la funcion "E3F M

e
3
$ para obtener el punto fi9o% -e #a tomado como punto de
partida 3
0
M 2$;$
un valor fuera del intervalo en el :ue se cumple el teorema% Como puede observarse en @%AEaF%
6 pesar de ello el al"oritmo conver"e rapidamente$ ! tras ; iteraciones$ @%AEf F$ #a alcanzado el
punto fi9o ! por tanto la raz buscada$ con la tolerancia impuesta
-i tratamos de emplear la funcion "E3F M lnE3
2
F para obtener la raz$ observamos :ue la
funcion no cumple el teorema para nin"un intervalo :ue conten"a la raz%
La fi"ura @%> muestra la funcion "E3F$ la recta ! M 3 ! la evolucion del al"oritmo tras
cuatro evaluaciones% =s facil deducir :ue el al"oritmo saltara de la rama positiva a la ne"ativa !
de esta volvera a saltar de nuevo a la positiva%
La funcion presenta una asntota vertical en el 0% -i se empieza desde 3
0
M 0$ 3
0
M 0 3
0
M
el al"oritmo no conver"e$ puesto :ue la funcion diver"e #acia % &ara el resto de los valores$
la funcion oscila entre una rama ! otra% -i en al"una de las oscilaciones acierta a pasar
suficientemente cerca del punto fi9o$ 3
n
3
n
tol$ el al"oritmo #abra apro3imado la raz$
aun:ue propiamente no se puede decir :ue conver9a%
La fi"ura @%CEaF$ muestra la evolucion del al"oritmo$ tomando como punto inicial 3
0
M
0$2% 2ras 2 iteraciones el al"oritmo ^atrapa la raz^% =n este caso la tolerancia se fi9o en tol
M 0$0%
La "rafica @%CEbF muestra una ampliacion de @%CEaF en la :ue pueden observarse en
detalles los valores obtenidos para las dos ultimas iteraciones% Las dos lneas #orizontales de
puntos marcan
orrador$9u n%9imenez
x
0
x
1
x
0
x
1
x
2
x
0
x
1
x
3
x
2
x
0
x
1
x x
3 4
x
2
x
0
x
1
x x
3 4
r%-*
x
2
x
0
y
y
y
y
y
y
3 3
2 2
1 1
0 0
1 1
2 2
3 3
4 4
5
4 3 2 1 0 1 2 3
x
5
4 3 2 1 0 1 2 3
x
EaF valor inicial
EbF iteracion
3 3
2 2
1 1
0 0
1 1
2 2
3 3
4 4
5
4 3 2 1 0 1 2 3
x
5
4 3 2 1 0 1 2 3
x
EcF iteracion 2
EdF iteracion 3
3 3
2 2
1 1
0 0
1 1
2 2
3 3
4 4
5
4 3 2 1 0 1 2 3
x
5
4 3 2 1 0 1 2 3
x
EeF iteracion @
Ef F iteracion ;
*i"ura @%AD proceso de obtencion de la raz de la funcion f E3F M e
3
3
2
aplicando el m
etodo del punto fi9o sobre la funcion "E3F M

e
3 %
orrador$9uan%9imenez
3
3
y
4
2
0
2
4
6
8
10
4 3 2 1 0 1 2 3
x
*i"ura @%>D primeras iteraciones de la obtencion de la raz de la funcion f E3F M e
3
3
2
aplicando el metodo del punto fi9o sobre la funcion "E3F M lnE3
2
F%
los lmites raz tol%
=l al"oritmo se detiene por:ue la diferencia entre los valores obtenidos en las dos ultimas
iteraciones caen dentro de la tolerancia% =l valor obtenido en la penultima iteracion$ :ue
proviene de la rama positiva de la funcion "E3F cae mu! cerca del punto fi9o% =l ultimo valor
obtenido$ se ale9a de #ec#o del valor de la raz$ respecto al obtenido en la iteracion anterior$ pero
no lo suficiente como para salirse de los lmites de la banda marcada por la tolerancia% Como
resultado$ se cumple la condicion de terminacion ! el al"oritmo se detiene%
-i disminuimos el valor de la tolerancia$ no podemos "arantizar :ue el al"oritmo conver9a% +e
#ec#o$ si trazamos cuales #abran sido los valores si"uientes :ue #abra tomado la solucion
del al"oritmo$ caso de no #aberse detenido$ es facil ver :ue se ale9an cada vez mas de la raz% +e
nuevo
#abr :ue esperar a :ue cambie de rama ! vuelva a pasar otra vez cerca del punto fi9o para :ue
#a!a otra oportunidad de :ue el al"oritmo atrape la solucion%
La "rafica @%CEcF muestra la evolucion del error en funcion del numero de iteracion%
Como puede observarse$ el error oscila de forma caotica de una iteracion a la si"uiente% +e
#ec#o$ el estudio de las sucesiones de la forma 3
nS
M "E3
n
F constitu!en uno de los puntos de
partidas para la descripcion ! el analisis de los llamados sistemas caoticos%
Uno sencillo$ pero mu! interesante es el de la ecuacion lo"stica discreta$ 3
nS
M ? E 3
n
F 3
n
% =sta ecuacion muestra un comportamiento mu! distinto$ se"un cual sea el valor de ?
! el valor inicial 3
0
con el :ue empecemos a iterar%
&or ultimo$ si empleamos la funcion "E3F M
e
$ no se cumple el teorema de punto fi9o en nin"u
n
dor$9uan%9i
y
e
r
r
o
r
y
6
0.62
4
0.64
2
0.66
0
0.68
2
0."
4
0."2
21#to fijo
23tol
6
0."4
,%-*
o.te#i'%
8
0."6
10
0."8
12
10 5 0 5
x
0."8 0."6 0."4 0."2 0." 0.68 0.66 0.64 0.62 0.6 0.58
x
EaF =volucion del al"oritmo durante 2
iteraciones
EbF ,ista detallada de las ultimas iteraciones de
@%CEaF
15
10
5
0
5
10
0 20 40 60 80 100 120 140 160 180 200
#4 'e iter%i5#
EcF =volucion del
error
*i"ura @%CD proceso de obtencion de la raz de la funcion f E3F M e
3
3
2
aplicando el metodo
del punto fi9o sobre la funcion "E3F M lnE3
2
F$ el metodo oscila sin conver"er a la solucion%
punt% =n este caso$ el al"oritmo diver"e siempre% La fi"ura @%20 muestra la evolucion del
al"oritmo del punto fi9o para esta funcion% -e #a ele"ido un punto de inicio 3
0
M 0$A@;$ mu!
pro3imo al valor de la raz$ para poder observar la diver"encia de las soluciones obtenidas con
respecto al punto fi9o% Como puede verse$ el valor de 3
n
cada vez se ale9a mas de la raz% L6
solucion oscila entre un valor :ue cada vez se apro3ima mas a cero ! otro :ue tiende #acia
% -i se de9a aumentar suficientemente el numero de iteraciones$ lle"ara un momento en
:ue se producira un error de desbordamiento%
6 diferencia de lo :ue suceda en la eleccion de "E3F M lnE3
2
F$ en este caso$ el al"oritmo
no oscila entre las dos ramas% -i empezamos en la rama de la derec#a$ eli"iendo un valor positivo
para 3
0
$ el al"oritmo diver"e llevando las soluciones #acia S% =s un resultado esperable$ !a :ue
dic#a rama no tiene nin"un punto fi9o%
orrador$9ua %9imenezY
3
3
y
y
y
y
y
y
4 4
3 3
2 2
1 1
x x
0
0
0
0
x
1 1
1
2 2
3 3
4 4
5
3 2.5 2 1.5 1 0.5 0 0.5 1 1.5 2
x
5
3 2.5 2 1.5 1 0.5 0 0.5 1 1.5 2
x
EaF valor inicial
EbF iteracion
4 4
3 3
2 2
1 1
x x
0
0
0
0
x x
2
x
1
1
2
x
1
1
x
3
2 2
3 3
4 4
5
3 2.5 2 1.5 1 0.5 0 0.5 1 1.5 2
x
5
3 2.5 2 1.5 1 0.5 0 0.5 1 1.5 2
x
EcF iteracion 2
EdF iteracion 3
4 4
3 3
2 2
1 1
x x
0
0
0
0
x x
x
4
2
x
1
1
x
3
x
4
2
x
1
1
x
3
2 2
x
5
3 3
4 4
5
3 2.5 2 1.5 1 0.5 0 0.5 1 1.5 2
x
5
3 2.5 2 1.5 1 0.5 0 0.5 1 1.5 2
x
EeF iteracion @
Ef F iteracion ;
*i"ura @%20D proceso de obtencion de la raz de la funcion f E3F M e
3
3
2
aplicando el metodo
del punto fi9o sobre la funcion "E3F M
e
$ el metodo diver"e rapidamente%
@%3% Calculo de races de funciones con
Matlab%
Matlab suministra funciones propias para calcular races de funciones% Las dividiremos en dos
"rupos% =n primer lu"ar estudiaremos la funcion de Matlab fzero ! despues veremos un
con9unto de funciones especficas para mane9ar polinomios%
@%3%% La funcion de Matlab
fzero.
La funcion fzero permite obtener la raz de una funcion cual:uiera real f E3F D ? ?%
fzero$ es una funcion especial$ !a :ue opera sobre otras funciones$ podemos considerarla como
una funcion de funciones% Las funciones ordinarias actuan sobre variables$ a lo lar"o de los cap
tulos anteriores #emos visto como asi"nar valores ! variables de entrada a las funciones !
tambien como "uardar los resultados obtenidos de las funciones en variables de salida%
Matlab suministra varios mecanismos$ para indicar a fzero ! en "eneral a cual:uier funci
on de funciones la funcion sobre la :ue :ueremos :ue actue% ,eremos a continuacion al"unos
de los mas comunes%
#andle de una funcion% =l primer mecanismo$ es asociar a una funcion un nombre de va1
riable especial% Kasta a#ora$ siempre #emos empleado las variables para "uardar en ellas valores
numericos o caracteres% -in embar"o Matlab permite "uardar tambien funciones en una
variable% =stas variables$ reciben el nombre de #andles% ,eamos un e9emplo% -i escribimos en la
ventana de comandos$
>> sn
=[sin sn =
[sin
Matlab asocia a la nueva variable sn la funcion seno EsinF% &ara indicar a Matlab :ue la
nueva variable es el #andle de una funcion es imprescindible emplear el smbolo Y$ despues del
smbolo de asi"nacion M%
-i pedimos a Matlab :ue nos muestre :ue variables tiene en el .or5space$
>>
whos
"ame 7ize 3ytes 8lass 2ttributes
sn 1x1 3! function#handle
Matlab nos indica :ue se #a creado una variable sn$ cu!a clase es function handle% =sta
variable tiene propiedades mu! interesantesD por una parte$ podemos mane9arla como si se tratara
de la funcion seno$ asi"nando valores de entrada$ ! "uardando el resultado en una variable de
salida$
>> x=sn,piJ!-
x
=
1
&ero ademas podemos usarla como variable de entrada para otra funcion$ tal ! como se muestra
en el si"uiente codi"o$
function pinta#funcion,fun:intervalo-
E9sta funcion dibu)a la grafica de una funcion cualquiera ,fun- en un
@%3% C6

LCULB += ?6

0C=- += *U)C0B)=- CB)


M62L64%
A
Eitervalo dado ,intervalo-. fun debe ser un handle de la funcion que se
Equiere pintar. intervalo debe ser un vector que contenga los extremos del
Eintervalo que se desea pintar.
E8onstruimos cien puntos en el intevalo
dado:
x=linspace,intervalo,1-:intervalo,!-:1((-1
Ecalculamos el valor de la funcion en los puntos del
intervalo: y=fun,x-1
Edibu)amos la grafica
plot,x:y-
La funcion pinta funcion nos dibu9ara la "rafica de cual:uier funcion en el intervalo
indica1
do% para ello bastar crear un #andle de la funcion :ue se :uiere dibu9ar ! pasarlo a la funcion
pinta fun como una variable de entrada% 6s por e9emplo$ si escribimos en Matlab$
>>sn=[sin
>>pinta#funcion,sn:/%piJ!:piJ!0-
-e obtendr
la "rafica de la funcion seno en el intervalo pedido%
&odemos asi"nar #andles no solo a las funciones internas de Matlab sino a cual:uier funcion
:ue escribamos% &or e9emplo$ en los metodos descritos mas arriba para obtener races de
funciones$ usamos la funcion f E3F M e
3
3
2
como funcion de prueba% podemos crear un fic#ero :ue
implemente esta funcion$
function y=prueba,x-
Eesta es una funcioncilla de prueba para los algoritmos de obtencion de
EraQces
y=exp,x-%x.K!1
-i "uardamos el fic#ero$ con el nombre prueba%m en el directorio de traba9o$ podemos a#ora
asi"nar un #andle a nuestra funcion$
mifuncion=[prueba
I a continuacion$ podemos emplear el pro"rama pinta fun para representa la funcion en un
intervalo$ por e9emplo Q22R :ue conten"a la raz$
pinta#funcion,mifuncion:/%! !0-
=l resultado se muestra en la fi"ura @%2
la funcion feval de Matlab% =sta funcion suministra un metodo indirecto para calcular
los resultados de una funcion cual:uiera% -u sinta3is es la si"uiente$
/y1: y!: ...: ym0=feval,*fun*: x1: x!: ...:xn-
donde fun representa el nombre de la funcion :ue se desea evaluar$ x1: x!:...:xn$ son la
variables de entrada empleadas por la funcion fun$ ! y1: y!: ...:ym representan sus variables
de salida% =s importante destacar :ue el nombre de la funcion :ue se desea evaluar #a! :ue
introducirlo entre comillas simples% 6s por e9emplo si escribimos$
4
3
2
1
0
1
2
3
4
2 1.5 1 0.5 0 0.5 1 1.5 2
*i"ura @%2D (rafica de la funcion f E3F M e
3
3
2
$ obtenida mediante pinta funcion%
>> y=feval,*sin*:x-
y =
1
>>
obtenemos el mismo resultado :ue empleando la funcion sin directamente para calcular el valor
del seno de L'2$
>> x=piJ!1
>> y=sin,x-
y =
1
>>
feval suministra un metodo alternativo al uso de #andles para crear ! mane9ar funciones
de funciones% &ara ver un e9emplo$ el si"uiente codi"o muestra una version alternativa del
pro"rama pinta funcion$ empleando la funcion feval$
function pinta#funcion!,fun:intervalo-
E9sta funcion dibu)a la grafica de una funcion cualquiera ,fun- en un
Eitervalo dado ,intervalo-. fun debe ser una cadena de caracteres que contengan exactamente el
nombr
Equiere pintar. intervalo debe ser un vector que contenga los extremos del
Eintervalo que se desea pintar.
E8onstruimos cien puntos en el intevalo
dado:
x=linspace,intervalo,1-:intervalo,!-:1((-1
Ecalculamos el valor de la funcion en los puntos del intervalo: 9H=<92"BC <2 SD"8AC"
feval y=feval,fun:x-1
Edibu)amos la grafica
plot,x:y-
&ara representar la funcion seno en el intervalo
L
$
L
$ empleando esta nueva funcion$
introdu1
2 2
cimos en Matlab$
>> pinta#funcion!,*sin*:/%pi:pi0-
2ambien podemos crear una variable alfa1numerica con el nombre de la funcion seno$ !
pasar directamente la variable creada$
>>
funcion=*sin*
>> pinta#funcion!,funcion:/%pi:pi0-
6l i"ual :ue en el caso del uso de handles podemos emplear la funcion feval con funciones
creadas por el usuario$ por e9emplo podemos representar nuestra funcion prueba$ introducida
anteriormente$
>>pinta#funcion!,*prueba*:/%! !0-
=l resultado sera de nuevo la fi"ura @%2% Una ultima propiedad importante de la funcion
feval es :ue tambien admite :ue indi:uemos la funcion a evaluar mediante un #andle% -
volvemos al ultimo e9emplo$ podramos #aber construido un #andle para la funcion prueba$
>>mf=[prueba
>>pinta#funcion!,mf:/%! !0-
Bbtendramos una vez mas el mismo resultado%
*unciones inline% Las funciones inline suministran un tercer mecanismo en Matlab para ma1
ne9ar una funcion de modo :ue sirva de variable a otra funcion% Las funciones inline tienen una
peculiaridad con respecto a las funciones :ue #emos visto #asta a#ora/ no se "uardan en fic#eros
%m sino directamente en el Jor5space% Las funciones inline solo e3isten mientras dura la sesion de
Matlab en :ue se crearon$ aun:ue es posible "uardarlas en fic#eros %mat ! volver a car"arlas en
Matlab$ como se #ara con cual:uier otra variable%
&ara crear una funcion inline se emplea el comando inline% =n su forma mas sencilla$ el
co1 mando debe emplear como variable de entrada una e3presion entre comillas simples :ue
represente la e3presion matematica de la funcion% &or e9emplo si :ueremos #acer una version
inline de la funcion prueba$
>> fun=inline,*exp,x-%x.K!*-
fun =
Anline function6
fun,x- = exp,x-%xK!
&ara calcular el valor de la funcion en un punto$ la funcion inline se mane9a de modo analo"o
a cual:uier otra funcion ordinaria%
>> y=fun,!-
y =
3.3841
Como en el caso del uso de handles$ la variable creada mediante una funcion inline$
#ace referencia a una funcion ! puede ser empleada como variable de entrada por otras
funciones% &or e9emplo$ podramos emplear directamente nuestra primera version del pro"rama
para pintar funciones$ pitan funcion para obtener la "rafica de nuestra funcion de prueba f E3F
M e
3
3
2
$
>>funcion=inline,*exp,x-%x.K!*-
>>pinta#funcion,funcion:/%! !0-
Una vez :ue #emos visto distintos metodos para mane9ar una funcion como variable de
entrada de otra funcion$ volvamos a la funcion fzero% =n su forma mas sencilla$ fzero admite como
variable de entrada$ una funcion e3presada mediante un handle$ mediante su nombre escrito
entrecomillas o bien construida como funcion inline% 6demas es preciso introducir una se"unda
variable :ue puede ser un punto 3
0
pro3imo a la raz de la funcion o bien un vector QabR :ue
defina un intervalo :ue conten"a una raz% La funcion fzero$ devuelve como variable de salida el
valor apro3imado de la raz% -i fzero no es capaz de encontrar la raz de la funcion$ devolvera
)a)% ,eamos un e9emplo con la funcion contenida en el fic#ero$ prueba%m$ descrito mas arriba$
% =mpleando un #andle ! un punto pro3imo a la raz$
>> hndl=[prueba
hndl =
[prueba
>> raiz=fzero,hndl:!-
raiz =
%(..(3$'.$!!$4834!
2% =mpleando un #andle ! un intervalo :ue conten"a la raz$
>> raiz=fzero,hndl:/%! !0-
raiz =
%(..(3$'.$!!$4834!
3% =mpleando el nombre de la funcion entre comillas ! un punto cercano a la raz$
>> raiz=fzero,*prueba*:!-
raiz =
%(..(3$'.$!!$4834!
@% =mpleando el nombre de la funcion entre comillas ! un intervalo :ue conten"a la raz$
>> raiz=fzero,*prueba*:/%! !0-
raiz =
%(..(3$'.$!!$4834!
;% Usando una funcion inline ! un punto cercano a la raz$
>> finl=inline,*exp,x-%x.K!*-
finl =
Anline function6
finl,x- = exp,x-%x.K!
>> raiz=fzero,finl:!-
raiz =
%(..(3$'.$!!$4834!
<% Usando una funcion inline ! un intervalo :ue conten"a la raz$
>> raiz=fzero,finl:/%! !0-
raiz =
%(..(3$'.$!!$4834!
La funcion fzero$ tiene muc#as posibilidades de a9uste de la precision$ del metodo :ue
emplea internamente para buscar la raz$ etc% &ara obtener una vision mas completa de su uso$
consultar la a!uda de Matlab%
@%3%2% Calculo de races de polinomios%
Matlab tiene un con9unto de funciones especialmente pensadas para mane9ar polinomios% =n
primer lu"ar$ en Matlab es #abitual representar los polinomios mediante vectores cu!os elementos$
son los coeficientes del polinomio ordenados de ma!or a menor "rado% 6s por e9emplo$ el
polinomio% ! M 23
3
S33
2
S@3S se representa mediante el vector$ p M Q2 3 @ R$ el polinomio ! M
33
@
S23
2
S<3 se representa mediante el vector$ p2 M Q3 0 2 < 0R !$ en "eneral$ el polinomio
!E3F M a
n
3
n
S
a
n
3
n
S S
a
2
3
2
S a

3 S a
0
se representa mediante el vector p M Qa
n
a
n
a
2
a

a
0
R% -i
al polinomio le falta al"un o al"unos terminos$ el elemento correspondiente toma el valor 0 en
el
vector :ue representa el polinomio%
,eamos a continuacion un con9unto de funciones de Matlab$ especialmente pensadas para ma1
ne9ar polinomios$
La funcion roots% =sta funcion calcula las races de un polinomio de "rado n a partir
de los coeficientes del polinomio$ contenidos en un vector como los :ue acabamos de describir%
La sinta3is esD raicesMrootsEQvector de coeficientesRF% veamos un e9emplo% +ado el polinomio !E3F
M 3
3
<
2
S 3 < lo e3presaramos en Matlab como$
>> p=/1 %' 11
%'0
I obtendramos sus races como$
>> raices=roots,ans-
raices =
3.((((
!.((((
1.((((
Matlab devuelve todas las races del polinomio en un unico vector$ tanto las reales como
las comple9as% Como por e9emplo en el caso del polinomio !E3F M 3
2
S 23 S
>> p=/1 !
30
p
=
1 ! 3
>> raices=roots,p-
raices =
%1.(((( 1.$1$!i
%1.(((( % 1.$1$!i
la funcion poly% =sta funcion podra considerarse la opuesta a la anterior/ dado un vector
:ue contiene las races de un polinomio$ nos devuelve los coeficientes del polinomio
correspondiente$ &or e9emplo si definimos el vector de races$
>>raices=/3 !
10
podemos obtener los coeficientes del polinomio :ue posee esas races
como$
>> raices=/1 !
30
raices =
1 ! 3
>> coef=poly,raices-
coef =
1 %' 11 %'
=s decir$ las races pertenecen al polinomio$ !E3F M 3
3
;3
2
S 3 <%
la funcion polyval% =sta funcion calcula el valor de un polinomio en un punto% &ara ello es
pre1 ciso darle un vector con los coeficientes del polinomio definido i"ual :ue en los casos
anteriores ! un se"undo vector con los puntos para los :ue se :uiere calcular el valor del
polinomio$
>> coef=/1 ! 3
$0
coef =
1 ! 3 $
>> x=!
x =
!
>>y= polyval,coef:x-
y =
!'
>> x=/161(0
x =
1 ! 3 $ & ' . 8 4 1(
>> y=polyval,coef:x-
y =
8olumns 1 through '
1( !' &8 11! 14$ 31(
8olumns . through 1(
$'' ''8 4!! 1!3$
=n este e9emplo se #a obtenido con polyval el valor del polinomio !E3F M 3
3
S 23
2
S 23 S
@ primero para el punto 3 M 2 ! depues para los puntos 3 M Q 2 3 @ ; < A > C 0R%
La funcion conv% Calcula el producto de dos polinomios% Cada polinomio se representa
mediante un vector de coeficientes ! la funcion conv devuelve un vector con los coeficientes del
polinomio producto% &or e9emplo$ si multiplicamos el polinomio !

M 3 S 2 por el polinomio !
2
M 3 obtendremos como resultado$ p M !

!
2
M 3
2
S 3 2$
>> y1=/1
!0
y1
=
1 !
>> y!=/1 %10
y! =
1 %1
>> p=conv,y1:y!-
p =
1 1 %!
Captulo ;
6plicaciones del calculo cient
fico al al"ebra lineal
;%% Matrices ! vectores
=n esta seccion vamos a repasar al"unos conceptos fundamentales de al"ebra lineal ! como
pueden mane9arse empleando Matlab% )o daremos definiciones precisas ni tampoco demostraciones$
!a :ue tanto unas como otras se veran en detalle en la asi"natura de al"ebra%
matrices% +esde un punto de vista funcional definiremos una matriz como una tabla bidimen1
sional de numeros ordenados en filas ! columnas$
`

p
E2F 3$; 0
`
6 M
`
2 L @$< @
`
A C 2$> 0$<
Cada lnea #orizontal de numeros constitu!e una fila de la matriz ! cada lnea #orizontal
una
columna de la misma%
6 una matriz con m filas ! n columnas se la denomina matriz de orden m n% m ! n son la
dimensiones de la matriz ! se dan siempre en el mismo ordenD primero el numero de filas ! despu
es el de columnas% 6s$ la matriz 6 del e9emplo anterior es una matriz 3 @% =l orden de una
matriz e3presa el tamanVo de la matriz%
+os matrices son i"uales si tienen el mismo orden$ ! los elementos :ue ocupan en ambas matrices
los mismo lu"ares son i"uales%
Una matriz es cuadrada$ si tiene el mismo numero de filas :ue de columnas% =s decir es
de orden n n%
Mientras no se di"a e3presamente lo contrario$ emplearemos letras ma!usculas 6$ 4$
para representar matrices% La e3presion 6
mn
indica :ue la matriz 6 tiene dimensiones m n%
&ara denotar los elementos de una matriz$ emplearemos la misma letra en minusculas empleada
para nombrar la matriz$ indicando mediante subndices$ ! siempre por este orden$ la fila ! la
columna a la :ue pertenece el elemento% 6si por e9emplo a
i9
representa al elemento de la matriz 6$
:ue ocupa la fila i ! la columna 9%
`

p
E2F 3$; 0
`
6 M
`
2 L @$< @
`
a
23
M
@$< A C 2$> 0$<
AC
>0 C6&

02ULB ;% 6&L0C6C0B)=- +=L C6



LCULB C0=)2

0*0CB 6L 6

L(=4?6
L0)=6L
dor$9uan%9i
a M
` `
vectores 6 una matriz compuesta por una sola fila$ la denominaremos vector fila% 6 una matriz
compuesta por una sola columna la denominaremos vector columna% -iempre :ue #ablemos de un
vector$ sin especificar mas$ entenderemos :ue se trata de un vector columna%

&ara representar
vectores$ emplearemos letras minusculas% &ara representar sus elementos anVadiremos a la letra
:ue representa al vector un subndice indicando la fila a la :ue pertenece el elemento%
`
a
`
`
a
2
`
` `
`
%
`
`
a
i
`
` `
`
%
`
` `
`
%
`
a
n
&odemos asociar los puntos del plano con los vectores de dimension dos% &ara ello$ usamos una
representacion cartesiana$ en la :ue los elementos del vector son los valores de las coordenadas
E3$ !F del punto del plano :ue representan% Cada vector se representa "raficamente mediante
una flec#a :ue parte del ori"en de coordenadas ! termina en el punto E3$ !F representado por el
vector% La fi"ura ;% representa los vectores$


a M
2
$ b M

2

3
$ c M

0

2
2
%
.
1.5
1
0.5
0
0.5
1
1.5
2
2.5
3
1.5 1 0.5 0 0.5 1 1.5 2 2.5 3 3.5
*i"ura ;%D ?epresentacion "rafica de vectores en el plano
+e modo analo"o$ podemos asociar vectores de dimension tres con puntos en el espacio
tridi1 mensional% =n este caso$ los valores de los elementos del vector corresponden con la
coordenadas E3$ !$ zF de los puntos en el espacio% La fi"ura ;%2 muestra la representacion
"rafica en espacio tridimensional de los vectores$
`

` `
2
` `
0
`
a M
`
2
`
$ b M
`
3
`
$ c M
`
2
`


=sta identificacion de los vectores como vectores columna no es "eneral% La introducimos por:ue simplifica las
e3plicaciones posteriores%
*
3
2
1
0
1
2
3
3
2
2
1
0
0
1
2
2
3
y
x
*i"ura ;%2D ?epresentacion "rafica de vectores en el
espacio
=videntemente para vectores de ma!or dimension$ no es posible obtener una representacion
"rafica% -i embar"o muc#as de las propiedades "eometricas$ observables en los vectores bi ! trdi1
mensionales$ pueden e3trapolarse a vectores de cual:uier dimension%
;%2% Bperaciones matriciales
6 continuacion definiremos las operaciones matematicas mas comunes$ definidas sobre
matrices%
suma% La suma de dos matrices$ se define como la matriz resultante de sumar los elementos :ue
ocupan en ambas la misma posicion% -olo esta definida para matrices del mismo orden$
C M 6 S 4
c
i9
M a
i9
S b
i9
`
2 3
` `
3 ;
` `
0 2
`
`
@ ; <
`
M
`
3 ; A
`
S
`
0
`
A > C ; A C 2 0
La suma de matrices cumple las si"uientes propiedades$
% 6sociativaD E6 S 4F S C M 6 S E4 S C F
2% ConmutativaD 6 S 4 M 4 S 6
3% =lemento neutroD B
nm
S 6
nm
M 6
mm
=l elemento neutro B
nm
de la suma de
matrices de orden n m es la matriz nula de dic#o orden$ compuesta esclusivamente por
ceros %
=n Matlab$ podemos crear una matriz de cual:uier orden$ compuesta e3clusivamente por
ceros mediante el comando zeros,m:n-$ donde m es el numero de filas ! n el de
columnas de la matriz de ceros resultante$
>> C=zeros,!:3-
C =
( ( (
( ( (
>> 2=/1 ! 31 $ 3
'0 2 =
1 ! 3
$ 3 '
>> 3=2C
3 =
1 ! 3
$ 3 '
>>
@% =lemento opuestoD La opuesta a una matriz se obtiene cambiando de si"no todos sus elemen1
tos$ 6
op
M 6
>>
2 2
=
1 ! 3
$ 3 '
>> 2op=%2
2op =
%1 %! %3
%$ %3 %'
>> 7=22op
7 =
( ( (
( ( (
=n Matlab el si"no S representa por defecto la suma de matrices$ por lo :ue la suma de dos
matrices puede obtenerse directamente como$
>> 2=/1!
31
$ 3 '0
2 =
1 ! 3
$ 3 '
>> 3=/1!
31
$ %3
!0
3 =
1 ! 3
$ %3 !
>> 7=23
7 =
! $ '
8 ( 8
2ransposicion +ada una matriz 6$ su transpuesta 6
2
se define como la matriz :ue se obtiene
intecambiando sus filas con sus columnas$

2
6
2

6 6
2
a
i9
a
9i
`
2
`
6 M

3 2

2 A
M
`
3 A
`
2
=n Matlab$ la operacion de trnasposicion se indica mediante un apotrofo E^F$
>> 2=/1 ! 31 $ 3 '0
2 =
1 ! 3
$ 3 '
>> 3=2*
3 =
1 $
! 3
3 '
&ara vectores$ la transposicion convierte un vector fila en un vector columna ! viceversa%
a a
2
`

`
a M
`
3
`
a
2
M

3 2

2
Una matriz cuadrada se dice :ue es simetrica si coincide con su transpuesta$
6 M 6
2
a
i9
M a9i
`
3 3
`
6 M 6
2
M
`
3 0 2
`
3 2 @
Una matriz cuadrada es antisimetrica cuando cumple :ue 6 M 6
2
% Cual:uier matriz
cuadrada se puede descomponer en la suma de una matriz simetrica mas otra antisimetrica%
La parte simetrica puede definirse como$
! la parte antisimetrica
como$
6
-
M
2

6 S 6

2

6s$ por
e9emplo$
6
6
M
2

6 6
`
2 3
`
`
3 ;
` `
0 2
`
6 M 6
-
S 6
6

`
@ ; <
`
M
`
3 ; A
`
S
`
0
`
A > C ; A C 2 0
&or ultimo$ la transpuesta de la suma de matrices
cumple$ E6 S 4F
2
M 6
2
S 4
2
6

M

a

a
2

a
n

6
2
M

a
2
a
22

a
2n

%
`
`
&roducto de una matriz por un escalar% =l producto de una matriz 6 por un numero b
es una matriz del mismo orden :ue 6$ cu!os elementos se obtienen multiplicando los elementos de
6 por el numero b$
C M b 6 c
i9
M b
a
i9
3

2 0

2 3

3 < 0
M
< C 3
=n Matlab$ el simbolo I se emplea para representar el producto entre escalares EnumerosF$
entre escalares ! matrices ! el producto entre matrices$ como veremos en los si"uientes parrafos%
&roducto escalar de dos vectores% +ados vectores de la misma dimension m se define
su producto escalar como$
`

` `

`
n
a b M
P
a
i
b
i
iM
`
3
`

`
2
`
M S 3 E2F S @ 0 M ;
@ 0
=l resultado de producto escalar de dos vectores$ es siempre un numero/ se multiplican
los entre s los elementos de los vectores :ue ocupan identicas posiciones ! se suman los
productos resultantes%
&roducto matricial =l producto de una matriz de orden n m por una matriz m l$ es
una nueva matriz de orden n l$ cu!os elementos se obtiene de acuerdo con la si"uiente e3presi
on$
m
& M 6 4 a
i9
M
P
a
it
b
t9
tM
&or tanto$ el elemento de la matriz producto :ue ocupa la fila i ! la columna 9$ se obtiene
multiplicando por orden los elementos de la fila i de la matriz 6 con los elementos correspondientes
de la columna 9 de la matriz 4$ ! sumando los productos resultantes%
&ara :ue dos matrices puedan multiplicarse es imprescindible :ue el numero de columnas de la
primera matriz coincida con el numero de filas de la se"unda%
&odemos entender la mecanica del producto de matrices de una manera mas facil si considera1
mos la primera matriz como un "rupo de vectores fila$
`
a

a
2


a
n
`
`
a
2
a
22
a
2n
`
6 M
`
%
`
%
`
%
`
6
m
M

a
m
a
m2

a
mn

a
m
a
m2
a
mn
! la se"unda matriz como un "rupo de vectores columna$
1 ( ( (
( 1 ( (
( ( 1 (
( ( ( 1
`
M `
%
` `
%
`
`
b

`
b
2
`
b
2
`
b
22
`
b
m
`
`
b

b
2
b
n
`
b
2
b
22
b
2n
4

M
`
`
%
` ` `
`
4
2
` `
` ` `
` ` `
4
3
M
`
b
2m
`
%
`
`
4 M
`
`
%
`
% %
`
%
%
`
b
n
b
n2
%b
nm
b
m
b
m2
b
mn
&odemos a#ora considerar cada elemento p
i9
de la matriz producto & M 6 4 como el
producto escalar del vector fila 6
i
for el vector columna 4
9
$ p
i9
M 6
i
4
9
% =s a#ora
relativamente facil$ deducir al"unas de las propiedad del producto matricial$
% &ara :ue dos matrices puedan multiplicarse$ es preciso :ue el numero de filas de la primera
coincida con el numero de filas de la se"unda% 6demas la matriz producto tiene tantas
filas como la primera matriz ! tantas columnas como la se"unda%
2% =l producto matricial no es conmutativo% =n "eneral 6 4 M 4 6
3% E6 4F
2
M 4
2
6
2
Matriz identidad La matriz identidad de orden n n se define comoD
E
i
ll
M
0
n
M
i
59
M 0$ 5 M 9
=s decir$ una matriz en los :ue todos los elementos :ue no pertencen a la dia"onal principal
son 0 ! los elementos de la dia"onal principal son % &or e9emplo$
`
0 0
`
0
3
M
`
0 0
`
0 0
La matriz identidad 0
n
es el elemento neutro del producto de matrices cuadradas de orden n n$
6
nn
0
n
M 0
n

6
nn
6demas$
6
nm
0
m
M 6
nm
0
n
6
nm
M 6
nm
=n Matlab se emplea el comando eye,n- para construir la matriz identidad de orden n n$
>> A$=eye,$-
A$ =
Una matriz cuadrada se dice :ue es orto"onal si cumple$
6
2
6 M
0
rrador$9uan%9imen

x
2
&roducto escalar de dos vectores ! producto matricial &or conveniencia$ representaremos
el producto escalar de dos vectores como un producto matricial$
`

`
a b M a
2
b M b
2
a M b a
`

`

3 @

`
2
`
M

0

`
3
`
M S 3 E2F S @ 0 M ;
0 @
=s decir$ transponemos el primer vector del producto$ convirtiendolo en un vector fila%
)orma de un vector% La lon"itud eucldea$ modulo$ norma 2 o simplemente norma de un
vector se define como$

:

n
l
2
k3k
2
M k3k M

3 3
M
3
2
3 M 3
2
S 3
2
S
3
2
M
P
3
2
2 n i
iM
Constitu!e la manera usual de medir la lon"itud de un vector% 2iene una interpretacion "eom
etri1 ca inmediata a traves del teorema de &ita"orasD nos da la lon"itud del se"mento :ue
representa al vector% La fi"ura ;%3 muestra dic#a interpretacion$ para un vector bidimensional%
5
4
3
x
2
6x6
2
+6x 6
2
/6x 6
2
x
1 2
2
1
0
x
1
1
0.5 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5
x
1
*i"ura ;%3D interpretacion "eometrica de la norma de un vector
6 partir de la norma de un vector es posible obtener una e3presion alternativa para el
producto escalar de dos vectores$
a b M kakkbk
cos N
+onde N representa el an"ulo formado por los dos vectores%
P

6un:ue se trate de la manera mas comun de definir la norma de un vector$ la norma 2 no


es la unica definicion posible$
)orma D -e define como la suma de los valores absolutos de los elementos de un vector$
k3k

M |3

| S |3
2
|
|3
n
|
)orma p$ =s una "eneralizacion de la norma 2$
:
p
k3k
p
M

n
|3
2
| S |3
2
| S |
3
2
| M
l
p
|3
p
|
2 n i
iM
norma $ se define como el ma!or elemento del vector valor absoluto$
k3k

M ma3 {|3
i
} |
)orma $ el menor elemento del vector en valor absoluto$
k3k

M min {|3
i
} |
=n Matlab la norma de un vector puede obtenerse mediante en comando norm,v:p- La
primera variable de entrada debe ser un vector ! la se"unda el tipo de norma :ue se desea
calcular% -i se omite la se"unda variable de entrada$ el comando devuelve la norma 2% 6 continuaci
on se inclu!en varios e9emplo de utilizacion$
>> x=/11!1%31(1%10
x =
1
!
%3
(
%1
>> norma#!=norm,x:!-
norma#! =
3.8.!4833$'!(.$1.e((
>> norma=norm,x-
norma =
3.8.!4833$'!(.$1.e((
>> norma#1=norm,x:1-
norma#1 =
.
>> norma#$=norm,x:$-
norma#$ =
3.1&$3$!1$&&!44($e((
>> norma#inf=norm,x:inf-
norma#inf =
3
>> norma#minf=norm,x:%inf-
norma#minf =
(
=n "eneral$ una norma se define como una funcion de ?
n
?$ :ue cumple$
k3k 0$ k3k M 0 3 M
0
k3 S !k k3k S
k! k kp3k M |p|k3k$
p ?
Llamaremos vectores unitarios u$ a a:uellos para los :ue se cumple :ue kuk M %
+os vectores a ! b son orto"onales si cumplen :ue su producto escalar es nulo$ a
2
b M 0 ab%
-i ademas ambos vectores tienen modulo unidad$ se dice entonces :ue los vectores son ortonormales%
+esde el punto de vista de su representacion "eometrica$ dos vectores orto"onales$ forman
entre s un an"ulo recto%
2raza de una matriz% La traza de una matriz cuadrada $ se define como la suma de los elementos
:ue ocupan su dia"onal principal$
n
2 rE6F M
P
a
ii
iM
``
@ @
``
2 r
``
2 2 2
``
M 2 S < M
;
0 3 <
La traza de la suma de dos matrices cuadradas 6 ! 4 del mismo orden$ coincide con la suma
de las trazas de 6 ! 4$
trE6 S 4F M trE6F S trE4F
+ada una matriz 6 de dimension m n ! una matriz 4 de dimension n m$ se cumple :ue$
trE64F M trE46F
=n Matlab$ puede obtenerse directamente el valor de la traza de una matriz$ mediante el
comando trace$
>> 2=/1 3 $
3 & !
! %1
%!0 2 =
1 3 $
3 & !
! %1 %!
>> t=trace,2-
t =
$
+eterminante de una matriz% =l determinante de una matrz 6$ se representa #abitualmente
como |6| o$ en ocasiones como detE6F% &ara poder definir el determinate de una matriz$
necesitamos antes introducir una serie de conceptos previos% =n primer lu"ar$ si consideramos un
escalar como una matriz de un solo elemento$ el determinante sera precsamente el valor de ese
unico elemento$
6 M

a


|6| M
a

-e denomina menor complementario o simplemente menor$ M


i9
del elemento a
i9
de una matriz
6$ a la matriz :ue resulta de eliminar de la matriz 6 la fila i ! la columna 9 a las :ue pertenece
el elemento a
i9
% &or e9emplo$
`
0 2
`
6 M
`
3 2 3
`
$ M
23
M
0 < ;

2


0

0 <

0

M
32
M
3 3
$ M
33
M
3 2

-e denomina cofactor C
i9
de un elemento a
i9
de una matriz 6$ a partir del determinante del
menor complementario del elemento a
i9
como$
C
i9
M EF
iS9
|M
i9
|
&odemos a#ora definir el determinate de una matriz 6 cuadrada de orden n$ empleando la
formula de Laplace$
n
|6| M
P
a
i9
C
i9
9M
o alternativamente$
n
|6| M
P
a
i9
C
i9
iM
=n el primer caso$ se dice :ue se #a desarrollado el determinante a lo lar"o de la fila i% =n el
se"undo caso$ se dice :ue es #a desarrollo el determinante a lo lar"o de la columna 9%
La formula de Laplace$ obtiene el determinante de una matriz de orden n n a partir del c
alculo de los determinantes de los menores complementarios de los elementos de una fila/ n
matrices de orden EnFEnF% 6 su vez$ podramos calcular el determinante de cada menor
complementario$ aplicando la formula de Laplace ! as sucesivamente #asta lle"ar a matrices de
orden 2 2% &ara una matriz 2 2$ si desarrollamos por la primera fila obtenemos su
determinante como$
6 M

a

a
2

a
2
a
22
2
|6| M
P
a
9
C
9
M a

C

S a
2
C
2
9M
M a

EF
S
|M

| S a
2
EF
S2
|M
2
|
M a

a
22
S a
2
a
2
! si desarrollamos por la se"unda columna$

st
6 M

a

a
2

a
2
a
22
2
|6| M
P
a
i2
C
i2
M a
2
C
2
S a
22
C
22
9M
M a
2
EF
S2
|M
2
| S a
22
EF
2S2
|M
22
|
M a
2
a
2
S a
22
a
2
&ara una matriz de dimension arbitraria n n$ el determinante se obtiene aplicando
recursiva1 mente la formula de Laplace$
n n
|6| M
P
a
i9
C
i9
M
P
a
i9
EF
iS9
M
EnFEnF

9M 9M
n

i9
n
EnFEnF P
P
lS5
En2FEn2F
M
i9
%

M
5M
m
l5
C
l5
M
5M
m
l5
EF M
l5

M


M EF
sSt
m
st
6si$ por e9emplo$ podemos calcular el determinante de la matriz$
`
0 2
`
6 M
`
3 2 3
`
0 < ;
desarrollandolo por los elementos de la primera columna$ como$
|6| M EF
2


2 3

S 3 EF
3


0 2

S 0 EF
@


0 2


< ;


< ;


2 3

M EF
2
QE2F ; < 3R S 3 EF
3
Q0 ; < E2FR S 0 EF
@
Q0 3
E2F E2FR M <@
&odemos pro"ramar en Matlab una funcion recurrente :ue calcule el determinante de una
matriz de ran"o n n% E=l metodo no es especialmente eficiente pero$ pero ilustra el uso
de funciones recursivas%
function d=determinante,H-
Eeste programa: calcula el determinante de una matriz empleando la formula
Ede <aplace. <a funcion es recursiva: ,se llama a si misma sucesivamente
Epara calcular los cofactores necesarios-. Besarrolla siempre por los
Eelementos de la primera columna. ,9s un prodigio de ineficiencia numerica:
Epero permite mane)ar bucles y funciones recursivas: asi que supongo que
Epuede ser util para los que empiezan a programar-.
Eun posible e)ercicio para ver lo malo que es el metodo: consiste ir
Eaumentando la dimension de la matriz y comparar lo que lo tarde en
Ecalcular el determinante con lo que tarda la funcion de Hatlab det...
Eprimero comprobamos que la matriz suministrada es cuadrada6
d=(1
/a:b0=size,H-1
if aN=b
disp,*la matriz no es cuadrada: 8ampeon*-
d=/01
else
for i=16a
if a==1
d=H1
else
E9limminamos la fila y columna que toque
"=H,/16i%1 i16a0:!6b-1
E2nadimos el calculo correspondiente al
cofactor d=,%
1-K,i1-IH,i:1-Ideterminante,"-d1
Epause
end
end
end
=n Matlab$ el determinante de una matriz se calcula directamente empleando la funcion det%
6s$ para calcular el determinante de la matriz 6 del e9emplo anterior$
>> 2=/1 ( %!1 3 %! 31 ( '
&0 2 =
1 ( %!
3 %! 3
( ' &
>> da=det,2-
da =
%'$
=ntre las propiedades de los determinantes$ destacaremos las si"uientes$
% =l determinante del producto de un escalar a por una matriz 6 de dimension n n
cumple$
|a 6| M a
n

|6|
2% =l determinante de una matriz es i"ual al de su traspuesta$
|6| M

6
2
3% =l determinante del producto de dos matrices es i"ual al producto de los determinantes$
|6
nn
4
nn
| M |6
nn
| |4
nn
|
Una matriz es sin"ular si su determinante es cero%

=l ran"o de una matriz se define como el tamanVo de la submatriz mas "rande dentro de
6$ cu!o determinante es distinto de cero% 6s por e9emplo la matriz$
`
2 3
`
6 M
`
@ ; <
`
|6| M
0
A > C
=s una matriz sin"ular ! su ran"o es dos$
2
@ ;
M 3 M 0 rE6F M
2
&ara una matriz no sin"ular$ su ran"o coincide con su orden%
=n Matlab se puede estimar el ran"o de una matriz mediante el comando ran+$
>> 2=/1 ! 3
$ & '
. 8
40 2
=
1 ! 3
$ & '
. 8 4
>> r=ran+,2-
r =
!
0nversion% +ada una matriz cuadrada no sin"ular 6 e3iste una unica matriz 6

:ue cumple$
6
nn
6

M 0
nn nn
La matriz 6

recibe el nombre de matriz inversa de 6$ ! puede calcularse a partir de 6 como$
6

M

Qad9E6FR
2
|
6|
+onde ad9E6F es la matriz ad9unta de 6$ :ue se obtiene sustitu!endo cada elemento a
i9
de 6$
por su cofactor C
i9
% 6 continuacion incluimos el codi"o en Matlab de una funcion inversa
:ue calcula la inversa de una matriz% La funcion inversa llama a su vez a la funcion
determinante descrita mas arriba% LB ideal es crear un fic#ero inversa.m :ue inclu!a las
dos funciones una detras de la otra tal ! como aparecen escritas a continuacion% +e este modo$ si
llamamos desde el .or5space de Matlab a la funcion inversa$ esta encuentra siempre el codi"o
de deteminante !a :ue esta contenido en el mimo fic#ero%
function 3=inversa,2-
Eeste programa calcula la inversa de una matriz a partir de definicion
EtQpica6 2K,%1-=/ad),2-0*Jdet,2-
E7e ha includo al final del programa una funcion ,determinante- para
Ecalcular determinantes
ETodo el programa es HD5 A"9SA8A9"T9. 9l unico interes de esto es ensenar que
Elas estructuras basicas de programacion funcionan: y como se ma)enan las
Ellamadas a funciones en Hatlab etc.
E<o primero que hacemos es comprobar si la matriz es cuadrada
Eprimero comprobamos que la matriz suministrada es
cuadrada6 /a:b0=size,2-1
if aN=b
disp,*la matriz no es cuadrada:
8ampeon*- 3=/01
else
Ecalculamos el determinante de 2: si es cero hemos
terminado d2=determinante,2-
if d2==(
EdeberQamos condicionar en lugar de comparar con cero: los errores
Ede redondeo pueden matarnos.... 7i el determinante es proximo a
Ecero
disp,*la matriz es singular: la
pobre*- 3=/0
else
E8alculamos el cofactor de cada temino de 2 mediante un doble
bucle. for i=16a
for )=16b
E8onstruimos el menor correspondinste al elemento ,i:)-
m=2,/16i%1 i16a0:/16)%1 )16b0-
Ecalculamos el cofactor llamando a la funcion determinante
Elo ponemos ya en la posicion que corresponderia a la matriz
Etranspuesta de la ad)unta.
3,):i-=,%1-K,i)-Ideterminante,m-
end
end
end
end
ETerminamos la operacion dividiendo por el determinante de
2 3=3Jd2
end
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
E2qu
incluimos la funcion determinante: asUQ la funcion inversa: no tiene
Eque ir a buscarla a ningun sitio ya que esta incluida en su mismo Efichero
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
function d=determinante,H-
Eeste programa: calcula el determinante de una matriz empleando la formula
Ede <aplace. <a funcion es recursiva: ,se llama a si misma sucesivamente
Epara calcular los cofactores necesarios-. Besarrolla siempre por los
Eelementos de la primera columna. ,9s un prodigio de ineficiencia numerica:
Epero permite mane)ar bucles y funciones recursivas: asi que supongo que
Epuede ser util para los que empiezan a programar-.
Eun posible e)ercicio para ver lo malo que es el metodo: consiste ir
Eaumentando la dimension de la matriz y comparar lo que lo tarde en
Ecalcular el determinante con lo que tarda la funcion de Hatlab det...
Eprimero comprobamos que la matriz suministrada es cuadrada6
d=(1
/a:b0=size,H-1
if aN=b
print,*la matriz no es cuadrada: 8ampeon*-
d=/01
else
for i=16a
if a==1
d=H1
else
E9limminamos la fila y columna que toque
"=H,/16i%1 i16a0:!6b-1
E2nadimos el calculo correspondiente al
cofactor d=,%
1-K,i1-IH,i:1-Ideterminante,"-d1
Epause
end
end
end
end
Como siempre$ Matlab inclu!e una funcion propia inv para calcular la inversa de una matriz$
2 =
1 ( %!
3 %! 3
( ' &
>> 2A=inv,2-
2A =
(.$3.& (.18.& (.('!&
(.!3$$ %(.(.81 (.1$('
%(.!813 (.(438 (.(313
>> 2I2A
ans =
1.(((( ( (
( 1.(((( (
%(.(((( (.(((( 1.((((
6lternativamente$ podemos calcular la inversa$ directamente como 2K %1$
>> 2A=2K%1
2A =
(.$3.& (.18.& (.('!&
(.!3$$ %(.(.81 (.1$('
%(.!813 (.(438 (.(313
6l"unas propiedades relacionadas con la inversion de matrices son$
% 0nversa del producto de dos matrices$
E6 4F

M 4


6

;%3% B&=?6+B?=- ,=C2B?06L=- C;


%
23%
0.53%
13%
%
2
2% +eterminante de la inversa$

6


M |6|

3% Una matriz es orto"onal si su inversa coincide con su transpuesta$


6

M 6
2
;%3% Bperadores vectoriales
=n esta seccion vamos a estudiar el efecto de las operaciones matriciales$ descritas en la seccion
anterior$ sobre los vectores% =mpecemos por considerar el producto por un escalar p a% =l
efecto fundamental es modificar el modulo del vector$
`
a

` `
pa

`
: :
p
`
a
2
`
M
`
pa
2
`
||p
a|| M
p
2
a
2
S p
2
a
2
S p
2
a
2
M |
p|
a
2
S a
2
S a
2
M |p| ||
a||
a
3
pa
3
2 3 2 3
ser
(raficamente$ si alp#a es un numero positivo ! ma!or :ue la unidad$ el resultado del
producto un vector mas lar"o :ue a con la misma direccion ! sentido% -i por el contrario$ p es
menor :ue
la unidad$ el vector resultante ser mas corto :ue a% &or ultimo si se trata de un numero
ne"ativo$
a los resultados anteriores se anVade el cambio de sentido con respecto a a% La fi"ura ;%@
muestra "raficamente un e9emplo del producto de un vector por un escalar%
6
5
4
3
2
1
0
1
2
3
2 1 0 1 2 3 4
%
1
*i"ura ;%@D efecto del producto de un escalar por un vector
ador$9uan%9ime
/0.5.
0.5%/. %
. 0.5.
%0.5.
%0.5.
x
2
Combinacion lineal% Combinando la suma de vectores$ con el producto por un escalar$
podemos "enerar nuevos vectores$ a partir de otros$ el proceso se conoce como combinacion
lineal$
c M p a S k b S
S Nz
6s el vector c sera el resultado de una combinacion lineal de los vectores a$ b
z% +ado un con9unto de vectores$ se dice :ue son linealmente independientes entre s$ si no es
posible poner a unos como combinacion lineal de otros$
p a S k b S S Nz M 0 p M k M
M N M 0
=s posible e3presar cual:uier vector de dimension n como una combinacion lineal de n
vectores linealmente independientes%
-upon"amos n M 2$ cual:uier par de vectores :ue no esten alineados$ pueden "enerar todos los
vector de dimension 2 por e9emplo$

3


M p


S k


3
2
2
La fi"ura ;%; muestra "raficamente estos dos vectores ! al"unos de los vectores resultantes de
combinarlos lineamente%
3
2
1
0
1
2
3
3 2 1 0 1 2 3
x
1
*i"ura ;%;D ?epresentacion "rafica de los vectores a M E$ 2F$ b M E$ F ! al"unos vectores$
combinacion lineal de a ! b%
-i tomamos como e9emplo n M 3$ cual:uier con9unto de vectores :ue no esten contenidos en
el mismo plano$ pueden "enerar cual:uier otro vector de dimension 3% &or e9emplo$
`
3

`
`

` `
2
` ` `

`
3
2
`
M p
`
2
`
S k
`
0
`
S q
`

`
3
3

ador$9uan%9imene
x
3
La fi"ura ;%< muestra "raficamente estos tres vectores ! el vector resultante de su combinacion
lineal$ con p M $ k M 0$; ! q M % =s facil ver a partir de la fi"ura :ue cual:uier otro vector
de dimension 3 :ue :ueramos construir puede obtenerse a partir de los vectores a$ b ! c%
%/0.5./

%
1
0.5
0
0.5
1
2
1.5
1
0.5
.
0
0.5
x
2
1
1.5
1
2
0.5
1
0.5
0
x
1
*i"ura ;%<D ?epresentacion "rafica de los vectores a M E$ 2$ F$ b M E2$ 0$ F$ c M E$ $ F !
del vector a b S c%
=spacio vectorial ! bases del espacio vectorial% =l con9unto de los vectores de dimension
n Ematrices de orden n F$ 9unto con la suma vectorial ! el producto por un escalar$
constitu!e un espacio vectorial de dimension n%
Como acabamos de ver$ es posible obtener cual:uier vector de dic#o espacio vectorial a partir de
n vectores linealmente independientes del mismo% Un con9unto de n vectores de un espacio vectorial
de dimenson n recibe el nombre de base del espacio vectorial% =n principio es posible encontrar
infinitas bases distintas para un espacio vectorial de dimension n% Ka! al"unas
particularmente interesantes$
4ases orto"onales% Una base orto"onal es a:uella en :ue todos sus vectores son orto"onales
entre s $ es decir cumple :ue su producto escalar es b
i
b
9
M 0$ i M 9% +onde b
i
representa el i1
esimo vector de la base$ B M

b

$ b
2
$ $ b
n

%
4ases ortonormales% Una base ortonormal$ es una base orto"onal en la :ue$ ademas$
los vectores de la base tienen modulo % =s decir$ b
i
b
9
M 0$ i M 9 ! b
i
b
9
M $ i M 9%
Un caso
`
%
`
`
% % 0
`
% %
`
`
` `
particularmente util de base ortonormal es la base canonica$ formada por los vectores$
` `

`
`
`
0
`
` ` `
`
0
`
`

`
` `
`
0
`
`
0
`
`
%
`
`
0
``
`
0
`
`
`
C M c

M
`
0
`
$ c
2
M
`
0
`
$ c
n
M
`
%
`
$ c
n
M
`
%
`
` `
`
%
`
`
` `
` `
`
%
`
` `
` ` ` `
` ` ` `
` ` ` `
`
0 0 0
&odemos considerar las componentes de cual:uier vector como los coeficientes de la combinaci
on lineal de la base canonica :ue lo representa$
`
a

`
`
a
2
`
`

`
`
0
`
`
0
`
`

`
`
0
`
`
0
`
`
0
`
`
0
`
a M
`

`
M a


` `
S a
2

` `
S S a
n
` ` ` `


%
S a
n

%
0 ` `
`
%
`
`
0
`
`
%
`
` ` ` `

` ` ` `
`
a
n
`
` ` ` ` ` ` ` `
` `
`
%
`
a
n
0
`
%
`
0
`

`
0
`
0
`

&or e3tension$ podemos "eneralizar este resultado a cual:uier otra base$ es decir podemos
a"rupar en un vector los coeficientes de la combinacion lineal de los vectores de la base :ue lo
"eneran% &oe e9emplo$ si construimos$ para los vectores de dimension 3 la base$
`` ` ` ` ` ``
` `
B M
`
2
`
$
`
0
`
$
`

`
`
0 2
`
&odemos entonces representar un vector en la base B como$
`

` ` ` ` ` ` `
p
p
`
2
`
S k
`
0
`
S q
`

`
a
B
M
`
k
`
0 2 q
+onde estamos empleando el superndice
B
$ para indicar :ue las componentes del vector a est
an definidas con respecto a la base B%
6s por e9emplo e vector$
`
$2;
`
a
B
M
`
0$3A;
`
0$A;
2endra en la base canonica las componentes$
`
$2;
` `

` `

` `

` `
$;
`
a
B
M
`
0$3A;
`
a M $2;
`
2
`
S 0$3A;
`
0
`
S 0$A;
`

`
M
`
$;
`
0$A; 0 2 $;
La fi"ura ;%A$ muestra "raficamente la relacion entre los vectores de la base canonica C$
los vectores de la base B$ ! el vector a$ cu!as componentes se #an representado en ambas bases%
&odemos aprovec#ar el producto de matrices para obtener las componentes en la base can
onica C de un vector representado en una base cual:uiera B% -i a"rupamos los vectores de la
base B$ en una matriz 4$
orrador$9uan%9imenezY
.%&e 7
.%&e 7
.%&e 7
.%&e %#5#i%
.%&e %#5#i%
.%&e %#5#i%
o(po#e#te 'e %
o(po#e#te 'e %
o(po#e#te 'e %
o(po#e#te 'e %
o(po#e#te 'e %
o(po#e#te 'e %
8etor %
a
B
%
a
*
` ``
` `
%
`
%
.9+:1;0;2<
2
1.8
1.6
% +1.5
1.4
1.2
1
.=+:1;1;1<
37
=+:0;0;1<
% +0.3"5
% +0."5
27
0.8
0.6
37
%
0.4
0.2
>+:1;0;0<
9+:0;1;0<
% +1.5
0
1
0.5
% +1.5
2?
.>+:1;2;0<
1
0.5 1?
0
0.5
0
% +1.125
1
1.5
y
2
2.5
17
1
1.5
0.5
x
*i"ura ;%AD ?epresentacion "rafica del vector a$ en las base canonica C ! en la base B
` `
b
` `
b
` `
b
``
`
b

b
2
b
n
`

`
`
b
2
`
2
`
b
22
`
n
`
b
2n
`
`
b
2
b
22


b
2n
`
` ` ` ` `
%
`
`
%
`
B M b

M
`
b
3
`
$ b
2
M
`
b
32
`
$ b
n
M `
%
`
4 M
`
b
3
b
32
%
`
` ` ` `
` `
` `
` `
`
` `
`
% %
`
`
`
%
` `
%
` `
b
EnFn
`
`
`
% %
b
EnFn
`
b
n
b
n2
b
nn
`
b
n
b
n2


`
b
nn
-upon"amos :ue tenemos un vector a cu!as componentes en la base B son$
`
B
`

a
B
M
`
a
2
`
` `
` `
`
%
`
B
n
&ara obtener las componentes en la base canonica$ basta entonces multiplicar la matriz 4$
por el vector a
B
% 6s en el e9emplo :ue acabamos de ver$

2
`

` `
$2;
` `
$;
`
a M 4 a
B
a M
`
2 0
`

`
0$3A;
`
M
`
$;
`
0 2 0$A; $;
&or ultimo$ una podemos combinar el producto de matrices ! la matriz inversa$ para
obtener las componentes de un vector en una base cual:uiera a partir de sus componentes en otra
base% -upon"amos :ue tenemos dos bases B

! B
2
! un vector a% &odemos obtener las
componentes de a en la base canonica$ a partir de las componentes en la baee B

como$ a M 4


a
B

! a partir de sus componentes en la base B
2
como a M 4
2
a
B
2
% Kaciendo uso de la matriz
inversa$
I sustitu!endo obtenemos$
a M 4

a
B

a
B

M 4

a a M 4
2
a
B
2
a
B
2
M
4

a
a
B

M 4

4
2

a
B
2
a
B
2
M 4

4


a
B

=l si"uiente codi"o permite cambiar de base un vector$ representa "raficamente tanto el


vector como las bases anti"ua ! nueva%
function a3!=cambia#vb,a31:31:3!-
Eeste programa cabia de base un vector de dimension 3 y lo representa en
Erelacion con las bases antigua y nueva.
Evariables de entrada6
Ea31: componentes del vector en la base 1
E31 base representada como una matriz: ,cada columna contiene un vector de
Ela base- 9n la que
est
representado el vector a31
E3!: base representada como una matriz: ,cada columna contiene un vector de
Ela base- en la que se quiere representar el vector a31
E7i solo se incluye un vector y una base: el programa asume que la segunda
Ebase es la canonica 3!=/1 ( (1( 1 (1 ( ( 10
Evariables de salida6
Ea3!: 8omponentes del vector a31 en la nueva base 3!.
Ela funcion hace uso de una funcion auxiliar ,pintavec- incluida al final
Edel fichero para dibu)ar los vectores.
if nargin==!
Easumimos que queremos cambiar el vector de 31 a la base
canonica
E\9s 31 una base sensanta]
if det,31-M=eps
error,*los vectores de la base no son l.
independientes*-
end
a3!=31Ia311
3!=eye,3-1 Ecreamos la base para luego
pintarla... elseif nargin==3
Ecambio de base 31 a 3!
if ,det,31-M=eps-PP,det,3!-M=eps-
end
error,*los vectores de al menos una de las bases no son l.
independientes*-
else
end
Einvertimos la base nueva y multiplicamos por la antigua y por el
Evector para obtener las componentes del vector en la base
nueva. a3!=inv,3!-I31Ia311
error,*el numero de variables de entrada es menor de dos o mayor de tres*-
EBibu)o de los vectores con la funcion
pintavec....
pintavec,31:*r*- Evectores de la base
original xlabel,*x*-
ylabel,*y*-
zlabel,*z*-
grid on
pintavec,3!:*b*- Evectores de la base
nueva for i=163
pintavec,a31,i-I31,6:i-:*+*- Ecomponentes de a31
pintavec,a3!,i-I3!,6:i-:*+*- Ecomponentes de a3!
end
a3c=31Ia311 Erepresentacion del vector en la base
canonica pintavec,a3c:*g*- Evector representado
function pintavec,a:par-
Efuncion auxiliar para pintar vectores... con origen en el origen de
Ecoordenadas ,(:(:(-.
Ela variable a puede ser un vector o una matriz. y par: es una cadena que contiene
los
EtQpicos parametros,color: tipo de lQneaZetc*-. 9l programa considera que
Elos vectores estan siempre definidos como vectores columnas...
d=size,a:!-1 Emiramos cuantas columnas tiene a: cada columna representar un
Evector distinto
if nargin==!
for i=16d
quiver3,(:(:(:a,1:i-:a,!:i-:a,3:i-:(:par-
hold on
else
end
for i=16d
quiver3,(:(:(:a,1:i-:a,!:i-:a,3:i-:(-
end
end
Bperadores lineales% 6 partir de los visto en las secciones anteriores$ sabemos :ue el producto
de una matriz de 6 de orden n n multiplicada por un vector b de dimension n da como
resultado un nuevo vector c M 6 b de dimension n% &odemos considerar cada matriz n n como
un operador
2
lineal$ :ue transforma unos vectores en otros% +ecimos :ue se trata de un operador lineal por:ue
las componentes del vector resultante$ estan relacionadas linealmente con las del vector ori"inal$
por e9emplo para n M 3$
`
!

`
`
a

a
2
a
3
` `
3

`
!

M a

3

S a
2
3
2
S a
3
3
3
`
!
2
`
M
`
a
2
a
22
a
23
`

`
3
2
`
!
2
M a
2
3

S a
22
3
2
S a
23
3
3
!
3
a
3
a
32
a
33
3
3
!
3
M a
3
3

S a
32
3
2
S a
33
3
3
=ntre los operadores lineales$ es posible destacar a:uellos :ue producen transformaciones "eom
etri1 cas sencillas% ,eamos al"unos e9emplos para vectores bidimensionales$
% +ilatacionD aumenta el modulo de un vector en un factor p _ % ContraccionD disminu!e
el modulo de un vector en un factor 0 f p f % =n ambos casos$ se conserva la direccion
! el sentido del vector ori"inal%

p 0

? M
0 p
? a
M

p 0

0 p


a


M
a
2

p a

p
a
2
2% ?efle3ion de un vector respecto al e9e 3$ conservando su modulo$
?
3
M

0

0
?
3
a
M

0

0


a


M
a
2

a


a
2
3% ?efle3ion de un vector respecto al e9e !$ conservando su modulo$
?
!
M

0

0
?
!
a
M

0

0


a


M
a
2

a


a
2
@% ?efle3ion respecto al ori"enD 0nvierte el sentido de un vector$ conservando su modulo !
di1 reccion$
? M

0

0
? a
M

0

0


a


M
a
2

a


a
2
-era e:uivalente a aplicar una refle3ion respecto al e9e 3 ! lue"o respecto al e9e ! o vicerversa$
? M ?
3
?
!
M ?
!
?
3
%
;% ?otacion en torno al ori"en un an"ulo N$

cosENF sinENF

cosENF sinENF

a


M

a

cosENF a
2
sinENF
?
N
M
sinENF cosENF
?
N
a
M
sinENF cosENF

a
2
a

sinENF S a
2
cosENF
La fi"ura ;%> muestra los vectores resultantes de aplicar las transformaciones lineales :ue aca1
bamos de describir al vector$ a M



$
)orma de una matriz % La norma de una matriz se puede definir a partir del efecto :ue produce
al actuar$ como un operador lineal$ sobre un vector% =n este caso$ se les llama normas inducidas%
&ara una matriz 6 de orden m n$ !
EmF
M 6
EmnF
3
EnF
$ La norma inducida de 6 se define
en funcion de las normas de los vectores3 de su dominio ! de las normas de los vectores ! de su
ran"o como$
k6k M ma3
k! k
M ma3
k63k
3M0 k3k 3M0 k3k
@3%, p+1.5
, 3%
, 3%,
N
N+L)6
, 3%,
N
N+L)3
y %+: 1;2<
@3%, p+0.5
,3%
, 3%
x

9
i
y
3
2.5
2
1.5
1
0.5
0
0.5
1
1.5
2
3 2 1 0 1 2 3
x
*i"ura ;%>D 2ransformaciones lineales del vector a M Q/ 2R% +$ dilatacion'contraccion en un
factor
$;'0$;% ?
3
$ refle3ion respecto al e9e 3% ?
!
$ refle3ion respecto al e9e !% ?
N
rotaciones respecto al
ori"en para an"ulos N M L'< ! N M L'3
-e puede interpretar como el factor ma3imo con :ue el :ue la matriz 6 puede alar"ar un
vector cual:uiera% =s posible definir la norma inducida en funcion de los vectores unitarios del
dominio$
k6k M ma3
k63k
M ma3

6
3

M ma3 k63k
3M0
k3k 3M0

k3k k3kM
Junto a la norma inducida :ue acabamos de ver$ se definen las si"uientes normas$
% )orma D -e suman los elementos de cada columna de la matriz$ ! se toma coma norma el
valor ma3imo de dic#as sumas$
m
k6
m$n
k

M ma3
P
a
i9
iM
2% )orma D -e suman los elementos de cada fila ! se toma como norma el valor m
a3imo de dic#as sumas%
m
k6
m$n
k

M ma3
P
a
i9
9M
3% )orma 2D -e define como el ma!or de los valores sin"ulares de una matriz% E,er seccion ;%;%;F%
k6
m$n
k
2
M r

m
m
@% )orma de *robenius% -e define como la raz cuadrada de la suma de los cuadrados de
todos los elementos de la matriz$
v
u
k6
m$n
k
*
M
u
P P
a
2 t
i9
iM 9M
Gue tambien puede e3presarse de forma mas directa como$
:
k6
m$n
k
*
M trE6
2
6F
=n Matlab$ es posible calcular las distintas normas de una matriz$ de modo analo"o a como se
calculan para el caso de vectores$ mediante el comando norm,2:p-% +onde 2$ es a#ora un a matriz
! p especifica el tipo de norma :ue se :uiere calcular% =n el caso de una matriz$ el parametro p
solo puede tomar los valores$ 1 Enorma F$ ! norma 2F$ inf Enorma F$ ! *fro* Enorma de
frobenius% =l si"uiente e9emplo muestra el calculo de las normas $ 2$ inf t! ! de *robenius de la
misma matriz%
>> 2=/1 3 $
&
! & '
%3
1 ( $
30 2 =
1 3 $ &
! & ' %3
1 ( $ 3
>> n1=norm,2:1-
n1 =
1$
>> n!=norm,2:!-
n! =
1.(!!!1.!1$''4'!!e(1
>> ninf=norm,2:inf-
ninf =
1'
>> nfro=norm,2:*fro*-
nfro =
1.!!88!(&.!.$$$&1e(1
*ormas cuadraticas% -e definen como forma cuadratica a la si"uiente operacion entre
una matriz cuadrada 6 de orden n n ! un vector b de dimension n$
p M b
2
6 b$ p
?
=l resultado es un escalar% 6s por e9emplo$
`
2
`
`

` `
2
` `

`
6 M
`
2 0 2
`
$ b M
`
2
`


2 3


`
2 0 2
`

`
2
`
M 2
3 2 2
&ara dimension n M 2$

a

a
2

3

a


3 2 2 3
2 2
p M

b

b
2

a
2
a
22

a
2
3
3
p M a

3

S Ea
2
S a
2
F3

3
2
S a
22
3
2
rrador$9uan%9imenez
x
3
x
3
x
x
3
3
2
2
2
2
% A0. % A0
% B0, % A0
11 22 11 22
2 1
1.5
0.5
1 0
0.5
0.5
0
1
0
0
x 1
1 x
1
1
1
1 1
0
0
x 1
1 x
1
% A0, % B0
% B0, % B0
11 22 11 22
1 0
0.5
0.5
0 1
0.5
1.5
1
1
0
0
x 1
1 x
1
2
1
1 1
0
0
x 1
1 x
1
*i"ura ;%CD *ormas cuadraticas asociadas a las cuatro matrices dia"onalesD |a

| M |a
22
| M
$
a
2
M a
2
M 0
Lo :ue obtenemos$ dependiendo de los si"nos de a

! a

2$ es la ecuacion de un paraboloide
o un #iperboloide% =n la fi"ura ;%C -e muestra un e9emplo$
,eamos brevemente$ al"unas propiedades relacionadas con las formas cuadraticas$
% Una matriz 6 de orden nn se dice :ue es definida positiva si da lu"ar a una forma cuadratica
:ue es siempre ma!or :ue cero para cual:uier vector no nulo$
3
2
6 3 _ 0$ 3
M 0
2% Una matriz simetrica es definida positiva si todos sus valores propios Ever seccion ;%;%3F
son positivos%
3% Una matriz no simetrica 6 es definida positiva si su parte simetrica 6
s
M E6 S 6
2
F'2 lo
es%
3 6
s
_ 0$ 3 M 0 3 6 _ 0$
3 M 0
% %
`
;%@% 2ipos de matrices empleados frecuentemente
+efinimos a continuacion al"unos tipos de matrices frecuentemente empleados en al"ebra$ al1
"unos !a #an sido introducidos en secciones anteriores% Los reunimos todos a:u para facilitar
su consulta
% Matriz orto"onalD Una matriz 6
nn
es orto"onal cuando su inversa coincide con su traspuesta%
6
2
M 6

e9emplo$
`
'3 2'3 2'3
` `
0 0
`
6 M
`
2'3 2'3 '3
`
6 6
2
M 6
2
6 M
`
0 0
`
2'3 '3
2'3
0 0
2% Matriz simetricaD Una matriz 6
nn
es simetrica cuando es i"ual :ue su traspuesta$
6 M 6
2
a
i9
M a
9i
e9emplo$
`
2 3
`
6 M
`
2 @ 0
`
3 0 ;
3% Matriz +ia"onalD Una matriz 6 es dia"onal si solon son distintos de ceros los elementos de
su dia"onal principal$
`
a

0 0
`
`
0 a
22
0
`
` `
`
%
%
%
0
` a
i9
M 0$ i M 9
`
0 0
a
nn
@% Matriz trian"ular superiorD Una matriz es trian"ular superior cuando todos los elementos
situados por deba9o de la dia"onal son cero% =s e3trictamente dia"onal superior si adem
as los de elementos de la dia"onal tambien son cero$
2 ?- a
i9
M 0$ i
9
=2 ?- a
i9
M 0$ i _ 9
e9emplos$
`
3 A
`
2 ?- M
`
0 2
`
0 0 @
`
0 3 A
`
=2 ?- M
`
0 0
`
0 0 0
;%;% *6C2B?0W6C0B

) +=
M62?0C=-
20A
2
;% Matriz trian"ular inferiorD Una matriz es trian"ular inferior si todos los elementos pro encima
de su dia"onal son cero% =s e3trictamente trian"ular inferior si ademas los elementos de su
dia"onal son tambien cero$
e9emplos$
2 ?- a
i9
M 0$ i
9
=2 ?- a
i9
M 0$ i f 9
`
0 0
`
2 ?- M
`
3
A
2

0
`
@
`
0 0 0
`
=2 ?- M
`
3 0 0
`
A 0
<% Matriz definida &ositiva% Una Matriz 6
nn
es definida positiva si dado un vector 3 no nulo
cumple$
si$
3
2
6 3 _ 0$ 3 M 0
3
2
6 3 0$ 3 M 0
=ntonces la matriz 6 es semidefinida positiva%
A% Una matriz es +ia"onal dominante si cada uno de los elementos de la dia"onal en valor
absoluto es ma!or :ue la suma de los valores absolutos de los elementos de fila a la :ue
pertenece%
e9emplo$
|a
ii
| _
P
|a
i9
|$
i
9Mi
`
0 2 3
`
6 M
`
2 ;
`

@ 2 >
`
0 _ 2 S 3 `
`
; _ 2 S
`
`
> _ @ S 2
;%;% *actorizacion de matrices
La factorizacion de matrices$ consiste en la descomposicion de una matriz en el producto
de dos o mas matrices% Las matrices resultantes de la factorizacion se eli"en de modo :ue
simpli1 fi:uen$ o #a"an mas robustas numericamente determinadas operaciones matricialesD
Calculos de determinantes$ inversas$ etc% 6 continuacion se describen las mas comunes%
;%;%% *actorizacion LU
Consiste en factorizar una matriz como el producto de una matriz trian"ular inferior L por una
matriz trian"ular superior U $ 6 M L U % &or e9emplo$
`
3 @ 2
` `
0 0
` `
3 @ 2
`
`
2 0
`
M
`
'
3
0
`

`
0
>
'
3

'
3
`
3 2
3
'
@
0 0
3
'
@
6 M
`
`
`
`
`
`
`
`
Una aplicacion inmediata$ es el calculo del determinante% &uesto :ue el determinante de una matriz
trian"ular$ es directamente el producto de los elementos de la dia"onal%
=n el e9emplo anterior$
> 3
|6| M < |L| |U | M 3 E
3
F M < E
@
F
Uno de los metodos mas conocidos para calcular la factorizacion LU de una matriz$ se
basa en el metodo conocido como eliminacion "ausiana% La idea es convertir en ceros los
elementos situados por deba9o de la dia"onal de la matriz% &ara ello$ se sustitu!en
pro"resivamente las filas de la matriz$ e3ceptuando la primera$ por combinaciones formadas con la
fila :ue se sustitu!e ! la fila anterior% veamos en :ue consiste con un e9emplo% -upon"amos :ue
tenemos la si"uiente matriz de orden @ @$
`
3 @ 2 ;
`
`
2 0 2
`
`
3 2 >
`
` `
; 2 3 2
-i sustitumos la se"unda fila por el resultado de restarle la primera multiplicada por 2 ! dividida
por 3 obtendramos la matriz$
`
3 @ 2 ;
` `
3 @ 2 ;
`
6 M
`
2 0 2
`
2
`
0 2$< 0$33 ;$33
`
` `
Q2 0 2R

Q3 @ 2 ;R U

M
` `
`
3 2 >
`
3
; 2 3 2
`
3 2 >
`
; 2 3 2
+e modo analo"o$ si sustituimos a#ora la tercera fila por el resultado de restarle la primera
multiplicada por 3 ! dividida 3$
`
3 @ 2 ;
`
3
`
3 @ 2 ;
`
0 2$< 0$33 ;$33
U

M
`
0 2$< 0$33 ;$33
` ` `
`
3 2 >
; 2 3 2
`
Q3 2 >R
3
Q3 @ 2 ;R U

M
`
0 2 3
`
; 2 3 2
&or ultimo si sustituimos la ultima fila por el resultado de restarle la primera multiplicada por
; ! dividida por 3$
`
3 @ 2 ;
` `
3 @ 2 ;
`
; 0 2$< 0$33 ;$33
U

M
`
0 2$< 0$33 ;$33
` ` `
`
0 2
3
`
Q; 2 3 2R
3
Q3 @ 2 ;R U

M
`
0 2 3
`
; 2 3 2 0 @$ << 0$33 <$33
=l resultado :ue #emos obtenido$ tras realizar esta transformacion $ es una nueva matriz U
en la :ue todos los elementos de su primera columna$ por deba9o de la dia"onal$ son ceros%
&odemos proceder de modo analo"o para eliminar a#ora los elementos de la se"unda columna
situados por deba9o de la dia"onal% &ara ellos sustitimos la tercera fila por la diferencia entre ella
! las se"unda fila multiplicada por 2 ! dividida por 2$<%
`
`
`
`
`
`
`
`
`
`
`
`
`
3 @ 2 ;
`
2
U

M
`
0 2$< 0$33 ;$33
`

`
0 2
3
`
Q0 2 3R

2$<
Q0 2$< 0$33 ;$33 R
0 @$ << 0$33 <$33
`
3 @ 2 ;
`
U2 M
`
0 2$< 0$33 ;$33
`
`
0 0 0$A; A
`
0 @$<< 0$33 <$33
I sustitu!endo la ultima fila por la diferencia entre ella ! la se"unda multilicada por @$<<
! dividida por 2$<$
`
3 @ 2 ;
`
@$<<
U
2
M
`
0 2$< 0$33 ;$33
`

`
0 2
3
`
Q0 @$<< 0$33 <$33R

2$<
Q0 2$< 0$33 ;$33 R

0 @$ << 0$33 <$33


`
3 @ 2 ;
`
U2 M
`
0 2$< 0$33 ;$33
`
`
0 0 0$A; A
`
0 0 0$2; 3
+e este modo$ los elementos de la se"unda columna situados deba9o de la dia"onal$ #an sido
sustituidos por ceros% Un ultimo paso$ nos llevara #asta una matriz trian"ular superior/
sustituimos la ultima fila por la diferencia entre ella ! la tercera fila multiplicada por 0$2; !
dividida por 0$A;$
`
3 @ 2 ;
`
0$2;
U
2
M
`
0 2$< 0$33 ;$33
`
`
0 0 0$A; A
0 0 0$2; 3
`
3 @ 2 ;
`
Q0 0 0$2; 3R
`
0$A;
Q0 0 0$A; A R
U3 M
`
0 2$< 0$33 ;$33
`
M U
`
0 0 0$A; A
`
0 0 0 ;$33
&odemos a#ora$ a partir del e9emplo$ deducir un procedimiento "eneral% &ara eliminar
convertir en 0 el elemento a
i9
situado por deba9o de la dia"onal principal$ i _ 9D
% +ividimos los elementos de la fila 9 por el elemento de dic#a fila :ue a su vez pertenece a la
dia"onal$ a
99

0'a
99
0'a
99
a
99
'a
99
a
99S
'a
99


2% Multiplicamos el resultado de la operacion anterior por el elemento a
i9
$

a
i9
0'a
99
a
i9
0'a
99
a
i9
a
99
'a
99
a
i9

a
99S
'a
99


3% *inalmente$ sustituimos la fila i de la matriz de partida por la diferencia entre ella ! el
resultado de la operacion anterior%

0 0 a
i9
a
i9S


a
i9
0'a
99
a
i9
0'a
99
a
i9
a
99
'a
99
a
i9
a
99S
'a
99


` `
=ste procedimiento se aplica iterativamente empezando en por el elemento a
2
de la matriz !
desplazando el computo #acia aba9o$ #asta lle"ar a la ultima fila ! #acia la derec#a #asta lle"ar
en cada fila al elemento anterior a la dia"onal%
=l si"uiente codi"o aplica el procedimiento descrito a una matriz de cual:uier orden$
function D=eligauss,2-
E9sta funcion obtiene una matriz triangular superior: a partir de una
Ematriz dada: aplicando el metodo de eliminacion gaussiana.
E"o realiza piboteo de filas:
as
que si algun elemento de la diagonal de 2
Equeda cero o proximo a cero al ir eliminado darUa problemas...
ECbtenemos el numero de filas de la
matriz.. nf=size,2:1-1
D=2
E
for )=16nf%1 Erecorro todas la columnas menos la ultima
for i=)16nf ELecorro las filas desde deba)o de la diagonal hasta la ultima
Een Hatlab tengo la suerte de poder mane)ar cada fila de un solo
Egolpe.
D,i:6-=D,i:6-%D,):6-ID,i:)-JD,):)-
end
end
Kasta a#ora$ #emos descrito un procedimiento para transformar una matriz cual:uiera en una
matriz trian"ular superior% )uestro ob9etivo era obtener la descomposicion de un matriz en
el producto de dos$ una trian"ular inferior ! otra trian"ular superior% =n primer lu"ar$
podemos asociar el procedimiento descrito de eliminacion "ausiana al producto de matrices
,olviendo al e9emplo anterior$ si construimos la matriz s

`
0 0 0
`
s M
`
2'3 0 0
`
` `
`
3'3 0 0
`
;'3 0 0
$ =l producto s

6 da como resultado la matriz$
`
3 @ 2 ;
`
`
0 0 0
` `
3 @ 2 ;
`
U M
`
0 2$<< 0$33 ;$33
`
M
`
2'3 0
0
`
`
2 0 2
`
`
0 2 3
` `
3'3 0 0
` `
3 2 >
`
` `
0 @$<< 0$33 <$33
+e modo analo"o$ U
2
M s
2
U

`
;'3 0 0
`

` `
; 2 3 2
`
0 0 0
`
s
2
M
`
0 0 0
`
`
0 2'2$<< 0
`
` `
0 @$<<'2$<< 0
`
3 @ 2 ;
`
U2 M
`
0 2$< 0$33 ;$33
`
`
0 0 0$A; A
`
0 0 0$2; 3
0 0
0
0
`
0 0
`
% %
% %
`
9
s
9
9
`
`
`
% % %
% % %
% `
&or ultimo$ U M s
3
U
2
`
0
`
s
3
M
`
0 0
`
`
0 0 0$2;'0$A;
`
3 @ 2 ;
`
U M
`
0 2$<< 0$33 ;$33
`
`
0 0 0$A; A
`
0 0 0 ;$33
+e nuevo$ podemos "eneralizar el procedimiento empleado/ cada matriz s
9
elimina todos los
elementos de la columna n de una matriz 6 $ situados por deba9o de la dia"onal% La matriz s
9
toma la forma "eneral$
`
0 0 0 0
`
` `
` `
`
0 0 0 0
`
` `
`
0 0 0 0
`
s
9
M
` `
`
0 0 a
9S$9
'a
99
0 0
`
` `
`
0 0 a
9S2$9
'a
99
0
`
` `
` `
`
`
0 0 a
n$9
'a
99
0
-olo los elementos de la dia"onal$ :ue toman el valor $ ! los elementos de la columna 9 situados
por deba9o de la dia"onal son distintos de cero%
6 partir de la definicion de las matrices s
9
$ podemos obtener una relacion entre la
matriz trian"ular superior U obtenida al final del proceso de eliminacion$ ! la matriz inicial 6
de orden n n para ello$ en cada paso multiplicamos por tanto por s
9
como por su inversa s

$
U

6 M s


z
s
bc
6
d

U
2
6 M s

s


z
s2
b
s
c
6
d
2

U
3
6 M s

s


z
bc d
s s
2 3
%
3
s
2
6
U
6 M s

s

s

s

s
z
n s3
bc
s2 s 6
d
2 3 n

Las matrices s

tienen dos propiedades :ue las #acen particularmente faciles de mane9arD la
primera es :ue cumplen :ue su inversa s

puede obtenerse a partir de s
9
$ sin mas :ue
cambiar
% %
%
%
`
L M
%
`
%
`
% % %
%
%
%
% `
% % % %
% % % %
% `
de si"no los elementos distintos de cero :ue no pertenecen a la dia"onal ECompruebaloF$
`
0 0 0 0
`
` `
` `
`
0 0 0 0
`
` `
`
0 0 0 0
`
s

` `
9
M
`
0 0 a
9S9
'a
99
0 0
`
` `
`
0 0 a
9S29
'a
99
0
`
` `
` `
`
`
0 0 a
n9
'a
99
0
La se"unda propiedad es :ue el producto L M s

s

s

s

$ se puede obtener
pro"resi1
2 3 n
vamente$ a la vez :ue se constru!e U $ sin mas :ue ir 9untando en una unica matriz L las
columnas de s

$ s

$ etc :ue contienen elementos no nulos$ en nuestro e9emplo$ 2
`
0 0 0
`
`
2'3 0 0
`
`
3'3 2'2$<< 0
`
` `
!$ en "eneral$
`
;'3 @$<<'2$<< 0$2;'0$A;
0 0 0
0
`
` `
` `
`
a
9
'a
0 0
0
`
`
`
L M
`
`
a
9
'a

a
99
'a
99
0
0
`
`
a
9S
'a

a
9S9
'a
99
a
9S9
'a
99
0
0
`
` `
`
a
9S
'a
a
9S29
'a
99
a
9S29
'a
99

0
`
` `
` `
`
`
a
n
'a

a
n9
'a
99
a
n9
'a
99
a
n9S
'a
9S9S

&or construccion$ la matriz L es una matriz inferior$ Con lo :ue :uedara completo el c
alculo de la factorizacion LU$
L
6 M
z bc d
U
z bc d
s


s
2
s
3
s
n
s
n
s
3
s
2
s

6 M L U
La factorizacion :ue acabamos de describir$ puede presentar problemas numericos dependiendo
del como sea la matriz :ue se desea factorizar% =l primer problema se produce cuando el el elemento
de la dia"onal de u
99
por el :ue #a! :ue toca didivir para eliminar los elementos de la columna 9
situados por deba9o de la dia"onal es 0% =n ese caso el ordenador dara un error de
desbordamiento ! no se puede se"uir factorizando% =l se"undo problema sur"e cuando los elementos
de la matriz son dispares en ma"nitud/ las operaciones matematicas realizadas durante el proceso
de factorizacion pueden dar lu"ar a errores de redondeo importantes :ue #a"an :ue incorrecto el
resultado de la factorizacion% ,eamos un e9emplo un tanto e3tremo$

0
20


L
z

bc
0

d
U
z

0

bc

0
20

d
L
z

bc
0

d
U
z

0
20
bc


d

M
0
20

0
20


M
0
20

0 0
20
`
0 0
` `
2 ; 3
` `
3 < 2
`
0 0
`

`
@
2 3 0
`
M
`
@ 2 3 0
0 0 3 < 2 2 ; 3
Como el eps del ordenador es del orden de 0
<
$ es despreciado frente 0
20
% =s decir$
E 0
20
F 0
20
$ non lo cual el ordenador tendra una version apro3imada de U

0
20

U U
g
M
0 0
20
&ero si a#ora volvemos a multiplicar L U para recuperar 6$

0

0
20


0
20


L U
g
M
0
20


0
0
20
M
0
M 6
Una manera de paliar los efectos de redondeo$ es reordenar las filas de la matriz de modo :ue el
elemento a
99
por el :ue se va a dividir los elementos de la fila 9 en el proceso de elimininacion
sea lo ma!or posible% =ste procedimiento se conoce con el nombre de pivoteo de filas% &ara el
e9emplo :ue acabamos de e3aminar$ supon"amos :ue cambiamos de orden las dos filas de la
matriz$

0
20







0
20

-i recalculamos la factorizacion LU$ para la nueva matriz con la filas intercambiadas$





L
z

bc
0

d
U
z

0

bc


d
L
z

bc
0

d z

U
bc


d
0
20

M
0
20

0
20

0
20

M
0
20

0 0
20
+e nuevo$ por errores de redondeo el ordenador tendra una version apro3imada de U %



U U
g
M
0

-in embar"o si recalculamos el producto L U


g
! volvemos a reordenar las filas del
resultado$
L U
g
M

0

0
20




0
M


0
20
S
0
20

0
20
S 0
20




6
La permutacion de las filas de una matriz 6 de orden nm$ se puede definir a partir del producto
con las matrices de permutacion de orden n n% =

stas se obtienen permutando directamente
las filas de la matriz identidad 0
nn
% -i una matriz de permutaciones multiplica a otra matriz
por la iz:uierda$ permuta el orden de sus filas% -i la multiplica por la derec#a% permuta el orden
de sus columnas% 6s por e9emplo$ para matrices de orden 3 n$
`
0 0
`
`
0 0
`
0
nn
M
`
0 0
`
&
3
M
`
0 0
`
0 0 0 0
-i multiplicamos &
3
con cual:uier otra matriz 6 de orden 3 n$ =l resultado es
e:uivalente a intercambiar en la matriz 6 la fila con la 3% &or e9emplo
&
3
6
M
`
`
M 6
3
,olvamos al calculo de la factorizacion LU$ pero a#ora empleando pivoteo de filas% -upon"amos
una matriz 6 de orden n n
i
s
0
i
=l primer paso$ es buscar el elemento ma!or en valor absoluto de la primera columna en
intercambia la primera fila de la matriz de 6$ con la fila :ue contiene dic#o elemento% -i utilizamos
la matriz de permutacion adecuada$ esto puede e3presarse como$
6 &


6
6 continuacion eliminamos los elementos de la primera fila situados por deba9o de la dia"onal$
6 &

6 s

&

6
,olvemos a buscar el ma!or elemento en valor absoluto para la se"unda columna E-olo desde la
dia"onal #asta el ultimo elemento de la columnaF%
6 &

6 s

&

6 &
2
s

&

6
=liminamos los elementos de la se"unda fila situados por deba9o de la dia"onal$
6 &

6 s

&

6 &
2
s

&

6 s
2

&
2
s

&

6
-i se"uimos todo el proceso #asta eliminar los elementos situados por deba9o de la dia"onal en
la fila n $ obtendremos la e3presion de la matriz trian"ular superior U resultante$
s
n
&
n
s
n2
&
n2
s
2
&
2
s

&

6 M U
6un:ue #emos obtenido U $ necesitamos una manera de obtener L$ a#ora no es inmediato como
en el caso de la factorizacion sin pivoteo$ no basta con invertir las matrices s
i
!a :ue tenemos
por medio todas las matrices de permutacion utilizadas% &ara obtenerla realizaremos la si"uiente
transformacion$
s
n
&
n
s
n2
&
n2
s
2
&
2
s

&

6 M
s
0 0
0 0
n
n2 2 n
s
n2
s
2
s

& &
& & 6
+onde las matrices s
0
pueden obtenerse a partir de las matrices s
i
! de las matrices de
per1 mutacion de la manera si"uiente$
n
M s
n
s
0
n2
M &
n
s
n2
&
n
s
0
n3
M &
n
&
n2
s
n3
&
n2
&
n
%
s
0


5
M &
n
&
n2
&
5S
s
5
&
5S
&
n2
&
n
%
s
0


2
M &
n
&
n2
&
3
s
2
&
3
&
n2
&
n
s
0



M &
n
&
n2
&
3
&
2
s

&
2
&
3
&
n2
&
n
Matematicamente el calculo de las matrices s
0
re:uiere calcular el producto de un "ran nu
mero de matrices% -in embar"o dic#o calculo es e:uivalente a permutar los elementos de s
i
situados por deba9o de la dia"onal% 6s &or e9emplo para$
0 0 0
` `
0 0
0
2 0
`
`
`
0 0
`
0
`
0
bc d
z
6 M
`
U

s
2
M
`
0
`
0
`
0 0
`
$ &
3
M
`
0 0
`
`
0 3 0
0 0 0
`
0 0 0
`
s
0
`
0
0 0
`
`
0 0 0
`
`
0 0 0
`
`
0 0 0
`
`
0 0 0
`
`
0 0 0
`
`
0 0 0
`
` ` `
`

` `
M
`
`
2
M &
3
s
2
&
3
`
0 0 0
`

`
0 2
0
`
`
0 0 0
` `
0 3 0
`
0 2 0
0 0 0 0 3 0 0 0 0
&or ultimo podemos representar el producto de todas las matrices de permutacion como
una sola matriz$ &
n
&
n2
&
2
&

M & % E=l producto de matrices de permutacion entre
s$ da como resultado una nueva matriz de permutacion%
+e esta manera$ la factorizacion LU con pivoteo de filas podramos representarla como & 6
M
L U $
&
L
U
z bc d
z
&
n
&
& & 6 M s
0
s
0 2
s
0
s
0
s
n
& s
&
bc
s & s & 6
d
n2 2

2 n2 n

n
n2 n2 2 2
Como e9emplo$ vamos a volver a calcular la factorizacion LU de la matriz$
`
3 @ 2 ;
`
`
2 0 2
`
`
3 2 >
`
` `
; 2 3 2
&ero empleando a#ora pivoteo de filas%
=n primer lu"ar buscamos el elemento de la primera columna ma!or en valor absoluto% =n esta
caso es el ultimo elemento de la columna por lo :ue intercambiamos la primera fila con la
cuarta$
`
0 0 0
` `
3 @ 2 ;
`
`
; 2 3 2
`
& 6 M
`
0 0 0
` `
2 0 2
`
M
`
2 0 2
`
`
0 0 0
` `
3 2 >
` `
3 2 >
`
`
0 0 0
` ` `
; 2 3 2
` `
3 @ 2 ;
=liminamos a#ora los elementos de la primera columna situados por deba9o de la dia"onal$
`
0 0 0
`
`
; 2 3 2
` `
; 2 3 2
`
s
z


b
&
c
6
d
M
`
2';
0 0
`
`
2 0 2
` `
0 0$> 0$2 2$>
`
`
3'; 0 0
`

`
3 2 >
`
M
`
0 0$> 0$> <$>
`

` `
3'; 0 0
` `
3 @ 0 ;
` `
0 2$> 0$2 3$>
&ara eliminar los elementos de la se"unda columna$ repetimos los mismos pasos% =l elemento
ma!or de la se"unda columna de U

es a#ora 2$>$ por tanto intercambiamos entre s la se"unda
! la cuarta fila$
U
`
0 0 0
` `
; 2 3 2
` `
; 2 3 2
`
&2 s
z

b
&
c
6
d
M
`
0 0 0
`

`
0 0$> 0$2 2$>
`
M
`
0 2$> 0$2
3$>
`

`
0 0 0
` `
0 0$> 0$> <$>
` `
0 0$> 0$> <$>
`
` ` ` ` ` `
0 0 0
0 2$> 0$2 3$> 0 0$> 0$2 2$>
2 3 2
2$> 0$2 3$>
0 0
0 0
0 0
0 0
3'; 0
3'; 0$>'2$>
0 0
0 0
0
i
`

`
0
`
0
0
2
`
`
`
`
6 continuacion$ eliminamos los elementos de la se"unda columna situados por deba9o de la dia"onal$
U
`
0 0 0
` `
; 2 3 2
` `
; 2 3 2
`
z
s2 &2
b
s
c
&
6
d
M
`
0 0 0
`

`
0 2$> 0$2 3$>
`
M
`
0 2$> 0$2 3$>
`

`
0 0$>'2$> 0
` `
0 0$> 0$>
<$>
`
`
0 0 0$>; ;$A
`
` ` ` ` ` `
0 0$>'2$> 0
0 0$> 0$2
2$>
0 0 0$@ $A
&ara eliminar el elemento :ue :ueda deba9o de la dia"onal en la tercera columna$ procedemos
i"ual :ue para las columnas anteriores% Como en este caso$ el elemento situado en la dia"onal es
ma!or en valor absoluto no es preciso permutar% E+esde un punto de vista formal$ podramos
decir :ue en este caso la matriz de permutaciones aplicada es la matriz identidadF%
U
`
0 0 0
` `
; 2 3 2
`
s
z
3 s2 &
bc
s & 6
d
M
`
0 0 0
`

`
0 2$> 0$2 3$>
`
2

`
0 0
0
`
`
0 0 0$>; ;$A
`
` `
0 0 0$@'0$>;
` `
0 0 0$@ $A
`
;
M
`
0
`
`
M U
`
0 0 0$>; ;$A
`
` `
0 0 0 2$<<
Como #emos visto$ la matriz s
0
las obtenemos a partir de s
i
$ permutando los elementos
situados por deba9o de la dia"onal$ distintos de cero% =n nuestro e9emplo solo #a! matriz s

afectada por una unica permutacion &
2
$
`
0 0 0
`
s
0
`
3';
`

M
`
3';
`
2';
&ara el resto$ s
0
M s
2
! s
0
M s
3
% &ara obtener la matriz L cambiando los si"nos a los elementos
2 3
situados por deba9o de la dia"onal de s
0
$ s
2
! s
3
$ ! los a"rupamos en una unica matriz$
`
0
`
L M
`
0
`
`
2'; 0$>'2$> 0$@'0$>;
&or ultimo debemos multiplicar las matrices de permutaciones para a"ruparlas en una sola$
`
0
`
& M &
2
&

M
`

0
`
` `
0 0 0
=s trivial comprobar :ue las matrices obtenidas cumplen
2
& 6 M L U %
=l si"uiente codi"o calcula la factorizacion LU de una matriz de orden arbitrario con pivoteo
de filas%
2
Los valores numerico empleados en el te3to$ estan redondeados$ por tanto dan una solucion incorrecta%
-i se reproducen las operaciones descritas en Matlab el resultado es muc#o mas preciso%
function /<:D:=0=lufact,2-
Eeste programa calcula una factorizacion<D: de la matrix 2: empleando
Eel metodo de eliminacion gaussiana con pivoteo de filas...
E< es una matriz triangular inferior: D es una matriz triangular superior y
E= es una matriz de permutaciones tal que =I2=<ID
Evamos a aprovechar la potencia de Hatlab para evitar algunos buques en
Elos calculos..
Eprimero definimos la matriz de permutaciones como la matriz identidad de
Eorden igual al numero de filas de la matriz 2: ,si no hay pivoteo de filas
Ela matriz de permutaciones es precisamente la identidad-
t=size,2:1-1 Eobtenemos el numero de filas de la matriz
2 ==eye,t-1 E8onstruimos la matriz identidad
E2demas: inicializamos las matrices < y
D <==1
D=21
Einiciamos un bucle para ir recorriendo las columnas ,solo tenemos que
Erecorrer tantas columnas como fila % 1 tenga la matriz 2
for )=16t%1
<2=zeros,t-1 EHatriz auxiliar ,<ambda- de cada iteracion.
E3uscamos el elemento mas grande de la columna
) maxcol=abs,D,):)--1
index=)1
for i=)6t
if abs,D,i:)-->maxcol
maxcol=abs,D,i:)--1
index=i1
end
end
E reordenamos las filas de =: < y D de modo que el valor mas grande de
E ) pase a acupar la diagonal ,9sto es equivalente a multiplicar D por
Ela matriz de permetuciones correspondiente: ir calculado
Eiterativamente el valor de la matriz de permutaciones = final: y
Ereordenar las filas ya calculadas de < ,aportadas por los valores de
Elas matrices lambdas anteriores... a lambda#)-
2ux=D,):6-1
2ux!==,):6-1
2ux3=<,):16)%1-1
ELeordenamos D ,Toda la
fila- D,):6-=D,index:6-1
D,index:6-=2ux1
ELeordenamos < ,7olo los elementos de la columnas anteriores...situados
5i
Epor deba)o de la
diagonal-. <,):16)%
1-=<,index:16)%1-1
<,index:16)%1-=2ux31
Emodificamos la matriz de permutaciones
=,):6-==,index:6-1
=,index:6-=2ux!1
E8alculamos una matriz auxiliar con los factores de los elementos
Ea eliminar.
<2,)16t:)-=D,)16t:)-JD,):)-1 Eestos elementos son directamente los que
Ese anaden a la matriz <
EHodificamos < y D
<,)16t:)-=D,)16t:)-JD,):)-1
D=,eye,t-%<2-ID1 Ela expresion eye,t-%<2 nos permite cambiar de signo los
Eelementos situados por deba)o de la diagonal
principal... end
+esde el punto de vista de la implementacion$ el codi"o anterior simplifica el calculo
de la factorizacion LU$
% no se calculan la inversa de s
i
% =n realidad lo :ue se #ace es ir constru!endo iterativamente la
matriz LD en cada iteracion$ primero se permutan los elementos de las columnas de la matriz L
construida en la iteracion anterior$ ! se anVaden los elementos de la columna
correspondiente%
2% la matriz de permutacion se va calculando tambien iterativamente$ intercambiando las
filas de la matriz de permutacion obtenida en la iteracion anterior%
Matlab posee un comando propio para calcular la factorizacion LU de una Matriz$
/<:D:=0=lu,2-% =s importante pedir siempre :ue devuelva la matriz =$ en otro caso$ la matriz <
devuelta por Matlab
no tiene por :ue ser trian"ular inferior%
=l comando lu de Matlab$ permite calcular la factorizacion LU$ por otros metodos
distintos a la eliminacion "aussiana con pivoteo de filas% La e3plicacion de estos otros metodos
:ueda fuera del alcance de estos apuntes% -implemente indicar :ue la factorizacion LU de una
matriz no es unica
es posible encontrar distintos pares L ! U :ue factorizan a la misma matriz 6
;%;%2% *actorizacion de C#oles5!
+ada una matriz cuadrada$ simetrica ! definida positiva$ es siempre posible factorizarla como
6 M L L
2
% +onde L es una matriz trian"ular inferior$
`
a

a
2

a
n
`
`
L

0
0
`
`
L

L
2
L
n
`
`
a
2
a
22

a
2n
`
`
L
2
L
22

0
`
`
0 L
22
L
n2
`
` ` ` ` ` `
`
% %
%
% %
` M `
% %
%
% %
` `
%
%
%
% %
`
`
% %
%
%
` `
% %
%
%
` `
% %
%
%
`
&ara obtener la factorizacion de C#oles5! podemos emplear directamente la definicion% 6s si
calculamos L L
2
$ obtendramos a

M L

L

M L
2
$ a
22
M L
2
L
2
S L
22

L
22
M L
2
S L
2

etc% =s facil comprobar :ue los elementos de la dia"onal a


ii
de la matriz 6 cumplen$
2 22
9
a
ii
M
P
L
2
5M
5i
9
M L
ii
S
P
L
2
5M
5M
6 partir de esta e3presion podemos despe9ar L
ii
$
v
u
9
L
ii
M
u
a
ii

P
L
5i
t 2
5M
+el mismo modo$ para los elementos :ue no pertencen a la dia"onal$
9 9
a
i9
M
P
L
i5
L
59
M L
i9
L
99
S
P
L
i5
L
59
5M
6 partir de esta e3presion podemos despe9ar L
ii
$
5M
L
i9
M
a
i9




&

9







L
i5



L
5 9
L
99
Los elementos de la matriz L$ se pueden calcular de las e3presiones anteriores iterativamente
por columnasD para obtener L

basta emplear a

$ para obtener los restantes elementos de la
primera columna$ basta conocer L

% Conocidad la primera columna de L$ se puede calcular L
22
! as sucesivamente #asta completar toda la matriz% =l si"uiente codi"o calcula la factorizacion
de C#oles5! de una matriz$ siempre :ue cumpla las condiciones re:ueridas$
function <=choles+y,2-
Ehacemos que devuelva la matriz triangular inferior.
E8omprobamos que es cuadrada: simetrica: y definida
positiva. /a:b0=size,2-1
if a%bN=(
disp,*<a matriz no es cuadrada*-
else
Eha resultado cuadrada comprobamos si es
simetrica c=2%2*1
if any,c-
disp,*<2 matriz no es simetrica*-
else
Eha resultado simetrica: comprobamos si es definida
positiva auto=eig,2-1
if any,autoM=(-
disp,*la matriz no es definida positiva*-
else
Euna vez que la matriz cumple las condiciones necesarias:
Efactorizamos por choles+y
for +=16a
<,+:+-=2,+:+-1
for i=16+%1
<,+:+-=<,+:+-%<,+:i-K!1
end
<,+:+-=sqrt,<,+:+--1
for )=+16a
<,):+-=2,):+-1
for i=16+%1
end
<,):+-=<,):+-%<,):i-I<,+:i-1
end
end
end
end
end
<,):+-=<,):+-J<,+:+-1
Matlab tiene una funcion interna chol$ :ue permite obtener la factorizacion de C#oles5!$
&or defecto devuelve una matriz trian"ular superior U$ de modo :ue la factorizacion calculada
cumple 6 M U
2
U % E=n realidad se trata tan solo de una forma alternativa de definir la
factorizacion de C#oles5!F$ 6s por e9emplo$
>>
2 2
=
' 3 $
3 1$ 3
$ 3 &
>> D=chol,2-
D =
!.$$4& 1.!!$. 1.'33(
( 3.&3&& (.!8!8
( ( 1.&(11
>> L=D*ID
L =
'.(((( 3.(((( $.((((
3.(((( 1$.(((( 3.((((
$.(((( 3.(((( &.((((
-i se :uiere obtener directamente la matriz L$ #a! :ue indicarlo e3presamenteD <=chol,2:*lower*-%
&ara obtener la factorizacion Matlab emplea -BLB la parte trian"ular superior o la trian"ular
inferior de la matriz 6% -upone :ue 6 es simetrica pero )B lo comprueba% -i la matriz no
es definida positiva$ la funcion c#ol da un mensa9e de error%
;%;%3% +ia"onalizacion
6utovectores ! autovalores% +ada una matriz 6 de orden n n$ se define como
autovector$ o vector propio de dic#a matriz al vector 3 :ue cumple$
6 3 M s 3$ 3 M 0$ s
C
=s decir$ el efecto de multiplicar la matriz 6 por el vector 3 es e:uivalente a multiplicar el
vector 3 por un numero s :ue$ en "eneral$ sera un numero comple9o%
s recibe el nombre de autovalor$ o valor propio de la matriz 6% 6si por e9emplo$
`
2 0 0
`
6 M
`
0 2
`
0 0 3
`
`
%
` `

`
tiene un autovalor s M 3 para el vector propio$ 3 M Q0$ 3$ 3R
2
$
2 0 0
` `
0
` `
0
` `
0
`
`
0 2
`

`
3
`
M 3
`
3
`
M
`
C
`
0 0 3 3 3 C
=l vector propio asociado a un valor propio no es unico$ si 3 es un vector propio de una
matriz 6$ asociado a un valor propio s$ =s trivial comprobar :ue cual:uier vector de la forma p
3$ p C tambien es u vector propio asociado a s$
6 3 M s3 6 p3 M sp3
E;%F =n realidad$ cada vector propio e3pande un subspacio =
s
- de ?
n
% 6plicar la matriz 6$
a un
vector de =
s
- es e:uivalente a multiplicar el vector por s% Cada subespacio asociado a un autovalor
recibe el nombre de autosubespacio o subespacio propio%
=l con9unto de todos los autovalores de una matriz 6 recibe el nombre de espectro de 6 ! se
representa como tE6F% Una descomposicion en autovalores de una matriz 6 se define como%
6 M P + P

+onde + es una matriz dia"onal formada por los autovalores de 6%


`
s

0
0
`
`
0 s
2

0
`
`
% %
`
`
% %
0
`
0 0
s
n
=sta descomposicion no siempre e3iste% =n "eneral$ si dos matrices 6 ! 4 cumplen$
6 M P 4 P

se dice de ellas :ue son similares% 6 la transformacion :ue lleva a convertir 4 en 6 se le llama
una transformacion de seme9anza% Una matriz es dia"onalizable cuando admite una transformaci
on de seme9anza con una matriz dia"onal de autovalores%
,olviendo al e9emplo anterior podemos factorizar la matriz 6 como$
`
2 0 0
`
`
0 0
` `
2 0 0
` `
0 0
`
6 M
`
0 2
`
M
`
0 3
`

`
0 2 0
`

`
0
`
0 0 3 0 0 3 0 0 3 0 0 '3
&or tanto en este e9emplo$ los autovalores de 6 seran s

M 2$ s
2
M 2 ! s
3
M 3% &ara
estudiar la composicion de la matriz P ?eescribimos la e3presion de la relacion de sema9anza de
la si"uiente manera$
6 M P + P

6 P M P +
-i consideramos a#ora cada columna de la matriz P como un vector$
`
s

0 0
`
`
0 s
2
0
`
6 P M P + 6 E3

|3
2
| |3
n
F M E3

|3
2
| |3
n
F
`
%
`
`
% % 0
`
0 0 s
n
=s facil comprobar :ue si econsideramos el producto de la matriz 6$ por cada una de las columnas
de la matriz P se cumple$
M
z a

a
2


2 z S 2


6 3

M s


3

6 3
2
M s


3
2
%
6 3
n
M s
n

3
n
Lo :ue nos lleva a :ue cada columna de la matriz P tiene :ue ser un autovector de 6 puesto :ue
cumple$
6 3
i
M s


3
i
&olinomio caracterstico% =l polinomio caracterstico de una matriz 6 de dimension n
n$ se define como$
&
6
EzF M detEz0 6F
+onde 0 es a matriz identidad de dimension n n% 6s por e9emplo para una matriz de dimensi
on
2 2$
&
6
EzF Mdet

0

z
0


a

a
2

a
2
a
22

M

a
2
z a
22

MEz a

F Ez a
22
F a
2
a
2
M z
2
Ea

S a
22
F z S a

a
22
a
2

a
2
Los autovalores s de una matriz 6 son las races del polinomio caracterstico de la matriz 6$
p
6
EsF M 0
Las races de un polinomio pueden ser simples o multiples$ es decir una mima raz
puede repetirse varias veces% &or tanto$ los autovalores de una matriz$ pueden tambien repetirse%
-e llama multiplicidad al"ebraica de un autovalor al numero de veces :ue se repite%
6demas las races de un polinomio pueden ser reales o comple9as% &ara una matriz
cu!os elementos son todos reales$ si tiene autovalores comple9os estos se dan siempre como
pares de numeros comple9os con9u"ados% =s decir si s M a S bi es un autovalor entonces s

M a
bi tambien lo es%
,eamos al"unos e9emplosD
La matriz$
6 M
2iene como polinomio caracterstico$

3 2

2 2

z 3 2
&
6
EzF M



M z
2
z 2
0"ualando el polinomio caracterstico a cero ! obteniendo las races de la ecuacion de
se"undo "rado resultante$ obtenemos los autovalores de la matriz 6$
E
s

M
2
s
2
s 2 M 0
s
2
M

z 2
& EzF M
z 2


Un vector propio asociado a s

M 2 sera 3

M Q2$ R
2
$

3 2

2 2

M 2


2

M


@

2
! un vector propio asociado a s
2
M sera 3
2
M Q 2R
2
$
La matriz$

3 2

2 2




2
M




M
2


2
2iene como polinomio caracter
stico$
4 M

@

2

z @
&
4
EzF M



M z
2
<z S C
procediendo i"ual :ue en el caso anterior$ obtenemos los autovalores de la matriz 4$
E
s

M 3
s
2
<s S C M 0
s
2
M 3
=n este caso$ #emos obtenido para el polinomio caracterstico una raz doble$ con lo :ue
obtenemos un unico autovalor s M 3 de multiplicidad al"ebraica 2%
La matriz$
tiene como polinomio carater
stico$
C M

2

2

C

M z
2
@z S ;

z 2
Con lo :ue sus autovalores resultan ser dos numeros comple9os con9u"ados$
E
s

M 2 S
i
s
2
@s S ; M 0

s
2
M 2 i
&ara :ue una matriz 6 de orden n n sea dia"onalizable es preciso :ue cada autovalor
ten"a asociado un numero de autovectores linealmente independientes$ i"ual a su multiplicidad
al"ebraica% La matriz 4 del e9emplo mostrado mas arriba tiene tan solo un autovector$ 3 M Q$
R
2
asociado a su unico autovalor de multiplicidad 2% )o es posible encontrar otro linealmente
independiente/ por lo tanto 4 no es dia"onalizable%
La matriz$
`
3 0
`
( M
`
0 3 0
`
0 0
2iene un autovalor s

M 3$ de multiplicidad 2$ ! un autovalor s
2
M de multiplicidad %
&ara el autovalor de multiplicidad 2 es posible encontrar dos autovectores linealmente
independientes$ por e9emploD 3

M Q$ 0$ 0R
2
! 3
2
M Q0$ $ 0R
2
% &ara el se"undo autovalor un
posible autovector sera$ 3
3
M Q2$ 0$ R
2
% =s posible por tanto dia"onalizar la matriz ($
|
|
`
3 0
` `
0 2
` `
3 0 0
` `
0 2
`
( M
`
0 3 0
`
M P + P

M
`
0 0
`

`
0 3 0
`

`
0 0
`
0 0 0 0 0 0
&ropiedades asociadas a los autovalores% +amos a continuacion$ sin demostracion$
al"unas propiedades de los autovalores de una matriz$
% La suma de los autovalores de una matriz$ coincide con su traza$
n
trE6F M
P
s
i
iM
2% =l producto de los autovalores de una matriz coincide con su determinante$
n
|6| M
I
s
i
iM
3% Cuando loa autovectores de una matriz 6 son orto"onales entre s$ entonces la matriz 6
es dia"onalizable orto"onalmente$
6 M G + G

/ G

M G
2
6 M G 6 G
2
Cual:uier matriz simetrica posee autovalores reales ! es dia"onalizable orto"onalmente%
=n "eneral$ una matriz es dia"onalizable orto"onalmente si es normalD 6 6
2
M 6
2
6
@% =l ma!or de los autovalores en valor absoluto$ de una matriz 6 de orden n% recibe el nombre
de radio espectral de dic#a matriz$
n
uE6F M ma3
s
i
iM
)o vamos a ver nin"un al"oritmo concreto para dia"onalizar matricces% Guiza el masa
utilizado$ por su robustez numerica es el basado en la factorizacion de -c#urD cual:uier
matriz 6 puede factorizarse como$
6 M G 2
G
2
+onde G es una matriz orto"onal ! 2 es una matriz trian"ular superior% Los elementos de la
dia"onal de 2 son precsamente los autovalores de 6%
Matlab inclu!e la funcion eig para calcular los autovectores ! autovalores de una matriz%
Xesa funcion admite como variable de entrada una matriz cuadrada de dimension arbitraria !
devuelve como variable de salida un vector columna con los autovalores de la matriz de entrada$
>> 2=/1 ! 31! 3 %!13 (
10
2 =
1 ! 3
! 3 %!
3 ( 1
>> <ambda=eig,2-
<ambda =
%!..(1'
$.((((
3..(1'
2ambien puede llamarse a la funcion eig con dos variables de salida% =n este caso la
primera variable de salida es una matriz en la :ue cada columna representa un autovector de la
matriz de entrada normalizado de modulo % La se"unda variable de salida es una matriz
dia"onal cu!os elementos son los autovalores de la matriz de entrada%
>> 2=/1 ! 31! 3 %!13 (
10
2
=
1 ! 3
! 3 %!
3 ( 1
>> /G:B0=eig,2-
G =
%(.'4'. (..(.1 (.'&$8
(.$$!& (.(((( %(.!('!
(.&'$. (..(.1 (..!.1
B =
%!..(1' ( (
( $.(((( (
( ( 3..(1'
&or ultimo$ Matlab tambien inclu!e una funcion para calcular la factorizacion de -c#ur%
-i lo a aplicamos a la misma matriz 2$ para la :ue acabamos de calcular los autovalores$
>> /W:T0=schur,2-
W =
%(.'4'. (.'$$4 %(.31$!
(.$$!& (.($1& %(.84&8
(.&'$. (..'3! (.31$!
T =
%!..(1' %(.'!8& %1.!84.
%
`
%
%
`
% %
%
`
% % %
( $.(((( %1.343$
( ( 3..(1'
>> WIW*
ans =
1.(((( (.(((( (.((((
(.(((( 1.(((( (.((((
(.(((( (.(((( 1.((((
-e observa como los elementos de la dia"onal de T son los autovalores de 2 como la matriz W
es orto"onal%
;%;%@% *actorizacion G?
La idea es factorizar una matriz 6 en el producto de dos matrices/ una matriz orto"onal G !
una matriz trian"ular superior ?%
6 M G ?$ G G
2
M 0
-upon"amos :ue consideramos cada columna de 6 ! cada columna de G como un vector$
6 M Ea

|a
2
| |a
n
F $ G M E:

|
:
2
| |:
n
F
&odemos a#ora considerar el producto G ? como combinaciones lineales de las columnas de
G$ :ue dan como resultado las columnas de 6$
`
a

a
2

a
n
`
`
a
2
a
22

a
2n
`
`
:

:
2

:
n
`
`
:
2
:
22

:
2n
`
`
r

r
2
r
n
`
`
0 r
22
r
2n
`
` ` ` ` ` `
`
% % %
` M `
% % %
` `
%
%
%
`
`
% %

%
` `
% %

%
` `
% % %
`
a
n
a
n2

a
nn
`
a

`
`
a
2
`
:
n
:
n2

:
nn
`
:

`
`
:
2
`
0 0 a
nn
a

M :

r


`
`
M
` `
r $
` ` `

` ` ` `
a
n
:
n
`
a
2
`
`
a
22
`
`
:
`
`
:
2
`
`
:2
`
`
:
22
`
a
2
M :

r
2
S :
2
r
22

`
`
M
` `
r S
`
`
r
` ` `
2
` ` ` `
` `
22
` `
a
n2
%
:
n
`
an
`
`
a
2n
`
:
n2
`
:
`
`
:
2
`
`
:2
`
`
:
22
`
`
:n
`
`
:
2n
`
a
n
M :

r
n
S :
2
r
2n
S S
r
nn

`
`
M
` `
r S
`
`

r
S
S
`
`
r
` ` `
n
` ` ` `
` `
2n
` `
` `
nn
` `
a
nn
:
n
:
n2
:
nn
v
a ':
2
2
2
&ara :ue la matriz G sea orto"onal$ basta #acer :ue sus columnas$ consideradas cada una como
un vector$ sean ortonormales entre s% &odemos obtener la matriz G a partir de la matriz 6$ apli1
cando a sus columnas al"un metodo de orto"onalizacion de vectores% =n particular$
emplearemos el metodo conocido como orto"onalizacion de (rand1-c#midt%
Brto"onalizacion de (rand1-c#midt =ste metodo permite transformar un con9unto de
vec1 tores linealmente independientes arbitrarios en un con9unto de vectores ortonormales% Lo
describi1 remos a la vez :ue estudiamos su uso para obtener la factorizacion G? de una matriz
6%
=n primer lu"ar$ consideremos el vector a

$ formado por los elementos de la primera columna
de la matriz 6% -i lo dividimos por su modulo$ obtendremos un vector unitario$ =ste vector$ sera
la
priemrea columna de la matriz G$
:

M
a

ka

k
+e la e3presion anterior es facil deducir :uien sera el elemento r

de la matriz ?$
a

M :

ka

k r

M
ka

k
-upon"amos por e9emplo :ue :ueremos factorizar la si"uiente matriz$
`
2 3
`
6 M
`
2 0 2
`
@ 3
La primera columna de la matriz G sera$
a

`
2
` `
2'3
`
:

M M
`
2
`
M
`
2'3
`
ka

k 3
'3
! el elemento r

de la matriz ?$
r

M ka

k M 3
&ara obtener la se"unda columna G$ Calculamos en primer lu"ar la pro!eccion de la se"unda
columna de 6$ a
2
sobre el vector :

% =n "eneral$ la pro!eccion de un vector a$ sobre un vector b
se calcula obteniendo el producto escalar de los dos vectores ! dividiendo el resultado por el m
odulo del vector b% =n nuestro casos el vector :

$ sobre el :ue sa calcula la pro!eccion$ es
unitario$ por lo :ue calcular la pro!eccion de a
2
sobre :

se reduce a calcular el producto escalar
de los dos vectores$
-i"uiendo con nuestro e9emplo$
2
2
M :


a
`
3
`
0
v
a
2
':

M :

a
2
M

2'3 2'3 '3


`
0
`
M
3
@
&odemos interpretar la pro!eccion del vector a
2
sobre el vector :

como la componente del vector
a
2
en la direccion de :

% &or eso$ si restamos al vector a
2
su pro!eccion sobre :

multiplicada por
:

el resultado ser un nuevo vector :
2
orto"onal a :

$
v
2
M a
2
v
a
2
':

:

M a
2
E:

a
2
F :

%
2
0 +%
2 2
t
% 0 )
0
2 1
1 0
1
(%
t

2
0 ) 0
1 1

; ;
2.5
2
1.5
1
0.5
0
0.5
0.5 0 0.5 1 1.5 2 2.5 3 3.5
*i"ura ;%0D Bbtencion de un vector orto"onal
La fi"ura ;%0 muestra "raficamente el proceso para dos vectores en el plano%
Como :
2
tiene :ue ser un vector unitario para :ue la matriz G sea orto"onal$ dividimos el vector
obtenido$ :w
2
$ por su modulo$
:
2
M
,
2
M
kv
2
k
a
2
E :
2
a
2
F :

ka
2
E:
2
a
2
F :

k
&or ultimo despe9ando a
2
podemos indentificar los valores de r
2
! r
22
$ tal ! como se
describieron anteriormente$
a
2
M E:
2
a
2
F :

S ka
2
E:
2
a
2
F :
2
k :
2
r
2
M :
2
a
2
r
22
M ka
2
E:
2
a
2
F :
2
k
,olviendo a la matriz 6 de nuestro e9emplo la se"unda columna de la matriz G ! los valores
de r
2
! r
22
:uedaran$
v
2
a
2
E:
2
a
2
F
:

``
3
`
0
`
2'3
``
3
`

A'3
`
:
2
M
r
2
M
r
22
M
M
kv
2
k
0
3
;

;
3

ka
2
E:
2
a
2
F
:

k
M
``
0
`

@
3

`
2'3
``

M
'3
;

;
`
20'3
`
2<'3

2
9
9M 9
9
9

-e puede comprobar :ue los vectores :



! :
2
son orto"onales$
`
:
2

A'3
`


@ @0 2<


:
2
M

2'3 2'3 2A3

;
;
`
20'3
`
M ; ;

2<'3
S M 0
3 3 3
&ara obtener la tercera columna de la matriz G$ :
3
procederamos de modo analo"oD calcu1
laramos la pro!eccion de la tercera columna de 6$ a
3
sobre los vectores formados por la los dos
primeras columnas de G$ restamos de a
3
las dos pro!ecciones ! normalizamos el vector resultante
dividiendolo por su modulo$
v
3
a
3
E:
2
a
3
F :

E:
2
a
3
F :
2
:
3
M M
2
kv
3
k ka
3
E:
2
a
3
F :

E:
2
a
3
F :
2
k
2
! de modo analo" al caso de la se"unda columna$
r
3
M :
2
a
3
r
23
M :
2
a
3
r
33
M ka
3
E:
2
a
3
F :

E:
2
a
3
F :
2
k
2
=s facil observar como vamos obteniendo las sucesivas columnas de la matriz G$ iterativamente%
&odemos "eneralizar los resultas anteriores para cual:uier columna arbitraria de la matriz G$
a
i

&
i
E:
2
a
i
F
:
i
:
i
M
! para los valores de r
i
$ r
2i
$ rii$
9M
ka
i

&
i
E:
2
a
i
F :
i
k
r
9i
M :
2
a
i
$ 9 f
i
i
r
ii
M ka
i

P
E:
2
a
i
F
:
i
k
9M
=l si"uiente codi"o de Matlab$ calcula la factorizacion G? de una matriz$ empleando el m
etodo descrito$
function /W:L0=WLS1,2-
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
ESactorizacion WL obtenida directamente por ortogonalizacion de grand%schmidt
EC)o: el algoritmo es inestable... 8on lo que la bondad de las soluciones
Edependera de la matriz que se quiera factorizar.
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
E9n primer lugar obtenemos las dimensiones de la matriz
/m:n0=size,2-1
Efatorizamos columna a columna
for )=16n
E8onstruimos un vector auxiliar v: nos servira para ir obteniendo las
Ecolumnas de la matriz W.
for i=16m E7olo llegamos hasta m factorizacion incompleta si m>n
E0F

end
v,i-=2,i:)-
for i=16)%1
Eobtenemos los elementos de la matriz L: correspondientes a la
Ecolumna ): solo podemos construir hasta una fila antes de la
Ediagonal i=)%1. cada fila es el producto escalar de la columna i
Ede la matriz W for la columna ) de la Hatriz
2. L,i:)-=(
for +=16m L,i:)-=L,i:)-
W,+:i-I2,+:)- end
Eobtenemos las componentes del vector auxiliar que nos permitira
Econstruir la columna ) de la matriz W
for +=16m
v,+-=v,+-%L,i:)-IW,+:i-
end
end
ECbtenemos el valor del elemento de la diagonal L,):)- de la matriz L
L,):)-=(
for +=16m
L,):)-=L,):)-v,+-K!
end
L,):)-=sqrt,L,):)--
E5 por ultimo: divimos los elementos del vector v por L,):)-: para
Eobtener la columna ) de la matriz W
for +=16m
W,+:)-=v,+-JL,):)-
end
end
=n "eneral$ el al"oritmo :ue acabamos de describir para obtener la orto"onalizacion de (rand1
-c#midt$ es numericamente inestable% La estabilidad puede me9orarse$ si vamos modificando pro1
"resivamente la matriz 6$ a medida :ue calculamos las columnas de G%
Cada vez :ue obtenemos una nueva columna de G$ modificamos las columnas de 6 de modo
:ue sean orto"onales a la columna de G obtenida% &ara ello$ lo mas sencillo es crear una matriz
au3iliar , :ue #acemos$ inicialmente$ i"ual a 6$ ,
E0F
M 6
para obtener la primera columna de G$ procedemos i"ual :ue antes$ normalizando la primera
columna de ,
E0F
v
E0F
:

M

kv

k
r

M kv
E0F
k
6 continuacion calculamos la pro!eccion de todas las demas columnas de la matriz ,
E0F
con
respecto a :

$ esto es e:uivalente a calcular los restantes elementos de la primera fila de la matriz
?D r
2
$ r
3
$ r
n
$
r
9
M :
2

v
E0F
9
2
EF
2
v
i
Una vez calculadas las pro!ecciones$ modificamos todas las columnas de ,
E0F
$ e3cepto la primera
restando a cada una su pro!eccion con respecto a :

%
v
EF
E0F E0F
9
M v
9
r
9
v
9
$ 9 M 2$ 3$ n
La nueva matriz ,
EF
cumple :ue todas sus columnas a partir de la se"unda son orto"onales a
:

% &ara obtener :
2
es suficiente dividir v

por su modulo$
v
EF
:
2
M
2
kv
2
k
r
22
M kv
EF
k
&odemos a#ora calcular el resto de los elementos de la se"unda fila de la matriz ? de modo
analo"o a como #emos calculado los de la primera$
r
29
M :
2

v
EF
2 9
!$ de nuevo actualizaramos todos las columnas de ,

$ a partir de la tercera$ para :ue
fueran orto"onales a :
2
$
v
E2F
EF EF
9
M v
9
r
29
v
9
$ 9 M 3$ @$ n
Las columnas de ,
E2F
seran a#ora orto"onales a :

! :
2
% -i se"uimos el mismo
procedimiento n veces$ calculando cada vez una nueva columna de G ! una fila de ?$ obtenemos
finalmente la factorizacion G? de la matriz inicial 6% =n "eneral$ para obtener la columna :
i
!
los elemntos de la fila i de la matriz ? tendramos$
v
EiF
:
i
M
i
EiF
k
i
k
r
ii
M kv
EiF
k
r
i9
M :
2

v
EiF
i 9
! la actualizacion correspondiente de la matriz , sera$
v
EiF
EiF EiF
9
M v
9
r
i9
v
9
$ 9 M i S $ i S 2$ n
=l resultado es el mismo :ue el :ue se obtiene por el primer metodo descrito% La venta9a es
:ue numericamente es mas estable%
=l si"uiente codi"o de Matlab$ calcula la facorizacion G? de una matriz de orden n
n$
empleando el metodo descrito$
function /W:L0=WLS!,2-
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
E8alculo de factorizacion WL de la matriz 2: mediante la ortogonaliacion de
Egrand.schmidt modificada. 9ste algoritmo si que es estable...
ECbtenemos las dimensiones de 2
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
/m:n0=size,2-1
Ecreamos una matriz auxiliar v sobre la que vamos a realizar la
Efactorizacion. 7e podrQa realizar directamente sobre 2 Hachacando sus
Ecolumnas segun la factorizacion progresa... 7erQa lo correcto para ahorrar
Eespacio de almacenamiento. =ero en fin:
quiz
Esea menos eficiente.
v=21
asUQ queda mas claro aunque
E8omo siempre: vamos factorizando por columnas de la matriz 2
for i=16m Ela matriz W tiene que ser mGm: aunque el numero de columnas de 2 sea
n-
Ecalculamos cada L,i:i- como el modulo del vector auxiliar
v,16m:i- L,i:i-=(1
for +=16m
L,i:i-=L,i:i-v,+:i-K!1
end
L,i:i-=sqrt,L,i:i--1
Ecalculamos el la columna i de la matriz W: normalizando la columna i
Ede la matriz
v for +=16m
W,+:i-=v,+:i-JL,i:i-1
end
EHodificamos todos los L,i:)- con i)>i: en cuanto tenemos la columna )
Ede la matriz W: nos basta calcular el producto escalar con las
Ecolumnas de 2 ,9n nuestro caso de v porque estan copiadas: de las
Efilas siguientes
for )=i16n
L,i:)-=(1
for +=16m
L,i:)-=L,i:)-W,+:i-Iv,+:)-1
end
Ei por ultimo modificamos todas las columnas de la matriz v desde
Ei1 hasta el final de la matriz. 2qui es donde cambia el algoritmo
Eya que estamos modificando la matriz 2: y las sucesivas matrices X
Ecada vez que obtenemos una nueva fila de valores de L
for +=16m
v,+:)-=v,+:)-%L,i:)-IW,+:i-1
end
end
end
&ara terminar$ indicar :ue Matlab tiene su propia funcion$ /W:L0=qr,2-$ para calcular la facto1
rizacion G? de una matriz% &ara calcularla$ emplea el metodo de orto"onalizacion de
Kouse#older% =ste metodo es aun mas robusto :ue la orto"onalizacion de (rand1-c#midt
modificada% &ero no lo veremos en este curso% +amos a continuacion un e9emplo de uso de la
funcion qr$
>> 2=/! 3 11! ( !11 $
30 2 =
! 3 1
% %
`
% %
`
! ( !
1 $ 3
>> /q:r0=qr,2-
q =
%(.'''. (.!(8. %(..1&&
%(.'''. %(.&4'3 (.$$.!
%(.3333 (...&! (.&3'.
r =
%3.(((( %3.3333 %3.((((
( 3..!'8 1.3$1'
( ( 1..884
>> qIr
ans =
!.(((( 3.(((( 1.((((
!.(((( (.(((( !.((((
1.(((( $.(((( 3.((((
;%;%;% *actorizacion -,+
+ada una matriz cual:uiera 6 de orden m n es posible factorizarla en el roducto de tres
matrices$
6 M U -
,
2
+onde U es una matriz de orden m m orto"onal$ , es una matriz de orden n n orto"onal
! - es una matriz dia"onal de orden m n% 6demas los elementos de - son positivos o cero !
estan ordenados en orden no creciente$
`
r

0 0
`
s M
`
0 r
2
0
`
`
` / r

r
2
r
i
/ i M mnEm$ nF
` `
0 0 r
i
Los elementos de la dia"onal de la matriz -$ Er

$ r
2
$ r
i
F$ reciben el nombre de
valores sin"ulares de la matriz 6% +e a# el nombre :ue recibe esta factorizacion/ -,+ son
las si"las en in"les de -in"ular ,alue +ecomposition%
)o vamos a describir nin"un al"oritmo para obtener la factorizacion -,+ de una matriz%
=n Matlab e3iste la funcion /D:7:X0=svd,2- :ue permite obtener directamente la factorizacion
d-+, de una matriz 6 de dimension arbitraria% 6 continuacion se inclu!en unos e9emplos de
uso para matrices no cuadradas$
>> 2=/1 3 $1! 3 !1! $ &13 ! 30
%(.3.'4 %(.41.( (.13(.
%(.&4$& (.1313 %(..433
%(..1(3 (.3.'. (.&4$'
2 =
1 3 $
! 3 !
! $ &
3 ! 3
>> /D:7:X0=svd,2-
D =
%(.$8.. (.&1.& (.11'$ %(.'43$
%(.38'( %(.3'1! %(.83.& %(.138.
%(.'&1. (.3(!$ (.(&&! (.'43$
%(.$3$( %(..1$$ (.&311 %(.138.
7 =
1(.!&$& ( (
( 1.4(11 (
( ( 1.1(4.
( ( (
X =
%(.3.'4 %(.41.( (.13(.
%(.&4$& (.1313 %(..433
%(..1(3 (.3.'. (.&4$'
Como la matriz 6 tiene mas filas :ue columnas$ la matriz - resultante termina con na fila de
ceros%
>> 3=2*
3 =
1 ! ! 3
3 3 $ !
$ ! & 3
>> /D:7:X0=svd,3-
D =
r
2
7 =
1(.!&$& ( ( (
( 1.4(11 ( (
( ( 1.1(4. (
X =
%(.$8.. (.&1.& (.11'$ %(.'43$
%(.38'( %(.3'1! %(.83.& %(.138.
%(.'&1. (.3(!$ (.(&&! (.'43$
%(.$3$( %(..1$$ (.&311 %(.138.
Como la matriz 4$ transpuesta de la matriz 6 del e9emplo anterior$ tiene mas columnas
:ue filas$ la matriz - termina con una columna de ceros%
6 continuacion enunciamos sin demostracion al"unas propiedades de la factorizacion -,+%
% =l ran"o de una matriz 6 coincide con el numero de sus valores sin"ulares distintos de cero%
2% La norma12 inducida de una matriz 6 coincide con su valor sin"ular ma!or r

%
3% La norma de *robenius de una matriz 6 cumpleD
:
k6k
*
M r
2
S r
2
S S r
2
2 r
@% Los valores sin"ulares de una matriz 6 distintos de cero son i"uales a la raz cuadrada
positiva de los autovalores distintos de cero de las matrices 6 6
2
o 6
2
6% Elos
autovalores distintos de cero de estas dos matrices son i"ualesF$
i
M s
i
E6 6
2
F M s
i
E6
2
6F
;% =l valor absoluto del determinante de una matriz cuadrada 6$n n$ coincide con el
producto de sus valores sin"ulares$
n
| detE6F | M
I
r
i
iM
<% =l numero de condicion de una matriz cuadrada 6 n n$ :ue se define como el producto de
la norma12 inducida de 6 por la norma12 inducida de la inversa de 6$ puede e3presarse
como el cociente entre el el valor sin"ular ma!or de 6 ! su valor sin"ular mas pe:uenVo$
5E6F M k6k
2
k6

k
2
M
r

M
r
n
r
n
=l numero de condicion de una matriz$ es una propiedad importante :ue permite
estimar como de estables seran los calculos realizados empleando dic#a matriz$ en particular
a:uellos :ue involucran directa o indirectamente el calculo de su inversa%
Captulo <
-istemas de ecuaciones lineales
<%% 0ntroduccion
Una ecuacion lineal es a:uella :ue establece una relacion lineal entre dos o mas variables$
por e9emplo$
33

23
2
M 2
-e dice :ue es una relacion lineal$ por:ue las variables estan relacionada entre s tan
solo mediante sumas ! productos por coeficientes constantes% =n particular$ el e9emplo anterior
puede representarse "eometricamente mediante una lnea recta%
=l numero de variables relacionadas en una ecuacion lineal determina la dimension de la
ecua1 cion% La del e9emplo anterior es una ecuacion bidimensional$ puesto :ue #a! dos
variables$ =l numero puede ser arbitrariamente "rande en "eneral$
a

3

S a
2
3
2
S S a
n
3
n
M b
ser una ecuacion n1dimensional%
Como !a #emos senValado mas arriba$ una ecuacion bidimensional admite una linea recta
como
representacion "eometrica$ una ecuacion tridimensional admitira un plano ! para
dimensiones ma!ores :ue tres cada ecuacion representara un #iperplano de dimension n% &or
supuesto$ para dimensiones ma!ores :ue tres$ no es posible obtener una representacion "rafica
de la ecuacion%
Las ecuaciones lineales 9ue"an un papel mu! importante en la fsica !$ en "eneral en la
ciencia ! la tecnolo"a% La razon es :ue constitu!en la apro3imacion matematica mas sencilla a
la relacion entre ma"nitudes fsicas% &or e9emplo cuando decimos :ue la fuerza aplicada a un
resorte ! la elon"acion :ue sufre estan relacionadas por la le! de Koo5e$ * M H 3 estamos
estableciendo una relacion lineal entre las ma"nitudes fuerza ! elon"acion% ]-e cumple siempre
dic#a relacionO +esde lue"o :ue no% &ero es razonablemente cierta para elon"aciones pe:uenVas !$
apo!ados en ese sencillo modelo lineal de la realidad$ se puede aprender muc#a fsica%
Un sistema de ecuaciones lineales esta constituido por varias ecuaciones lineales$ :ue
e3presan relaciones lineales distintas sobre las mismas variables% &or e9emplo$
a

3

S a
2
3
2
M b

a
2
3

S a
22
3
2
M b
2
-e llaman soluciones del sistema de ecuaciones a los valores de las variables :ue satisfacen
simultanemente a todas las ecuaciones :ue componen el sistema% +esde el punto de vista de
la
23A
C6&

02ULB <% -0-2=M6- += =CU6C0B)=-


L0)=6L=-
23>
`
`
`
`
`

obtencion de las soluciones a las varibles se les suele denominar inco"nitas$ es decir valores no
conocidos :ue deseamos obtener o calcular%
Un sistema de ecuaciones puede tener infinitas soluciones$ puede tener una unica solucion
o puede no tener solucion% =n lo :ue si"ue$ nos centraremos en sistemas de ecuaciones :ue
tienen una unica solucion%
Una primera condicion para :ue un sistema de ecuaciones ten"an una unica solucion es :ue
el numero de inco"nitas presentes en el sistema coincida con el numero de ecuaciones%
+e modo "eneral podemos decir :ue vamos a estudiar metodos numericos para resolver con
un computador sistemas de n ecuaciones con n inco"nitas$
a

3

S a
2
3
2
S S a
n
3
n
M b

a
2
3

S a
22
3
2
S S a
2n
3
n
M b
2

a
n
3

S a
n2
3
2
S S a
nn
3
n
M b
n
Una de las "randes venta9as de los sistemas de ecuaciones lineales es :ue puede e3presarse en
forma de producto matricial$
a

3

S a
2
3
2
S S a
n
3
n
M b

`
`
z
`
a

a
2
6
bc d

a
n
3
z bc d
3

b
z bc d
b

a
2
3

S a
22
3
2
S S a
2n
3
n
M b
2
`
a
2
a
22

a
2n
`
`
3
2
` `
b
2
`

`
% %
%
% %
`

`
%
`
M
`
%
`

`
% %
`
%
%
` `
%
` `
%
`
a
n
3

S a
n2
3
2
S S a
nn
3
n
M b
n
`
a
n
a
n2
` ` ` ` `
a
nn
3
n
b
n
La matriz 6 recibe el nombre de matriz de coeficientes del sistema de ecuaciones$ el vector
3 es el vector de inco"nitas ! el vector b es el vector de terminos independientes% &ara
resolver un sistema de ecuaciones podramos aplicar lo aprendido en el captulo anterior sobre
al"ebra de matrices$
6 3 M b 3 M 6

b
=s decir$ bastara invertir la matriz de coeficientes ! multiplicarla por la iz:uierda por el
vector de coeficientes para obtener el vector de terminos independientes% +e a:u podemos
deducir una se"unda condicion para :ue un sistema de ecuaciones ten"a una solucion unica/
-u matriz de coeficientes tiene :ue tener inversa% ,eamos al"unos e9emplos sencillos%
2omaremos en primer lu"ar un sistema de dos ecuaciones con dos inco"nitas$
@3

S 3
2
M <
33

23
2
M

-i e3presamos el sistema en forma de producto de matrices obtenemos$



@

3


M

<

3 2

3
2

e invirtiendo la matriz de coeficientes ! multiplicandola por el vector de terminos


independientes se lle"a al vector de soluciones del sistema$

3


M

@

<

2' '

<


M M
3
2
3 2

3' @' 2
ador$9uan%9imene
3x 2x +1
1 2
4x /x +6
1 2
(x ,x )+(1,2)
1 2
@
x
2
<%% 0)2?B+UCC0B

)
23C
=n el e9emplo :ue acabamos de ver$ cada ecuacion corresponde a una recta en el plano$ en
la fi"ura <% se #an representado dic#as rectas "raficamente% =l punto en :ue se cortan es
precisamente la solucion del sistema%
10
8
6
4
2
0
2
4
6
1 0.5 0 0.5 1 1.5 2 2.5 3
x
1
*i"ura <%D -istema de ecuaciones con solucion u
nica
-upon"amos a#ora el si"uiente sistema$ tambien de dos ecuaciones con dos inco"nitas$
@3

S 3
2
M <

23

S
2
3
2
M
=l sistema no tiene solucion% -u matriz de coeficientes tiene determinante cero$ por lo :ue no
es invertible$

|6| M

2 '2

M 0
Y6

-i representamos "raficamente las dos ecuaciones de este sistema Efi"ura <%2F es facil entender
lo :ue pasa$ las rectas son paralelas$ no e3iste nin"un punto E3

$ 3
2
:ue pertenezca a las dos
rectas$ ! por tanto el sistema carece de solucion%
C6&

02ULB <% -0-2=M6- += =CU6C0B)=-


L0)=6L=-
2@0
rrador$9uan%9imen
4x /x +6
1 2
2x /0.5x + 1
1 2
x
2
10
5
0
5
10
15
1 0.5 0 0.5 1 1.5 2 2.5 3
x
1
*i"ura <%2D -istema de ecuaciones sin soluci
on
+os rectas paralelas lo son$ por:ue tienen la misma pendiente% =sto se refle9a en la matriz de
coeficientes$ en :ue las filas son proporcionales/ si multiplicamos la se"unda fila por dos$ obtenemos
la primera%
&or ultimo$ el sistema$
@3

S 3
2
M <

23

S
2
3
2
M 3
posee infinitas soluciones% la razon es :ue la se"unda ecuacion es i"ual :ue la primera
multipli1 cada por dosD es decir$ representa e3actamente la misma relacion lineal entre las
variables 3

! 3
2
$ por tanto$ todos los puntos de la recta son solucion del sistema% +e nuevo$ la
matriz de coeficientes del sistema no tiene inversa !a :ue su determinante es cero%
&ara sistemas de ecuaciones de dimension ma!or$ se cumple tambien :ue :ue el sistema no
tiene solucion unica si el determinante de su matriz de coeficiente es cero% =n todos los demas
casos$ es posible obtener la solucion del sistema invirtiendo la matriz de coeficientes !
multiplicando el resultado por el vector de terminos independientes%
ador$9uan%9imene
4x /x +6
1 2
2x /0.5x +3
1 2
x
2
<%2% CB)+0C0B)6M0=)2B 2@
10
8
6
4
2
0
2
4
6
1 0.5 0 0.5 1 1.5 2 2.5 3
x
1
*i"ura <%3D -istema de ecuaciones con infinitas soluciones
=n cuanto un sistema de ecuaciones tiene una dimension suficientemente "rande$ invertir
su matriz de coeficientes se torna un problema costoso o sencillamente inabordable%
+esde un punto de vista numerico$ la inversion de una matriz$ presenta frecuentemente
proble1 mas debido al error de redondeo en las operaciones% &or esto$ casi nunca se resuelven los
sistemas de ecuaciones invirtiendo su matriz de coeficientes% 6 lo lar"o de este captulo
estudiaremos dos tipos de metodos de resolucion de sistemas de ecuaciones% =l primero de
ellos recibe el nombre "enerico de metodos directos$ el se"undo tipo lo constitu!en los llamados
metodos iterativos%
<%2% Condicionamiento
=l la introduccion #emos visto :ue para :ue un sistema de ecuaciones ten"a solucion$ es
preciso :ue su matriz de coeficientes sea invertible% -in embar"o cuando tratamos de resolver un
sistema de ecuaciones numericamente$ empleando un ordenador$ debemos e3aminar
cuidadosamente ante la matriz de coeficientes del sistema% ,eamos un e9emploD el sistema$
C6&

02ULB <% -0-2=M6- += =CU6C0B)=-


L0)=6L=-
2@2
2iene como soluciones$
@3

S 3
2
M <
23

S 0$@3
2
M

>$;

3 M
@0
-i alteramos li"eramente uno de sus coeficientes$
@3

S 3
2
M <
23

S 0$@C3
2
M
Las soluciones se alteran bastante/ se vuelven apro3imadamente 0 veces mas "rande$

C>$;

3 M
@00
! si volvemos a alterar el mismo coeficiente$
@3

S 3
2
M <
23

S 0$@CC3
2
M
La solucion es apro3imadamente 00 veces mas "rande$

CC>$;

3 M
@000
La razon para estos cambios es facil de comprender intuitivamente/ a medida :ue apro3imamos
el coeficiente a 0$;$ estamos #aciendo :ue las dos ecuaciones lineales sean cada vez mas paralelas$
pe:uenVas variaciones en la pendiente$ modifican muc#o la posicion del punto de corte%
Cuando pe:uenVas variaciones en la matriz de coeficientes "eneran "randes variaciones en las
soluciones del sistema$ se dice :ue el sistema esta mal condicionado$ en otras palabrasD :ue no
es un sistema bueno para ser resuelto numericamente% Las soluciones obtenidas para un sistema
mal condicionado$ #a! :ue tomarlas siempre con bastante escepticismo%
&ara estimar el buen o mal condicionamiento de un sistema$ se emplea el numero de condici
on$ :ue definimos en el captulo anterior$ ;%;%;$ al #ablar de la factorizacion -,+% =l nu
mero de condicion de una matriz es el cociente entre sus valores sin"ulares ma!or ! menor%
Cuanto mas pro3imo a sea el numero de condicion$ me9or condicionada estara la matriz !
cuanto ma!or sea el numero de condicion peor condicionada estara%
Matlab tiene un comando especfico para obtener el numero de condicion de una matriz$
sin tener :ue calcular la factorizacion -,+$ el comando nc=cond,2-% -i lo aplicamos a la matriz
de coeficientes del ultimo e9emplo mostrado$
>> 2=/$ 11 !:
(.$440 2 =
$.(((( 1.((((
!.(((( (.$44(
>> nc=cond,2-
nc =
&.31!3e((3
=l numero
est del sistema%
bastante ale9ado de uno$ lo :ue$ en principio$ indica un mal condicionamiento
0ncidentalmente$ podemos calcular la factorizacion svd de la matriz de coeficientes ! dividir
el valor sin"ular ma!or entre el menor para comprobar :ue el resultado es el mismo :ue nos da
la funcion cond$
>> /D:7:X0=svd,2-
D =
%(.84$$ %(.$$.!
%(.$$.! (.84$$
7 =
$.'(4. (
( (.(((4
X =
%(.4.(! (.!$!$
%(.!$!$ %(.4.(!
>> nc=7,1:1-J7,!:!-
nc =
&.31!3e((3
Matlab emplea tambien la funcion rnc=rcond,2- para estimar el condicionamiento de
una matriz% )o describiremos el metodo$ simplemente diremos :ue en lu"ar de obtener un nu
mero de condicion para la matriz$ se utiliza un valor recproco% +e este modo$ cuanto mas se
apro3ima a uno el resultado de rcond$ me9or condicionada esta la matriz$ ! cuanto mas se
apro3ime a cero peor% &ara nuestro e9emplo anterior$
>> rnc=rcond,2-
rnc =
1.3333e%(($
`
`
`
`
`
`
`
`
`
`
&ro3imo a cero$ lo :ue indica un mal condicionamiento de 6% )otese :ue el resultado de
rcond$ no es el inverso del valor de cond%
<%3% Metodos directos
<%3%% -istemas trian"ulares
,amos a empezar el estudio de los metodos directos por los al"oritmos de resolucion de los
sis1 temas mas simples posibles$ a:uellos cu!a matriz de coeficientes es una matriz dia"onal$
trian"ular superior o trian"ular inferior%
-istemas dia"onales% Un sistema dia"onal es a:uel cu!a matriz de coeficientes es una matriz
dia"onal%
a

3

M b

`
`
z
`
a

6
bc d
0
0
3
z bc d
3

b
z bc d
b

a
22
3
2
M b
2
`
0 a
22

0
`
`
3
2
` `
b
2
`

`
% %
%
% %
`

`
%
`
M
`
%
`

`
% %
`
%
%
` `
%
` `
%
`
a
nn
3
n
M b
n
` ` ` ` ` `
0 0 a
nn
3
n
b
n
-u resolucion es trivial$ basta dividir cada termino independiente por el elemento
correspon1 diente de la dia"onal de la matriz de coeficientes$
3 M b
i
i
a
ii
&ara obtener la solucion basta crear en Matlab un sencillo bucle for$
n=size,2:1-1
x=zeros,n:1-1
for i=16n
x,i-=b,i-J2,i:i-1
end
-istemas trian"ulares inferioresD metodo de sustituciones pro"resivas% Un sistema
trian1 "ular inferior de n ecuaciones con n inco"nitas tendra la forma "eneral$
a

3

M b

`
z
`
a

`
6
bc d
0
0
3
z bc d
3

b
z bc d
b

a
2
3

S a
22
3
2
M b
2
`
a
2
a
22

0
`
`
3
2
` `
b
2
`

`
% %
%
% %
`

`
%
`
M
`
%
`

`
% %
`
%
%
` `
%
` `
%
`
a
n
3

S a
n2
3
2
S S a
nn
3
n
M b
n
` ` ` ` ` `
a
n
a
n2
a
nn
3
n
b
n
=l procedimiento para resolverlo a mano es mu! sencillo$ despe9amos la primera la primera
inco"nita de la primera ecuacion$
3 M
b

6 continuacion sustituimos este resultado en la se"unda ecuacion$ ! despe9amos 3


2
$
b
2
a
2
3

3
2
M
a
22
<%3% M=

2B+B-
+0?=C2B-
2@;
9M
+e cada ecuacion vamos obteniendo una componente del vector solucion$ sustitu!endo las
so1 luciones obtenidas en las ecuaciones anteriores$ as cuando lle"amos a la ecuacion i$
3
i
M
b
i

&

i



a
i9
3
9
a
ii
-i repetimos este mismo proceso #asta lle"ar a la ultima ecuacion del sistema$ n$
#abremos obtenido la solucion completa%
=L si"uiente codi"o calcula la solucion de un sistema trian"ular inferior mediante sustituciones
pro"resivas$
function x = progresivas,2:b-
E9sta Suncion permite obtener la solucion de un sistema triangular inferior
Eempleando sustituciones progresivas. <a variables de entrada son la matriz
Ede coeficientes 2 y el vector de terminos independientes b. la solucion se
Edevuelve como un vector columna en la varible x
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
ECbtenemos el tamano de la matriz de coeficientes y comprobamos que es
Ecuadrada:
/f:c0=size,2-1
if fN=c
error,*la matriz de coeficientes no es cuadrada*-
end
Econstruimos un vector solucion: inicialmente formado por
ceros: x=zeros,f:1-1
Econstruimos un bucle for para ir calculando progresivamente las soluciones
Edel sistema
for i=16f
Eprimero igualamos la solucion al termino independiente de la ecuacion
Eque toque...
x,i-=b,i-
Ey luego creamos un bucle para ir restando todas las soluciones
Eanteriores...
for )=16i%1
x,i-=x,i-%2,i:)-Ix,)-
end
Epara terminar dividimos por el elemento de la diagonal de la matriz de
Ecoeficientes...
x,i-=x,i-J2,i:i-
end
-istemas trian"ulares superioresD metodo de sustituciones re"resivas% =n este caso$
el sistema "eneral de n ecuaciones con n inco"nitas tendra la forma "eneral$
`
`
`
`
9MiS
`
a

3

S a
2
3
2
S S a
n
3
n
M b

`
`
z
`
a

6
bc d
a
2

a
n
3
z bc d
3

b
z bc d
b

a
22
3
2
S S a
2n
3
n
M b
2
`
0 a
22

a
2n
`
`
3
2
` `
b
2
`

`
% %
%
% %
`

`
%
`
M
`
%
`

`
`
% %
%
%
` `
%
` `
%
`
a
nn
3
n
M b
n
` ` ` ` ` `
0 0 a
nn
3
n
b
n
=l metodo de resolucion es identico al de un sistema trian"ular inferior$ simplemente :ue
a#ora$ empezamos a resolver por la ultima ecuacion$
3 M
b
n
n
a
I se"uimos sustitu!endo #acia arriba$
3
n
M
nn
b
n

a
E n F n
a
3
i
M
EnFEnF
b
i




&

n









a
i9
3
9
a
ii
=l codi"o para implementar este metodo es similar al de las sustituciones pro"resivas% -e de9a
como e9ercicio el construir una funcion en Matlab :ue calcule la solucion de un sistema trian"ular
superior por el metodo de las sustituciones re"resivas%
<%3%2% Metodos basados en las
factorizaciones
&uesto :ue sabemos como resolver sistemas trian"ulares$ Una manera de resolver sistemas m
as comple9os sera encontrar metodos de reducirlos a sistemas trian"ulares% +e este modo
evitamos invertir la matriz de coeficientes ! los posibles problemas de estabilidad numerica
derivados de dic#a operacion% =n el captulo anterior ;%;$ vimos varios metodos de factorizar
una matriz$ :ue permiten una aplicacion directa a la resolucion de sistemas%
*actorizacion LU% =n el captulo anterior ;%;% vimos como factorizar una matriz en el
producto de dos$ una trian"ular inferior L ! una trian"ular superior U % La factorizacion poda
incluir pivoteo de filas$ para alcanzar una solucion numericamente estable% =n este caso la
factorizacion LU tomaba la forma$
& 6 M L
U
+onde & representa una matriz de permutaciones%
-upon"amos :ue :ueremos resolver un sistema de n ecuaciones lineales con n inco"nitas :ue
representamos "enericamente en forma matricial$ como siempre$
6 3 M
b
-i calculamos la fatorizacion LU de su matriz de coeficientes$
6 & 6 M L
U
&odemos transformar nuestro sistema de ecuaciones en uno e:uivalente aplicando la matriz de
permutaciones$ por la iz:uierda$ a ambos lados del i"ual% =l efecto es e:uivalente a :ue cambiaramos
el orden en :ue se presentan las ecuaciones del sistema$

6 3 M b & 6 3 M
& b
-i sustituimos a#ora & 6 por su factorizacion LU$
& 6 3 M & b L U
3 M & b
=l nuevo sistema puede resolverse en dos pasos empleando sustituciones re"resivas ! sustitu1
ciones pro"resivas% &ara ello$ asociamos el producto U 3$ a un vector de inco"nitas au3iliar al
:ue llamaremos z$
U 3 M
z
-i sustituimos nuestro vector au3iliar z en la e3presion matricial de nuestro sistema de ecua1
ciones$
z
L U
z bc
3
d
M & b L z
M & b
=l sistema resultante es trian"ular inferior$ por lo :ue podemos resolverlo por sustituciones
pro"resivas$ ! obtener de este modo los valores de z% &odemos finalmente obtener la solucion del
sistema a traves de la definicion de z/ U 3 M z$ se trata de un sistema trian"ular superior$
:ue podemos resolver mediante sustituciones re"resivas%
,eamos un e9emplo% -upon"amos :ue :ueremos resolver el sistema de ecuaciones lineales$
`
3 2
`
`
3

` `
3
`
`
2
`

`
3
2
`
M
`
3
`
@ 3 3
3
>
=n primer lu"ar deberamos comprobar :ue la matriz de coeficiente esta bien condicionada$
>> 2=/1 3 !1! %1 111 $
30 2 =
1 3 !
! %1 1
1 $ 3
>>
nc=cond,2-
nc
=
!$.38!.
)o es un valor "rande$ con lo :ue podemos considerar :ue 6 esta bien condicionada%
Calculamos la factorizacion LU de la matriz de coeficientes$ para ello podemos emplear el
pro"rama lufact%m$ incluido en el captulo anterior ;%;%$ o bien la funcion lu de Matlab$
>> /< D
=0=lufact,2-
< =
1.(((( ( (
(.&((( 1.(((( (
(.&((( (....8 1.((((
D =
!.(((( %1.(((( 1.((((
( $.&((( !.&(((
( ( %(.$$$$
= =
( 1 (
( ( 1
1 ( (
6 continuacion debemos aplicar la matriz de permutaciones$ al vector de terminos indepen1
dientes del sistema$ para poder construir el sistema e:uivalente L U M & b$
>> b=/13131180
b =
13
3
18
>> bp==Ib
bp =
3
18
13
=mpleamos la matriz L obtenida ! el productobp M & b :ue acabamos de calcular$
para obtener por sustituciones pro"resivas$ el vector au3iliar z descrito mas arriba% =mpleamos
para ello la funcion progresivas$ cu!o codi"o incluimos en la seccion anterior$
>> z=progresivas,<:bp-
z =
3.((((
1'.&(((
%1.3333
*inalmente$ podemos obtener la solucion del sistema sin mas :ue aplicar el metodo de
las sustituciones re"resiva a la matriz U ! al vector au3iliar z :ue acabamos de obtener$

>> x=regresivas,D:z-
x =

La funcion regresivas no se #a suministrado ni e3iste en Matlab% -e construccion se #a de9ado como
e9ercicio en la seccion anterior%
1.((((
!.((((
3.((((
&ara comprobar :ue la solucion es correcta basta multiplicar la matriz de coeficientes del sistema
ori"inal por el resultado obtenido para 3 ! comprobar :ue obtenemos como resultado el vector de
terminos independientes%
>> 2Ix
ans =
13
3
18
*actorizacion de C#oles5!% Como vimos en el capitulo anterior ;%;%2$ la factorizacion de
C#o1 les5! permite descomponer una matriz 6 en el producto de de una matrz trian"ular
inferior$ por su traspuesta%
6 M L
L
2
&ara ello$ es preciso :ue 6 sea simetrica ! definida positiva Ever ;%@F%
&or tanto$ en el caso partcular de un sistema cu!a matriz de coeficientes fuera simetrica
! definida positiva$ podramos descomponerla empleando la factorizacion de C#oles5! !
resolver el sistema de modo analo"o a como #icimos con con la factorizacion LU$ sustituimos 6 por
el producto L L
2
$
+efinimos el vector au3iliar z$
6 3 M b L L
2

3 M b
L
2
3
M z
?esolvemos por sustituciones pro"resivas el sistema$
L z M
b
! por ultimo obtenemos 3 resolviendo por sustituciones re"resivas el sistema$
L
2
3 M
z
La si"uiente secuencia de comandos de Matlab muestra la resolucion del sistema$
`
2 ;
`
`
3

` `
;
`
`
; @ 2
`

`
3
2
`
M
`
3C
`
2 < 3
3
23
>> 2=/! & 11& 1$ !11 !
'0 2 =
! & 1
& 1$ !
1 ! '
1.$1$! ( (
3.&3&& 1.!!$. (
(..(.1 %(.$(8! !.3(4$
>> b=/1&1341!30
b =
1&
34
!3
>> <=choles+y,2-
< =
>> z=progresivas,<:b-
z =
1(.'(''
1.!!$.
'.4!8!
>> x=regresivas,<*:z-
x =
1.((((
!.((((
3.((((
>> 2Ix
ans =
1&
34
!3
=n este e9emplo se #a empleado la funcion choles+y$ cu!o codi"o se inclu!o en el cap
tulo anterior ;%;%2$ para factorizar la matriz de coeficientes del sistema% La factorizacion se
podra #aber llevado a cabo i"ualmente$ empleando la funcion de Matlab chol%
*actorizacion G? Como vimos en el captulo anterior ;%;%@$ la factorizacion G?$
descompone una matriz en el producto de una matriz orto"onal Ever ;%@F G por una matriz
trian"ular superior ?% -i obtenemos la factorizacion G? de la matriz de coeficientes de un
sistema$
6 3 M b G ?
3 M b
&odemos resolver a#ora el sistema en dos pasos% =n primer lu"ar$ como G es orto"onal$ G

M
G
2
$ podemos multiplicar por G
2
a ambos lados de la i"ualdad$
G ? 3 M b G
2
G ? 3 M G
2
b ?
3 M G
2
b
&ero el sistema resultante$ es un sistema trian"ular superior$ por lo :ue podemos resolverlo por
sustituciones re"resivas% 2omando el mismo e9emplo :ue resolvimos antes por factorizacion LU$
`
3 2
`
`
3

` `
3
`
`
2
`

`
3
2
`
M
`
3
`
@ 3 3
3
>
(.$(8! (.$'3. %(..8'3
(.81'& %(.&.(. (.(8.$
(.$(8! (.'... (.'11'
L =
!.$$4& !.($1! !.8&..
( $.'.!' !.3848
( ( (.3$4&
podemos a#ora resolverlo mediante factorizacion G?% &ara ello aplicamos la funcion WLS!
inclui1 da en el captulo anterior ;%;%@$ o directamente la funcion de Matlab qr$ a la matriz de
coeficientes del sistema$
>> 2=/1 3 !1! %1 111 $ 30
2 =
1 3 !
! %1 1
1 $ 3
>> /W:L0=WLS!,2-
W =
6 continuacion multiplicamos G
2
por el vector de terminos independientes$
>> b=/13131180
b =
13
3
18
>> z=W*Ib
z =
1&.1(&!
1'.&1$.
1.($8$
&or ultimo resolvemos el sistema ? 3 M G
2
b mediante sustituciones re"resivas !
comprobamos el resultado$
>> x=regresivas,L:z-
x =
1.((((
!.((((
3.((((
>> 2Ix
ans =
13.((((
3.((((
18.((((
*actorizacion -,+% La factorizacion svd ;%;%;$ descompone una matriz cual:uiera en el pro1
ducto de tres matrices$
6 M U -
,
2
+onde U ! , son matrices orto"onales ! - es una matriz dia"onal% -i calculamos la factorizaci
on svd de la matriz de coeficiente de un sistema$
6 3 M b U - ,
2

3 M b
Como en el caso de la factorizacion G?$ podemos aprovec#ar la orto"onalidad de las matrices
U ! , para simplificar el sistema$
U - ,
2
3 M b U
2
U - ,
2
3 M U
2
b -
,
2
3 M U
2
b
Como en casos anteriores$ podemos crear un vector au3iliar z$
,
2
3 M
z
de modo :ue resolvemos primero el sistema$
- z M U
2
b
Como la matriz - es dia"onal$ se trata de un sistema dia"onal :ue$ como #emos visto$ es trivial
de resolver%
Una vez conocido W podemos obtener la solucion del sistema ori"inal$ #aciendo a#ora uso
de la orot"onalidad de la matriz , $
,
2
3 M z , ,
2
3 M , z 3
M , z
,olvamos a nuestro e9emplo$
`
3 2
`
`
3

` `
3
`
`
2
`

`
3
2
`
M
`
3
`
@ 3 3
3
>
=n primer lu"ar factorizamos la matriz de coeficientes empleando el comando svd de Matlab$
>> 2=/1 3 !1! %1 111 $
30 2 =
1 3 !
! %1 1
1 $ 3
>> /D:7:X0=svd,2-
D =
%(.&4(8 %(.((&3 %(.8('8
%(.($11 %(.448& (.(3''
%(.8(&8 (.(&$8 (.&84.
7 =
'.3!3! ( (
( !.$343 (
( ( (.!&43
X =
%(.!334 %(..483 %(.&&$4
%(..83& (.$4!. %(.3.8'
%(.&.&. %(.3$'3 (..$(8
Calculamos a continuacion el valor del vector au3iliar z$
>> ba=D*Ib
ba =
%!!.3(.'
%!.(...
(.!3'(
>> z=7K%1Iba
z =
%3.&!.4
%(.8&18
(.41(1
por ultimo$ calculamos 3 ! comprobamos la solucion obtendida$
>> x=XIz
x =
1.((((
!.((((
3.((((
>> 2Ix
ans =
13.((((
3.((((
18.((((
<%3%3% =l metodo de eliminacion de (auss%
=l metodo de eliminacion "aussiana es el mismo descrito en el captulo anterior ;%;%
para obtener la matriz trian"ular superior U en la factorizacion LU de una matriz% Como !a se
e3plico en detalle$ el metodo consiste en #acer cero todos los elementos situados por deba9o de la
dia"onal de una matriz% &ara ello se sustitu!en pro"resivamente las filas de la matriz$ e3ceptuando
la primera$ por combinaciones adecuadas de dic#a fila con las anteriores%
2oda las discusion incluida en el captulo anterior sobre la eliminacion de (auss$ es
valida tambien para la resolucion de sistemas$ por lo :ue no volveremos a repetirla% )os
centraremos solo en su aplicacion al problema de resolver un sistema de ecuaciones lineales%
La idea fundamental$ es sacar partido de las si"uientes propiedades de todo sistema de ecua1
ciones lineales/
% Un sistema de ecuaciones lineales no cambia aun:ue se altere el orden de sus ecuaciones%
2% Un sistema de ecuaciones lineales no cambia aun:ue se multipli:ue cual:uiera de sus ecua1
ciones por una constante distinta de cero%
3% Un sistema de ecuaciones no cambia si se sustitu!e cual:uiera de sus ecuaciones por una
combinacion lineal de ella con otra ecuacion%
-i usamos las representacion matricial de un sistema de ecuaciones$ Cual:uiera de los cambios
descritos en las propiedades anteriores afecta tanto a la matriz de coeficientes como al vector de t
erminos independientes$ por e9emplo dado el sistema$
`
3 2
`
`
3

` `
3
`
`
2
`

`
3
2
`
M
`
3
`
@ 3 3
3
>
-i cambio de orden la se"unda ecuacion con la primera obten"o el si"uiente sistema e:uivalente$
`
2
`
`
3

` `
3
`
`
3 2
`

`
3
2
`
M
`
3
`
@ 3 3
3
>
=s decir$ se intercambia la primera fila de la matriz de coeficientes con la se"unda$ ! el primer
elemento del vector de terminos independientes con el se"undo% =l vector de inco"nitas permanece
inalterado%
-i a#ora sustituimos la se"unda fila$ por la diferencia entre ella ! la primera multiplicada por
0$;$ obtenemos de nuevo un sistema e:uivalente$
`
2
`
`
3

` `
3
`
`
0 3$; $;
`

`
3
2
`
M
`
$;
`
@ 3 3
3
>
6cabamos de dar los dos primeros pasos en el proceso de eliminacion de (auss para
convertir la matriz de coeficientes del sistema en una matriz trian"ular superiorD #emos
^piboteado^ las dos primeras filas ! despues #emos transformado en cero el primer elemento de la
se"unda fila$ com1 binandola con la primera% Kemos aplicado tambien esta misma combinacion
al se"undo elemento del vector de terminos independientes$ para :ue el sistema obtenido sea
e:uivalente al ori"inal%
&ara poder traba9ar de una forma comoda con el metodo de eliminacion de (auss$ se
suele construir una matriz$ conocida con el nombre de matriz ampliada$ anVadiendo a la
matriz de coeficientes$ el vector de terminos independientes como una columna mas$
=n nuestro e9emplo$
6$ b 6M M E6|bF
`
3 2
`
`
3
` `
3 2 3
`
`
2
`
$
`
3
`

`
2 3
`
@ 3 > @ 3 >
&odemos aplicar directamente a la matriz ampliada 6M el pro"rama de eliminacion de
(auss$ eligauss$ :ue incluimos en el captulo anterior ;%;%$ en la seccion dedicada a la
factorizacion LU% -i aplicamos eligauss a la matriz ampliada del sistema del e9emplo$
>> 2=/1 3 !1! %1 111 $
30 2 =
1 3 !
! %1 1
1 $ 3
>> b=/13131180
b =
13
3
18
>>
2H
2H=/2
=
1
b0
3 ! 13
! %1 1 3
1 $ 3 18
>> @2=eligauss,2H-
@2 =
1.(((( 3.(((( !.(((( 13.((((
( %..(((( %3.(((( %!3.((((
( ( (.&.1$ 1..1$3
=l pro"rama #a obtenido como resultado una nueva matriz en la :ue los elementos situados
por deba9o de la dia"onal son a#ora cero% &odemos reconstruir$ a partir del resultado obtenido un
sistema e:uivalente actual -eparando la ultima columna del resultado$
`
3 2 3
`
`
3 2
` `
3

` `
3
`
`
0 A 3 23
`

`
0 A 3
`

`
3
2
`
M
`
23
`
0 0 0$;A@ $A@3 0 0 0$;A 3
3
$A@3
=l sistema resultante de la eliminacion de (auss es trian"ular superior$ con lo :ue
podemos resolverlo directamente mediante sustituciones re"resivas$
>> @=@2,6:163-
@ =
1.(((( 3.(((( !.((((
( %..(((( %3.((((
( ( (.&.1$
>> bp=@2,6:$-
bp =
13.((((
%!3.((((
1..1$3
>> x=regresivas,@:bp-
x =
1.((((
!.((((
3.((((
=l pro"rama eligauss$ presenta el problema de :ue no inclu!e el pivoteo de filas% Como se
e3plico en el captulo anterior este en necesario para evitar :ue un cero o un valor
relativamente pe:uenVo en la dia"onal$ impida completar el proceso de eliminacion o #a"a los c
alculos inestables% 6 continuacion$ incluimos una version modificada de eligauss :ue inclu!e el
pivoteo de filas%
function D=eligaussp,2-
E9sta funcion obtiene una matriz triangular superior: a partir de una
Ematriz dada: aplicando el metodo de eliminacion gaussiana.
Erealiza piboteo de filas:
as
que lo primero que hace es comprobar si el
Eel elemento de la diagonal: de la fila que se va a emplear para eliminar
Eel mayor que los que tiene por deba)o en su columna: si no es asQ:
E intercambia la fila con la que tenga el elemento mayor en dicha columna.
ECbtenemos el numero de filas de la
matriz.. nf=size,2:1-1
D=21
E
for )=16nf%1 Erecorro todas la columnas menos la ultima
EEEEEEEEEEEpivoteo de filasEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
E3uscamos el elemento mayor de la columna ) de la diagonal para
aba)o maxcol=D,):)-1
index=)1
for l=)6nf
if D,l:)->maxcol
maxcol=D,l:)-1
index=l1
end
end
Esi el mayor no era el elemento de la diagonal D,):)-: intecambiamos la
Efila l con la fila
) if indexN=)
aux=D,):6-1
D,):6-=D,l:6-1
D,l:6-=aux1
end
EEEEEEEEfin del pivoteo de filasEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
for i=)16nf ELecorro las filas desde deba)o de la diagonal hasta la
Eultima en Hatlab tengo la suerte de poder mane)ar cada fila de un
Esolo golpe.
D,i:6-=D,i:6-%D,):6-ID,i:)-JD,):)-1
end
end
-i aplicamos esta funcion a nuestro e9emplo de siempre$
>> @2=eligaussp,2H-
@2 =
1 $ 3 18
( %1 %1 %&
( ( $ 1!
! separando en la matriz ampliada la matriz de coeficientes ! el vector de terminos
indepen1 dientes podemos resolver el sistema por sustituciones re"resivas$
>> @=@2,6:163-
@ =
1 $ 3
( %1 %1
( ( $
>> bp=@2,6:$-
bp =
18
%&
1!
>> x=regresivas,@:bp-
x =
1
!
3
<%3%@% (auss1Jordan ! matrices en forma reducida escalonada
=l metodo de eliminacion de (auss$ permite obtener a partir de una matriz arbitraria$
una matriz trian"ular superior% Una vez obtenida esta$ podramos se"uir transformado la
matriz de modo :ue #icieramos cero todos los elementos situados por encima de su dia"onal% &ara
ello bastara aplicar el mismo metodo de eliminacion de (auss$ la diferencia es :ue a#ora
eliminaramos #aramos ceros los elementos situados por encima de la dia"onal principal de la
matriz$ empezando por la ultima columna ! moviendonos de aba9o a arriba ! de derec#a a
iz:uierda% =ste proceso se conoce con el nombre de eliminacion de (auss1Jordan% &or e9emplo
supon"amos :ue partimos de la matriz :ue acabamos de obtener por eliminacion de (auss en
e9emplo anterior$
`
@ 3 >
`
(6 M
`
0 ;
`
0 0 @ 2
=mpezaramos por #acer cero el elemento "a
23
:ue es el :ue esta situado encma de u
ltimo elemento de la dia"onal principal$ para ello restariamos a la se"unda columna la tercera
multiplicada por ! dividida por @$
`
@ 3 >
` `
@ 3 >
`
`
0 0 0 S @'@ ; S 2'@
`
M
`
0 0 2
`
0 0 @ 2 0 0 @ 2
6 continuacion$ =liminaramos el elemento situado en la misma columna$ una fila por
encima% &ara ello restamos a la primera la tercera multiplicada por 3 ! dividida por @ $
`
0 @ 0 3 3 @'@ > 2
3'@
`
`
@ 0 C
`
`
0 0 2
0 0 @ 2
`
M
`
0 0 2
`
0 0 @ 2
Como #emos lle"ado a la primera columna$ pasamos a eliminar los elementos de la si"uiente
columna de la iz:uierda% =n este e9emplo solo tenemos un elemento por encima de la dia"onal%
&ara eliminarlo restamos de la primera fila la se"unda multiplica por @ ! dividida por $
`
0 @ @ EF'EF 0 C E2F @'EF
`
`

0 0
`
`
0 0 2
`
M
`
0 0 2
`
0 0 @ 2 0 0 @ 2
-i a#ora separamos en la matriz ampliada resultante$ la matriz de coeficientes ! el vector de
terminos independientes$ obtenemos un sistema dia"onal$ cu!a solucion es trivial$
`
0 0
`
`
0 0
` `
3

` `

` `

`
`
0 0 2
`

`
0 0
`

`
3
2
`
M
`
2
`
3 M
`
2
`
0 0 @ 2 0 0 @ 3
3
2 3
=l si"uiente pro"rama gauss%)ordan$ anVade las lneas de codi"o necesarias a eligaussp
para realizar la eliminacion de (auss1Jordan completa de una matriz%
function D=gauss#)ordan,2-
E9sta funcion realiza la eliminacion de @2D77%;CLB2": que permite obtener:
Ea partir de una matriz dada: una matriz cuyos elementos por encima y
Edeba)o de la diagonal son todos cero.
ECbtenemos el numero de filas de la
matriz.. nf=size,2:1-1
D=21
E
Eprimera parte6 reduccion a una matriz triangular pro eliminacion
Eprogresiva
for )=16nf%1 Erecorro todas la columnas menos la ultima
EEEEEEEEEEEpivoteo de filasEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
E3uscamos el elemento mayor de la columna ) de la diagonal para
aba)o maxcol=D,):)-1
index=)1
for l=)6nf
if D,l:)->maxcol
maxcol=D,l:)-1
index=l1
end
end
Esi el mayor no era el elemento de la diagonal D,):)-: intecambiamos la
Efila l con la fila
) if indexN=)
aux=D,):6-1
D,):6-=D,l:6-1
D,l:6-=aux1
end
EEEEEEEEfin del pivoteo de filasEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
for i=)16nf ELecorro las filas desde deba)o de la diagonal hasta la
Eultima en Hatlab tengo la suerte de poder mane)ar cada fila de un
Esolo golpe.
D,i:6-=D,i:6-%D,):6-ID,i:)-JD,):)-1
end
end
Esegunda parte: obtencion de una matriz diagonal mediante eliminacion
Eregresiva: Lecorremos ahora las columnas en orden inverso empezando por el
Efinal... ,9liminacion de @auss ;ordan-
for )=nf6%16!
for i=)%16%161 ELecorro las filas desde encima de la diagonal hasta la
Eprimera:
D,i:6-=D,i:6-%D,):6-ID,i:)-JD,):)-1
end
end
-i tras realizar la eliminacion de (auss1Jordan a la matriz ampliada de un sistema$ dividimos
cada fila por el elemento :ue ocupa la dia"onal principal$ obtendramos en la ultima columna
las soluciones del sistema% =n nuestro e9emplo$
`
0 0
`
`
0 0 2
`
0 0 3
La matriz resultante se dice :ue esta en forma escalonada reducida por filas % -e de9a como
un e9ercicio$ anVadir el codi"o necesario al pro"rama anterior para :ue de como resultado la
forma escalonada reducida por filas de la matriz ampliada de un sistema% Como siempre$ Matlab
tiene su propia funcion para obtener formas escalonadas reducidas por filas% -e trata de la funcion
rref Eel nombre es la abreviatura en in"les de ?o. ?educed =c#elon *ormF%
>>
2 2
=
1 3 $ & 34
! %1 ! 3 18
$ %3 ! 1 8
! 3 $ %! 1!
>> 9S=rref,2-
9S =
`
%
` 3
0
M
` `
1 ( ( ( 1
( 1 ( ( !
( ( 1 ( 3
( ( ( 1 $
<%@% Metodos iterativos
Los metodos iterativos se basan en una apro3imacion distinta al problema de la resolucion
de sistemas de ecuaciones lineales% La idea en todos ellos es buscar un metodo :ue$ a partir de
un valor inicial para la solucion del sistema$ va!a refinandolo pro"resivamente$ acercandose cada
vez mas a la solucion real% La fi"ura <%@$ muestra un dia"rama de flu9o "eneral para todos los m
etodos iterativos de resolucion de sistemas%
-olucion inicial 3
s
M 3
0
Calculamos
3
sS
M M E3
s
F
es k3
sS
3
s
k
tolO
-

conver"enciaD
terminar
)o
3
s
M 3
sS
*i"ura <%@D +ia"rama de flu9o "eneral de los metodos iterativos para resolver sistemas de
ecuaciones% La funcion M E3F es la :ue especifica en cada caso el metodo%
-i"uiendo el dia"rama de flu9o$ el primer paso$ es proponer un vector con soluciones del sistema%
-i se conocen valores pro3imos a las soluciones reales se eli"en dic#os valores como solucion
inicial% -i$ como es #abitual$ no se tiene idea al"una de cuales son las soluciones$ lo mas #abitual es
empezar con el vector E0F$
`
0
`
0
` `
`
%
`
0
6 partir de la primera solucion$ se calcula una se"unda$ si"uiendo la especificaciones concretas
del metodo :ue se este usando% =n el dia"rama de flu9o se #a representado de modo "en
erico el metodo mediante la funcion M EF% +edicaremos buena parte de esta seccion a
estudiar al"unos de los metodos mas usuales%
Una vez :ue se tienen dos soluciones se comparan% &ara ello$ se #a utilizado el modulo
del vector diferencia de las dos soluciones% =ste modulo nos da una medida de cuanto se parecen
entre
<%@% M=

2B+B-
02=?620,B-
;
2


M
2
M

2
M

M
2
2
M

M
s las dos soluciones% -i la diferencia es suficientemente pe:uenVa$ menor :ue un cierto valor
de tolerancia tol damos la solucion por buena ! el al"oritmo termina% =n caso contrario$
copiamos la ultima solucion obtenida en la penultima ! repetimos todo el proceso% =l bucle se
repite #asta :ue se cumpla la condicion de :ue el modulo de la diferencia de dos soluciones
sucesivas sea menor :ue la tolerancia establecida%
Una pre"unta :ue sur"e de modo inmediato del es:uema "eneral :ue acabamos de introducir
es si el proceso descrito conver"e$ !$ caso de #acerlo si conver"e a la solucion correcta del
sistema%
La respuesta es :ue los sistemas iterativos no siempre conver"en$ es decir$ no esta "arantizado
:ue tras un cierto numero de iteraciones la diferencia entre dos soluciones sucesivas sea menor
:ue un valor de tolerancia arbitrario% La conver"encia$ como veremos mas adelante$ dependera
tanto del sistema :ue se :uiere resolver como del metodo iterativo empleado% &or otro lado$ si se
cumple siempre :ue si el metodo conver"e$ las sucesivas soluciones obtenidas se van
apro3imando a la solucion real del sistema%
<%@%% =l metodo de
Jacobi%
Bbtencion del al"oritmo% =mpezaremos por introducir el metodo iterativo de Jacobi$ por
ser el mas intuitivo de todos% &ara introducirlo$ emplearemos un e9emplo sencillo% -upon"amos
:ue :ueremos resolver el si"uiente sistema de ecuaciones$
33

S 33
2
M ;
33

S @3
2
M A
-upon"amos :ue supieramos de antemano el valor de 3
2
$ para obtener 3

$ bastara
entonces despe9ar 3

$ por e9emplo de la primera ecuacion$ ! sustituir el valor conocido de 3
2
$
;
33
2
3

M
3
+e modo analo"o$ si conocieramos previamente 3

$ podramos despe9ar 3
2
$ a#ora por
e9emplo de la se"unda ecuacion$ ! sustituir el valor conocido de 3

$
A
33

3
2
M
@
=l metodo de Jacobi lo :ue #ace es suponer conocido el valor de 3
2
$ 3
E0F
M 0$ ! con el
obtener
un valor de 3
EF
$
3
EF
;
3 3
E0F
3
; 3 0
M $<A
3
3
2
$
a continuacion supone conocido el valor de 3

$ 3
E0F
M 0 ! con el obtiene un nuevo valor para
3
EF
A
3 3
E0F
@
A 3 0
M $A;
@
=n el si"uiente paso$ tomamos los valores obtenidos$ 3
EF
! 3
EF
como punto de partida para
calcular unos nuevos valores$
3
E2F
;
33
EF
2
; 3 $A;

M
3
E2F
M
3
A
3 3
EF
@
C6&

02ULB <% -0-2=M6- += =CU6C0B)=-


L0)=6L=-
<
M 0$;
3
A 3 $<A
M 0$;
@

M
2
2
M

3
E0F
3
E0F
3
E20F
3
E20F
i
M
! en "eneral$
3
EsSF
; 3 3
EsF
3
3
EsSF
A 3 3
EsF
@
-i repetimos el mismo calculo diez veces obtenemos$

M 0$C<>A;
2
M 0$C<>A;
-i lo repetimos veinte veces$

M $020>3
2
M $023@3
La solucion e3acta del sistema es 3

M $ 3
2
M % -e"un aumentamos el numero de
iteraciones$ vemos como las soluciones obtenidas se apro3iman cada vez mas a la solucion real%
6 partir del e9emplo$ podemos "eneralizar el metodo de Jacobi para un sistema cual:uiera de
n ecuaciones con n inco"nitas$
a

3

S a
2
3
2
S S a
n
3
n
M b

a
2
3

S a
22
3
2
S S a
2n
3
n
M b
2

a
n
3

S a
n2
3
2
S S a
nn
3
n
M b
n
La solucion para la inco"nita 3
i
en la iteracion$ s S a partir de la solucione obtenida en
la iteracion s toma la forma$
&
EsF
3
EsSF
b
i

9 Mi
a
i9
3
9
aii
6 continuacion$ incluimos el codi"o correspondiente al calculo de una iteracion del al"oritmo
de Jacobi% =ste codi"o es el :ue corresponde$ para el metodo de 9acobi$ a la funcion M EF del
dia"rama de flu9o de la fi"ura <%@%
xs=xs11
Evolvemos a inicializar el vector de soluciones al valor de los
Eterminos independientes
xs1=b1
for i=16n Ebucle para recorrer todas las ecuaciones
for )=16i%1 Erestamos la contribucion de todas las
incognitas xs1,i-=xs1,i-%2,i:)-Ixs,)-1 Epor
encima de x,i-
end
for )=i16n Erestamos la contribucion de todas las incognitas
` `
`
`
`
`
`
%
`
`
`
`
%
`
end
Epor deba)o de x,i-
xs1,i-=xs1,i-%2,i:)-Ixs,)-1
end
Edividimos por el elemento de la
diagonal: xs1,i-=xs1,i-J2,i:i-1
=3presion matricial para el metodo de Jacobi% =l metodo de Jacobi :ue acabamos
de e3poner puede e3presarse tambien en forma matricial% =n Matlab$ el empleo en forma
matricial$ tiene la venta9a de a#orrar bucles en el calculo de la nueva solucion a partir de la
anterior% -i e3presamos un sistema "eneral de orden n en forma matricial$
6
z
`
a

a
2
bc

a
n
`
d
3
bc d
3

3
2
b
z bc d
b

b
2
`
a
2
a
22
a
2n
` ` ` ` `
` ` ` ` ` `
`
% %
%
% %
` `
%
` M `
%
`
`
% %
%
%
` `
%
` `
%
`
a
n
a
n2
a
nn
3
n
b
n
&odramos separar en tres sumandos la e3presion de la iz:uierda del sistemaD una matriz
dia1 "onal +$ una matriz estrictamente dia"onal superior U $ ! una matriz estrictamente
trian"ular inferior L$
`
+
`
z
`
b
c
U
`
d
`
z
bc
L
`
d
`
z
bc
`
`
d
`
3
`
z bc
`
d
b
`
z bc
`
d
`
a

0
0
`
0 a22

0
0 a
2

a
n
0 0
a2n
0 0 0
`
3

b

a2 0 0
`
32
b2
`
` ` ` ` ` `
`
` ` ` `
`
` ` `
% %
%
` `
% %
%
%
` `
%
` `
%
`
`
`
% %
%
%
%
%
` S `
%
%
%
%
%
` S `
% % %
%
%
`
`
`
%
` M `
%
`
`
`
% %
`
%
` `
% % %
` `
% % %
`
`
%
` `
%
`
`
0 0
a
nn
0 0
0
a
n
a
n2
0
`
3
n
b
n
-i pasamos los terminos correspondientes a las dos matrices trian"ulares al lado derec#o de
la i"ualdad$
`
z
a

0
+
bc d

0
3
bc d
3

`
0 a
22

0
`
`
3
2
`
` ` ` `
`
% %
%
% %
` `
%
` M
`
% %
%
%
` `
%
`
0 0
a
nn
3
n
b
`
z bc d
b

`
U
bc
`
d
L
`
z
bc
`
`
d
`
3
`
z bc
`
d
`
0 a
2

a
n
0 0 0
`
3

M
`
b
2
`
`
`
0 0
a
2n
`
`
a
2
0
0
`
`
`
3
2
`
` `
`
` `
S
`
`
%
%
%
`
`
`
%
`
`
%
`
`
`
%
%
%
%
%
%
` % % %
%
%
`
`
`
%
`
`
`
%
`
`
% %
b
n
`
` `
% %
%
`
`
`
`
%
`
3
`
0 0
0
a
n
a
n2
0
` n
-i e3aminamos las filas de la matrices resultantes a uno ! otro lado del i"ual$ es facil ver :ue
de cada una de ellas coincide con la e3presion correspondiente a una iteracion de del m
etodo de
3
3
`
`

a
0
`
3
%
`
`
`
`
%
`
3
3
`
`
%
`
`
%
%
`
%
`
`
`
s
`
`
`
% %
`
` `
`
`
n
`
Jacobi$ sin mas :ue cambiar los valores de las inco"nitas a la iz:uierda del i"ual por 3
EsSF
! la
derec#a por 3
EsF
$
+
3
sS
z
`
a

0
bc d

0
`
z
E
b
sS
c
F
`
d

`
0 a22
0
`
`
EsSF
`
` `
`3
2
`
M `
% %
%
% %
`
`
%
`
`
% % %
%
` `
` `
0 0
a
nn
EsSF
n
b
z bc d
b

`
U
`
0 a
2
bc
n
`
d
`
L
`
0
bc

0
d
3
s
`
z bc
s
`
d

s
M
`
b
2
`
`
`
0 0
a
2n
`
`
a
2
0
0
`
`
`
3
2
`
` `
`
` `
S
`
`
%
%
%
`
`
`
%
`
`
%
`
`
`
%
%
%
%
%
%
`
% % %
%
`

`
%
`
`
% %
b
n
`
` `
% % %
`
`
`
`
%
`
s
`
0 0
0
a
n
a
n2
0
`
3
n
! multiplicar a ambos lados por la inversa de la matriz +
2
$
3
sS
+
`
b
`
U L
`
3
s
`
`
z
3
E
b
sS
c
F
`
d
z bc
`

d

`
z
`
bc
`
d
bc
`
d
`
z
bc
`
d
`
`
z bc
s
`
d

`
a

0
0
` b

`
0 a
2

a
n
0 0
0
`
3

`
`
3
EsSF
`
`
0 a
22
0
`
`
`
b
2
`
`
`
0 0
a
2n
a
2
0 0
`
3
`
`
2
%
`
M
`
%

%
%
`
`
`
%
`
`
` ` `
` ` `
`
2
`
` `
`
%
`
`
%
%
%
%
%
`
`
`
%
` `
% %
%
%
%
` S `
%
%
%
%
%
` `
%
` `
` % `
`
`
`
`
`
%
` `
`
`
`
%
%
` `
% %
%
%
`
%
`
`
` `
EsSF
n
0 0
a
nn
`
b
n `
`
0 0
0
a
n
a
n2
0
`
s
`
=l resultado final es una operacion matricial$
3
EsSF
M +

b +

EL S U F 3
s
:ue e:uivale al codi"o para una iteracion !$ por tanto a la funcion M EF del metodo de
Jacobi% -i analizamos la ecuacion anterior$ observamos :ue el termino$ +

b es fi9o% =s decir$
permanece i"ual en todas la iteraciones :ue necesitemos realizar para :ue la solucion conver9a%
=l se"undo termino$ tiene tambien una parte fi9a$ +

EL S U F -e trata de una matriz de
orden n$ i"ual al del sistema :ue tratamos de resolver$ =sta matriz$ recibe el nombre de matriz del
metodo$ se suele representar por la letra K ! como veremos despues esta directamente relaciona
`
con la conver"encia
del metodo%
-i :ueremos implementar en Matlab el metodo de Jacobi en forma matricial$ lo mas
eficiente es :ue calculemos en primer lu"ar las matrices +$ L$ U$ f M +

b ! K % Una vez
calculadas$ empleamos el resultado para apro3imar la solucion iterativamente% ,eamos con con
un e9emplo como construir la matrices en Matlab% -upon"amos :ue tenemos el si"uiente sistema$
`
@ 2
`
`
3

` `
;
`
`
3 ;
`

`
3
2
`
M
`
@
`
< 3
3
A
2
+ es una matriz dia"onal su inversa se calcula trivialmente sin mas cambiar cada elemento de la dia"onal por
su inverso%
=n primer lu"ar$ calculamos la matriz +$ a partir de la matriz de coeficientes del sistema$
empleando el comando de Matlab diag% 6plicando diag a una matriz e3traemos en un vector los
elementos de su dia"onal$
2 =
$ ! %1
3 %& 1
1 %1 '
>> d=diag,2-
d =
$
%&
'
6plicando diag a un vector construimos una matriz con los elementos del vector colocados
sobre la dia"onal de la matriz% =l resto de los elementos son cero%
>> B=diag,d-
B =
$ ( (
( %& (
( ( '
-i aplicamos dos veces diag sobre la matriz de coeficientes de un sistema$ obtenemos directa1
mente la matriz +$
>> B=diag,diag,2--
B =
$ ( (
( %& (
( ( '
&ara calcular las matrices L ! U $ podemos emplear los comandos de Matlab$ triu ! tril
:ue e3traen una matriz trian"ular superior ! una matriz trian"ular inferior$ respectivamente$ a
partir de una matriz dada%
>> TD=triu,2-
TD =
$ ! %1
( %& 1
( ( '
>> T<=tril,2-
T< =
$ ( (
3 %& (
1 %1 '
Las matrices L ! U son estrictamente trian"ulares superior e inferior$ &odemos obtenerlas
restando a las matrices :ue acabamos de obtener la matriz +$
>> D=triu,2-%B
D =
( ! %1
( ( 1
( ( (
>> <=tril,2-%B
< =
( ( (
3 ( (
1 %1 (
2ambien podemos obtenerlas directamente$ empleando solo la matriz de coeficientes$
>> D=2%tril,2-
D =
( ! %1
( ( 1
( ( (
>> <=2%triu,2-
< =
( ( (
3 ( (
1 %1 (
Construimos a continuacion el vector f $
>> f=BK%1Ib
f =
1.!&((
(.8(((
!.8333
Construimos la matriz del sistema$
>> ^=%BK%1I,<D-
^ =
( %(.&((( (.!&((
(.'((( ( (.!(((
%(.1''. (.1''. (
i
M
i 9
i
l
i
6 partir de las matrices construidas$ el codi"o para calcular una iteracion por el metodo
de
Jacobi sera simplemente$
xs1=f^Ixs
=n el si"uiente fra"mento de codi"o se reunen todas las operaciones descritas$
...
...
Eobtenemos el tamano del sistema:
n=size,2:1-1
Ecreamos un vector de soluciones
inicial: xs=zeros,n:1-1
Ecreamos las matrices del metodo
B=diag,diag,2--1
D=2%tril,2-1
<=2%triu,2-1
E2<ternativamente para )acobi podemos crear una solo matriz equivalente a
E<D: <pD=2%B
f=BK%1Ib1
^=%BK%1I,<D-1
Ecalculamos la primera
iteracion: xs1=f^Ixs1
Ecalculamos la diferencia entre las dos
soluciones: tolf=norm,xs1%xs-1
Eponemos a 1 el contador de
iteraciones. it=11
Ea partir de
aqu
vendrQa el codigo necesario para calcular las
Esucesivas iteraciones hasta que la solucion
conver)a
...
...
<%@%2% =l metodo de (auss1
-eidel%
Bbtencion del al"oritmo% =ste metodo aplica una me9ora$ sencilla ! lo"ica al metodo de
Jacobi :ue acabamos de estudiar% -i volvemos a escribir la e3presion "eneral para calcular una
iteracion de una de las componentes de la solucion de un sistema por el metodo de Jacobi$
&
EsF
3
EsSF
b
i

9 Mi
a
i9
3
9
a
Bbservamos :ue para obtener el termino
3
EsF
ii
empleamos todos los terminos 3
EsSF
$ 9 M
i
de la iteracion anterior% -in embar"o$ es facil darse cuenta :ue$ como el al"oritmo va calculando
las componentes de cada iteracion por orden$ cuando vamos a calcular 3
EsSF
$ disponemos !a del
resultado de todas las componentes anteriores de la solucion para la iteracion s S % =s
decir$ sabemos !a cual es el resultado de 3
EsSF
$ l f i% -i el al"oritmo conver"e$ esta soluciones
seran me9ores :ue las obtenidas en la iteracion anterior% -i las usamos para calcular 3
EsSF
$ el
resultado


M
2
2
M
3
M
i
M
:ue obtendremos$ ser
deprisa%
mas pro3imo a la solucion e3acta ! por tanto el al"oritmo conver"e mas
La idea$ por tanto seraD
&ara calcular 3
EsSF
procedemos i"ual :ue en el metodo de Jacobi%
&
n EsF
3
EsSF
b
i

9 M2
a
9
3
9
a
&ara calcular 3
EsSF

usamos la solucion :ue acabamos de obtener 3


EsSF
! todas las restantes
soluciones de las iteraciones anteriores$
sS
&
n EsF
3
EsSF
b
i
3


9 M3
a
29
3
9
a22
&ara calcular 3
EsSF
usamos las dos soluciones :ue acabamos de obtener 3
EsSF
$ 3
EsSF
! todas
3 2
las restantes soluciones de las iteraciones de la iteraciones anteriores$
sS
sS
&
n EsF
3
EsSF
b
i
3

3
2

9 M@
a
39
3
9
a33
I para una componente i cual:uiera de la solucion$ obtenemos la e3presion e3presion
"eneral del metodo de (auss1-eidel$
&
EsSF
&
EsF
3
EsSF
b
i

9 fi
a
i9
3
9

9 _i
a
i9
3
9
aii
=l si"uiente codi"o de Matlab implementa una iteracion del metodo de (auss1-eidel !
puede considerarse como la funcion M EF$ incluida en el dia"rama de flu9o de la fi"ura <%@$ para
dic#o metodo%
xs=xs11
Evolvemos a inicializar el vector de soluciones al valor de los
Eterminos independientes
xs1=b1
for i=16n Ebucle para recorrer todas las ecuaciones
for )=16i%1 Erestamos la contribucion de todas las
incognitas xs1,i-=xs1,i-%2,i:)-Ixs1,)-1 Epor
encima de x,i-
end
for )=i16n Erestamos la contribucion de todas las incognitas
Epor deba)o de x,i-
xs1,i-=xs1,i-%2,i:)-Ixs,)-1
end
end
Edividimos por el elemento de la
diagonal: xs1,i-=xs1,i-J2,i:i-1
Ecalculamos la diferencia entre las dos
soluciones: tolf=norm,xs1%xs-1
Eincrementamos el contador de
iteraciones it=it11
=s interesante destacar$ :ue el unico cambio en todo el codi"o respecto al metodo de Jacobi
es la sustitucion de la variable xs,)- por la variable xs1,)- al final del primer bucle for
anidado%
*orma matricial del metodo de (auss1-eidel% +e modo analo"o a como #icimos para
el metodo de Jacobi$ es posible obtener una solucion matricial para el metodo de (auss1-eidel%
-upon"amos :ue realizamos la misma descomposicion en sumandos de la matriz de
coeficientes :ue empleamos para el metodo de Jacobi$
6 3 M b E+ S L S U F 3
M b
=n este caso$ en calculo de cada componente de la solucion en una iteracion intervienen las
com1 ponentes de la iteracion anterior :ue estan por deba9o de la :ue :ueremos calcular$ por
tanto solo deberemos pasar a la derec#a de la i"ualdad$ la matriz U $ Gue contiene los
coeficientes :ue multiplican a dic#as componentes$
E+ S L S U F 3 M b E+ S LF 3 M b
U 3
-ustitu!endo 3 a cada lado de la i"ualdad por 3
EsSF
! 3
EsF
! multiplicando por la inversa de
+ S U a ambos lados$ obtenemos la e3presion en forma matricial del calculo de una iteracion
por el metodo de (auss1-eidel$
3
EsSF
M E+ S LF

b E+ S LF

U
3
EsF
0"ual :ue #emos #ec#o en con el metodo de Jacobi$ podemos identificar las partes fi9as :ue no
cambian al iterarD f M E+ S LF

b ! la matriz del metodo$ :u en este caso es$ K M E+ S LF

U %
=l si"uiente fra"mento de codi"o muestra la construccion de las matrices necesarias para im1
plementar en Matlab el metodo de (auss1-eidel$
...
...
Eobtenemos el tamano del
sistema:
n=size,2:1-1
Ecreamos un vector de soluciones
inicial: xs=zeros,n:1-1
Ecalculamos las matrices necesarias
B=diag,diag,2--1
D=2%tril,2-1
<=2%triu,2-1
f=,B<-K,%1-Ib1
^=%,B<-K,%1-ID
Ecalculamos la primera iteracion
xs1=f^Ixs1
Ecalculamos la diferencia entre las dos
soluciones: tolf=norm,xs1%xs-1
Eponemos a 1 el contador de
iteraciones. it=11
E2 partir de
aqu
vendrQa el codigo necesario para calcular las
E7ucesivas iteraciones hasta que la solucion conver)a.
orrador$9uan%9imenezY
t
o
l
.
+
6
6
x
(
&
/
1
)

x
(
&
)
6
6
t
o
l
.
+
6
6
x
(
&
/
1
)

x
(
&
)
6
6
=n "eneral$ el metodo de (auss1-eidel es capaz de obtener soluciones$ para un sistema dado
! un cierto valor de tolerancia$ empleando menos iteraciones :ue el metodo de Jacobi% &or
e9emplo$ si aplicamos ambos metodos a la resolucion del sistema$
`
@ 2
`
`
3

` `
;
`
`
3 ;
`

`
3
2
`
M
`
@
`
< 3
3
A
=mpleando en ambos casos una tolerancia tol M 0$0000$ el metodo de Jacobi necesita
23 iteraciones para lo"rar una solucion$ mientras :ue el de (auss1-eidel solo necesita 3% La
fi"ura
<%;$ muestra la evolucion de la tolerancia tol M k3
EsSF
3
EsF
k$ en funcion del numero de iteraci
on%
=n ambos casos el valor inicial de la solucion se tomo como el vector E0$ 0$ 0F
2
%
4
3.5
C%1&&Dei'el
E%o.i
3
2.5
3
x 10
4
@et%lle 'e l%& Flti(%& iter%io#e&, (tolB0.00001)
2
3
1.5
2
1
1
0.5
0
8 ! 10 11 12 13 14 15 16 1" 18 1! 20 21 22 23 24
#4 'e iter%i5#
0
0 1 2 3 4 5 6 " 8 ! 10 11 12 13 14 15 16 1" 18 1! 20 21 22 23 24
#4 'e iter%i5#
*i"ura <%;D evolucion de la tolerancia Emodulo de la diferencia entre dos soluciones sucesivasF para
un mismo sistema resuelto mediante el metodo de (auss1-eidel ! el metodo de Jacobi
<%@%3% 6morti"uamiento%
=l amorti"uamiento consiste en modificar un metodo iterativo$ de modo :ue en cada iteraci
on$ se da como solucion$ la media ponderada de los resultados de dos iteraciones sucesivas$
3
EsSF
M x 3

S E xF
3
EsF
+onde 3
EF
representa el valor :ue se obtendra aplicando una iteracion del metodo a 3
EsF
$ es decir sera el valor de 3
EsSF
si no se aplica amorti"uamiento%
=l parametro x recibe el nombre de factor de rela9amiento% -i 0 f x f se trata de un m
etodo de subrela9acion% -u uso permite resolver sistemas :ue no conver"en si se usa el mismo
metodo si rela9acion% -i . _ 0 el metodo se llama de sobrerela9acion$ permite acelerar la
conver"encia
i
M x

i
EL S U F
3
respecto al mismo metodo sin rela9acion% &or ultimo$ si #acemos x M $ recuperamos el m
etodo ori"inal sin rela9acion%
=l metodo de Jacobi amorti"uado% -e obtiene aplicando el metodo de rela9acion :ue
acaba1 mos de describir$ al metodo de Jacobi% La e3presion "eneral de una iteracion del metodo
de Jacobi amorti"uando sera$
3
EF
z
&
bc
EsF
d
3
EsSF
b
i

9 Mi
a
i9
3
9
a
ii
SEx F 3
s
&ara implementarlo en Matlab$ bastara anVadir al codi"o del metodo de Jacobi una lnea
inclu1 !endo el promedio entre las dos soluciones sucesivas$
while norm,xs1%xs->tol
xs=xs11
Evolvemos a inicializar el vector de soluciones al valor de los
Eterminos independientes
xs1=b1
for i=16n Ebucle para recorrer todas las ecuaciones
for )=16i%1 Erestamos la contribucion de todas las
incognitas xs1,i-=xs1,i-%2,i:)-Ixs,)-1 Epor
encima de x,i-
end
for )=i16n Erestamos la contribucion de todas las incognitas
Epor deba)o de x,i-
xs1,i-=xs1,i-%2,i:)-Ixs,)-1
end
end
Edividimos por el elemento de la
diagonal: xs1,i-=xs1,i-J2,i:i-1
end
Epromediamos la solucion obtenida con la anterior ,amortiguamiento-
xs1=wIxs1,1%w-Ixs
=n forma matricial$ la e3presion "eneral del metodo de Jacobi amorti"uado sera$
3
EF
3
EsSF
M x
z
+

b +

c
s

d
SE
.F3
EsF
-i reor"anizamos esta e3presion$
3
EsSF
M x +

b S

E .F 0 . +

EL S U F

3
EsF
&odemos indentificar facilmente el termino fi9o$ f M x +

b ! la matriz del metodo
K M
E .F 0 . +

EL S U F

%
&ara implementar el codi"o del metodo de Jacobi amorti"uado en Matlab$ debemos calcular
la matriz identidad del tamanVo de sistema ! modificar las e3presiones de f ! K $
...
...
Eobtenemos el tamano del sistema:
i
M x

n=size,2:1-1
Ecreamos un vector de soluciones
inicial: xs=zeros,n:1-1
Ecreamos las matrices del metodo
B=diag,diag,2--1
D=2%tril,2-1
<=2%triu,2-1
A=eye,n-1
E2lternativamente para )acobi podemos crear una solo matriz equivalenta a
E<D: <pD=2%B
f=wIBK%1Ib1
^=%wIBK%1I,<D-,1%w-IA1
Ecalculamos la primera
iteracion: xs1=f^Ixs1
Ecalculamos la diferencia entre las dos
soluciones: tolf=norm,xs1%xs-1
Eponemos a 1 el contador de
iteraciones. it=11
Ea partir de
aqu
vendrQa el codigo necesario para calcular las
Esucesivas iteraciones hasta que la solucion
conver)a
...
...
=l metodo -B?% =l metodo -B? -uccesive Bver?ela3ation se obtiene aplicando
amorti1 "uamiento al metodo de (auss1-eidel% 6plicando el mismo razonamiento :ue el caso
de Jacobi amorti"uado$ la e3presion "eneral para una iteracion del metodo -B? es$
3
EF
z
&
EsS
bc
F
&
EsF
d
3
EsSF
b
i

9 fi
a
i9
3
9

9 _i
a
i9
3
9
a
ii
SE xF
3
EsF
6l i"ual :ue en el caso de Jacobi amorti"uado$ para implementar en Matlab el metodo -B?
es suficiente anVadir una lnea :ue calcule el promedio de dos soluciones sucesivas$
xs=xs11
Evolvemos a inicializar el vector de soluciones al valor de los
Eterminos independientes
xs1=b1
for i=16n Ebucle para recorrer todas las ecuaciones
for )=16i%1 Erestamos la contribucion de todas las
incognitas xs1,i-=xs1,i-%2,i:)-Ixs1,)-1 Epor
encima de x,i-
end
for )=i16n Erestamos la contribucion de todas las incognitas
Epor deba)o de x,i-
xs1,i-=xs1,i-%2,i:)-Ixs,)-1
end
Edividimos por el elemento de la
diagonal: xs1,i-=xs1,i-J2,i:i-1
z

bc
d
end
Eamortiguamos la solucion
xs1=wIxs1,1%w-Ixs1
Ecalculamos la diferencia entre las dos
soluciones: tolf=norm,xs1%xs-1
Eincrementamos el contador de
iteraciones it=it11
=n forma matricial la e3presion para una iteracion del metodo -B? sera$
3
EsSF
M x

I tras reordenar$
3
EF
E+ S LF

b E+ S LF

U
3
EsF

SE xF 3
EsF
3
EsSF
M x

E+ S LF

b

S

E xF 0 x E+ S LF

U

3
EsF
+e nuevo$ podemos identificar$ el termino fi9o$ f M x

E+ S LF

b

! la matriz del m
etodo$
K M

E xF 0 x E+ S LF

U

%
=l si"uiente fra"mento de codi"o muestra la obtencion de f ! K para el metodo -B?$
Eobtenemos el tamano del sistema:
n=size,2:1-1
Ecreamos un vector de soluciones
inicial: xs=zeros,n:1-1
Ecalculamos las matrices necesarias
B=diag,diag,2--1
D=2%tril,2-1
<=2%triu,2-1
A=eye,n-1
f=wI,B<-K,%1-Ib1
^=,1%w-IA%wI,B<-K,%1-ID1
Ecalculamos la primera iteracion
xs1=f^Ixs1
Ecalculamos la diferencia entre las dos
soluciones: tolf=norm,x%x(-1
Eponemos a 1 el contador de
iteraciones. it=11
<%@%@% 6nalisis de conver"encia
=n la introduccion a los metodos iterativos de9amos abierta la cuestion de su
conver"encia% ,amos a analizar en mas detalle en :ue condiciones podemos ase"urar :ue un m
etodo iterativo$ aplicado a un sistema de ecuaciones lineales concreto$ conver"e%
=n primer lu"ar$ tenemos :ue definir :ue entendemos por conver"encia% Cuando un m
etodo iterativo conver"e$ lo #ace en forma asintotica$ es decir #ara falta un numero infinito de
iteraciones para alcanzar la solucion e3acta%
3
E0F
3
EF
3
E2F

3
EF
M 3
Lo"icamente$ es inviable realizar un numero infinito de iteraciones% &or esta razon$ las
soluciones de los metodos iterativos son siempre apro3imadas/ realizamos un numero finito
de iteraciones #asta cumplir una determinada condicion de conver"encia% Como no conocemos la
solucion e3acta$ imponemos dic#a condicion entre dos iteraciones sucesivas$
k3
EsSF
3
EsF
k C k3
EsSF
3k |
e
EsSF
|
+onde e
EsSF
representara el error real de conver"encia cometido en la iteracion s S %
2omando como punto de partida la e3presion "eneral del calculo de una iteracion en forma
matricial$
3
EsSF
M f S K
3
EsF
&odemos e3presar el error de conver"encia como$
e
EsSF
M 3
EsSF
3 M f S K 3
EsF
3
&ero la solucion e3acta$ si pudiera alcanzarse$ cumplira$
3 M f S K
3
I si sustituimos en la e3presion del error de conver"encia$
e
EsSF
M f S K 3
EsF
f K
3
Lle"amos finalmente a la si"uiente e3presion$ :ue relaciona los errores de conver"encia de dos
iteraciones sucesivas$
e
EsSF
M K
e
EsF
&ara :ue el error disminu!a de iteracion en iteracion ! el metodo conver9a$ es necesario :ue la
matriz del metodo K ten"a norma12 menor :ue la unidad%
-upon"amos :ue un sistema de dimension n su matriz del metodo K $ tiene un con9unto de
n autovectores linealmente independientes$ .

$ .
2
$ $ .
n
$ cada uno asociado a su
correspondiente autovalor$ s

$ s
2
$ $ s
n
% =l error de conver"encia$ es tambien un vector de
dimension n$ por tanto podemos e3presarlo como una conbinacion lineal de los n autovectores
linealmente independientes de la matriz K % -upon"amos :ue lo #acemos para el error de
conver"encia e
E0F
correspondiente al valor inicial de la solucion 3
E0F
$
e
E0F
M p

.

S p
2
.
2
S
S p
n
.
n
-i empleamos la ecuacion deducida antes para la relacion del error entre dos iteraciones
sucesivas ! recordando :ue aplicar una matriz aun autovector$ es e:uivalente a multiplicarlo por el
autovalor correspondientes$ K .
i
M s
i
.
i
$ obtnemos para el error de conver"encia en la
iteracion s$
e
EF
M K e
E0F
M p

s

.

S p
2
s
2
.
2
S S p
n
s
n
.
n
e
E2F
M K e
EF
M K
2
e
E0F
M p

s
2
.

S p
2
s
2
.
2
S
S p
n
s
2
.
n 2 n
%
e
EsF
M K e
EsF
M K
s
e
E0F
M p

s
s s s

.

S p
2
s
2
.
2
S S p
n
s
n
.
n

n


e

0
&ara :ue el error tienda a cero$ e
EsF
0 al aumentar s$ para cual:uier combinacion inicial
de valores p
i
$ esto es para cual:uier apro3imacion inicial 3
E0F
$ es necesario :ue todos los
autovalores de la matriz del metodo cumplan$
|s
i
| f

&or tanto$ el sistema conver"e si el radio espectral de la matriz del metodo es menor :ue la
unidad%
3
uEK F f lm e
EsF
M
0
s
,elocidad de conver"encia% &ara un numero de iteraciones suficientemente "rande$ el radio
espectral de la matriz del metodo nos da la velocidad de conver"encia% =sto es debido a :ue el
resto de los terminos del error$ asociados a otros autovalores mas pe:uenVos tienden a cero m
as deprisa% &or tanto podemos #acer la si"uiente apro3imacion$ donde estamos suponiendo
:ue el autovalor s
n
es el radio espectral$
e
EsF
c
n
uE#F
s
.
n
M c
n
s
s
.
n
&odemos a#ora calcular cuantas iteraciones nos costara reducir un error inicial por deba9o
de un determinado valor% =sto dependera de la solucion inicial ! de radio espectral de la matriz
del metodo$
EsF
e
EsF
uE#F
s
e
E0F
uE#F
s
e
E0F
as por e9emplo si :ueremos reducir el error inicial en m d"itos$
e
EsF
s m
m
e
E0F
uE#F

0

s
lo" EuEK FF
La matriz del metodo 9ue"a por tanto un papel fundamental tanto en la conver"encia del
metodo$ como en la velocidad Enumero de iteracionesF con la :ue el metodo conver"e% Los m
etodos amorti"uados$ permiten modificar la matriz de conver"encia$ "racias al factor de
amorti"uamiento x$ #aciendo :ue sistemas para los :ue no es posible encontrar una solucion
mediante un metodo iterativo conver9an%
Como e9emplo$ el sistema$
`
@ 2
`
`
3

` `
;
`
`
2 ;
`

`
3
2
`
M
`
@
`
3 3
3
A
)o conver"e si tratamos de resolverlo por el metodo de Jacobi% -in embar"o si es posible
obtener su solucion empleando el metodo de Jacobi 6morti"uado% La fi"ura <%< muestra la evoluci
on de la tolerancia para dic#o sistema empleando ambos metodos%
-i calculamos el radio espectral de la matriz del metodo$ para el metodo de Jacobi tendr
amos$
>> 2=/1 ! %1 1 ! %& 111 %1
30 2 =
1 ! %1
3
=l radio espectral de una matriz es el ma!or de sus autovalores en valor absoluto% ,er captulo @%
t
o
l
.
+
6
6
x
(
&
/
1
)

x
(
&
)
6
6
18
16
E%o.i %(ortig1%'o. x + 0.5
E%o.i
14
12
10
8
6
4
2
0
0 5 10 15 20 25 30
#4 'e iter%i5#
*i"ura <%<D =volucion de la tolerancia para un mismo sistema empleando el metodo de Jacobi
Ediver"eF ! el de Jacobi amorti"uado Econver"eF%
! %& 1
1 %1 3
>> ^=diag,diag,2--K%1I,2%diag,diag,2---
^ =
( !.(((( %1.((((
%(.$((( ( %(.!(((
(.3333 %(.3333 (
>> l=eig,^-
l =
(.118. 1.(&31i
(.118. % 1.(&31i
%(.!3.$
>> radio#espectral=max,abs,l--
radio#espectral =
1.(&4.
=l radio espectral es ma!or :ue la unidad ! el metodo no conver"e%
-0 repetimos el calculo para el metodo de Jacobi amorti"uado$ con x M 0$;
>> ^=,1%(.&-Ieye,3-%(.&Idiag,diag,2--K%1I,2%diag,diag,2---
^ =
(.&((( %1.(((( (.&(((
(.!((( (.&((( (.1(((
%(.1''. (.1''. (.&(((
>> l=eig,^-
l =
(.$$(' (.&!'&i
(.$$(' % (.&!'&i
(.'18.
>> radio#espectral=max,abs,l--
radio#espectral =
(.'8''
=l radio espectral es a#ora menor :ue la unidad ! el metodo conver"e%
&or ultimo indicar :ue cual:uiera de los metodos iterativos descrito conver"e para un
sistema :ue cumpla :ue su matriz de coeficientes es estrictamente dia"onal dominante%

3
Captulo A
0nterpolacion ! a 9uste de
funciones
=n este captulo vamos a estudiar distintos metodos de apro3imacion polinomica% =n t
erminos "enerales el problema consiste en sustituir una funcion f E3F por un polinomio$
f E3F pE3F M a
0
S a

3 S a
2
3
2
S a
3
3
3
S
S a
n
3
n
&ara obtener la apro3imacion podemos partir de la ecuacion :ue define f E3F$ por e9emplo
la funcion error$
erf E3F M

2

L
W
e
t
2
dt
0
B bien$ puede suceder :ue solo conozcamos al"unos valores de la funcion$ por e9emplo a trav
es de una tabla de datos$
2abla A%D f E3F M erf E3F
3 f E3F
0$0 0$0000
0$ 0$2;
0$2 0$222A
0$3 0$32><
0$@ 0$@2>@
0$; 0$;20;
La apro3imacion de una funcion por un polinomio$ tiene venta9as e inconvenientes%
&robablemente la principal venta9a$ desde el punto de vista del computo$ es :ue un
polinomio
es facil de evaluar mediante un ordenador !a :ue solo involucra operaciones aritmeticas
sencillas% 6demas$ los polinomios son faciles de derivar e inte"rar$ dando lu"ar a otros polinomios%
=n cuanto a los inconvenientes #a! :ue citar el crecimiento #acia infinito o menos infinito
de cual:uier polinomio para valores de la variable independiente ale9ados del ori"en% =sto puede
da lu"ar en al"unos casos a errores de redondeo difciles de mane9ar$ #aciendo mu! difcil
la apro3imacion para funciones no crecientes%
,amos a estudiar tres metodos distintos/ en primer lu"ar veremos la apro3imacion
mediante el polinomio de 2a!lor$ util para apro3imar un polinomio en las inmediaciones de un
punto% 6 continuacion$ veremos la interpolacion polinomica !$ por ultimo$ estudiaremos el a9uste
polinomico por mnimos cuadrados%
=l uso de uno u otro de estos metodos esta asociado a la informacion disponible sobre la
funcion :ue de desea apro3imar ! al uso :ue se desea #acer de la apro3imacion realizada%
2AC
C6&

02ULB A% 0)2=?&BL6C0B

) I 6JU-2= +=
*U)C0B)=-
2@

n

A%% =l polinomio de 2a!lor%


-upon"amos una funcion infinitamente derivable en un entorno de un punto 3
0
% -u e3pansi
on en serie de 2a!lor se define como$

2

EnF n

EnSF nS
f E3F M f E3
0
FSf
0
E3
0
FE33
0
FS
2
f
00
E3
0
FE33
0
F S
S
nl
f
E3
0
FE33
0
F
S f
En S Fl
EzFE33
0
F
+onde z es un punto sin determinar situado entre 3 ! 3
0
% -i eliminamos el ultimo termino$
la funcion puede apro3imarse por un polinomio de "rado n

2
f E3F f E3
0
F S f
0
E3
0
F E3 3
0
F S
2
f
00
E3
0
F E3 3
0
F

S
S
nl
f
EnF
E3
0
F E3 3
0
F
n
=l error cometido al apro3imar una funcion por un polinomio de 2a!lor de "rado n$ viene dado
por el termino$

eE3F M |f E3F pE3F| M



f
EnSF
EzF E3 3
0
F
nS


En S Fl
=s facil deducir de la ecuacion :ue el error disminu!e con el "rado del polinomio empleado !
aumenta con la distancia entre 3 ! 3
0
% 6demas cuanto mas suave es la funcion Ederivadas
pe:uenVasF me9or es la apro3imacion%
&or e9emplo para la funcion e3ponencial$ el polinomio de 2a!lor de orden n desarrollado en
torno al punto 3
0
M 0 es$
e
3
S 3 S

3
2
S S

3
n
M
P

3
i
2 nl il
iM0
! el del lo"aritmo natural$ desarrollado en torno al punto 3
0
M $

2
lo"E3F E3 F
2
E3 F
S
S
E F
nS
E3 F
n
n
E F
iS
M E3 F
i
i
iM
La e3istencia de un termino "eneral para los desarrollos de 2a!lor de muc#as funciones
elemen1 tales lo #ace particularmente atractivo para apro3imar funciones mediante un ordenador%
6s por e9emplo$ la si"uiente funcion de Matlab$ apro3ima el valor del lo"aritmo natural en
un punto$ empleando un polinomio de 2a!lor del "rado :ue se desee$
function y=taylorln,x:n-
E9sta funcion aproxima el valor del logaritmo natural de un numero
Eempleando para ello un polinomio de Taylor de grado n desarrollado en
Etorno a x=1. <as variables de entrada son6 x: valor para el que se desea
Ecalcular el logaritmo. n @rado del polinomio que se
emplear
en el
Ecalculo. <a variable de salida y es el logaritmo de x. ,nota si x
Ees un vector: calcular
el logaritmo para todos los puntos del vector-
Einiciliazamos la variable de salida
y y=(1
Econstruimos un bucle para ir anadiendo terminos al
desarrollo for i=16n
y=y,%1-K,i1-I,x%1-.KiJi1
end
ador$9uan%9imene
x
2
x
3
x
5
x
10
x
20
x
A%% =L &BL0)BM0B += 26ILB?% 2>
La apro3imacion funciona razonablemente bien para puntos comprendidos en el intervalo 0 f
3 f 2% La fi"ura A% muestra los resultados obtenidos en dic#o intervalo para polinomios de 2a!lor
del lo"aritmo natural de "rados 2$ ;$ 0 20% La linea continua azul representa el valor del lo"aritmo
obtenido con la funcion de Matlab log%
1
0
1
2
3
4
5
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
x
*i"ura A%D Comparacion entre resultados obtenidos para polinomios de 2a!lor del lo"aritmo na1
tural de "rados 2$ 3$ ;$ 0$ 20
Las funciones sinE3F ! cosE3F$ son tambien simples de apro3imar mediante polinomios de
2a!lor% -i desarrollamos en torno a 3
0
M 0$ La serie del coseno solo tendra potencias pares
mientras :ue
la del seno solo tendr potencias impares$
C6&

02ULB A% 0)2=?&BL6C0B

) I 6JU-2= +=
*U)C0B)=-
2<
rador$9uan%9ime
x
2
x
4
x
6
x
8
x
3
x
5
x
"
x
!

y
n
i
cosE3F
P
EF
3
2i
E2iFl
iM0
n
i
sinE3F
P
EF
3
2iS
E2i S Fl
iM0
1
0.5
0
0.5
1
1.5
4 3 2 1 0 1 2 3 4
x
EaF cosE3F$ polinomios 2$ @$ < ! > "rados
1
0.8
0.6
0.4
0.2
0
0.2
0.4
0.6
0.8
1
4 3 2 1 0 1 2 3 4
EbF sinE3F$ polinomios 3$ ;$ A ! C "rados
*i"ura A%2D &ol!nomios de 2a!lor para las funciones coseno ! seno
=n las fi"uras A%2EaF ! A%2EbF -e muestran las apro3imaciones mediante polinomios de 2a!lor de
las funciones coseno ! seno% &ara el coseno se #an empleado polinomios #asta "rado > ! para el seno
A%2% 0)2=?&BL6C0B

) &BL0)B

M0C6%
2>3
#asta "rado C% =n ambos casos se dan los resultados correspondientes a un periodo EL$ LF% -i se
comparan los resultados con las funciones cos ! sin$ suministradas por Matlab$ puede observarse
:ue la apro3imacion es bastante buena para los polinomios de ma!or "rado empleados en cada
caso%
A%2% 0nterpolacion polinomica%
-e entiende por interpolacion el proceso por el cual$ dado un con9unto de pares de puntos
E3
0
$ !
0
F$ E3

$ !

F$ E3
n
$ !
n
F se obtiene una funcion f E3F$ tal :ue$ !
i
M f E3
i
F$ para cada
par de puntos E3
i
$ !
i
F del con9unto% -i$ en particular$ la funcion empleada es un polinomio f
E3F pE3F$ entonces se trata de interpolacion polinomica%
2eorema de unicidad% +ado un con9unto E3
0
$ !
0
F$ E3

$ !

F$ E3
n
$ !
n
F de n S pares de
puntos$ tales :ue todos los valores 3
i
de dic#o con9untos son diferentes entre s$ solo e3iste un
polinomio pE3F de "rado n$ tal :ue !
i
M f E3
i
F para todos los pares de puntos del con9unto%
-i tratamos de interpolar los puntos con un polinomio de "rado menor :ue n$ es posible :ue no
encontremos nin"uno :ue pase por todos los puntos% -i$ por el contrario empleamos un polinomio
de "rado ma!or :ue n$ nos encontramos con :ue no es unico% &or ultimo si el polinomio empleado
es de "rado n$ entonces sera el mimo con independencia del metodo :ue empleemos para
construirlo%
A%2%% La matriz de ,andermonde
-upon"amos :ue tenemos un con9unto de pares de puntos A$
3 f E3F
3
0
!
0
3

!

3
2
!
2
% %
3
n
!
n
&ara :ue un polinomio de orden n$
pE3F M a
0
S a

3 S a
2
3
2
S S
a
n
3
n
pase por todos los pares de A debe cumplir$
!
i
M a
0
S a

3
i
S a
2
3
2
S S a
n
3
n
$ E3
i
$
!
i
F A
i i
=s decir$ obtendramos un sistema de n ecuaciones lineales$ una para cada par de valores$
en la :ue las inco"nitas son precisamente los n coeficientes a
i
del polinomio%
&or e9emplo para los puntos$
3 f E3F
2
2
3 2
Bbtendramos$
C6&

02ULB A% 0)2=?&BL6C0B

) I 6JU-2= +=
*U)C0B)=-
2>
`

`
2
3
0
0
n
n
n
a
0
S a

S a
2

2
M 2
a
0
S a

2 S a
2
2
2
M
a
0
S a

3 S a
2
3
2
M
2
:ue podramos e3presar en forma matricial como$

2
`
`
a
0
` `
2
`
2
2
`

`
a

`
M
`

`
3
2
a
2
2
I en "eneral$ para n pares de datos$
`
3
0
3
2
3

3
2

3
n
`

3
n
`
a0
`
a

`
!0
`
!
2
`

` ` ` ` `
` ` ` ` ` `
`
% % %
%
% %
` `
%
` M `
%
`
`
% % %
%
%
` `
%
` `
%
`
3
n
3
2
3
n
a
n
!
n
La matriz de coeficientes del sistema resultante recibe el nombre de matriz de ,andermonde%
=sta formada por la n primeras potencias de cada uno de los valores de la variable independiente$
colocados por filas% =s evidente :ue cuanto ma!or es el numero de datos$ ma!or tendera a ser
la diferencia de tamanVo entre los elementos de cada fila% &or ello$ en la ma!ora de los casos$
resulta ser una matriz mal condicionada para resolver el sistema numericamente% =n la
practica$ para obtener el polinomio interpolador$ se emplean otros metodos alternativos$
A%2%2% =l polinomio interpolador de La"ran"e%
6 partir de los valores 3
0
$ 3

$ $ 3
n
$ se constru!e el si"uiente con9unto de n S
polinomios de "rado n
3 3 E3 3 FE3 3 F E3 3 FE3 3 F E3
3 F
l
9
E3F M
I
5
M
0 9 9S n
5M0
5M9
3
9

3
5
E3
9
3
0
FE3
9
3

F E3
9
3
9
FE3
9
3
9S
F E3
9

3
n
F
Los polinomios as definidos cumplen una interesante propiedad en relacion con los valores
3
0
$ 3

$ $ 3
n
$ empleados para construirlos$
l
9
E3
i
F M
E
$ i M
9
0$ i M 9
6 partir de estos polinomios podemos construir a#ora el si"uiente polinomio de interpolaci
on empleando las ima"enes !
0
$ !

$ !
n
correspondientes a los valores 3
0
$ 3

$ $ 3
n
$
n
pE3F M
P
l
9
E3F
!
9
9M0
=fectivamente$ es facil comprobar :ue$ tal ! como se #a construido$ este polinomio pasa por
los pares de puntos 3
i
$ !
i
$ puesto :ue pE3
i
F M !
i
%
A%3% +0*=?=)C06- +0,0+0+6-% 2C
=l si"uiente codi"o de Matlab calcula el valor en un punto 3 cual:uiera del polinomio de
interpolacion de La"ran"e contruido a partir un con9unto de puntos A {E3
i
$ !
i
F} %
function y1=<agrange,x:y:x1-
Eeste programa obtiene el valor interpolado y1 correspondiente al valor x1
Eempleando el polinomio interpolador de <agrange de grado n: obtenido a
Epartir de los vectores x e y ,de longitud n-
Eobtenemos el tamano del con)unto de
datos: n=length,x-1
Einicializamos la variable de
salida y1=(1
Econstruimos el valor a partir de los polinomios de
<agrange: for )=16n
Einicializamos el polinomio de <agrange correspondiente al dato
i l)=11
Ey lo
calculamos... for
i=16)%1
l)=l)I,x1%x,i--J,x,i-%x,)--1
end
for i=)16n
l)=l)I,x1%x,i--J,x,i-%x,)--1
end
end
Esumamos la contribucion del polinomio de <agrange
l) y1=y1l)Iy,)-1
A%3% +iferencias divididas%
2anto el metodo de la matriz de ,andermonde como el de los polinomios de La"ran"e$
presentan el inconveniente de :ue si se anVade un dato mas E3
nS
$ !
nS
F a la coleccion de datos
!a e3istentes$ es preciso recalcular el polinomio de interpolacion desde el principio%
=l metodo de las diferencias divididas$ permite obtener el polinomio de interpolacion en un
numero menor de operaciones :ue en el caso del polinomio de La"ran"e ! ademas$ el c
alculo se #ace escalonadamente$ aprovec#ando todos los resultados anteriores cuando se anVade
al polinomio la contribucion de un nuevo dato%
=l polinomio de orden n de diferencias divididas se constru!e de la si"uiente manera$
p
n
E3F M a
0
S E3 3
0
F a

S E3 3
0
F E3 3

F a
2
S S E3 3
0
F E3 3

F
E3 3
n2
F E3 3
n
F a
n
+onde$ como siempre$ E3
0
$ !
0
F$ E3

$ !

F$ E3
n
$ !
n
F$ representan los datos para los :ue se
:uiere calcular el polinomio interpolador de "rado n% -i sustituimos las datos en el polinomio$
lle"amos a un sistema de ecuaciones$ trian"ular inferior$ en el :ue las inco"nitas son los
coeficientes del
3
polinomio%
a
0
M !
0
a
0
S E3

3
0
Fa

M
!

a
0
S E3
2
3
0
Fa

S E3
2
3
0
FE3
2
3

Fa
2
M !
2

a
0
S E3
n
3
0
Fa

S E3
n
3
0
FE3
n
3

Fa
2
S S E3 3
n2
FE3 3
n
Fa
n
M !
n
=ste sistema se resuelve e3plcitamente empleando un es:uema de diferencias
divididas% La diferencia divida de primer orden entre dos puntos E3
0
$ !
0
F ! E3

$ !

F se
define como$
!


!
0
f Q3
0
$ 3

R M

3
0
&ara tres puntos se define la diferencia dividida de se"undo orden como$ E3
0
$ !
0
F$ E3

$ !

F !
E3
2
$ !
2
F
f Q3
2
$ 3

R f Q3
0
$
3

R
f Q3
0
$ 3

$ 3
2
R M
3
2
3
0
!$ en "eneral definiremos la diferencia dividida de orden i para i S puntos como$
f Q3

$ 3
2
$ $ 3
i
R f Q3
0
$ 3

$ $ 3
i
R
f Q3
0
$ 3

$ $
3
i
R M
3
i
3
0
-i despe9amos por sustitucion pro"resiva los coeficientes del polinomio de interpolacion del
sistema trian"ular inferior obtenido$ cada coeficiente puede asociarse a una diferencia dividida$
a
0
M f Q3
0
R M !
0
a

M f Q3
0
$ 3

R
%
a
i
M f Q3
0
$ 3

$
$ 3
i
R
%
a
n
M f Q3
0
$ 3

$
$ 3
n
R
&or tanto$ podemos obtener directamente los coeficientes del polinomio calculando las diferencias
divididas% ,eamos un e9emplo empleando el si"uiente con9unto de cuatro datos$
3 0 3 @
! 1 2 3
Kabitualmente$ se constru!e a partir de los datos una tabla$ como la A%2$ de diferencias divididas%
Las primera columna contiene los valores de la variable 3$ la si"uiente los valores de las diferencias
divididas de orden cero Evalores de !F% 6 partir de la se"unda$ las si"uientes columnas contienen
las diferencias dividas de los elementos de la columna anterior$ calculados entre los elementos :ue
ocupan filas consecutivas% La tabla va perdiendo cada vez una fila$ #asta lle"ar a la diferencia
dividida de orden n de todos los datos iniciales%
Los coeficientes del polinomio de diferencias divididas se corresponden con los elementos de la
primera fila de la tabla% &or lo :ue en nuestro e9emplo el polinomio resultante sera$
2abla A%2D 2abla de diferencia divididas para cuatro datos
3
i
!
i
f Q3
i
$ 3
iS
R f Q3
i
$ 3
iS
$ 3
iS2
R f Q3
i
$ 3
iS
$ 3
iS2
$ 3
iS3
R
3
0
M 0
3

M
3
2
M 3
!
0
M
!

M
!
2
M 2
f Q3
0
$ 3

R M 2
f Q3

$ 3
2
R M 3'2
f Q3
2
$ 3
3
R M
f Q3
0
$ 3

$ 3
2
R M A'< f Q3
0
$ 3

$ 3
2
$ 3
3
R M
'3
f Q3

$ 3
2
$ 3
3
R M '<
3
3
M @ !
3
M 3
A
p
3
E3F M 23 S
<
3E3 F
3
3E3 FE3 3F
=s importante #acer notar :ue el polinomio de interpolacion obtenido por diferencias divididas
siempre aparece representado como suma de productos de binomios E3 3
0
FE3 3

F
! los coeficientes obtenidos corresponden a esta representacion ! no a la representacion
#abitual de un polinomio como suma de potencias de la variable 3%
=l si"uiente codi"o permite calcular los coeficientes del polinomio de diferencias divididas a
partir de un con9unto de n datos%
function a=difdiv,x:y-
Eeste polinomio permite obtener los coeficientes del polinomio de
Ediferencias divididas que interpola los datos contenidos el los vectores x
Ee y. Ba como resultado un vector fila a con los coeficientes
Emiramos cuantos datos tenemos
n=length,x-1
Einicializamos el vector de coeficientes con las diferencias de orden (: es
Edecir los valores de
y: a=y1
Ey ahora montamos un bucle: si tenemos n datos debemos calcular n
Ediferencias: como ya tenenos la primera: iniciamos el bucle en
!: for )=!6n
Een cada iteracion calculamos las diferencias de un orden
superior:
Ecomo solo nos vale la primera diferencia de cada orden empezamos
el
Ebucle interior en el valor del exterior
) for i=)6n
a,i-=,a,i-%y,i%1--J,x,i-%x,i%)1--1
end
Evolvemos acopiar en y las diferencias obtenidas para emplearlas en la
Esiguiente iteracion
y=a1
end
Como el polinomio de diferencias divididas toma una forma especial$ es preciso tenerlo en
cuenta a la #ora de calcular su valor en un punto 3 determinado% =s si"uiente codi"o
permite evaluar un polinomio de diferencias divididas en un punto dado$ conocidos sus
coeficientes ! los valores 3

$ $ 3
n
a partir de los cuales se obtuvo el polinomio$
function y=evdif,a:x:x1-
Eesta funcion obtiene el valor de un polinomio de diferencias divididas a
Epartir de los coeficientes ,a- del polinomio: los puntos ,x- sobre los que
Ese ha calculado el polinomio y el punto o vector de puntos ,x1- para el
Eque se quiere calcular el valor que toma el polinomio.
Eobtenemos el tamano del vector de coeficientes del
polinomio: n=length,a-1
E8onstruimos un bucle para calcular el valor del
polinomio: y=a,1-1
for +=16n%1
Ecalculamos el valor del producto de los binomios que multiplican al
Ecoeficiente i
binprod=11
for )=16+
binprod=binprod.I,x1%x,)--1
end
end
y=ya,+1-Ibinprod1
&or ultimo se podran reunir las dos funciones anteriores en una unica funcion :ue
permitiera obtener directamente el valor :ue toma el polinomio de diferencias divididas en un
punto 3$ par1 tiendo de los datos interpolados% Una solucion sencilla$ es crear una funcion :ue
llame a las dos anteriores$
function y=intdifdiv,x:xp:yp-
E9sta funcion calcula el valor del polinomio de diferencias divididas que
Einterpola los puntos ,xp:yp- el el punto: o Elos puntos contenidos en x.
E9mpleando las funciones: difdiv: para calcular los coeficientes del
Epolinomio y evdif para evaluarlo
Ellamamos a difdiv
a=difdiv,xp:yp-1
Ey a continuacion llamamos a
evdif y=evdif,a:xp:x-1
A%3%% =l polinomio de )e.ton1(re"or!
-upone una simplificacion al calculo del polinomio de diferencias divididas para el caso parti1
cular en :ue los datos se encuentran e:uiespaciados ! dispuestos en orden creciente con respecto a
los valores de la coordenada 3%
=n este caso$ calcular los valores de las diferencias es muc#o mas sencillo% -i pensamos en las
diferencias de primer orden$ los denominadores de todas ellas son i"uales$ puesto :ue los datos
estan e:uiespaciados$
i3 3
i
3
i
M
#
2 #
2
=n cuanto a los numeradores$ se calcularan de modo analo"o al de las diferencias
divididas normales$
i!
0
M !

!
0
$ i!

M !
2
!

$ $ i!
i
M !
iS
!
i
$ $
i!
n
M !
n
!
n
Las diferencias de orden superior para los numeradores se pueden obtener de modo recursivo$
a partir de las de orden uno$ puesto :ue los denominadores de todas ellas #$ son i"uales%
i
2
!
0
M i Ei!
0
F M E!
2
!

F E!

!
0
F M E!
2
2!

S !
0
F
=n este caso$ el denominador de la diferencia sera 3
2
3
0
M 2#$ ! la diferencia tomara
la forma$
f Q3
0
$ 3

$ 3
2
R M
i
2
!
0
2#
2
=n "eneral$ para la diferencias de orden n tendramos$
i
n
!
0
M !
n

!
n
S

n

2

!
n
2
S EF
n
!
0
+onde se #a #ec#o uso de la e3presion binomial$

5

M
l
5 l l l
E5
lFl
&ara obtener la diferencia dividida de orden n$ bastara a#ora dividir por nl #
n
%
i
n
!
0
f Q3
0
$ 3

$ $ 3
n
R M
nl #
n
6 partir de las diferencias$ podemos representar el polinomio de diferencias divididas resultante
como$
3 3
0
E3 3

F E3 3
0
F
2
E3 3
n
F E3 3

F E3
3
0
F
n
p
n
E3F M !
0
S i!
0
S
#
i !
0
S
S

i !
0
nl #
n
=ste polinomio se conoce como el polinomio de )e.ton1(re"or!$ ! podra considerarse
como una apro3imacion numerica al polinomio de 2a!lor de orden n de la posible funcion
asociada a los datos empleados%
=n este caso$ podramos construir la tabla para obtener los coeficientes de diferencias$
calculando en cada columna simplemente las diferencias de los elementos de la columna anterior%
&or e9emplo$
2abla A%3D 2abla de diferencias para el polinomio de )e.ton 1(re"or! de cuatro datos
3
i
!
i
i!
i
i
2
!
i
i
3
!
i
3
0
M 0
3

M
!
0
M
!

M
2
3
;
2
A
3
2
M 2 !
2
M 2
3
3
M 3 !
3
M 3
Una vez calculadas las diferencias$ basta dividir por nl #
n
los elementos de la primera fila
de la tabla$
2
a
0
M $ a

M

$ a
2
M
;
2

2
$ a
3
M
A
<
3
=l si"uiente codi"o muestra un e9emplo de implementacion en Matlab del polinomio de
)e.ton1 (re"or!
function /a:y10=newgre,x:y:x1-
Eeste polinomio permite obtener los coeficientes del polinomio de
Enewton%gregory que interpola los datos contenidos en los vectores x
Ee y. Ba como resultado un vector fila a con los coeficientes: si se le dan
Eadema un punto o vector de puntos calcula los valores que toma el
Epolinomio en dichos puntos.
Emiramos cuantos datos tenemos
n=length,x-1
Einicializamos el vector de coeficientes con las diferencias de orden (: es
Edecir los valores de
y: a=y1
h=x,!-%x,1-1
Ey ahora montamos un bucle: si tenemos n datos debemos calcular n
Ediferencias: como ya tenenos la primera: iniciamos el bucle en
!: for )=!6n
Een cada iteracion calculamos las diferencias de un orden
superior:
Ecomo solo nos vale la primera diferencia de cada orden empezamos
el
Ebucle interior en el valor del exterior
) for i=)6n
Eahora basta dividir en todos los casos por la distancia
h
Emultiplicada por el orden de la
diferencia a,i-=,a,i-%y,i%1--J,,)%
1-Ih-1
end
Evolvemos acopiar en y las diferencias obtenidas para emplearlas en la
Esiguiente iteracion
y=a1
end
y1=/01
if nargin==3
E8onstruimos un bucle para calcular el valor del
polinomio: y1=a,1-1
for +=16n%1
Ecalculamos el valor del producto de los binomios que multiplican al
Ecoeficiente i
binprod=11
for )=16+
binprod=binprod.I,x1%x,)--1
end
end
y1=y1a,+1-Ibinprod1
A%@% 0)2=?&BL6C0B

) &B?
0)2=?,6LB-%
3;
ador$9uan%9imene
'%to&
poli#o(io 'e i#terpol%i5#
y
end
A%@% 0nterpolacion por intervalos%
Kasta a#ora$ #emos visto como interpolar un con9unto de n S datos mediante un polinomio
de "rado n% =n muc#os caso$ especialmente cuando el numero de datos es suficientemente
alto$ los resultados de dic#a interpolacion pueden no ser satisfactorios% La razon es :ue el
"rado del polinomio de interpolacion crece linealmente con el numero de puntos a interpolar$ as
por e9emplo para interpolar datos necesitamos un polinomio de "rado 0% +esde un punto de
vista numerico$ este tipo de polinomios pueden dar "randes errores debido al redondeo% &or otro
lado$ ! dependiendo de la disposicion de los datos para los :ue se realiza la interpolacion$ puede
resultar :ue el polinomio obtenido tome una forma demasiado complicada para los valores
comprendidos entres los datos interpolados%%
La fi"ura A%3 muestra el polinomio de interpolacion de "rado nueve para un con9unto de
0 datos% =s facil darse cuenta$ simplemente observando los datos$ :ue no #a! nin"una razon
:ue 9ustifi:ue las curvas :ue traza el polinomio entre los puntos ! 2 o los puntos C ! 0$ por
e9emplo%
350
300
250
200
150
100
50
0
50
1 2 3 4 5 6 " 8 ! 10
x
*i"ura A%3D &olinomio de interpolacion de "rado nueve obtenido a partir de un con9unto de
diez datos
=n muc#os casos es preferible no emplear todos los datos disponibles para obtener un unico
ador$9uan%9im
'%to&

i#terpol%i5# 'e or'e# ero
'%to&
i#terpol%i5# li#e%l
y
y
polinomio de interpolacion% =n su lu"ar$ lo :ue se #ace es dividir el con9unto de datos en varios
"rupos normalmente se a"rupan formando intervalos de datos consecutivos ! obtener varios
polinomios de menor "rado$ de modo :ue cada uno interpole los datos de un "rupo distinto%
=l "rado de los polinomios empleados debera estar$ en principio$ relacionado con los
datos contenidos en cada tramo%
interpolacion de orden cero si #acemos :ue cada intervalo conten"a un solo dato$ obtendr
amos polinomios de interpolacion de "rado cero$ a
0i
M !
i
% =l resultado$ es un con9unto de
escalones cu!a valor vara de un intervalo a otro de acuerdo con el dato representativo contenido
en cada tramo% La fi"ura A%@EaF muestra el resultado de la interpolacion de orden cero para los
mismos diez datos de la fi"ura A%3%
350
300
250
200
150
100
50
0
50
1 2 3 4 5 6 " 8 ! 10
x
EaF 0nterpolacion de orden
cero
350
300
250
200
150
100
50
0
50
1 2 3 4 5 6 " 8 ! 10
x
EbF 0nterpolacion
lineal
*i"ura A%@D 0nterpolaciones de orden cero ! lineal para los datos de la fi"ura A%3
`
%
interpolacion lineal% =n este caso$ se dividen los datos en "rupos de dos% Cada par de datos
consecutivos se interpola calculando la recta :ue pasa por ellos% La interpolacion lineal se
emplea en muc#as aplicaciones debido a su sencillez de calculo% La fi"ura A%@EbF$ muestra el
resultado de apro3imar linealmente los mismos datos contenidos en los e9emplos anteriores%
-i"uiendo el mismo procedimiento$ aumentando el numero de datos contenidos en cada
inter1 valo$ podramos definir una interpolacion cuadratica$ con polinomios de se"undo "rado$
tomando intervalos :ue conten"an tres puntos$ una interpolacion cubica$ para intervalos de
cuatro puntos etc%
A%@%% 0nterpolacion mediante splines cu
bicos
Kemos descrito antes como el polinomio interpolador de orden n para un con9unto de nS datos
puede presentar el inconveniente de complicar e3cesivamente la forma de la curva obtenida entre los
puntos interpolados% La interpolacion a tramos :ue acabamos de describir$ simplifica la forma de
la curva entre los puntos pero presenta el problemas de la continuidad en las uniones entre tramos
sucesivos% -era deseable encontrar metodos de interpolacion :ue fueran capaces de
solucionar ambos problemas simultaneamente% Una buena apro3imacion a dic#a solucion la
proporcionan los splines%
Una funcion spline est formado por un con9unto de polinomios$ cada uno definido en un
intervalo$ :ue se unen entre s obedeciendo a ciertas condiciones de continuidad%
-upon"amos :ue tenemos una tabla de datos cual:uiera$
3 3
0
3



3
n
! !
0
!



!
n
&ara construir una funcion spline - de orden m$ :ue interpole los datos de la tabla$ se definen
intervalos tomando como e3tremos dos puntos consecutivos de la tabla ! un polinomio de "rado
m para cada uno de los intervalos$
`
-
0
E3F$ 3 Q3
0
$ 3

R
`
`
-

E3F$ 3 Q3

$ 3
2
R
`
%
`
`
%
- M
`
-
i
E3F$ 3 Q3
i
$ 3
iS
R
`
`
`
`
`
-
n
E3F$ 3 Q3
n
$
3
n
R
&ara :ue - sea una funcion -pline de orden m debe cumplir :ue sea continua ! ten"a m
derivadas continuas en el intervalo Q3
0
$ 3
n
R en :ue se desean interpolar los datos%
&ara ase"urar la continuidad$ los polinomios :ue forman - deben cumplir las si"uientes condi1
ciones en sus e3tremos/
-
i
E3
iS
F M -
iS
E3
iS
F$ E i n F
-
0 0
i
E3
iS
F M -
iS
E3
iS
F$ E i n F
-
00 00
i
E3
iS
F M -
iS
E3
iS
F$ E i n F
%
-
m
m
i
E3
iS
F M -
iS
E3
iS
F$ E i n F
00
-
0
i
$ i M 0$ $
n
=s decir$ dos polinomios consecutivos del spline ! sus m primeras derivadas$ deben
tomar los mismos valores en el e3tremo comun%
Una consecuencia inmediata de las condiciones de continuidad e3i"idas a los splines es :ue sus
derivadas sucesivas$ -
0
$ -
00
$ son a su vez funciones spline de orden m $ m 2$
% &or otro lado$ las condiciones de continuidad suministran En F m ecuaciones
:ue$ unidas a las n S condiciones de interpolacion cada polinomio debe pasar por los datos
:ue constitu!en los e3tremos de su intervalo de definicion$ suministran un total de n Em S F
Em F ecuaciones% =ste numero es insuficientes para determinar los Em S F n
parametros correspondientes a los n polinomios de "rado m empleados en la interpolacion% Las m
ecuaciones :ue faltan se obtienen imponiendo a los splines condiciones adicionales%
-plines cubicos% Los splines mas empleados son los formados por polinomios de tercer
"rado% =n total$ tendremos :ue determinar Em S F n M @ n coeficientes para obtener todos los
polinomios :ue componen el spline% Las condiciones de continuidad mas la de interpolacion
suministran en total 3 En F S n S M @ n 2 ecuaciones% )ecesitamos imponer al spline
dos condiciones mas% 6l"unas tpicas son$
% -plines naturales -
00
E3
0
F M -
00
E3
n
F M 0
2% -plines con valor conocido en la primera derivada de los e3tremos -
0
E3
0
F M !
0
$ -
0
E3
n
F M !
0
3% -plines periodicos$
0 n
`
`
-E3
0
F M -E3
n
F
`
-
0
E3
0
F M -
0
E3
n
F
`
`
-
00
E3
0
F M -
00
E3
n
F
0ntentar construir un sistema de ecuaciones para obtener a la vez todos los coeficientes de
todos los polinomios es una tarea e3cesivamente comple9a por:ue #a! demasiados parametros%
&ara abordar el problema partimos del #ec#o de :ue -
00
E3F es tambien un spline de orden
para los puntos interpolados% -i los definimos como$
-
i
E3F M M
i
3
3
iS
#
i
S M
iS
3
3
i
#
i
$ i M 0$ $ n
ser
donde #
i
M 3
iS
3
i
representa el anc#o de cada intervalo ! donde cada valor M
i
M -
00
E3
i
F
una de las inco"nitas :ue deberemos resolver%
-i inte"ramos dos veces la e3presion anterior$
i
E3F M
M
i
E3 3
iS
F
2
2
#
i
S M
iS
E3 3
i
F
2
2
#
i
S 6
i
$ i M 0$ $ n
-
i
E3F M
M
i
E3 3
iS
F
3
<
#
i
S M
iS
E3 3
i
F
3
<
#
i
S 6
i
E3 3
i
F S 4
i
$ i M 0$ $ n
=mpezamos por imponer las condiciones de interpolacionD el polinomio -
i
debe pasar por
el punto E3
i
$ !
i
F$
-
i
E3
i
F M
M
i
E 3
i
3
iS
F
3
<
#
i
S 4
i
M !
i
4
i
M !
i

M
i

#
2

<
6 continuacion imponemos continuidad del spline en los nodos comunesD =l polinomio -
i
tambien debe pasar por el punto E3
i
$ !
i
F$
i

-
0
-
0
`
M
2
M
3
`
4
i
3
z bc
2
d
-
i
E3
i
F M
M
i
E3
i
3
i
F
<
#
i
S 6
i
E3
i
3
i
F S !
i

M
i
#
i
M !
<
!
i
i i
6
i
M
I por tanto$
!
i

#
i
M M

<
#
i
$ i M $ $ n
6
i
M
!
iS

!
i
#
i
M
iS
M
i

<
#
i
$ i M 0$ $ n
=n tercer lu"ar imponemos la condicion de :ue las derivadas tambien sean continuas en
los nodos comunes$
i
E3
i
F M
M
i
E 3
i
3
iS
F
2
2
#
i
S M
iS
E3
i
3
i
F
2
2
#
i
2
S
!
iS

!
i
#
i
M
iS
M
i

<
#
i
$ i M 0$ $ n

i
E3
i
F M
M
i
E3
i
3
i
F
2
2
#
i
S M
i
E3
i
3
i
F
S
2 #
i
!
i
!
i

#
i
M
i
M
i


<
#
i
$ i M $ $ n
-
0 0
i
E3
i
F M -
i
E3
i
F$ i M $ $ n
#
i
M
i
2
S
!
iS

!
i
#
i
M
iS
M
i

<
#
M M
i
#
i
S
2
!
i

!
i
#
i
M
i
M
i

<
#
i
-i a"rupamos a un lado los valores M
i
$ M
i
$ M
iS
$
#
i
M
i
S 2 E#
i
S #
i
F M
i
S #
i

M
iS
M <

!
i S



!
i
#
i
!
i
!
i


#
i
i M $ $ n
=n total tenemos M
0
$ $ M
n
$ n S inco"nitas ! la e3presion anterior$ solo nos
suministra n ecuaciones% )ecesitamos dos ecuaciones mas$ -i imponemos la condicion de
splines naturales$ &ara el e3tremo de la iz:uierda del primer polinomio ! para el e3tremo de la
derec#a del ultimo$
M
0
M -
00
E3
0
F M 0
M
n
M -
00
E3
n
F M
0
Con estas condiciones ! la e3presion obtenida para el resto de los M
i
$ podemos construir un
sistema de ecuaciones tridia"onal
`
2E#
0
S #

F #

0 0 0
0
`
#

2E#

S #
2
F #
2
0 0
0
`
0 #
2
2E#
2
S #
3
F #
3
0
0
`
`
`
M
`

`
`
`
` `
`
0 0 0 0

2E#
n3
S #
n2
F #
n2
0 0 0 0

#
n2
2E#
n2
S #
n
F
` `
`
% %
` ` `
`
b
`
`
b
2
`
`
b
3
`
`
% % % %
%
% % %
``
` M ` `
`
% %
`
% %
%
% %
` ` ` `
` ` ` ` `
`
+onde #emos #ec#o$
`
M
n
b
n
#
b
i
M <

!
i S



!
i
#
i
!
i
!
i


#
i
2enemos un sistema de ecuaciones en el :ue la matriz de coeficientes es tridi"onal ! adem
as dia"onal dominante$ por lo :ue podramos emplear cual:uiera de los metodos vistos en
captulo
<% Una vez resuelto el sistema ! obtenidos los valores de M
i
$ obtenemos los valores de 6
i
! 4
i
a
&artir de las ecuaciones obtenidas mas arriba%
&or ultimo$ la forma #abitual de definir el polinomio de "rado 3 -
i
$ empleado para
interpolar los valores del intervalo Q3
i
$ 3
iS
R$ mediante splines cubicos se define como$
-
i
E3F M p
i
S k
i
E3 3
i
F S q
i
E3 3
i
F
2
S j
i
E3 3
i
F
3
$ 3 Q3
i
$ 3
iS
R$ Ei M 0$ $
$ n F +onde$
p
i
M !
i
!
iS
!
i M
i

#
i
M
iS
#
i
k
i
M
i
M
i
q
i
M
2

3

<
j
i
M
M
iS

M
i
<
#
i
La si"uiente funcion permite obtener los coeficientes ! el resultado de interpolar un con9unto
de puntos mediante splines cubicos$
function /c:yi0=spcubic,x:y:xi-
Euso /c:yi0=spcubic,x:y:xi-
E9sta funcion interpola los puntos contenidos en los vectores columna x e y
Eempleando parae ello splines cubicos naturales. devuelve los coeficientes
Ede los polinomios en una matriz de dimension ,n%1-I$. 8ada fila contiene
Eun splin desde 7o a 7n%1 los coeficiente estan guardados el la fila en
Eorden depotencia creciente6 e)emplo c,i:1-c,i:!-Ixc,i:3-IxK!c,i:$-IxK3
Eademas devuelve los valores interpolados yi correspondientes a puntos xi
Econtenidos en el intervalo definido por los valores de x
Eobtenemos la longitud de los
datos... l=length,x-1
Eobtencion de los coeficientes H
E8onstruimos el vector de diferencias h y un vector de diferencias
EBy=y,i1-%y,i- Wue nos ser
muy util a la hora de calcular el vector de
Eterminos independientes del sistema
for i=16l%1
h,i-=x,i1-%x,i-1
By,i-=y,i1-%y,i-1
end
E8onstruimos la matriz del sistema. ,<o ideal seria definirla como una
Ematriz sparse pero en fin no sabeis: porque sois todavQa pequenos: etc...-
87=,l%!:l%!-=!I,h,l%!-h,l%1--1
b,l%!:1-='I,By,l%1-Jh,l%1-%By,l%!-Jh,l%!--1
for i=16l%3
87=,i:i-=!I,h,i-h,i1--1
87=,i:i1-=h,i1-1
87=,i1:i-=h,i1-1
b,i:1-='I,By,i1-Jh,i1-%By,i-Jh,i--1
end
Ecalculamos los coeficientes H:
H=87=Fb1
E2nadimos el primer y el ultimo valor como ceros ,7plines
naturales- H=/(1H1(01
Ecalulamos los coeficientes 2:
for i=16l%1
2,i-=By,i-Jh,i-%,H,i1-%H,i--Ih,i-J'1
end
E8alculamos los coeficientes 3:
for i=16l%1
3,i-=y,i-%H,i-Ih,i-K!J'1
end
E=odemos ahora calcular el valor que toma el polinomio para los puntos
Eque se desea interpolar
Emiramos cuantos puntos tenemos
l!=length,xi-1
for i=16l!
Emiramos en que intervalo esta el punto xi,i-
)=11
while xi,i->x,)-
)=)11
end
if )>l%1
)=l%11 Eaunque estamos extrapolando
elseif )M!
)=!1 Eestamos calculando el primer punto o estamos tambien
Eextrapolando
end
end
yi,i-=%H,)%1-I,xi,i-%x,)--K3J,'Ih,)%1--...
H,)-I,xi,i-%x,)%1--K3J,'Ih,)%1--2,)%1-I,xi,i-%x,)%1--3,)%1-1
Ecalcumos los coeficientes c del spline en forma *normal*
Ela primera columna: son los valores de
i: c=zeros,l%1:$-1
rrador$9uan%9imen
'%to&

i#terp. &pli#e& F.io&
y
for i=16l%1
c,i:1-=y,i-1
c,i:!-=By,i-Jh,i-%H,i-Ih,i-J3%H,i1-Ih,i-J'1
c,i:3-=H,i-J!1
c,i:$-=,H,i1-%H,i--J,'Ih,i--1
end
La fi"ura$ A%; muestra el resultado de interpolar mediante un spline cubico$ los datos
contenidos en la fi"ura A%3% =s facil observar como a#ora los polinomios de interpolacion dan
como resultado una curva suave en los datos interpolados ! en la :ue ademas las curvas son
tambien suaves$ sin presentar variaciones e3tranVas$ para los puntos contenidos en cada intervalo
entre dos datos%
350
300
250
200
150
100
50
0
50
1 2 3 4 5 6 " 8 ! 10
x
*i"ura A%;D 0nterpolacion mediante spline cubico de los datos de la fi"ura A%3
A%@%2% *unciones propias de Matlab para interpolacion por intervalos
&ara realizar una interpolacion por intervalos mediante cual:uiera de los procedimientos descri1
tos$ Matlab incorpora la funcion propia interp1% =sta funcion admite como variables de entrada
dos vectores con los valores de las coordenadas 3 e ! de los datos :ue se desea interpolar ! un
tercer vector 3 con los puntos para los :ue se desea calcular el valor de la interpolacion% 6dem
as$ admite como variable de entrada una cadena de caracteres :ue indica el metodo con el
:ue se :uiere realizar la interpolacion% +ic#a variable puede tomar los valoresD
% *nearest*% 0nterpola el intervalo empleando el valor !
i
correspondiente al valor 3
i
m
as cercano al punto :ue se :uiere interpolar% =l resultado es una interpolacion a
escalones%
2% *linear* realiza una interpolacion lineal entre los puntos del con9unto de datos :ue se
desea interpolar%
A%;% 6JU-2= &BL0)B

M0CB &B? =L M=

2B+B += M

0)0MB-
CU6+?6+B-
@3
3% *spline*% 0nterpola empleando splines cubicos naturales%
@% *cubic* o *pchip =mplea polinomios de Kermite cubicos% =s un metodo similar al de
los splines :ue no describiremos en estos apuntes%
La funcion devuelve como salida los valores interpolados correspondientes a los puntos de 3%
=l si"uiente codi"o muestra el modo de usar el comando interp1% &ara probarlo se #an creado dos
vectores x e y :ue contienen el con9unto de datos :ue se empleara para calcular la interpolaci
on% 6demas$ se #a creado otro vector x1 :ue contiene los puntos para los :ue se :uiere
calcular el resultado de la interpolacion%
>> x=/16!61'0
x =
1 3 & . 4 11 13 1&
>> y=/1 3 $ ! %1 $ %& 30
y =
1 3 $ ! %1 $ %& 3
>> x1=/3.& ..&0
x1 =
3.&((( ..&(((
>> y1=interp1,x:y:x1:*spline*-
y1 =
3.$11( (..&.&
>> x=/16!61'0
x =
1 3 & . 4 11 13 1&
>> y=/1 3 $ ! %1 $ %& 30
y =
1 3 $ ! %1 $ %& 3
>> x1=/3.& ..&0
x1 =
3.&((( ..&(((
>> y1=interp1,x:y:x1:*nearest*-
y1 =
3 !
>> y1=interp1,x:y:x1:*linear*-
y1 =
3.!&(( 1.!&((
>> y1=interp1,x:y:x1:*cubic*-
y1 =
3.3$38 1.1438
A%;% 69uste polinomico por el metodo de mnimos
cuadrados
Los metodos de interpolacion :ue #emos descrito en las secciones anteriores pretenden
encontrar un polinomio o una funcion definida a partir de polinomios :ue pase por un con9unto de
datos% =n el caso del a9uste por mnimos cuadrados$ lo :ue se pretende es buscar el polinomio$
de un "rado dado$ :ue me9or se apro3ime a un con9unto de datos%
-upon"amos :ue tenemos un con9unto de m datos$
C6&

02ULB A% 0)2=?&BL6C0B

) I 6JU-2= +=
*U)C0B)=-
@@
3 3
0
3



3
m
! !
0
!



!
m
Gueremos construir un polinomio pE3F de "rado n f m $ de modo :ue los valores :ue
toma el polinomio para los datos pE3
i
F sean lo mas cercanos posibles a los correspondientes
valores !
i
%
=n primer lu"ar$ necesitamos clarificar :ue entendemos por lo mas cercano posible% Una
posi1 bilidad$ es medir la diferencia$ !
i
pE3
i
F para cada par de datos del con9unto% -in embar"o$
es mas frecuente emplear el cuadrado de dic#a diferencia$ E!
i
pE3
i
FF
2
% =sta cantidad tiene$
entre otras$ la venta9a de :ue su valor es siempre positivo con independencia de :ue la diferencia
sea positiva o ne"ativa% 6demas$ representa el cuadrado de la distancia entre pE3
i
F e !
i
% &odemos
tomar la suma de dic#as distancias al cuadrado$ obtenidas por el polinomio para todos los pares
de puntos$
m
P
E!
i
pE3
i
FF
2
iM
como una medida de la distancia del polinomio a los datos% +e este modo$ el polinomio lo
mas cercano posible a los datos sera a:uel :ue minimice la suma de diferencias al cuadrado
:ue acabamos de definir% +e a# el nombre del metodo%
=n muc#os casos$ los datos a los :ue se pretende a9ustar un polinomio por mnimos
cuadrados son datos e3perimentales% =n funcion del entorno e3perimental ! del metodo con
:ue se #an ad:uirido los datos$ puede resultar :ue al"unos resulten mas fiables :ue otros% =n
este caso$ sera deseable #acer :ue el polinomio se apro3ime mas a los datos mas fiables% Una
forma de #acerlo es anVadir unos pesos$ x
i
$ a las diferencias al cuadrado en funcion de la confianza
:ue nos merece cada dato$
m
P
x
i
E!
i
pE3
i
FF
2
iM
Los datos fiables se multiplican por valores de x "randes ! los poco fiables por valores
pe:uenVos% &ara ver como obtener los coeficientes de un polinomio de mnimos cuadrados$
empezaremos
con el caso mas sencillo/ un polinomio de "rado 0% =n este caso$ el polinomio es una constante$
definida por su termino independiente pE3F M a
0
% =l ob9etivo a minimizar sera entonces$
m
"Ea
0
F M
P
x
i
E!
i
a
0
F
2
iM
=l valor mnimo de esta funcion debe cumplir :ue su derivada primera "
0
Ea
0
F M 0 ! :ue
su derivada se"unda "
00
Ea
0
F 0$
m
&
m
x !
"
0
Ea
0
F M 2
P
x
i
E!
i
a
0
F M 0 a
0
M
iM
i i
&
m
iM
m
"
00
Ea
0
F M 2
P
x
i
"
00
Ea
0
F
0
iM
iM
x
i
=l resultado obtenido para el valor de a
0
es una media$ ponderada con los pesos .
i
de los datos%
-i #acemos .
i
M .
i
obtendramos e3actamente la media de los datos% =ste resultado resulta
bastante razonable% 6pro3imar un con9unto de valores por un polinomio de "rado cero$ es tanto
como suponer :ue la variable ! permanece constante para cual:uier valor de 3% Las diferencias
'%to&
% +3.014
0
i
y
observadas deberan deberse entonces a errores aleatorios e3perimentales$ ! la me9or estima
del
valor de ! ser precisamente el valor medio de los valores disponibles% La fi"ura A%< muestra el
resultado de calcular el polinomio de mnimos cuadrados de "rado cero para un con9unto de datos%
4
3.5
3
2.5
2
1.5
1
0.5
0
0 0.1 0.2 0.3 0.4 0.5 0.6 0." 0.8 0.! 1
x
*i"ura A%<D &olinomio de mnimos cuadrados de "rado 0
=l si"uiente paso en dificultad sera tratar de apro3imar un con9unto de datos por un
polinomio de "rado $ es decir$ por una linea recta$ pE3F M a
0
S a

3% =n este caso$ la suma de
diferencias al cuadrado toma la forma$
m
"Ea
0
$ a

F M
P
x
i
E!
i
a
0
a

3
i
F
2
EA%F
iM
=n este caso$ tenemos dos coeficientes sobre los :ue calcular el mnimo% =

ste se obtiene
cuando las derivadas parciales de "Ea
0
$ a

F respecto a ambos coeficientes son i"uales a cero%
y"
ya
0
y"
ya

m
M 2
P
x
i
E!
i
a
0
a

3
i
F M 0
iM
m
M 2
P
x
i
3
i
E!
i
a
0
a

3
i
F M 0
iM
-i reordenamos las ecuaciones anteriores$

m
l
P
x
i
iM
a
0
S

m
l
P
x
i
3
i iM
m
a

M
P
x
i
!
i
iM

m
l
P
x
i
3
i
iM
a
0
S

m
l
P
x
i
3
2
iM
m
a

M
P
x
i
3
i
!
i
iM
i
0 n
M 0
P
x 3
9
Ea
i
i
Bbtenemos un sistema de dos ecuaciones lineales cu!as inco"nitas son precisamente los coefi1
cientes de la recta de mnimos cuadrados%
&odemos a#ora "eneralizar el resultado para un polinomio de "rado n$ pE3F M a
0
S a

3 S a
2
3
2
S
S a
n
3
n
% La funcion " toma la forma$
m
"Ea
0
$ a

$ $ a
n
F M
P
x
i
Ea
0
S a

3
i
S S a
n
3
n
!
i
F
2
iM
+e nuevo$ para obtener los coeficientes del polinomio i"ualamos las derivadas parciales a cero$
y " Ea $ a $ $ a F
m

S a 3 S
S a
3
n
! F M 0$ 9 M 0$ $ n
ya
9
i
i
0 i
iM
n
i
i
-i reordenamos las e3presiones anteriores$ lle"amos a un sistema de n S ecuaciones lineales$
cu!as inco"nitas son los coeficientes del polinomio de mnimos cuadrados$
`
s
0
s


s
n
`
`
a0
` `
c0
`
`
s

s
2

s
nS
`
`
a

` `
c

`
` ` ` ` ` `
`
% %
%
%
` `
%
` M `
%
`
`
% %
%
` `
%
` `
%
`
s
n
s
nS
s
2n
a
n
c
n
+onde #emos definido s
9
! c
9
como$
m
s
9
M
P
x
i
3
9
iM
m
c
9
M
P
x
i
3
9
!
i
iM
=l si"uiente codi"o permite obtener el polinomio de mnimos cuadrados :ue apro3ima un
con1 9unto de n datos$
function a=mc,x:y:n:w-
Euso6 a=mc,x:y:n:w-. 9sta funcion permite obtener los coeficientes del
Epolinomio de mQnimos cuadrados que a)usta un con)unto de datos. <as
Evariables de entrada son6 x: vector con la componente x de los datos a
Ea)ustar. y: vector con la componente y de los datos a a)ustar. n grado del
Epolinomio de interpolacion. w vector de pesos asociados a los datos. si no
Ese suministra se toman todos los pesos como 1. 7alidas6 vector columna con
Elos coeficientes del polinomio=> a,1-a,!-Ixa,3-IxK!a,n1-IxKn
Ecomprobamos en primer lugar que tenemos datos
suficientes: m=length,x-1
if mMn1
error,*no hay datos suficientes para calcular el polinomio pedido*-
end
E7i no se ha suministrado vector de pesos construimos uno formado por unos:
w=ones,m:1-1
EHontamos un bucle para crear los elementos s de la matriz de
coeficientes: for )=16!In1
s,)-=(1
for i=16m s,)-=s,)-
w,i-Ix,i-K,)%1-1
end
end
Ey un segundo bucle para crear los terminos
independientes... for )=16n1
c,):1-=(1
for i=16m
c,):1-=c,):1-w,i-Ix,i-K,)%1-Iy,i-
end
end
E a partir de los valores de s: construimos la matriz del
sistema: for i=16n1
for )=16n1
2,i:)-=s,i)%1-
end
end
Esolo nos queda resolver el sistema... 9mpleamos la division por
la
Eizquierda de Hatlab
a=2Fc1
Una ultima observacion importante es :ue si intentamos calcular el polinomio de m
nimos
cuadrados de "rado m :ue apro3ima un con9unto de m datos$ lo :ue obtendremos sera
el polinomio de interpolacion% =n "eneral$ cuanto ma!or sea el "rado del polinomio mas
posibilidades #a! de :ue la matriz de sistema empleado para obtener los coeficientes del
polinomio este mal condicionada%
A%;%% Mnimos cuadrados en
Matlab%
Matlab suministra dos maneras distintas de a9ustar un polinomio a unos datos por m
nimos cuadrados% La primera es mediante el uso del comando polyfit% =ste comando admite
como entradas un vector de coordenadas 3 ! otro de coordenadas !$ de los datos :ue se :uieren
apro1 3imar$ ! una tercera variable con el "rado del polinomio% Como resultado devuelve un
vector con los coeficientes del polinomio de mnimos cuadrados% Brdenados en orden de
potencias decrecien1 tes a,1-IxK na,!-IxK ,n%1-...a,n1-% La si"uiente secuencia de
comandos crea un par de vectores ! muestra como mane9ar el comando$
>> x=/161(0
x
=
1 ! 3 $ & ' . 8 4 1(
>> y=/%1 ( 3 $ &.! ' 1( 1! 13 1&.&01
>> a=polyfit,x:y:3-
a =
(.(((1 (.($11 1.3..$ %!.$133
6 continuacion$ podemos emplear el comando polyval$ para obtener en valor del polinomio de
mnimos cuadrados obtenido en cual:uier punto% =n particular$ si lo aplicamos a los datos 3$
>> yhat=polyval,a:x-
yhat =
8olumns 1 through .
%(.44$. (.&('. !.(413 3..&4' &.&1!1 ..3$41 4.!.13
8olumns 8 through 1(
11.!.4( 13.3.!. 1&.&&!4
&or ultimo$ podemos calcular el error cometido por el polinomio e
i
M |pE3
i
!
i
|
>> error=abs,yhat%y-
error =
8olumns 1 through .
(.((&3 (.&('. (.4(8. (.!$($ (.31!1 1.3$41 (..!8.
8olumns 8 through 1(
(..!1( (.3.!. (.(&!4
6demas del comando polyfit Matlab permite a9ustar un polinomio por mnimos cuadrados a
un con9unto de datos a traves de la ventana "rafica de Matlab% &ara ello$ es suficiente representar
los datos con el comando plot,x:y-% Una vez :ue Matlab muestra la ventana "rafica con los
datos representados$ se selecciona en el menu desple"able tools la opcion 3asic Sitting%
Matlab abre una se"unda ventana :ue permite seleccionar el polinomio de mnimos cuadrados
:ue se desea a9ustar a los datos$ as como otras opciones :ue permiten obtener los coeficientes del
polinomio ! analizar la bondad del a9uste a partir de los residuos Ever seccion si"uienteF% La fi"uras
A%A$ muestra un e9emplo de uso de la ventana "rafica de Matlab para obtener un a9uste por m
nimos cuadrados
A%;%2% 6nalisis de la bondad de un a 9uste por mnimos
cuadrados%
-upon"amos :ue tenemos un con9unto de datos obtenidos como resultado de un e3perimento%
=n muc#os casos la finalidad de un a9uste por mnimos cuadrados$ es encontrar una le! :ue nos
permita relacionar los datos de la variable independiente con la variable dependiente% &or e9emplo
si aplicamos distintas fuerzas a muelle ! medimos la elon"acion sufrida por el muelle$ esperamos
obtener$ en primera apro3imacion una relacion linealD i3 * % ELe! de Koo5eF%
-in embar"o$ los resultados de un e3perimento no se a9ustan nunca e3actamente a una le!
debido a errores aleatorios :ue no es posible corre"ir%
Cuando realizamos un a9uste por mnimos cuadrados$ podemos emplear cual:uier
polinomio desde "rado 0 #asta "rado m % +esde el punto de vista del error cometido con respecto
a los datos disponibles el me9or polinomio sera precisamente el de "rado m :ue da error
cero para todos los datos$ por tratarse del polinomio de interpolacion% -in embar"o$ si los datos
son e3perimentales estamos inclu!endo los errores e3perimentales en el a9uste%
&or ello$ para datos e3perimentales ! suponiendo :ue los datos solo contienen errores aleatorios$
el me9or a9uste lo dara el polinomio de menor "rado para el cual las diferencias entre los datos
! el polinomio !
i
pE3
i
F se distribu!an aleatoriamente% =stas diferencias reciben #abitualmente
el nombre de residuos%
dor$9uan%9imen
EaF Menu desple"able para abrir ven1
tana au3iliar
EbF ventana au3iliar para realizar el a9uste ! analizar resultados
*i"ura A%AD =9emplo de uso de la ventana "rafica de Matlab para realizar un a9uste por m
nimos cuadrados
=ntre las #erramientas :ue suministra la ventanas "raficas de Matlab para el a9uste por m
nimos cuadrados #a! una :ue calcula ! representa los residuos% La fi"ura A%> muestra un e9emplo
de a9uste por mnimos cuadrados empleando cada vez un polinomio de ma!or "rado%
=n la fi"ura A%>EaF se observa claramente :ue el a9usto no es bueno$ la recta de mnimos
cuadra1 dos no es capaz de adaptarse a la forma :ue presentan los datos% Los residuos muestran
claramente esta tendenciaD no estan distribuidos de forma aleatoria% =n la fi"ura A%>EbF$ la
parabola apro3ima muc#o me9or el con9unto de datos$ a simple vista parece un buen a9uste% -in
embar"o$ los residuos presenta una forma funcional clara :ue recuerda la forma de un polinomio
de tercer "rado% =n la fi"ura A%>EcF$ los residuos estan distribuidos de forma aleatoria% -i
comparamos estos resultados con los de la fi"ura A%>EdF vemos :ue en este ultimo caso los
residuos son mas pe:uenVos$ pero conservan esencialmente la misma distribucion aleatoria :ue
en la fi"ura anterior% La apro3imacion de los datos empleando un polinomio de cuarto "rado no
anVade informacion sobre la forma de la funcion :ue si"uen los datos$ ! #a empezado a incluir
en el a9uste los errores de los datos%
orrador$9 an%9imene
300
300
'%to&
200
li#e%r
200
'%to&
01%'r%ti
100
0 100
100
60
40
20
1 2 3 4 5 6 " 8 ! 10
re&i'1%l&
0
1 2 3 4 5 6 " 8 ! 10
re&i'1%l&
4
2
0 0
20
2
40
60
1 2 3 4 5 6 " 8 ! 10
4
1 2 3 4 5 6 " 8 ! 10
EaF ?ecta de mnimos cuadrados ! residuos
obte1 nidos
EbF &arabola de mnimos cuadrados ! residuos
ob1 tenidos
300
300
200
'%to&
1.i
200
'%to&
4tG 'egree
100
100
0
0.5
1 2 3 4 5 6 " 8 ! 10
re&i'1%l&
0
1 2 3 4 5 6 " 8 ! 10
re&i'1%l&
1
0.5
0 0
0.5
0.5
1 2 3 4 5 6 " 8 ! 10
1
1 2 3 4 5 6 " 8 ! 10
EcF polinomio de tercer "rado de mnimos
cuadra1 dos ! residuos obtenidos
EdF polinomio de cuarto "rado de mnimos
cuadra1 dos ! residuos obtenidos
*i"ura A%>D Comparacion entre los residuos obtenidos para los a9ustes de mnimos cuadrados de
un con9unto de datos empleando polinomios de "rados a @%
n
Captulo >
+iferenciacion e 0nte"raci
on numerica
La diferenciacion$ ! sobre todo la inte"racion son operaciones #abituales en calculo num
erico% =n muc#os caso obtener la e3presion analtica de la derivada o la inte"ral de una funci
on puede ser mu! complicado o incluso imposible% 6demas en ocasiones no disponemos de
una e3presion analtica para la funcion :ue necesitamos inte"rar o derivar$ sino tan solo de
un con9unto de valores numericos de la misma% =ste es el caso$ por e9emplo$ cuando estamos
traba9ando con datos e3perimentales% -i solo disponemos de valores numericos$ entonces solo
podemos calcular la inte"ral o la derivada numericamente%
Los sistemas fsicos se describen "eneralmente mediante ecuaciones diferenciales% La ma!or
a de las ecuaciones diferenciales no poseen una solucion analtica$ siendo posible unicamente
obtener soluciones numericas%
=n terminos "enerales la diferenciacion numerica consiste en apro3imar el valor :ue toma
la derivada de una funcion en un punto% +e modo analo"o$ la inte"racion numerica apro3ima el
valor :ue toma la inte"ral de una funcion en un intervalo%
>%% +iferenciacion numerica%
Como punto de partida$ supondremos :ue tenemos un con9unto de puntos {3
i
$ !
i
}$
3 3
0
3



3
n
! !
0
!



!
n
Gue pertenecen a una funcion ! M f E3F :ue podemos o no conocer analticamente% =l
ob9etivo de la diferenciacion numerica es estimar el valor de la derivada f
0
E3F de la funcion$ en
al"uno de los puntos 3
i
en los :ue el valor de f E3F es conocido%
=n "eneral e3isten dos formas de apro3imar la derivadaD
% +erivando el polinomio de interpolacion% +e este modo$ obtenemos un nuevo polinomio
:ue apro3ima la derivada%
f E3F &
n
E3F f
0
E3F &
0
E3F
2% =stimando la derivada como una formula de diferencias finitas obtenida a partir de la apro1
3imacion del polinomio de 2a!lor%
30A
C6&

02ULB >% +0*=?=)C06C0B



) = 0)2=(?6C0B

) )UM=

?0C6
;2
0
n
2 #
2
0



0
n
0
# 2 #
2
nl #
n
3

-i partimos de la definicion de derivada$


f
0
E3 F M lm
f E3
0
S #F f
E3
0
F
f E3 S #F f E3 F

#0 # #
&odemos asociar esta apro3imacion con el polinomio de 2a!lor de primer orden de la funcion
f E3F$
f E3F f E3
0
F
f E3F f E3
0
F S f
0
E3
0
F E3 3
0
F f
0
E3
0
F
-i #acemos 3 3
0
M #$ ambas e3presiones coinciden%
3 3
0
=n "eneral$ los al"oritmos de diferenciacion numerica son inestables% Los errores iniciales :ue
puedan contener los datos debido a factores e3perimentales o al redondeo del ordenador$ aumentan
en el proceso de diferenciacion% &or eso no se pueden calcular derivadas de orden alto !$ los resul1
tados obtenidos de la diferenciacion numerica deben tomarse siempre e3tremando la precauci
on%
>%%% +iferenciacion numerica basada en el polinomio de
interpolacion%
=l metodo consiste en derivar el polinomio &
n
E3F de interpolacion obtenido por al"uno de
los metodos estudiados en el captulo A ! evaluar el polinomio derivada &
0
E3F en el punto
deseado%
Un e9emplo particularmente sencillo$ para la e3presion del polinomio derivada se obtiene en
el caso de datos e:uidistantes interpolados mediante el polinomio de )e.ton1(re"or!$
3 3
0
E3 3

F E3 3
0
F
2
E3 3
n
F E3 3

F E3
3
0
F
n
p
n
E3F M !
0
S i!
0
S
#
i !
0
S
S

i !
0
nl #
n
-i lo derivamos$ obtenemos un nuevo polinomio$
i!
0 i
2
!
0
p
n
E3F M
S
S QE3 3 F S E3 3 FR S
# 2 #
2
i
3
!
0
3l #
3
QE3 3

FE3 3
2
F S E3 3
0
FE3 3

F S E3 3
0
FE3 3
2
FR S
S
i
n
!
0
S
nl #
n
P
E3 3
0
FE3 3

F E3 3
n
F
5M0
3 3
5
=ste polinomio es especialmente simple de evaluar en el punto 3
0
$
# # # #
i!
0
i
2
!
0
z bc
d
i
n
!
0
z bc d z bc
d
z bc d
p
n
E3
0
F M S E3
0
3

F S S QE3
0
3

F E3

3
2
F E3
n

3
n
FR

i
2
!
0
p
0
i
3
!
0
i
n
!
0
n
n
E3
0
F M
#
i!
0

2
S S
S
E F
n
=s interesante remarcar como en la e3presion anterior$ el valor de la derivada se va #aciendo
mas preciso a medida :ue vamos anVadiendo diferencias de orden superior% -i solo conocieramos
dos datos$ E3
0
$ !
0
F ! E3

$ !

F% -olo podramos calcular la diferencia dividida de primer orden% =n
>%% +0*=?=)C06C0B

) )UM=

?0C6%
;3
p
0
esta caso nuestro calculo apro3imado de la derivada de 3
0
sera$


E3
0
F M
#
i!
0
-i conocemos tres datos$ podramos calcular i
2
!
0
! anVadir un se"undo termino a nuestra
estima de la derivada$


i
2
!
0

p
0
2
E3
0
F M
#
i!
0

2
! as sucesivamente$ me9orando cada vez mas la precision%
,eamos como e9emplo el calculo la derivada en el punto 3
0
M 0$0$ a partir de la si"uiente tabla
de datos$
3
i
!
i
i!
i
i
2
!
i
i
3
!
i
i
@
!
i
0$0 0$000 0$203 0$0A 0$02@ 0$020
0$2 0$203 0$220 0$0@ 0$0@@
0$@ 0$@23 0$2< 0$0>;
0$< 0$<>@ 0$3@<
0$> $030
=mpleando los dos primeros puntos$
!
0
E0$ 0F M p

E0$0F M

0$203 M $0;

0$2
=mpleando los tres primeros puntos$
!
0
E0$ 0F M p

E0$0F M


0$203
0$0A

M 0$CA2;
2
0$2

2
=mpleando los cuatro primeros puntos$
!
0
E0$ 0F M p

E0$0F M


0$203
0$0A 0$02@

S M $02;
3
0$2

2 3
=mpleando los cinco puntos disponibles
!
0
E0$ 0F M p

E0$0F M


0$203
0$0A 0$02@
S
0$020

M 0$C>A;
@
0$2

2 3