Programación en MatLab
Programación en MatLab
MatLab
Espacio de trabajo
• Archivo .mat (variables)
• Función: save
• Función: load
Funcionamiento de Matlab
Los elementos básicos del Matlab, como cualquier otro
lenguaje de programación, son: constantes, variables,
operadores, expresiones y funciones.
Constante numéricas:
• Números enteros: 2 35 -48
• Números reales: 2. -35.2 48.45
• Máximo de 16 cifras significativas
• Notación exponencial [2.2250e-308 1.7e+308]
Números complejos: 2+3i 4*j i,j=(-1)½
Funcionamiento de Matlab
Operaciones aritméticas elementales:
Suma: +
Resta: -
Multiplicación: *
División: /
Exponenciación: ^
» A=[1 3 5; 6 9 2; 4 8 7]
A =
1 3 5
6 9 2
4 8 7
Vectores y Matrices
Los vectores pueden ser vectores fila o vectores columna
Vectores fila; los elementos de una misma fila están
separados por blancos o comas,
>> v =[2 3 4]
Vectores columna: los elementos de una misma columna
están separados por Intro o por caracteres punto y coma
(;).
>> w =[2;3;4;7;9;8]
La dimensión de un vector se obtiene por el comando
length (nombre del vector)
Vectores y Matrices
Generación de vectores:
Operador (:) colon
Especificando el incremento de sus componentes
v=a:h:b.
Especificando su dimensión linspace(a,b,n) si se omite n
toma 100 por defecto; el incremento es k=(b-a)/(n-1).
Con componentes logarítmicamente espaciadas
logspace(a,b,n) genera un vector fila de n puntos
logarítmicamente espaciados entre 10a y 10b. Si se omite
el valor de n se toma 50.
Vectores y Matrices
Operaciones con escalares:
v+k adición o suma
v-k sustracción o resta
v*k multiplicación
v/k divide por k cada elemento de v
k./v divide k por cada elemento de v
v.^k potenciación cada componente de v esta elevado a
k
k.^v potenciación k elevado cada componente de v
Vectores y Matrices
Operaciones entre vectores:
v+w adición o suma
v-w sustracción o resta
v.*w multiplicación cada elemento de v por el
correspondiente de w
v./w divide cada elemento de v por el correspondiente
de w
v.^w potenciación cada componente de v esta elevado al
correspondiente de w
Vectores y Matrices
Ejemplo: Cálculo de errores
• Supongamos que para resolver una ecuación diferencial ordinaria
hemos utilizado:
• Un método analítico mediante el cual sabemos que su solución
en el intervalo [0,1] es y(x)=x2+cos(x).
• Un método numérico para aproximar la solución en el intervalo
[0,1] con parámetro de discretización 0.2
Ángulo (radianes) Solución Solución exacta %Error
aproximada y(x)=x2+cos(x)
0 1.0030
0.2 1.0234
0.4 1.0825
0.6 1.1869
0.8 1.3342
1 1.5415
Vectores y Matrices
Para definir una matriz no hace falta establecer de
antemano su tamaño (de hecho, se puede definir un
tamaño y cambiarlo posteriormente). MATLAB determina
el número de filas y de columnas en función del número
de elementos que se proporcionan (o se utilizan).
Las matrices se definen por filas; los elementos de una
misma fila están separados por blancos o comas,
mientras que las filas están separadas por pulsaciones
intro o por caracteres punto y coma (;). Por ejemplo, el
siguiente comando define una matriz A de dimensión
(3x3):
» A=[1 2 3; 4 5 6; 7 8 9]
Vectores y Matrices
Operadores matriciales:
• + adición o suma
• – sustracción o resta
• * multiplicación
• ' transpuesta o transpuesta conjugada
• ^ potenciación
• \ división-izquierda
• / división-derecha
• .* producto elemento a elemento
• ./ y .\ división elemento a elemento
• .^ elevar a una potencia elemento a elemento
Vectores y Matrices
En MATLAB se accede a los elementos de un vector
poniendo el subíndice entre paréntesis (por ejemplo x(3)
ó x(i)).
m1=[12,7,-4,3,-13,2,11,7,-8,-4];
f1=[1,2,1,2,4,5,4,5,2,5];
c1=[1,1,2,2,3,3,4,4,5,5];
b=sparse(f1,c1,m1,5,5)
full(b)
s=a+b
Vectores y Matrices
Características generales de las funciones de MATLAB
• El concepto de función en MATLAB es semejante al de C y al de
otros lenguajes de programación, aunque con algunas diferencias
importantes. Al igual que en C, una función tiene nombre, valor
de retorno y argumentos. Una función se llama utilizando su
nombre en una expresión o utilizándolo como un comando más.
Las funciones se pueden definir en ficheros de texto *.m en la
forma que se verá más adelante. Considérense los siguientes
ejemplos de llamada a funciones:
• >> [maximo, posmax] = max(x);
• >> r = sqrt(x^2+y^2) + eps;
• >> a = cos(alfa) - sin(alfa);
Vectores y Matrices
• Los nombres de las funciones de MATLAB no son palabras
reservadas del lenguaje. Es posible crear una variable llamada sin
o cos, que ocultan las funciones correspondientes.
• Ejemplo 1:
• pol2=[2 4 0 1]; % definición del polinomio 2x3+4x2+1
• raices=roots(pol2) % cálculo de sus raíces
• pol2_n=poly(raices) % reconstrucción del polinomio
• real(pol2_n) % ¿qué pasó?
Vectores y Matrices
• Ejemplo 2:
• A=[1 2 3 ; 2 3 4; 4 2 5]; p=poly(A) % pol. característico
• roots(p) % autovalores de A
• Para calcular el valor de un polinomio p en un punto dado x basta
con utilizar el comando polyval
• >>y=polyval(p,x)
• Ejemplo 3:
• p=[1 -1 -1 1] % definición del polinomio x3-x2-x+1
• polyval(p,2)
• Ejemplo 4:
• x=-2:0.1:2;
• Y=polyval(p,x);
Vectores y Matrices
• Para multiplicar y dividir polinomios tenemos los comandos
especiales conv(p1,p2) y deconv(p1,p2)
• Para conocer el resto de la división de polinomios basta con poner
• >>[p4,r] = deconv(p3,p2)
• p2 debe tener raíces reales
• Ejemplo 5:
• p1=[1, -2, 1]; p2=[1,1]; p3=conv(p1,p2)
• p4=deconv(p3,p2)
• [p4,r]=deconv(p3,p2) % resto de la división
Vectores y Matrices
• El comando residue, permite el cálculo del desarrollo en suma de
fracciones simples del cociente p1/p2.
• El formato del comando es: >>[r,p,k] =residue(p1,p2)
• donde:
• r= vector columna con los numeradores
• p= vector columna con las raíces del denominador
• k= vector fila con los coeficientes del polinomio independiente.
p1( x ) r (1) r (n )
k(x)
p2( x ) x p(1) x p(n )
• >>[p1,p2]=residue(r,p,k) hace la operación inversa
Vectores y Matrices
• Ejemplo 6:
• Descomponer en fracciones simples el cociente
x3 x2 1
• p1=[1 1 0 1] x 3x 4
3 2
• p2=[1 -3 0 4]
• [r,p,k]=residue(p1,p2)
• rats(r)
• [pol1,pol2]=residue(r,p,k)
x3 x2 1 35 13 1
1
x 3 x 4 9( x 2) 3( x 2) 9( x 1)
3 2 2
Vectores y Matrices
• Para calcular la derivada de un polinomio tenemos el comando,
• >>polyder(p)
• Para encontrar la integral se usa:
• >>polyint(p)
• >>polyint(p,k)
• Ejemplo 7:
• Dado el polinomio x3+6x2+1 encontrar su derivada y luego integrar
• p=[1, 6,0,1]
• d=polyder(p)
• i=polyint(d)
• i=polyint(d,1)
Vectores y Matrices
• Deber 5
• Utilizando las funciones de Matlab realice la expansión en
fracciones parciales de las siguientes funciones. Convierta las
fracciones parciales nuevamente en polinomios. Realizar todas
las operaciones de multiplicación y división de polinomios,
cuando se reconstruyan los polinomios eliminar los valores
que se crean por los problemas de precisión.
• Crear un archivo (*.m) para cada literal.
Vectores y Matrices
• Deber 5
10( s 1) s 1
G(s) 2 G( s)
s ( s 4)( s 6) s( s 2)( s 2 2s 2)
5( s 2) 100(s 2 s 3)
G(s) 2 G( s)
s ( s 1)( s 5) s(s 2 5s 3)
1
G(s)
s( s 2 1)( s 0.5)2
Gráficos en 2 y 3 dimensiones
La función básica de todos los gráficos 2-D en MATLAB es plot.
El elemento básico de los gráficos bidimensionales es el
vector. Se utilizan también cadenas de 1, 2 ó 3 caracteres para
indicar colores y tipos de línea. La función plot, no hace otra
cosa que dibujar vectores.
Ejemplo 1:
» x=[1 -3 6 4 5 3]
x=
1 -3 6 4 5 3
» plot(x)
Gráficos en 2 y 3 dimensiones
Existen funciones orientadas a añadir títulos al gráfico, a los
ejes, a dibujar una cuadrícula auxiliar, a introducir texto, etc.
title('título') añade un título al dibujo.
Con title('') se borra el título.
xlabel('tal') añade una etiqueta al eje de abscisas.
ylabel('cual') idem al eje de ordenadas.
Con xlabel('') y ylabel('') se borran las etiquetas.
legend() define rótulos para las distintas líneas o ejes
utilizados en la figura.
grid activa o desactiva una cuadrícula en el dibujo.
Con grid off desaparece la cuadrícula
Gráficos en 2 y 3 dimensiones
plot(Y) grafica Y en función del subíndice de los elementos
plot(X,Y) grafica Y en función de X
Ejemplo 2:
x=0:pi/90:2*pi;
y=sin(x).*cos(x);
plot(x,y)
grid on
xlabel('eje x (en radianes) ')
ylabel('eje y')
title('y=sen(x)*cos(x) ')
legend('función trigonométrica')
Gráficos en 2 y 3 dimensiones
Elección del trazo y color de la curva
• plot(X,Y, 'LineSpec')
Gráficos en 2 y 3 dimensiones
Dibujar varias curvas
• plot(X1,Y1, 'LineSpec1', X2,Y2, 'LineSpec2'...)
• plot(X,M) grafica las columnas de la matriz M en función de X
• hold: retiene el gráfico actual en la figura.
• Se libera con hold off
• Llamar una nueva figura figure o referirnos a una figura n
figure(n)
• Borrar la figura actual clf
• close all borra todas las figuras close(n) la figura n
Gráficos en 2 y 3 dimensiones
Ejemplo 3: plot(vector, Matriz)
x=0:pi/180:2*pi;
y=sin(x);
z=cos(x);
figure
plot(x,y,x,z)
A=[y' z']
figure
plot(x,A)
•figure
•hold on
•plot(x,y)
•plot(x,z)
•hold off
Gráficos en 2 y 3 dimensiones
text(x,y,'texto') introduce 'texto' en el lugar especificado por
las coordenadas x e y. Si x e y son vectores, el texto se repite
por cada par de elementos.
gtext('texto') introduce texto con ayuda del ratón.
[x,y]=ginput(n) calcula las coordenadas de puntos sobre la
curva.
Es posible incluir en el título, etiquetas de los ejes, etc. el valor
de una variable numérica. Ya que el argumento de los
comandos title, xlabel, ylabel, legend, etc. es una variable
carácter, es preciso transformar las variables numéricas
int2str(n) convierte el valor de la variable entera n en carácter
num2str(x) convierte el valor de la variable real o compleja x
en carácter (se puede especificar la precisión o el formato)
Gráficos en 2 y 3 dimensiones
Elección de la escala de los ejes
• axis([xmin xmax ymin ymax])
• axis auto: devuelve a la escala por defecto.
• axis off: desactiva los etiquetados de los ejes desapareciendo
los ejes sus etiquetas y la cuadrícula.
• axis on: activa los ejes desactivados.
• axis equal: los mismos factores de escala para los dos ejes.
• axis square: hace la región actual cuadrada (o cúbica cuando
está en tres dimensiones).
• axis normal: automáticamente ajusta la relación de aspecto
de los ejes y la escala relativa para que el gráfico se ajuste lo
mejor posible.
Gráficos en 2 y 3 dimensiones
Ejemplo 4: Calcular gráficamente las soluciones de la ecuación.
teta=0:pi/360:pi/4;
2 x cos(2 x )
f1=(2*teta-cos(2*teta))/2;
0 .4
f2=0.4*ones(size(f1)); 2
plot(teta,f1,'g--',teta,f2,'r')
axis square
xlabel('Angulo (radianes)')
gtext('2x-cos(2x))/2')
text(0.2,0.43,'y=0.4')
[teta0,y0]=ginput(1)
title(['Raíz aproximada=',num2str(teta0)])
Gráficos en 2 y 3 dimensiones
La función eval se utiliza para evaluar funciones (expresiones)
definidas como cadena de caracteres.
y=eval('expresión')
Ejemplo 5:
f='sin(x)-2*cos(x)';
x=0:pi/90:2*pi;
y=eval(f);
plot(x,y)
axis([0 6 0 2.4]);
gtext('sen(x)-2cos(x)')
Gráficos en 2 y 3 dimensiones
Función fplot se utiliza para graficar funciones definidas como
cadena de caracteres (antiguo) o manejador entre los límites
especificados.
fplot('función', [xmin xmax], 'LineSpec') (antiguo)
fplot(@función, [xmin xmax], 'LineSpec')
fplot(@funciónx, @funcióny, [tmin tmax], 'LineSpec')
[X,Y] = fplot(@función, [xmin xmax]) en este caso se
devuelven los vectores X e Y, pero no se dibuja nada.
Ejemplo 6:
f=@(x)sin(x)-2*cos(x)
fplot(f,[0 2*pi],'g--')
axis([0 6 0 2.4]);
gtext('sen(x)-2cos(x)')
Gráficos en 2 y 3 dimensiones
Función Subplot
Una ventana gráfica se puede dividir en m particiones
horizontales y n verticales, con objeto de representar
múltiples gráficos en ella. Cada una de estas subventanas
tiene sus propios ejes, aunque otras propiedades son
comunes a toda la figura. La forma general de este comando
es:
• subplot(m,n,i) donde m y n son el número de subdivisiones en
filas y columnas, e i es la subdivisión que se convierte en
activa. Las subdivisiones se numeran consecutivamente
empezando por las de la primera fila, siguiendo por las de la
segunda, etc.
Gráficos en 2 y 3 dimensiones
Gráficos en 2 y 3 dimensiones
Gráficos en 2 y 3 dimensiones
Ejemplo 7:
subplot(121)
f='sin(x)-2*cos(2*x)';
fplot(f,[0 2*pi])
legend('sen(x)-2cos(2x)')
subplot(122)
fplot('sin',[0 4*pi],'r')
legend('sen(x)')
Gráficos en 2 y 3 dimensiones
Representación de polígonos
• fill(x,y,c)
• Si c es un carácter de color ('r','g','b','c','m','y','w','k'), o un
vector de valores [r g b], el polígono se rellena de modo
uniforme con el color especificado.
Ejemplo 8:
x=[1,2,1,0];
y=[0,1,2,1];
fill(x,y, 'r')
axis square
title('rombo')
Gráficos en 2 y 3 dimensiones
Otras funciones gráficas 2-D
a
(P 2 )(V b ) RT
V
GRÁFICOS: 2D Y 3D______________________________
a=18.78;
b=0.1208;
R=0.0821;
subplot(1,2,1)
T=373:100:673;
V=2:100;
fac1=R./(V-b);
fac2=a./V.^2;
P=zeros(4,length(V));
P(1,:)=T(1)*fac1-fac2;
P(2,:)=T(2)*fac1-fac2;
P(3,:)=T(3)*fac1-fac2;
P(4,:)=T(4)*fac1-fac2;
plot(V,P(1,:),'-',V,P(2,:),'--',V,P(3,:),':',V,P(4,:),'-.')
title('Ecuacion de Van der Waals: Isotermas')
xlabel('Volumen, ltr.')
ylabel('Presion, atm.')
axis([0, 50,0,15])
legend('T=100ºC','T=200ºC','T=300ºC','T=400ºC')
GRÁFICOS: 2D Y 3D______________________________
subplot(1,2,2)
P=25:10:55;
T=zeros(4,length(V));
fac1=(V-b)/R;
T(1,:)=((P(1)+fac2).*fac1)-273.15;
T(2,:)=((P(2)+fac2).*fac1)-273.15;
T(3,:)=((P(3)+fac2).*fac1)-273.15;
T(4,:)=((P(4)+fac2).*fac1)-273.15;
plot(V,T(1,:),'-',V,T(2,:),'--',V,T(3,:),':',V,T(4,:),'-.')
title('Ecuacion de Van der Waals: Isobaras')
xlabel('Volumen, ltr.')
ylabel('Temperatura, ºC')
legend('P=25 atm.','P=35 atm.','P=45 atm.','P=55 atm.')
GRÁFICOS: 2D Y 3D______________________________
Gráficos en 2 y 3 dimensiones
La función plot3 es análoga a su homóloga bidimensional plot.
plot3(x,y,z)
Ejemplo 9:
teta=0:pi/80:8*pi;
x=1+2*cos(teta);
y=1+2*sin(teta);
z=4*teta;
plot3(x,y,z)
axis([-1 3 -1 3 0 120]);
xlabel('eje x')
ylabel('eje y')
zlabel('eje z')
Gráficos en 2 y 3 dimensiones
Representación gráfica de superficies
mesh(X,Y,Z)
if condición1
if condición bloque1
sentencias elseif condición2
end bloque2
elseif condición3
bloque3
Si no existe, significa que no se else
hace nada en caso de que no se
cumplan las 3 condiciones bloque4
end
Programación en Matlab
Sentencia switch
for i = 1:m
for i = n:-0.2:1 for j = 1:n
sentencias sentencias
end end
end
Programación en Matlab
Sentencia while
Sentencia break
while condición
Hace que se termine la
sentencias
ejecución del bucle for o
end while
Sentencia continue
• function arg_salida=nombre_funcion(arg_entrada)
Ejemplo 2:
% Archivo tipo Script
% Convierte ºF A ºC
clear
temp_f=100
temp_c=5/9*temp_f-5/9*32
Programación en Matlab
El archivo tipo script solo puede ejecutarse a continuación del
>> de Matlab o como una línea de otro fichero, una función
puede ser llamada desde cualquier expresión.
El script no admite argumentos de entrada, simplemente
trabaja con datos existentes en el espacio de trabajo.
Las variables de una función son locales de la función y las de
un script son globales.
Si queremos que una variable sea compartida por varias
funciones a de definirse en todas ellas como global.
• global variable1 variable2 variable3
Programación en Matlab
function t=gases(p,v,n)
%t=gases(p,v,n)
%Función que considera la ley de los gases ideales
%Argumentos de entrada:
%presión p (atmosferas)
%volumen v (litros)
%número de moles n
%Argumentos de salida:
%temperatura t (grados kelvin)
%R=0.0821 atm.litro/mol.grado
R=0.0821
t=p*v/(n*R);
Programación en Matlab
Número de argumentos de la función
El algoritmo
babilónico
aproxima un
rectángulo a
cuadrado.
Introducción técnicas numéricas
• El algoritmo se puede enunciar sin el uso de dibujos como
sigue:
Introducción técnicas numéricas
• Este algoritmo aproxima la raíz cuadrada de cualquier número
real tanto como se desee. Es claro que no se necesita conocer
el valor de h, puesto que depende directamente de x y que el
área del rectángulo siempre se aproxima a la raíz cuadrada de
x sin importar el valor de b siempre y cuando b>0. De esta
manera surge la función recursiva: