Int Mat AL
Int Mat AL
PROGRAMA
•Introducción.
•Operaciones con matrices.
•Manipulación de vectores y
matrices.
•Funciones matriciales.
•Polinomios y procesado de
señales.
•Funciones de funciones.
Curso Matlab 2002-03 enxamb. Nieves
•Gráficos: 2D y 3D.
•Programación.
•Análisis de datos.
•Análisis numérico
Lorenzo
INTRODUCCIÓN
¿Qué es Matlab?, MATrix LABoratory
MATLAB es un programa para realizar cálculos
numéricos con vectores y matrices. Como caso
particular puede también trabajar con números
escalares, tanto reales como complejos. Una de las
capacidades más atractivas es la de realizar una
amplia variedad de gráficos en dos y tres
dimensiones. MATLAB.
Introducción_____________________________________
Los elementos básicos del Matlab, como
cualquier otro lenguaje de programación, son:
constantes, variables, operaciones, 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
• Utilizando la letra E a continuación de un
nº con punto decimal [2.2250e-308
1.7e+308].
• Números complejos: 2+3i 4*j i,j=(-1)½
Operaciones aritméticas elementales:
Suma: + Multiplicación: * Exponenciación: ^
Resta: - División: /
Primero exponenciaciones, luego divisiones y
Introducción_____________________________________
Variables: es la etiqueta que identifica una
porción de memoria;
Matlab diferencia entre mayúsculas y minúsculas
diary off
dir
type tema1.dia
VECTORES Y MATRICES
Las matrices son el tipo
fundamental de dato en Matlab.
» A=[1 3 5; 6 9 2; 4 8 7] » A^2+3*A
A = ans =
1 3 5 42 79 61
6 9 2 86 142 68
4 8 7 92 164 106
Generación de vectores:
• 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
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
Producto escalar de vectores v*w calcula el producto
escalar de v por w
Vectores y matrices_______________________________
sum(v) suma
prod(v) producto
v` transposición de vectores (filas columnas)
dot(v,w) producto escalar de vectores
cross(v,w) producto vectorial de vectores
[y,k]=max(v) valor máximo de las componentes de
un vector k indica la posición, lo mismo para
min(v) valor mínimo
Vectores y matrices_______________________________
+ adición o suma
– sustracción o resta
* multiplicación
' adjunta (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_______________________________
diag(A) Obtencion de la diagonal de una matriz.
sum(diag(A)) calcula la traza de la matriz A
diag(A,k) busca la k-ésima diagonal.
Generación de matrices:
•Generación de una matriz de ceros, zeros(n,m)
•Generación de una matriz de unos, ones(n,m)
•Inicialización de una matriz identidad eye(n,m)
•Generación de una matriz de elementos aleatorios
rand(n,m)
• Matrices con diagonal dada diag(v), diag(v,k)
• [X Y] columnas, [X; Y] filas
Vectores y matrices_______________________________
>> a= sparse(i,j,c,m,n)
m indica filas, n columnas, c vector que contiene los
elementos no nulos i,j son dos vectores que indican
la posición de cada elemento de c
para visualizar la matriz entera >>full(a)
[i2,j2,c2]=find(a)
Vectores y matrices_______________________________
12 4 0 0 0
7 3 0 0 8
0 0 0 0 0
0 0 13 11 0
0 0 2 7 4
Dado un polinomio
x3+2x
se representa por
>> pol1=[1 0 2 0]
para el cálculo de las raíces de un polinomio
existe el comando roots.
>>raices=roots(pol1) (da un vector
columna, aunque pol1 es un vector fila)
Polinomios______________________________________
Un polinomio puede ser reconstruido a partir de
sus raíces con el comando poly
>> p=poly(raices) (da un vector fila) **
en caso de que el argumento de poly fuera una
matriz obtendríamos como resultado el polinomio
característico de la matriz. Así mismo si
queremos calcular los autovalores de la matriz
bastaría con calcular las raíces del polinomio
característico.
Ejemplo1:
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ó?
Polinomios______________________________________
Para calcular el valor de un polinomio p en un
punto dado x basta con utilizar el comando
polyval
>>y=polyval(p,x)
Ejemplo3:
p=[1 –1 –1 1] % definición del polinomio x3-x2-
x+1
polyval(p,2)
Ejemplo4:
x=-2:0.1:2;
Y=polyval(p,x);
Para multiplicar y dividir polinomios tenemos los
comandos especiales conv(p1,p2) y
deconv(p1,p2)
Ejemplo5:
p1=[1, -2, 1]; p2=[1,1]; p3=conv(p1,p2)
Polinomios______________________________________
Para conocer el resto de la división de polinomios
basta con poner
>>[p4,r] = deconv(p3,p2)
El comando residue, permite el cálculo del
desarrollo en suma de fracciones simples del
cociente p1/p2.
p2 debe tener raíces reales
El formato del comando es: >>[r,p,k]
=residue(p1,p2)
donde:
r= vector columna con los numeradores
p= vector columna con las raices del denominador
pk=
1( xvector
) r (1)con los coeficientes
fila r (n ) del polinomio
independiente. k(x)
p2( x ) x p(1) x p(n )
Polinomios______________________________________
p=[1, 6,0,1];
d=polyder(p) % es decir 3x2+12x
Polinomios______________________________________
Ejercicio3.2
a) presion=[-0.132 4.55 –21.0];
presion0=polyval(presion,273.15-268.25)
b) presion1=3*9.265e-006;
presion(3)=presion(3)-presion1
temp=roots(presion)
Polinomios______________________________________
Ejercicio3.3
format long
p=[1 –1 2 –2 1 –1];
raices=roots(p)
der_p=polyder(p)
polyval(der_p,round(raices(2)))
La solución exacta es
y(x)=c1ex+c2sen(x)+c3cos(x)+c4xsen(x)+c5xcox(x)
dsolve(‘D5y-D4y+2*D3y-2*D2y+Dy-y=0’,’x’)
Polinomios______________________________________
Ejercicio3.4
numerador=[1 0 0 2 1];
denominador=[1 –1];
[cociente,resto]=deconv(numerador,denominador)
4 3 2
3 4 x x x
I x x 2 x 3 dx 3 x 4 ln( x 1)
x 1 4 3 2
int(‘(x^4+2*x+1)/(x-1)’)
ECUACIONES LINEALES
Dado un sistema algebraico de ecuaciones
lineales de la forma Ax=b. Lo resolveremos por
métodos clásicos y con funciones propias de
matlab
Algunos comandos cuyos argumentos son
matrices y resultan útiles para la resolución de
sistemas.
Regla de Cramer
Ejemplo2: Dado un sistema Ax=b
A=[1,2,3;2,3,4;4,2,5]
b=[4;5;1];
%comprobamos que la matriz no es singular
det(A)
D1=A;D1(:,1)=b
D2=A;D2(:,2)=b
D3=A;D3(:,3)=b
x=[det(D1);det(D2);det(D3)]/det(A)
Ecuaciones lineales________________________________
La solución por Cramer es tediosa y poco eficaz.
Una primera posibilidad más cómoda.
Si la matriz es cuadrada y su determinante es
distinto de cero.
Ainv=inv(A)
Y el sistema se resolvería como
x=Ainv*b
Otra solución sería utilizar la división matricial
X=A\b
>>[V,D]=eig(A)
Ecuaciones lineales________________________________
Ejercicio4.1
Se considera la matriz A. Calcular el determinante
de la matriz A. Resolver el sistema siendo b un
vector columna igual a (1 2 3)
6 18 2
A= 7 2 4
4 10 6
Ejercicio4.1
A=[6 18 2;7 –2 –4;4 10 –6];
d=det(A)
b=[1;2;3];
sol=A\b
A(1,3)=-10
d=det(A)
sol=A\b
A*sol-b
Ecuaciones lineales________________________________
Ejercicio 4.2
M=[1 1 –2; -1 –2 0; 3 0 1];
poly(M)
M^3+4*M+13*eye(3)
Ejercicio 4.3
A=[1 2 0; 2 5 -1;4 10 -1];
[V,D]=eig(A)
diag(D)
GRÁFICOS: 2D Y 3D
Funciones gráficas 2D elementales:
MATLAB dispone de 4 funciones básicas para crear
gráficos 2-D. Estas se diferencian principalmente
por el tipo de escala que utilizan en los ejes Estas
cuatro funciones son las siguientes:
FUNCIÓN PLOT
Ejemplo2
x=0:pi/90:2*pi;
y=sin(x).*cos(x);
plot(x,y)
grid on
grid off
xlabel(‘eje x (en radianes)’)
ylabel(‘eje y’)
title(‘y=sen(x)*cos(x)’)
GRÁFICOS: 2D Y 3D______________________________
FUNCIÓN PLOT
Es posible incluir en el título o en la etiqueta de los
ejes el valor de una variable numérica. Ya que el
argumento de los comandos title, xlabel e ylabel
es una variable carácter, es preciso transformar
las variables numéricas
hold on
hold off
GRÁFICOS: 2D Y 3D______________________________
y yellow . point - solid
m magenta o circle : dotted
c cyan x x-mark -. dashdot
r red + plus -- dashed
g green * star
b blue s square
w white d diamond Opciones de plot
k black v triangle (down)
^ triangle (up)
< triangle (left)
> triangle (right)
p pentagram
h hexagram
GRÁFICOS: 2D Y 3D______________________________
Ejemplo3: Calcular gráficamente las soluciones de
la ecuación
2 x cos(2 x )
teta=0:pi/360:pi/4;
0.4
f1=(2*teta-cos(2*teta))/2;
2
f2=0.4*ones(size(f1));
figure
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(['Raiz aproximada=',num2str(teta0)])
GRÁFICOS: 2D Y 3D______________________________
axis([x0 x1 y0 y1])
axis auto: devuelve la escala a la de defecto
axis off: desactiva los etiquetados de los ejes
desapareciendo los ejes sus etiquetas y la grid.
axis on: lo activa de nuevo
axis xy: sistema de coordenas cartesianas origen
en el ángulo inferior izquierdo, eje ox de izqda. A
dcha. y oy de abajo a arriba.
axis equal: los mismos factores de escala para
los dos ejes
axis square: cierra con un cuadrado la región
delimitada por los ejes de coordenadas actuales.
GRÁFICOS: 2D Y 3D______________________________
Impresión de gráficas
FUNCIÓN SUBPLOT
Ejemplo7:
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: 2D Y 3D______________________________
Otras funciones gráficas 2-D
Representación de polígonos
función especial para dibujar polígonos planos,
rellenándolos de un determinado color.
La forma general es la siguiente:
» 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.
· Si c es un vector de la misma dimensión que x e
y, sus elementos se trasforman de acuerdo con
un mapa de colores determinado, y el llenado del
polígono –no uniforme en este caso–se obtiene
interpolando entre los colores de los vértices.
Este comando con matrices:
GRÁFICOS: 2D Y 3D______________________________
» fill(A,B,C)
donde A y B son matrices del mismo tamaño. En
este caso se dibuja un polígono por cada par de
columnas de dichas matrices. C puede ser un
vector fila de colores uniformes para cada
polígono, o una matriz del mismo tamaño que las
anteriores para obtener colores de relleno por
interpolación.
Ejemplo8:
x=[1,2,1,0];
y=[0,1,2,1];
figure
fill(x,y,’r’)
title(‘rombo’)
GRÁFICOS: 2D Y 3D______________________________
Funciones gráficas 3D elementales:
La función plot3 es análoga a su homóloga
bidimensional plot. Su forma más sencilla es la
siguiente:
» plot3(x,y,z)
Ejemplo9:
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: 2D Y 3D______________________________
Representación gráfica de superficies.
mesh(x,y,Z),
Creación de una malla [X, Y]=meshgrid(x,y)
Gráfica de la malla construida sobre la superficie z
mesh(X,Y,Z), meshz(X,Y,Z)
Además hace una proyección sobre el plano z=0,
meshc(X,Y,Z), líneas de contorno en el plano z=0
Ejemplo10:
x=[0:2:200];y=[0:50];
%Obtenemos la malla del dominio
[X Y]=meshgrid(x,y);
Curso Matlab 2002-03 enxamb. Nieves
length(x),length(y)
size(X), size(Y)
Z=X.^2-Y.^2;
figure(1);mesh(X,Y,Z)
figure(2);meshz(X,Y,Z)
Lorenzo
GRÁFICOS: 2D Y 3D______________________________
Lo mismo con surf(X,Y,Z), surfc(X,Y,Z), surfl(X,Y,Z)
Una forma distinta de representar funciones tridimensionales es por
medio de isolíneas o curvas de nivel. Con contour(x,y,Z) y con
contour3(X,Y,Z) generamos las líenas de nivel de una superficie.
Existen etiquetas especiales, primero necesitamos saber los valores
del contorno
cs=contour(Z) y luego ponemos clabel(cs) o clabel(cs,v)
pcolor(Z) dibuja una proyección con sombras de color sobre el
plano, la gama de colores está en consonancia con las variaciones
de la matriz Z.
La función surf y pcolor tiene diversas posibilidades referentes a la
forma en que son representadas las facetas o polígonos coloreados.
Las tres posibilidades son las siguientes:
• shading flat: determina sombreado con color constante para cada
Curso Matlab 2002-03 enxamb. Nieves
Manipulación de gráficos
view: view(azimut, elev), view([xd,yd,zd]).
view(2)
view(3)
rotate(h,d,a) o rotate(h,d,a,o) h es el objeto, d es
un vector que indica la dirección y a un ángulo, o
el origen de rotación
Transformación de coordenadas
[ang,rad]=cart2pol(x,y) %De cartesianas a polares
[ang,rad,z]=cart2pol(x,y,z) %De cartesianas a cilindricas
%cilindricas
[ang,rad,z]=cart2pol(sqrt(3),1,2)
%esfericas
[ang1,ang2,rad1]=cart2sph(sqrt(3),1,2)
Lorenzo
GRÁFICOS: 2D Y 3D______________________________
Creación de películas
Para preparar pequeñas películas o movies se pueden utilizar
las funciones movie, moviein y getframe. Una película se
compone de varias imágenes, denominadas frames. La
función getframe devuelve un vector columna con la
información necesaria para reproducir la imagen que se
acaba de representar en la figura o ventana gráfica activa,
por ejemplo con la función plot. El tamaño de este vector
columna depende del tamaño de la ventana, pero no de la
complejidad del dibujo. La función moviein(n) reserva
memoria para almacenar n frames. Una vez creada la
película se puede representar el número de veces que se
desee con el comando movie.
Curso Matlab 2002-03 enxamb. Nieves
Ejemplo12:
for j=1:10
x=0:0.01:2*pi;
plot(x,sin(j*x)/2)
Lorenzo
M(j)=getframe;
GRÁFICOS: 2D Y 3D______________________________
V=[2:100]; V
Lorenzo
GRÁFICOS: 2D Y 3D______________________________
Ejercicio5.1:
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;
Curso Matlab 2002-03 enxamb. Nieves
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])
Lorenzo
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.')
Curso Matlab 2002-03 enxamb. Nieves
Lorenzo
GRÁFICOS: 2D Y 3D______________________________
Curso Matlab 2002-03 enxamb. Nieves
Lorenzo
GRÁFICOS: 2D Y 3D______________________________
subplot(222)
contour3(Z)
grid off
xlabel('eje x')
ylabel('eje y')
Lorenzo
GRÁFICOS: 2D Y 3D______________________________
zlabel('eje z')
title('lineas de contorno 3D')
subplot(223)
cs=contour(Z);
contour(x,y,Z)
grid off
clabel(cs)
xlabel('eje x')
ylabel('eje y')
title('Proyeccion de las lineas de contorno')
subplot(224)
contour(Z,[-4,-1,1,4])
grid off
xlabel('eje x')
ylabel('eje y')
title('Proyeccion de las lineas de contorno')
GRÁFICOS: 2D Y 3D______________________________
Curso Matlab 2002-03 enxamb. Nieves
Lorenzo
GRÁFICOS: 2D Y 3D______________________________
ylabel('eje y')
zlabel('eje z')
view(15,15) %cambiamos el punto de observacion
grid off
Lorenzo
legend('f(x)=x^2+1')
GRÁFICOS: 2D Y 3D______________________________
Curso Matlab 2002-03 enxamb. Nieves
Lorenzo
PROGRAMACIÓN
Todos los ficheros de comandos matlab deben de
llevar la extensión .m hay 2 tipos
Ficheros de función la primera línea es ejecutable
y comienza con la palabra function
Ficheros de programa no constituyen funciones y
se construye mediante una secuencia de
comandos se ejecuta tecleando el nombre sin
extensión
Ejemplo1:
Curso Matlab 2002-03 enxamb. Nieves
function temp_c=convert(temp_f);
%CREAR UNA FUNCION
% PASA DE GRADOS ºF A ºC
temp_c=5/9*temp_f-5/9*32;
Lorenzo
PROGRAMACIÓN________________________________
Programación de funciones
La primera línea es ejecutable y empieza por la
palabra function de la forma
function arg_salida=nombre_funcion(arg_entrada)
function t=gases(p,v,n)
%t=gases(p,v,n)
%funcion que considra la ley de los gases ideales
%Argumentos de entrada:
%presion 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
Curso Matlab 2002-03 enxamb. Nieves
t=p*v/(n*R);
global
global variable
echo escribe cada comando del fichero sobre la
pantalla
Lorenzo
for k=n1:incre:n2
end
for k=vector_columna
end
if if
if elseif whil
else elseif e
end else
end end end
end
Lorenzo
PROGRAMACIÓN________________________________
Operadores relacionales y lógicos
Menor: < Menor o igual:<= Mayor: > Mayor o
igual: >=
Igual: == Distinto: ~=
O: | Y: & no: ~
El resultado de realizar operaciones relacionales o
lógicas será un 1 si es verdadera o un 0 si es falsa
Otras funciones relacionales o lógicas:
xor(x,y): “or” exclusivo 0 si x o y son no nulos y 1 en
otro caso.
any(x): si x es un vector devuelve un 1 si alguna
componente de x es no nula. Si es una matriz
Curso Matlab 2002-03 enxamb. Nieves
q=[q,0];
end
end
q=v>=0
Lorenzo
PROGRAMACIÓN________________________________
r=v==q
s=(v>=0)&(v<2)
y=v(abs(v)>=2)
A=[2,4,6;1,3,5];
[i,j]=find(A<3)
Desde Matlab 5 se ha incorporado la estructura
switch que permite realizar bifurcaciones en un
programa atendiendo al resultado de una expersión
switch expresion
case expresion_0
comandos_0 que deben ejecutarse
case expresion_1
Curso Matlab 2002-03 enxamb. Nieves
end
PROGRAMACIÓN________________________________
frewind(ident)
2.-Posicionar el puntero dentro de un archivo
test=fseek(ident,posi,’origen’)
Lorenzo
PROGRAMACIÓN________________________________
Esta sentencia coloca el puntero del archivo ident en
la posición indicada en posi:
.-Si posi>0 mueve posi bytes hacia delante.
.-Si posi<0 mueve posi bytes hacia atrás.
.-Si posi=0 el puntero no se mueve.
La variable carácter origen indica desde donde se
empieza a mover el puntero.
.-’bof’: principio del archivo.
.-’cof’: posición actual del archivo.
.-’eof’: final del archivo.
La ejecución del comando fseek devuelve la variable
test que valdrá -1 si algo falla.
Curso Matlab 2002-03 enxamb. Nieves
exponencial
PROGRAMACIÓN________________________________
Ejercicio6.1:
Utilizando estructuras de control construir una
función que nos calcule las raíces de una ecuación
de segundo grado
ax2+bx+c=0
Curso Matlab 2002-03 enxamb. Nieves
Lorenzo
PROGRAMACIÓN________________________________
Ejercicio6.1:
function raiz=sole2(a,b,c)
%raiz=sole2(a,b,c)
%solucion de la ecuacion de segundo grado
%ax^2+bx+c=0, a~=0
%
if (nargin ~=3)
error(‘El numero de argumentos de entrada debe
ser 3’)
end
discri=b^2-4*a*c;
raiz=[];
Curso Matlab 2002-03 enxamb. Nieves
if(discri==0)
raiz=-b/(2*a);
disp([‘Raiz doble=‘,num2str(raiz)])
return
Lorenzo
PROGRAMACIÓN________________________________
raiz(1)=(-b+sqrt(discri))/(2*a);
raiz(2)=(-b-sqrt(discri))/(2*a);
disp([‘Raices reales simples=‘,num2str(raiz)])
return
else
raiz(1)=(-b+sqrt(-discri)*i)/(2*a);
raiz(2)=(-b-sqrt(-discri)*i)/(2*a);
disp([‘Raices complejas=‘,num2str(raiz)])
return
end
raiz=sole2(2,3,1);
raiz=sole2(1,0,1);
Lorenzo
PROGRAMACIÓN________________________________
Ejercicio6.2:
Problema para lectura de datos
Nombre Cálculo Álgebra Física Estadística
Fernando Gómez Pereira 3 6 5 7
Susana Rodríguez Pérez 7 4 3 1
Carlos Leis Álvarez 8 9 7 9
Arturo Gómez Álvarez 5 4 5 9
Silvia Tais Álvarez 10 9 10 9
Andrea Gallego Nimes 3 3 2 4
Alicia Caballero Leis 6 8 8 5
Antonio Fraga Gómez 5 7 6 5
Beatriz Machado Gómez 4 3 5 4
Laura Tobío Manzanal 7 8 5 9
Juan Rico Fraga 4 7 5 5
Andrés Pena Gómez 6 8 5 6
Curso Matlab 2002-03 enxamb. Nieves
end
end
nombres=[];
califica=[];
Lorenzo
PROGRAMACIÓN________________________________
for i=1:17
nombre=fscanf(ident,'%s,%c',1);
apellido1=fscanf(ident,'%s,%c',1);
apellido2=fscanf(ident,'%s,%c',1);
l=3*(i-1)
long_n(l+1)=length(nombres)+length(nombre);
long_n(l+2)=long_n(l+1)+length(apellido1);
long_n(l+3)=long_n(l+2)+length(apellido2);
nombres=[nombres nombre apellido1 apellido2];
califica=[califica; fscanf(ident,'%i',4)'];
fprintf(1,'\n%9s %s %9s',nombre, apellido1,
apellido2)
Curso Matlab 2002-03 enxamb. Nieves
fprintf(1,'\t%i\t\t%i\t\t%i\t\t%i',califica(i,:))
end
fclose(ident)
Lorenzo
ANÁLISIS DE DATOS
Para realizar con Matlab análisis estadísticos de
un conjunto de datos estos deben ser
almacenados utilizando matrices. Cada columna
de la matriz representará una variable medida y
cada fila los valores que toman las variables
consideradas en un determinado punto de
medida.
Veamos algunos comandos interesantes:
Cálculo del mínimo, máximo, media y mediana.
Curso Matlab 2002-03 enxamb. Nieves
[y,k]=min(x)
[y,k]=max(x)
m=mean(y)
me=median(y) (la mediana de un conjunto de
números ordenados en magnitud es o el valor
Lorenzo
ANÁLISIS DE DATOS______________________________
Desviación típica.
s=std(y)
Nos da la dispersión o variación de los datos para
dar una idea de cuan esparcidos están.
y (i ) y 2
std ( y ) i
N
Coeficientes de correlación y matriz de
covarianza
r=corrcoef([x,y])
Curso Matlab 2002-03 enxamb. Nieves
N
x ( i ) 2
N
y ( i ) 2
Lorenzo
i 1 i 1
ANÁLISIS DE DATOS______________________________
Ejemplo1:
R=corrcoef(califica)
1.0000 0.6438 0.4563 0.4628
0.6438 1.0000 0.6164 0.6089
0.4563 0.6164 1.0000 0.3332
0.4628 0.6089 0.3332 1.0000
R(2,3) = R(3,2) ; R(4,3) poca relación entre física
y estadística
Para calcular la covarianza (numerador de la
Curso Matlab 2002-03 enxamb. Nieves
expresión r=...)
N
s=cov([x,y]) x ( i ) y ( i )
s i 1
N1
Lorenzo
ANÁLISIS DE DATOS______________________________
En el caso de matrices S=cov(X) nos daría la
matriz de covarianza y su diagonal se llama
vector de varianzas = desviaciones típicas al
cuadrado.
Gráficos estadísticos.
Histograma:
>>hist(y)
Ejemplo2:
y=rand(40,1);
hist(y)
Variantes: hist(y,n) (con n subintervalos de clases
Curso Matlab 2002-03 enxamb. Nieves
Curvas de regresión
p=polyfit(x,y,n)
Calcula el polinomio de regresión de grado n; es
decir el polinomio p de grado 2
n que minimiza.
N
(ver ejercicio 7.2)
p( x ) y
Curso Matlab 2002-03 enxamb. Nieves
i i
i 1
Lorenzo
ANÁLISIS DE DATOS______________________________
Interpolación uni y bidimensional
.-1D
vector_y=interp1(x,y,vector_x,opcion)
opcion:
-’linear’: interpolación lineal
-’cubic’ :interpolación cúbica
-’spline’: interpolación spline cúbica (ptos de
interpolación igualmente espaciados).
.-2D
matriz_Z=interp2(X,Y,Z,matriz_X,matriz_Y,opcion
)
Curso Matlab 2002-03 enxamb. Nieves
opcion:
-’bilinear’: interpolación lineal
-’bicubic’ :interpolación cúbica
-’nearest’
Lorenzo
ANÁLISIS DE DATOS______________________________
Ejercicio7.1:
La tabla siguiente recoge el peso de 30
estudiantes. Construir sobre una misma ventana
las 4 figuras siguientes:
1.-Un histograma de frecuencias con el ox peso y
oy frecuencia de valores.
2.-El polígono de frecuencias, curva obtenida
entre los puntos definidos por las marcas de
clase y la frecuencia.
3.-El perfil de muestra mediante stairs
4.-El perfil de muestra mediante stem.
Calcular el máximo y mínimo peso y la media de
Curso Matlab 2002-03 enxamb. Nieves
pesos. 71 82 65 75 77 91 59 84 89
81
73 91 82 75 96 85 69 76 81
92
Lorenzo
ANÁLISIS DE DATOS______________________________
Ejercicio7.1:
peso=[71 82 65 75 77 91 59 84 89 81 ...
73 91 82 75 96 85 69 76 81 92 ...
84 79 77 95 81 79 84 85 76 82];
figure
subplot(221)
hist(peso)
title(‘Histograma’)
xlabel(‘Peso’)
ylabel(‘Frecuencia’)
subplot(222)
[n,p]=hist(peso);
Curso Matlab 2002-03 enxamb. Nieves
plot(p,n)
title(‘poligono de frecuencias’)
xlabel(‘Peso’)
ylabel(‘Frecuencia’)
subplot(223)
Lorenzo
ANÁLISIS DE DATOS______________________________
stairs(peso)
title(‘Stairs’)
ylabel(‘Peso’)
xlabel(‘Individuo’)
subplot(224)
stem(peso)
title(‘Stem’)
ylabel(‘Peso’)
xlabel(‘Individuo’)
maximo=max(peso)
minimo=min(peso)
Curso Matlab 2002-03 enxamb. Nieves
media=mean(peso)
Lorenzo
ANÁLISIS DE DATOS______________________________
Ejercicio7.2
Se ha medido experimentalmente la
conductividad eléctrica del acero a distintas
temperaturas, recogiéndose los siguientes
valores:
Obtener los polinomios de regresión de primero y
segundo grado. Calcular para los polinomios
obtenidos cuál sería el valor estimado de la
conductividad eléctrica
T(ºC) a K(cm)
los 600 -1
y a los 1000ºC.
100 51813
Curso Matlab 2002-03 enxamb. Nieves
300 28571
500 17483
700 11696
900 9116
Lorenzo
ANÁLISIS DE DATOS______________________________
Ejercicio7.2
temp=100:200:900;
conduc=[51813 28571 17483 11696 9116];
pol1=polyfit(temp,conduc,1)
temp1=0:50:1000;
conduc1=polyval(pol1,temp1)
conduc1e=polyval(pol1,temp);
plot(temp1,conduc1,temp,conduc1e,’o’,temp,conduc,’
*’)
legend(‘recta de regresion’,’conductividades
estimadas’,...
Curso Matlab 2002-03 enxamb. Nieves
‘conductividades medidas’)
xlabel(‘temperatura ºC’)
ylabel(‘Conductividad electrica (ohm cm)^{-1}’)
cond1_600=polyval(pol1,600)
Lorenzo
cond1_1000=polyval(pol1,1000)
ANÁLISIS DE DATOS______________________________
pol2=polyfit(temp,conduc,2)
temp2=0:50:1000;
conduc2=polyval(pol2,temp2)
conduc2e=polyval(pol2,temp);
figure
plot(temp2,conduc2,temp,conduc2e,'o',temp,conduc,'
*')
legend('recta de regresion','conductividades
estimadas',...
'conductividades medidas')
xlabel('temperatura ºC')
Curso Matlab 2002-03 enxamb. Nieves
corre2=corrcoef([conduc',conduc2e'])
ANÁLISIS DE DATOS______________________________
Ejercicio7.3:
[x,y]=meshgrid(-3:1:3);
z=peaks(x,y);
Dada esta función ver la diferencia entre la
interpolación nearest, bilinear y bicubic
Curso Matlab 2002-03 enxamb. Nieves
Lorenzo
ANÁLISIS DE DATOS______________________________
Ejercicio7.3:
[x,y]=meshgrid(-3:1:3);
z=peaks(x,y);
[xi,yi]=meshgrid(-3:0.25:3);
zi1=interp2(x,y,z,xi,yi,'nearest');
zi2=interp2(x,y,z,xi,yi,'bilinear');
zi3=interp2(x,y,z,xi,yi,'bicubic');
figure
mesh(xi,yi,zi1)
figure
Curso Matlab 2002-03 enxamb. Nieves
mesh(xi,yi,zi2)
figure
mesh(xi,yi,zi3)
Lorenzo
ANÁLISIS DE DATOS______________________________
Ejercicio7.4:
Para el ejemplo del ejercicio 6.2 calcular:
.- La nota media obtenida por los alumnos en
cada una de las disciplinas.
.- La nota máxima en estadística y los alumnos
que la han obtenido
Curso Matlab 2002-03 enxamb. Nieves
Lorenzo
ANÁLISIS DE DATOS______________________________
Ejercicio7.4:
mean(califica);
for i=1:4
materia=variables(long_v(i)+1:long_v(i+1));
disp([‘La nota media de ‘,materia, ...
‘es ...’,num2str(ans(i))])
end
yM=max(califica(:,4)); %calculo de la calificacion
maxima
disp([‘La nota máxima es’, num2str(yM),’ obtenida
por : ‘])
Curso Matlab 2002-03 enxamb. Nieves
%identificación alumno
iM=find(califica(:,4)==yM);
%se extrae su nombre y apellidos
Lorenzo
ANÁLISIS DE DATOS______________________________
Ejercicio7.4:
for i=1:length(iM)
n=3*(iM(i)-1);
if n==0
p=[0 long_n(1:3)];
else
p=long_n(n:n+3);
end
alumno=[nombres(p(1)+1:p(2)) ‘ ‘
nombres(p(2)+1:p(3)) ...
‘ ‘ nombres(p(3)+1p(4))];
disp(alumno)
Curso Matlab 2002-03 enxamb. Nieves
end
Lorenzo
ANÁLISIS NUMÉRICO
En este capítulo nos introduciremos al análisis
numérico de problemas básicos relacionados con
el estudio de funciones de una y varias variables,
la aproximación de extremos locales o el cálculo
de ceros de una función.
Ejemplo1:
Calcular un mínimo local de la función f(x)=3x4-
4x3 en el intervalo [-1 2]
fminbnd(‘3*x^4-4*x^3’,-1,2)
Lorenzo
ANÁLISIS NUMÉRICO_____________________________
Para calcular un máximo de f en el intervalo [a,b] es
lo mismo que calcular un mínimo sobre –f
fminbnd('-(3*x^4-4*x^3)',-1,2)
fminbnd('-(3*x^4-4*x^3)‘,0,2)
signo, [0,10]
x=0;eval(‘sin(x)-2*cos(2*x)+x^2-pi^2+2’)
x=10;eval(‘sin(x)-2*cos(2*x)+x^2-pi^2+2’)
Lorenzo
ANÁLISIS NUMÉRICO_____________________________
ymin=0;ymax=pi;
result=dblquad('y*sin(x)
+x*cos(y)',xmin,xmax,ymin,ymax)
%-9.8698
Lorenzo
ANÁLISIS NUMÉRICO_____________________________
int('sin(x)^2*cos(x)^2',0,4*pi) %1/2*pi=1.5708
ia=quad('sin(x).^2.*cos(x).^2',0,4*pi) %
1.0051e-030
ial=quadl('sin(x).^2.*cos(x).^2',0,4*pi) %1.5708
Curso Matlab 2002-03 enxamb. Nieves
Lorenzo
ANÁLISIS NUMÉRICO_____________________________
Ejemplo5:
La ecuación de van der Pol
y 1 1 y y 1 y 1 0
2
1
0
Reescribimos el sistema
y 1 y 2
Curso Matlab 2002-03 enxamb. Nieves
y 2 1 y 12 y 2 y 1
Escribimos el fichero ODE
Lorenzo
ANÁLISIS NUMÉRICO_____________________________
function dy=vdp1(t,y)
dy=[y(2); (1-y(1)^2)*y(2)-y(1)];
Llamamos a solver
[T,Y]=ode45(‘vdp1’,[0 20],[2;0]);
plot(T,Y(:,1),'-',T,Y(:,2),'--')
title('Solucion de la ecuacion de Van der Pol, \
mu=1')
xlabel('Tiempo T')
Curso Matlab 2002-03 enxamb. Nieves
ylabel('Solucion Y')
legend('Y1','Y2')
Lorenzo
ANÁLISIS NUMÉRICO_____________________________
Curso Matlab 2002-03 enxamb. Nieves
Lorenzo
AYUDA
La ayuda es lo mas importante de matlab,
help nombre_comando
help nombre_toolbox
Algunas importantes son
help graph2d
help graph3d
help specgraph
help save
Podemos ver ejemplos hechos con matlab
Curso Matlab 2002-03 enxamb. Nieves
poniendo
demo
Para saber más: http://www.mathworks.com/
http://www.mathworks.com/access/helpdesk/help/toolbox/compiler/compiler.shtml
Lorenzo
Esta última hace referencia a los compiladores de c de matlab, los mex files