You are on page 1of 47

Universidad Nacional de Trujillo

Facultad de Ciencias Fsicas y Matemticas


Departamento de Matemticas

Dr. Wilson Maco Vsquez

INTRODUCCION A MATLAB

Que es MATLAB?
Matlab es un lenguaje de alto funcionamiento para computacin tcnica, Este integra
computacin, visualizacin, y programacin, en un entorno fcil de usar donde los problemas y
las soluciones son expresados en la ms familiar notacin matemtica. Los usos ms familiares
de Matlab son:
Matemtica y Computacin
Desarrollo de algoritmos
Modelamiento , simulacin y prototipado
Anlisis de datos, exploracin y visualizacin
Graficas cientficas e ingenieriles
Desarrollo de aplicaciones, incluyendo construccin de interfaces graficas de usuario

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

MATLAB es un sistema interactivo cuyo elemento bsico de almacenamiento de informacin es


la matriz, que tiene una caracterstica fundamental y es que no necesita dimensionamiento. Esto
le permite resolver varios problemas de computacin tcnica (especialmente aquellos que tienen
formulaciones matriciales y vectoriales) en una fraccin de tiempo similar al que se gastara
cuando se escribe un programa en un lenguaje no interactivo como C o FORTRAN
El nombre MATLAB simboliza Matriz Laboratorio o Laboratorio de Matrices. Matlab fue
originalmente escrito para proveer fcil acceso el sofware de matrices desarrollado por los
proyectos LINPACK y EISPACK, hoy, los mores de matlab incorporan las libreras LINPACK y
BLAS.
Matlab se ha desarrollado sobre un periodo de aos con entradas provenientes de muchos
usuarios, en los entornos universitarios, matlab es la herramienta instructiva estndar para cursos
avanzados e introductorios en matemticas, ingeniera y ciencia. En la industria Matlab es la
herramienta escogida para investigacin de alta productividad, desarrollo y anlisis.
Matlab presenta una familia de soluciones a aplicaciones especficas de acoplamiento rpido
llamadas ToolBoxes. Los toolboxes son colecciones muy comprensibles de funciones MATLAB,
o archivos de matlab (M-files) que extienden el entorno de MATLAB para resolver clases
particulares de problemas, Algunas reas en las cuales existen toolboxes disponibles son:
Procesamiento de seales
Sistemas de control
Redes neuronales
Lgica difusa
Wavelets
Simulacin

El Sistema MATLAB
El sistema Matlab consiste de cinco partes principales:
Entorno de desarrollo:
Es el conjunto herramientas y mdulos que ayudan a usar las funciones y archivos de matlab.
Muchas de esas herramientas son interfaces graficas de usuario. Esto incluye, el escritorio de
matlab, la ventana de comandos, el historial de comandos, un editor y un depurador, navegadores
para revisin de la ayuda, el espacio de trabajo o workspace y los archivos.
La librera de funciones matemticas: esta es una gran coleccin de algoritmos computacionales
que van desde funciones elementales como la suma, la funcin seno y coseno, y la aritmtica de
nmeros complejos hasta funciones mucho mas sofisticadas como inversas de matrices,
autovalores de matrices, funciones de bessel, y transformadas radiadas de Fourier.

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

El lenguaje MATLAB:
Es un lenguaje de alto nivel para matrices con sentencias para control de flujo, creacin de
funciones y estructuras de datos, funciones de entrada/salida y algunas caractersticas de
programacin orientada por objetos, Este lenguaje permite tanto la programacin a pequea
escala para la creacin rpida de programas, como programacin a larga escala para la
realizacin de aplicaciones complejas.
Grficas:
Matlab cuenta con mdulos extensivos para la visualizacin de vectores y matrices en forma de
graficas, as como para realizar comentarios e impresin de estas grficas. Matlab incluye
funciones de alto nivel para la visualizacin de datos en dos y tres dimensiones, procesamiento
de imgenes, animacin, y creacin de grficos de presentacin. Matlab tambin incluye
funciones de bajo nivel que permiten personalizar completamente la apariencia de los grficos
as como construir interfaces graficas de usuario para las aplicaciones.
Interfaces Externas:
Las interfaces externas son un conjunto de libreras que permiten la programacin en lenguaje C
y FORTRAN de programas que interacten con matlab. Estas libreras proveen facilidades para
realizar llamadas de rutinas desde Matlab.

Ayuda para MATLAB


Matlab provee documentacin extensiva, tanto en formato impreso como en lnea para ayudar a
los usuarios a aprender todas sus caractersticas. La ayuda online de Matlab provee informacin
orientada a tareas e informacin de referencia acerca de todas las caractersticas de Matlab.
Para ver la documentacin online de Matlab seleccione la opcin Ayuda de MatLab del men
Ayuda en la barra de mens de Matlab.

Antes de comenzar, hagamos algunas consideraciones generales:

MATLAB distingue entre maysculas y minsculas.


La comilla ' es la que, en un teclado estndar, se encuentra en la tecla de la interrogacin.
Los comentarios deben ir precedidos por % o, lo que es lo mismo, MATLAB ignora todo
lo que vaya precedido por el smbolo %.

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

La ayuda de MATLAB es bastante til; para acceder a la misma basta teclear help. Es
recomendable usarlo para obtener una informacin ms precisa sobre la sintaxis y
diversas posiblidades de uso de los comandos.

A grandes rasgos, los temas aqu introducidos son:

Generalidades.
Los clculos que no se asignan a una variable en concreto se asignan a la variable de
respuesta por defecto que es ans (del ingls, answer):
>>2+3
ans =
5

Sin embargo, si el clculo se asigna a una variable, el resultado queda guardado en


ella:
>>x=2+3
x =
5

Para conocer el valor de una variable, basta teclear su nombre:


>>x
x =
5

Si se aade un punto y coma (;) al final de la instruccin, la mquina no muestra la


respuesta...
>>y=5*4;

... pero no por ello deja de realizarse el clculo.


>>y
y =
20

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Las operaciones se evalan por orden de prioridad: primero las potencias, despus las
multiplicaciones y divisiones y, finalmente, las sumas y restas. Las operaciones de
igual prioridad se evalan de izquierda a derecha:
>>2/4*3
ans =
1.5000
>>2/(4*3)
ans =
0.1667

Se pueden utilizar las funciones matemticas habituales. As, por ejemplo, la funcin
coseno,
>>cos(pi) % pi es una variable con valor predeterminado 3.14159...
ans =
-1

o la funcin exponencial
>>exp(1)

% Funcin exponencial evaluada en 1, es decir, el nmero e

ans =
2.7183

Adems de la variable pi , MATLAB tiene otras variables con valor predeterminado;


ste se pierde si se les asigna otro valor distinto. Por ejemplo:
>>eps
precisin
ans =
2.2204e-016

pero...
>>eps=7
eps =
7

% psilon de la mquina. Obsrvese que MATLAB trabaja en doble

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Otro ejemplo de funcin matemtica: la raz cuadrada; como puede verse, trabajar
con complejos no da ningn tipo de problema. La unidad imaginaria se representa en
MATLAB como i o j, variables con dicho valor como predeterminado:
>>sqrt(-4)
ans =
0+ 2.0000i

El usuario puede controlar el nmero de decimales con que aparece en pantalla el


valor de las variables, sin olvidar que ello no est relacionado con la precisin con la
que se hacen los clculos, sino con el aspecto con que stos se muestran:
>>1/3
ans =
0.3333
>>format long
>>1/3
ans =
0.33333333333333
>>format

% Vuelve al formato estndar que es el de 4 cifras decimales

Para conocer las variables que se han usado hasta el momento:


>>who
Your variables are:
ans eps x y

o, si se quiere ms informacin (obsrvese que todas las variables son arrays):


>>whos
Name
ans
eps
x

Size
1x1
1x1
1x1

Bytes
8
8
8

Class
double array
double array
double array

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

1x1

Dr. Wilson Maco Vsquez

double array

Grand total is 4 elements using 32 bytes

Para deshacerse de una variable


>>clear y
>>who
Your variables are:
ans eps x

Vectores y matrices.
Para definir un vector fila, basta introducir sus coordenadas entre corchetes:
>>v=[1 2 3]

% Vector de 3 coordenadas

v=
1 2 3
>>w=[4 5 6];

El operador ' es el de trasposicin (en realidad trasposicin y conjugacin):


>>w'
ans =
4
5
6

Si queremos declarar un vector de coordenadas equiespaciadas entre dos dadas, por


ejemplo, que la primera valga 0, la ltima 20 y la distancia entre coordenadas sea 2,
basta poner:
>>vect1=0:2:20
vect1 =
0 2 4 6 8 10 12 14 16 18 20

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Equivalentemente, si lo que conocemos del vector es que la primera coordenada vale


0, la ltima 20 y que tiene 11 en total, escribiremos:
>>vect2=linspace(0,20,11)
vect2 =
0 2 4 6 8 10 12 14 16 18 20

A las coordenadas de un vector se accede sin ms que escribir el nombre del vector y,
entre parntesis, su ndice:
>>vect2(3)
ans =
4

y se pueden extraer subvectores, por ejemplo:


>>vect2(2:5)
ans=
2 4 6 8

o,
>>vect1(:)
ans=
0
2
4
6
8
10
12
14
16
18
20

Las matrices se escriben como los vectores, pero separando las filas mediante un
punto y coma; as una matriz 3x3:
>>M=[1 2 3;4 5 6;7 8 9]
M =

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

1 2 3
4 5 6
7 8 9
>>M'
ans
1 4
2 5
3 6

% Su traspuesta (su adjunta)


=
7
8
9

>>mat=[v;w;0 0 1]
mat
1 2
4 5
0 0

% Tambin es una matriz 3x3

=
3
6
1

A los elementos de una matriz se accede sin ms que escribir el nombre de la matriz y,
entre parntesis, los respectivos ndices:
>>mat(1,3)
mat

% Elemento en la primera fila y tercera columna de la matriz

ans =
3

Tambin se puede acceder a un fila o columna completas,


>>mat(:,2)

% Segunda columna de mat

ans =
2
5
0
>>mat(2,:)

% Su segunda fila

ans =
4 5 6

acceder a la matriz como si fuera una columna,


>>M(2:7)
ans =
4

% Los elementos segundo a sptimo de la matriz como columna

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

7
2
5
8
3

o acceder a cualquiera de sus submatrices


>>mat(2:3,[1 3])

% Submatriz formada por los elementos que estn en


% "todas" las filas que hay entre la segunda y la tercera y
% en las columnas primera y tercera

ans =
4 6
0 1

Existen algunas matrices definidas previamente; por ejemplo, la matriz identidad,


>>eye(5)
ans
1 0
0 1
0 0
0 0
0 0

=
0
0
1
0
0

0
0
0
1
0

% eye se pronuncia en ingls como I

0
0
0
0
1

la matriz nula,
>>zeros(3)
ans
0 0
0 0
0 0

=
0
0
0

o la matriz cuyos elementos valen todos 1:


>>ones(4)
ans =
1 1 1 1
1 1 1 1

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

1 1 1 1
1 1 1 1

Se puede conocer el tamao de una matriz y la longitud de un vector:


>>size(mat) % Dimensiones de la matriz mat (nmero de filas y de columnas)
ans =
3 3
>>size(v)
ans =
1 3
>>length(v) % Longitud del vector (nmero de coordenadas)
ans =
3

Existen comandos que permiten crear de forma sencilla matrices. Por ejemplo:
>>diag(v)
ans
1 0
0 2
0 0

% Matriz diagonal cuya diagonal es el vector v

=
0
0
3

>>diag(diag(M)) % Matriz diagonal con la diagonal de M. La sentencia diag(M)


da
% el vector formado por la diagonal de la matriz M
ans
1 0
0 5
0 0

=
0
0
9

>>diag(ones(1,4),1)+diag(ones(1,4),-1) % Matriz tridiagonal 5x5 con 0 en la


diagonal
% principal y 1 en la sub y
superdiagonal
ans
0 1
1 0
0 1
0 0

=
0
1
0
1

0
0
1
0

0
0
0
1

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

0 0 0 1 0
>>tril(M) % Matriz formada por la parte triangular inferior de M.
ans
1 0
4 5
7 8

=
0
0
9

>>triu(M) % Matriz formada por la parte triangular superior de M.


ans
1 2
0 5
0 0

=
3
6
9

Operaciones con vectores y matrices.


Las funciones matemticas elementales estn definidas de forma que se pueden
aplicar sobre arrays. El resultado es el array formado por la aplicacin de la funcin a
cada elemento del array. As:
>>log(v)
ans =
0 0.6931 1.0986
>>p=(0:0.1:1)*pi % Vector definido como el producto de un vector por un
escalar
p =
Columns 1 through 7
0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850
Columns 8 through 11
2.1991 2.5133 2.8274 3.1416
>>x=sin(p)
x =
Columns 1 through 7
0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511
Columns 8 through 11
0.8090 0.5878 0.3090 0.0000

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Las operaciones habituales entre arrays (suma, resta y producto escalar de vectores;
suma, resta, producto y potencia de matrices) se representan con los operadores
habituales:
>>v,w
v
1
w
4

% Recordamos los valores de v y w

=
2 3
=
5 6

>>z=v*w'

% Producto escalar (producto de matrices 1x3 por 3x1)

z =
32
>>Z=w'*v
Z
4
5
6

% Producto de matrices 3x1 por 1x3 = Matriz 3x3

=
8 12
10 15
12 18

>>v*w

% Los vectores v y w no se pueden multiplicar

??? Error using ==> *


Inner matrix dimensions must agree.
>>mat
mat
1 2
4 5
0 0

% Recordamos el valor de la matriz mat

=
3
6
1

>>mat^2

% Matriz mat elevada al cuadrado

ans =
9 12 18
24 33 48
0 0 1

Tambin pueden efectuarse multiplicaciones, divisiones y potencias de arrays,


entendindolas como elemento a elemento (como, de hecho, se realizan la suma y la
resta). El operador utilizado para ellas es el habitual precedido por un punto; es decir:
>>v.*w % Vector formado por los productos de las respectivas coordenadas:

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

% ans(i)=v(i)*w(i)
ans =
4 10 18
>>w./v

% Vector formado por el cociente de cada coordenada de w entre la


% coordenada correspondiente de v: ans(i)=w(i)/v(i)

ans =
4.0000 2.5000 2.0000
>>mat.^2 % Matriz cuyos elementos son los de mat elevados
% al cuadrado: ans(i,j)=mat(i,j)^2
ans =
1 4 9
16 25 36
0 0 1

Finalmente, pueden calcularse determinantes:


>>det(mat)
ans =
-3

y resolverse sistemas de ecuaciones lineales con el verstil comando \:


>>mat\v'
ans =
2.6667
-5.3333
3.000

Variables lgicas.
Tambin existen variables lgicas que toman los valores 0 (falso) o 1 (verdadero) . Por ejemplo:
>>abs(v)>=2

% Vector lgico cuyas coordenadas valen 1 si la coordenada


% correspondiente de v es >= 2 y 0 si no lo es

ans =
0 1 1
>>vector=v(abs(v)>=2) % Vector formado por la coordenadas de v que
% verifican la desigualdad

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas
vector =
2 3
>>v2=[3 2 1]
v2 =
3 2 1
>>logica=v==v2
logica =
0 1 0
>>logic2=v~=v2
logic2 =
1 0 1

Dr. Wilson Maco Vsquez

% Asignacin de un valor lgico (el doble signo igual es el


% igual lgico)
% Distinto (~ es el operador de negacin)

Polinomios.
Se puede trabajar con polinomios: basta tener en cuenta que un polinomio no es ms
que un vector. El orden de los coeficientes es de mayor a menor grado, por ejemplo:
>>p=[1 0 2 0 3]

% Polinomio x^4+2*x^2+3

p =
1 0 2 0 3
>>q=[2 1 0]

% Polinomio 2*x^2+x

q =
2 1 0

MATLAB tiene funciones especficas para polinomios como:


>>polyval(p,-1)

% Evaluacin del polinomio x^4+2x^2+3 en x=-1

ans =
6
>>pro=conv(p,q)

% Producto de los polinomios p y q

pro =
2 1 4 2 6 3 0
>>deconv(pro,p)

% Cociente entre pro y p; obviamente el resultado es q

ans =
2 1 0
>>roots(pro)

% Races del polinomio pro

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

ans =
0
0.6050+1.1688i
0.6050-1.1688i
-0.6050+1.1688i
-0.6050-1.1688i
-0.5000
>>poly([i -i 1/2 pi])

% Polinomio mnico que tiene por races a los


% nmeros i, -i, 0.5 y pi

ans =
1.0000 -3.6416 2.5708 -3.6416 1.5708

Derivadas y primitivas.
Dentro del mdulo (toolbox) de matemtica simblica, se utiliza el programa de
clculo simblico MAPLE. Con estas herramientas, se puede trabajar con funciones,
>>f='sin(x)'

% Funcin sin(x) definida mediante una cadena de caracteres

f =
sin(x)

calcular derivadas,
>>diff(f)
ans =
cos(x)
>>diff(f,2)

% Derivada segunda de f

ans =
-sin(x)

o encontrar primitivas.
>>int('log(x)') % Primitiva de la funcin logaritmo
ans =
x*log(x)-x

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

>>diff('x*log(x)-x') % Comprobacin
ans =
log(x)

Grficas de funciones.
MATLAB tiene un gran potencial de herramientas grficas. Se pueden dibujar los
valores de un vector frente a otro (de la misma longitud):
>>x=pi*(-1:0.1:1);
>>y=x.*sin(x);
>>plot(x,y)
% Por defecto une los puntos (x(i),y(i)) mediante una
poligonal

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Como se ve, con pocos puntos la grfica tiene un aspecto demasiado lineal a trozos.
Para "engaar" al ojo, basta tomar ms puntos.
>>x=pi*(-1:0.01:1);
>>y=x.*sin(x);
>>plot(x,y)

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Tambin pueden dibujarse funciones. As:


>>fplot('sin(x)',[0 2*pi])
[0,2*pi]

% Dibuja la funcin seno en el intervalo

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

>>hold on
anteriores
>>fplot('cos(x)',[0 2*pi])
cos(x)

Dr. Wilson Maco Vsquez

% Mantiene en la ventana grfica los dibujos

% Dibuja sobre la grfica anterior la funcin

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

>>hold off
anteriores

Dr. Wilson Maco Vsquez

% Con esto olvida los dibujos


% y dibuja en una ventana nueva

>>fplot('x^2*sin(1/x)',[-0.05 0.05])

% Dibuja la funcin x^2*sin(1/x)

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Tambin puede usarse el verstil comando ezplot (se lee como easy plot) que
permite dibujar funciones,
>>ezplot('exp(x)')
% Dibuja la funcin exponencial en un intervalo
adecuado a la funcin

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

curvas en paramtricas,
>>ezplot('sin(t)','cos(t)',[0 pi])

Dr. Wilson Maco Vsquez

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

e implcitas
>>ezplot('x^2 - y^2 - 1')

Dr. Wilson Maco Vsquez

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Tambin permite dibujar superficies. La forma ms sencilla es mediante el comando


ezsurf,
>>ezsurf('sin(x*y)',[-2 2 -2 2])

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

aunque se pueden realizar grficas ms sofisticadas:


>>t=0:0.001:0.009;
>>v=900:1025;
>>[T V]=meshgrid(t,v);
>>aux1=16*pi^2*(T.^2).*((V-918).^2).*((V-1011).^2);
>>aux2=aux1+(2*V-1929).^2;
>>w=T./aux2;
>>z=35000000*w;
>>surfl(t,v,z);
% Este comando dibuja la superficie creada mediante las
>>shading interp;
% ordenes anteriores. Los siguientes sirven para
modificar
>>colormap(pink);
% el dibujo obtenido
>>rotate3d;
% Sirve para girar la figura mediante el ratn

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Programacin con MATLAB.

Para escribir un programa con MATLAB habr que crear un fichero que tenga
extensin .m y contenga las instrucciones. Esto se puede hacer con cualquier editor de
textos, pero tiene algunas ventajas usar el editor propio de MATLAB llamado medit.
MATLAB trabaja con memoria dinmica, por lo que no es necesario declarar las
variables que se van a usar. Por esta misma razn, habr que tener especial cuidado y
cerciorarse de que entre las variables del espacio de trabajo no hay ninguna que se
llame igual que las de nuestro programa (proveniente, por ejemplo, de un programa
previamente ejecutado en la misma sesin), porque esto podra provocar conflictos. A

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

menudo, es conveniente reservar memoria para las variables (por ejemplo, si se van a
utilizar matrices muy grandes); para ello, basta con asignarles cualquier valor. Del
mismo modo, si se est usando mucha memoria, puede ser conveniente liberar parte
de ella borrando (clear) variables que no se vayan a usar ms.
Un programa escrito en MATLAB admite la mayora de las estructuras de
programacin al uso y su sintaxis es bastante estndar. En los siguientes ejemplos se
muestra la sintaxis de algunas de estas estructuras (if, for, while,...).
Ejemplo 1: Calcular la suma de los n primeros trminos de la sucesin 1, 2x, 3x^2,
4x^3, ...
n=input('Cuntos trminos quieres sumar?
x=input('Dame el valor del numero x ');
suma=1;
for i=2:n
suma=suma+i*x^(i-1);
end
disp('El valor pedido es')
disp(suma)

');

Ejemplo 2: Decidir si un nmero natural es primo.


n=input('Nmero natural que deseas saber si es primo ');
i=2;
primo=1;
while i<=sqrt(n)
if rem(n,i)==0
% Resto de dividir n entre i
primo=0;
break
end
i=i+1;
end
if primo
disp('El nmero dado es primo.')
else
disp('El nmero dado no es primo.')
disp('De hecho, es divisible por:')
disp(i)
end

Ejemplo 3: Escribir un nmero natural en una base dada (menor que diez).
n=input('Dame el nmero que quieres cambiar de base ');
base=input('En qu base quieres expresarlo? ');
i=1;

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

while n>0
c(i)=rem(n,base);
n=fix(n/base);
% Parte entera de n/base
i=i+1;
end
disp('La expresin en la base dada es:')
i=i-1;
disp(c(i:-1:1))

Por ltimo, tambin pueden programarse funciones. La primera instruccin de un


fichero que contenga una funcin de nombre fun debe ser:
function [argumentos de salida]=fun(argumentos de entrada)

Es conveniente que el fichero que contenga la funcin se llame como ella; as, la
funcin anterior debera guardarse en el fichero fun.m; por ejemplo, si se desea
programar una funcin que calcule, mediante el algoritmo de Euclides, el mximo
comn divisor de dos nmeros naturales, basta escribir un fichero euclides.m cuyo
contenido sea:
function m=euclides(a,b)
% Clculo del mximo comn divisor de dos nmeros naturales
% mediante el algoritmo de Euclides
if a<b
c=b;
b=a;
a=c;
end
while b>0
c=rem(a,b);
a=b;
b=c;
end
m=a;

Si, una vez escrito el fichero anterior, en el espacio de trabajo o en un programa se


escribe la instruccin
mcd=euclides(33,121)

en la variable mcd se almacenar el valor 11.


Las variables de una funcin son siempre locales. Por tanto, aunque en el seno de la
funcin se modifiquen los argumentos de entrada, el valor de las variables
correspondientes queda inalterado. Por ejemplo, en la funcin euclides.m se

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

modifica el valor de los argumentos de entrada, pero, sin embargo:


>>x=15;
>>mcd=euclides(x,3);
>>x
x =
15

Si se pretende que las modificaciones de un argumento de entrada afecten a la variable


correspondiente, deber situarse dicho argumento, adems, en la lista de argumentos
de salida.

Nociones preliminares
Antes de empezar ...
La elaboracin de un programa para Matlab es muy sencilla. Basta abrir un documento de texto
(se puede hacer con cualquier editor, Matlab trae uno incorporado), escribir las instrucciones tal
como se pondran en la ventana de comandos y guardar el documento con la extensin .m (por
ejemplo: miprog.m). Matlab reconoce automticamente los ficheros que tienen extensin .m: si
en la ventana de comandos se introduce

miprog
las rdenes almacenadas en el fichero miprog.m se ejecutarn, una tras otra. A ese recorrido a
travs de las instrucciones se le conoce con el nombre de flujo. Los comandos de un programa se
denominan tambin sentencias.
El hecho de guardar una serie de instrucciones (el cdigo) en un fichero tiene de por s algunas
ventajas: evita el repetir las rdenes en la ventana de comandos. Pero la potencia de un programa
se pone de manifiesto si en l se contienen instrucciones que controlan qu sentencias se ejecutan
en cada circunstancia. As, un programa puede "decidir", llegado a un punto, ejecutar unos
comandos u otros en funcin del valor que tome una variable, por poner un caso.

Control de flujo
Al proceso de toma de decisiones se le llama control del flujo
Antes de ponerse a escribir el programa, sobre todo si es un poco largo o complejo, es til trazar
un esquema, en lenguaje corriente, de lo que se quiere hacer. A eso se le denomina un diagrama
de flujo. Si lo que se pretende est claro, escribir el programa se reduce a traducir el diagrama de
flujo del castellano al lenguaje de Matlab.

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Veamos un caso simple. Construyamos el diagrama de flujo de un programa que escoja un


nmero al azar del 0 al 9 y nos pida que lo adivinemos. Una vez escogido el nmero, el
programa debe informar si hemos acertado o no. El diagrama de flujo correspondiente es

Diagrama de flujo.
En un diagrama de flujo ha de buscarse la claridad, la concisin, el rigor. Con un buen diagrama
de flujo, gran parte del trabajo est hecho. Puede ser tentador comenzar a escribir directamente el
programa en el editor, con la esperanza de hacerlo todo bien a la primera. Suele ser ms eficaz,
sin embargo, escribir antes el diagrama de flujo, para luego intentar pasarlo al lenguaje
informtico elegido.

Condiciones
Son las preguntas bsicas a las que se puede responder s o no
Para implementar el control del flujo, son muy tiles unas expresiones que permiten comparar
dos variables entre s o una variable con un valor fijo. En un programa, a veces es necesario
preguntarse: es x mayor que y? Pues si x es mayor que y, entonces ..., y si no, ... ; o bien: caso
de que la variable x sea menor que cero, hacer tal cosa.
Las condiciones se construyen con operadores relacionales, como son los siguientes:

>
<
==
~=

mayor que
menor que
igual que
diferente que

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

<= menor o igual que


>= mayor o igual que
Una condicin, como se ha indicado, slo admite dos respuestas: verdadero o falso. As, a la
pregunta es x mayor o igual que y?, que en el lenguaje de Matlab se expresa x>=y, slo caben
dos respuestas posibles: s, es cierto, x es mayor o igual que y; o bien, no, es falso, x no es
mayor o igual que y.
Dos observaciones. La primera: el operador relacional igual que se construye con dos smbolos
==. El motivo es el siguiente: si se escribe x=3, el resultado es que se le asigna a x el valor 3.
No se hace ninguna pregunta. Si lo que se desea es preguntar es x igual a 3?, no se puede
escribir x=3, pues en este caso x tomara el valor 3, independientemente de lo que valiera
antes. En cambio, x==3 es el anlogo en lenguaje informtico a la pregunta: es x igual a 3?.
Tras la pregunta x==3 la variable x sigue valiendo lo mismo que antes.La segunda
observacin es una pequea astucia: la tilde ~ del operador diferente que se consigue apretando
la tecla Alt y -sin soltarla- escribiendo con el teclado el nmero 126. En algunos sistemas
operativos, tambin sirve apretar AltGr y, sin soltarla, apretar la tecla 4.
Las condiciones se pueden agrupar en construcciones lgicas: condicin1 Y condicin2,
condicin1 O condicin2, etctera. Consltese el manual de Matlab en lo relativo a este
tpico.
En resumen: con las expresiones relacionales se pueden realizar preguntas de respuesta unvoca
(verdadero o falso), que permitan luego tomar una decisin.

Ramificaciones
Dependiendo de una condicin, el programa decide el curso que seguir
El resultado de una condicin permite tomar una decisin, es decir, si la condicin es verdadera
se ejecutan determinadas sentencias. El diagrama de flujo se ramifica:

If - end

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

La ramificacin ms simple, expresada en este diagrama de flujo, se obtiene con la siguente


sintaxis:
if (condicin)
sentencias
end
(lo que va en cursiva, hay que sustituirlo por las expresiones adecuadas; if y end son
palabras clave del lenguaje informtico, y no se pueden utilizar para otra cosa, p. ej. una variable
no puede -no debera- llamarse if).
Ejemplo
x=5;
if x<8
fprintf('el nmero menor que 8\n')
end

Ledo en lenguaje corriente: si la longitud del vector x es menor que 8, se realiza el ajuste lineal
indicado en la instruccin fprintf('el nmero menor que 8\n'). Caso contrario (si la
longitud del vector x es mayor o igual a 8) esa instruccin no se ejecuta (y el programa sigue en
la instruccin que venga despus de end).

If else- end

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Existe la posibilidad de ejecutar ciertas sentencias si la condicin es verdadera, y otras diferentes


si la condicin es falsa:
dicho de otra manera: si la condicin se cumple, se ejecutan las sentencias A; si no, se
ejecutan las sentencias B.

if (condicin)
sentencias A
else
sentencias B
end
Ejemplo
x=5;
if rem(x,2)==0
fprintf('el nmero es par\n')
else
fprintf('el nmero es impar\n')
end

Una vez se hayan ejecutado las sentencias que correspondan (las sentencias A si la
condicin es verdadera, las sentencias B en caso contrario) el programa contina con las
instrucciones que vengan despus de end.

If elseif- end
Es de sealar que las ramificaciones se pueden anidar (una condicin dentro de otra: dentro de
las sentencias A o de las sentencias B en el anterior diagrama de flujo). El cdigo

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

se vuelve ms complejo. Tambin se pueden construir ramificaciones con varias posibilidades: la


sintaxis hace uso de las palabras clave if / elseif / elseif / ... / else
/ end.

if (condicin 1)
sentencias A
else if
sentencias B
else %cuando no cumple las condiciones 1 y 2
sentencias C
end
Ejemplo
x=5;
if x<3
fprintf('el nmero menor que 3\n')
elseif x>=3 && x<5
fprintf('el nmero es mayor o igual a 3\n')
fprintf('pero menor que 5\n')
else % cuando no se cumple las condiciones A y B
fprintf('el nmero es mayor o igual a 5\n')
end

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Switch -end
Otra posibilidad de ramificacin mltiple, anloga a un conjunto de if,..,elseif, la ofrece la
construccin switch. La sintaxis es:
switch variable
case valor1,
sentencias A
case valor2,
sentencias B
case ...
...
end

(Como antes, lo escrito en cursiva debe sustituirse por las expresiones adecuadas). Las palabras
clave son switch, case, end.
La ramificacin switch opera de la siguiente manera. Al llegar a la expresin switch
variable, si variable tiene el valor valor1 se ejecutan las sentencias A; si
variabletoma el valor valor2, las sentencias B; y as sucesivamente. Es
importante notar que la variable slo debe tomar unos pocos valores: valor1, valor2, etc.
para que el programa se ramifique en unas pocas ramas. No tiene sentido intentar una
ramificacin switch con una variable que pueda tomar un nmero infinito de valores.
Ejemplo
switch lower(method)
case {'linear','bilinear'}
disp('Method is linear')
case 'cubic'
disp('Method is cubic')

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

case 'nearest'
disp('Method is nearest')
otherwise
disp('Unknown method.')
end

Ejemplo
myNumber = input ('Introduce un nmero: ')
switch myNumber
case -1
disp ('uno negativa');
case 0
disp ('cero');
case 1
disp ('uno positivo');
otherwise
disp ('otro valor');
end

Bucles
Varias secuencias que se ejecutan repetidas veces? Un bucle
Hay ocasiones en las que es necesario repetir el mismo conjunto de instrucciones muchas veces,
cambiando algunos detalles. Pongamos un caso. Sea un vector x(i) con n componentes; se
quiere construir la "media mvil" de x con tres elementos, que consiste en ir tomando la media
aritmtica de cada tres puntos consecutivos.
Es decir: desde i=2 hasta n-1, media(i-1)=(x(i)+x(i-1)+x(i+1))/3.
(Detalles: se empieza a contar en i=2 porque para el primer elemento de x no existe el
elemento anterior; y se acaba en n-1 por anloga razn; adems, el primer componente de
media es el correspondiente a i=2, de ah que se asigne el resultado a media(i-1)).
Eso es lo que se consigue con un bucle for, cuya sintaxis es:

for contador=inicio:paso:fin,
sentencias
end
Las palabras claves son for y end. Este bucle pone en marcha una variable llamada
contador que va desde inicio hasta fin de paso en paso. Cada vez que las
sentencias se ejecutan, contador aumenta en un valor paso (que si se omite, se le
asigna automticamente el valor 1). Cuando contador llega al valor fin, el bucle se acaba y
el programa contina con las sentencias que haya ms all de end.

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Diagrama de flujo de un bucle for


Obsrvese que un bucle como el indicado se implementa un nmero fijo de veces: desde
inicio hasta fin de paso en paso. En ocasiones, sin embargo, no se sabe de antemano
cuntas veces habr que ejecutar las sentencias del bucle. Por ejemplo: si es necesario repetir una
serie de sentencias hasta que se cumpla una determinada condicin, y no se sabe a priori cuntas
veces ser necesario realizar esas operaciones. En ese caso se emplea un bucle while:

While - end
while(condicin),
sentencias
end
Este bucle ejecuta las sentencias mientras la condicin sea verdadera.

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Es posible sustituir la condicin por una variable. En efecto: una variable que toma el valor
cero corresponde a una condicin falsa. Si la variable toma un valor diferente de cero, es
equivalente a una condicin verdadera. As, se puede escribir
Ejemplo
x=10;
while(x)
%sentencias
x=x-1;
fprintf('el nmero x es igual a \n')
x
end

Ejemplo
eps = 1;
while (1+eps) > 1
eps = eps/2;
end
eps = eps*2

Para = 10, la "condicin" es verdadera puesto que es diferente de cero. Ntese que el
contador x hay que modificarlo manualmente (lnea x=x-1) puesto que, al revs que lo que
ocurre con el bucle for, este no gestiona ningn contador. En cuanto x tome el valor cero, la
"condicin" es falsa y el bucle acaba.
Atencin: es fcil caer en bucles infinitos. En el ejemplo anterior, si falta la lnea x=x-1 y las
sentencias no modifican el valor de x, la "condicin" siempre ser cierta (pues x=10) y
el programa nunca saldr del bucle: ejecutar una y otra vez las sentencias. El programa se
"cuelga", y hay que interrumpirlo desde el teclado apretando las teclas Ctrl+C.

Estilo

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Un programa elegante suele ser un buen programa


Empecemos diciendo que, en general, para realizar una tarea particular se pueden emplear
muchos programas diferentes que den el resultado correcto. Cul es el ms eficiente? No es
una pregunta trivial! Hay que ir probando para mejorar la velocidad. Con la prctica -y el
estudio- se descubren las maneras ms rpidas de implementar las instrucciones entre todas las
posibles.
La confeccin de programas se vuelve frecuentemente una tarea rutinaria donde el orden facilita
las cosas. Repasar un programa una y otra vez, modificando poco a poco el cdigo para
depurarlo, exige una cierta disciplina. Aunque cada uno tenga sus preferencias, es conveniente
desarrollar algunos hbitos. Me atrevo a recomendar algunos:

El programa debe resultar de fcil lectura. As, pasado el tiempo, es ms sencillo revisarlo.
Los nombres de las variables, en la medida de lo posible, deben ser autoexplicativos. La
siguiente porcin de cdigo, escrita de dos maneras equivalentes, lo muestra. Por qu llamar x
o N a una variable? Los nombres abstractos restan claridad al programa.

N=10;
x=rand(1,N);
y=zeros(1,N);
for i=1:N,
y(i)=sum(x(1:i));
end

num_pts=10;
prob=rand(1,num_pts);
prob_acum=zeros(1,num_pts);
for indice=1:num_pts,
prob_acum(indice)=sum(prob(1:indice));
end

Ambos cdigos son equivalentes y se ejecutarn igual de rpido (los nombres largos de las
variables no influyen en la velocidad de ejecucin).

Introducir comentarios en el programa. Los comentarios son lneas que no se ejecutan, en las
que se escriben aclaraciones explicativas. Para que una lnea no se ejecute, basta escribir al
principio de ella el smbolo %. As:

%escala: 102 pixels = 8 mm


d_m=8/102;
Un programa con comentarios es ms fcil de entender.

Suele ser bueno definir las variables al principio. Ello evita tener que buscarlas a lo largo
del cdigo para cambiar su valor cuando sea necesario. Adems, si es posible, es mejor definir
los vectores y matrices al principio con su dimensin adecuada. En el caso de que haya que ir
rellenando los valores de un vector, el programa va ms rpido si se define el vector vaco al
principio (con el comando ones o zeros) que ir aadiendo componentes al vector conforme
se van calculando.

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Para ver dnde empiezan y dnde acaban los bucles y ramificaciones, es costumbre indentar
(introducir una sangra) en las lneas contenidas en ellos. Eso resulta de especial ayuda en los
bucles y condiciones anidados.

Ejercicios y soluciones
Los problemas ms interesantes suelen ser los que uno se encuentra en la vida real ...

A. Ejercicios

Escribir un programa que tome un nmero entero al azar entre el 0 y el 9, pregunte un


nmero al usuario y le informe si acert o no.

Escribir un programa que tome un nmero entero al azar entre el 0 y el 9, y le pregunte


un nmero al usuario hasta que acierte.

Escribir una funcin que devuelva el valor absoluto del argumento. (Nota.- Ya existe en
Matlab: abs(x)).

Escribir una funcin que devuelva el radio (distancia al origen), recibiendo como
argumento las coordenadas cartesianas (x,y).

Escribir un programa que, tras pedir al usuario un nmero, le informe de si es par, impar
o no entero.

Escribir un programa que calcule las N primeras fracciones del tipo 1/i, tras pedir N al
usuario.

Escribir un programa que calcule los cuadrados de los nmeros enteros, hasta que el
cuadrado sea mayor o igual que 100.

B. Proyectos

Realizar una criba de nmeros primos, esto es, elaborar un programa que calcule en el
menor tiempo posible la mayor cantidad de nmeros primos consecutivos partiendo de los ms
pequeos.

EJEMPLOS DE APLICACIN
Ejemplo Clculo del psilon de la mquina.
%Prctica 1.7: Clculo del psilon de la mquina.
x=1;
while 1+x>1
x=x/2;
end
x=2*x;

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

disp('El psilon de la mquina es')


disp(x)
disp('El valor de 2^(-52) es') % Comprobacin
disp(2^(-52))

Ejemplo Ejemplo de sucesin inestable.


% Prctica 1.12: Sucesin inestable.
format long
format compact
x=1;
disp('Iteracin nmero')
disp(1)
disp('
Calculado
Potencias de 1/7')
disp([1/7 1/7])
disp(' ')
y=1/7;
pot=y;
for i=2:100
aux=y;
y=(22/7)*y-(3/7)*x;
x=aux;
pot=pot/7;
disp('Iteracin nmero')
disp(i)
disp('
Calculado
Potencias de 1/7')
disp([y pot])
disp(' ')
end
format

Ejemplo Clculo de las normas 1, infinito y Frbenius de una matriz cuadrada.


% Prctica 2.3: Calcular las normas 1, infinito y Frbenius de una matriz
cuadrada.
A=input('Dame la matriz \n');
n=size(A,1);
for i=1:n
n1(i)=sum(abs(A(:,i)));
ninf(i)=sum(abs(A(i,:)));
nf(i)=sum(abs(A(:,i)).^2);
end
norm1=max(n1);
norminf=max(ninf);
normf=sqrt(sum(nf));
disp(' ')
disp(' Norma
Valor calculado Valor con MATLAB')
fprintf(' Norma 1
%3.3f
%3.3f \n',norm1,norm(A,1));
fprintf('Norma inf
%3.3f
%3.3f \n',norminf,norm(A,inf));

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas
fprintf('Frbenius

%3.3f

Dr. Wilson Maco Vsquez

%3.3f \n',normf,norm(A,'fro'));

Ejemplo Producto de una matriz triangular superior por un vector.


% Prctica 2.4a: Producto de una matriz triangular superior por un vector.
disp('Producto de una matriz triangular superior por un vector.');
n=input('Cul es el tamao de la matriz? ');
A=zeros(n);
c=zeros(n,1);
for i=1:n
s=sprintf('Dame la fila %d de A (slo los elementos a la derecha del
diagonal) ',i);
A(i,i:n)=input(s);
end
v=input('Dame el vector v (como fila) ');
v=v';
A,v
for i=1:n
c(i)=A(i,i:n)*v(i:n);
end
disp('El producto de A por v es')
disp(' ')
disp(c)

Ejemplo Producto de dos matrices triangulares superiores.


% Prctica 2.4b: Producto de dos matrices triangulares superiores.
disp('Producto de dos matrices triangulares superiores.');
n=input('Cul es el tamao de las matrices? ');
A=zeros(n);
B=A;
for i=1:n
s=sprintf('Dame la fila %d de A (slo los elementos a la derecha del
diagonal) ',i);
A(i,i:n)=input(s);
end
for i=1:n
s=sprintf('Dame la fila %d de B (slo los elementos a la derecha del
diagonal) ',i);
B(i,i:n)=input(s);
end
A,B
for i=1:n
for j=i:n
C(i,j)=A(i,i:j)*B(i:j,j);
end
end
disp('El producto de A por B es')
disp(' ')
disp(C)

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Ejemplo Resuelve el sistema Av=b donde A es una matriz triangular inferior.


function v=trinf(A,b)
% Prctica 4.2b: Resuelve el sistema Av=b donde A es una matriz
% triangular inferior.
n=size(A,1);
v(1)=b(1)/A(1,1);
for i=2:n
v(i)=(b(i)-A(i,1:i-1)*v(1:i-1)')/A(i,i);
end

Ejemplo Resuelve el sistema Av=b donde A es una matriz triangular superior.


function v=trsup(A,b)
% Prctica 4.2c: Resuelve el sistema Av=b donde A es una matriz
% triangular superior.
n=size(A,1);
v(n)=b(n)/A(n,n);
for i=n-1:-1:1
v(i)=(b(i)-A(i,i+1:n)*v(i+1:n)')/A(i,i);

end
Ejemplo Regla de los trapecios.
function area=trapecios(a,b,m)
% Prctica 7.1: Regla de los trapecios.
global fname
fname=input('Dame la funcin f(x) entre comillas ');
if nargin < 1
a=input('Dame el extremo izquierdo del intervalo ');
b=input('Dame el extremo derecho del intervalo ');
end
if nargin < 3
m=input('Dame el nmero de subintervalos ');
end
h=(b-a)/m;
x=a:h:b;
sum=0;
for i=2:m
sum=sum+f(x(i));
end
area=(h/2)*(f(a)+f(b)+2*sum);
function y=f(u)
global fname
x=u;
y=eval(fname);

% Con este "truco" se puede pedir la funcin por pantalla


% (como "string") y, despus, evaluarla como si fuera una
% funcin matemtica.

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

Ejemplo Regla de Simpson cerrada.


function area=simpson(a,b,m)
% Prctica 7.2: Regla de Simpson cerrada.
global fname
fname=input('Dame la funcin f(x) entre comillas ');
if nargin < 1
a=input('Dame el extremo izquierdo del intervalo ');
b=input('Dame el extremo derecho del intervalo ');
end
if nargin < 3
m=input('Dame el nmero de subintervalos ');
end
h=(b-a)/(2*m);
x=a:h:b;
sump=0;
for i=2:m
sump=sump+f(x(2*i-1));
end
sumi=0;
for i=1:m
sumi=sumi+f(x(2*i));
end
area=(h/3)*(f(a)+f(b)+2*sump+4*sumi);
function y=f(u)
global fname
x=u;
y=eval(fname);

% Con este "truco" se puede pedir la funcin por pantalla


% (como "string") y, despus, evaluarla como si fuera una
% funcin matemtica.

Ejemplo Calcula, mediante el mtodo de Sturm, el nmero de races distintas de un polinomio


en el intervalo (a,b) sin contar multiplicidad.
function c=sturmsep(a,b)
% Prctica 10.4: Calcula, mediante el mtodo de Sturm, el nmero de races
% distintas de un polinomio en el intervalo (a,b) sin contar multiplicidad.
% Sin argumentos de entrada, calcula el nmero de races positivas.
prec=10^(-8);
p0=input('Vector de coeficientes del polinomio (de mayor a menor grado) ');
n=length(p0);
if nargin < 2
b=1+norm(p0(2:n)/p0(1),inf);
%
a=1/(1+norm(p0(1:n-1)/p0(n),inf)); % Acotacin de McLaurin
end
p(1,1:n)=p0;
g(1)=n;
p1=p0(1:n-1).*(n-1:-1:1);

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

p(2,1:n-1)=p1;
g(2)=n-1;
r=1;
cont=1;
while any(r)
[q,r]=deconv(p(cont,1:g(cont)),p(cont+1,1:g(cont+1)));
aux=find(abs(r)<prec);
m=length(aux);
r(aux)=zeros(1,m);
ind=1;
while abs(r(ind))==0 & ind<length(r)
ind=ind+1;
end
g(cont+2)=length(r)-ind+1;
p(cont+2,1:g(cont+2))=-r(ind:length(r));
cont=cont+1;
end
p=p(1:cont,:);
g=g(1:cont);
for i=1:cont
sa(i)=polyval(p(i,1:g(i)),a);
sb(i)=polyval(p(i,1:g(i)),b);
end
sa=sa(find(sa));
sb=sb(find(sb));
ca=0;
cb=0;
for i=1:length(sa)-1
if sa(i)*sa(i+1)<-eps
ca=ca+1;
end
end
for i=1:length(sb)-1
if sb(i)*sb(i+1)<-eps
cb=cb+1;
end
end

c=ca-cb;

Ejemplo Calcula, mediante el mtodo de Bairstow, un par de races (no necesariamente


complejas) de un polinomio.
% Prctica 10.6: Calcula, mediante el mtodo de Bairstow, un par de
% races (no necesariamente complejas) de un polinomio. Pide los
% datos por pantalla.
a=input('Vector de coeficientes del polinomio (de mayor a menor grado) ');
n=length(a);
disp('Valores iniciales: ');
u=input('
u= ');
v=input('
v= ');
iter=input('Nmero mximo de iteraciones ');

Universidad Nacional de Trujillo


Facultad de Ciencias Fsicas y Matemticas
Departamento de Matemticas

Dr. Wilson Maco Vsquez

prec=input('Precision deseada ');


disp(' ')
b(n)=a(1);
%
c(n)=0;
% no dependen de u ni de v
c(n-1)=a(1); %
sw=1;
for it=1:iter
b(n-1)=a(2)+u*b(n);
for k=n-2:-1:1
b(k)=a(n-k+1)+u*b(k+1)+v*b(k+2);
c(k)=b(k+1)+u*c(k+1)+v*c(k+2);
end
det=c(1)*c(3)-c(2)*c(2);
% determinante
deltau=(c(2)*b(2)-c(3)*b(1))/det;
deltav=(c(2)*b(1)-c(1)*b(2))/det;
u=u+deltau;
v=v+deltav;
disp(sprintf('iteracin %i, u= %d, v= %d',it,u,v))
norma=norm([deltau,deltav]);
if norma<prec
disp(' ')
disp('El valor aproximado de las dos races es:')
x1=(u+sqrt(u^2+4*v))/2
x2=(u-sqrt(u^2+4*v))/2
sw=0;
break
end
end
if sw
disp('Alcanzado el mximo de iteraciones sin obtenerse convergencia.')
end

You might also like