Introducción a MATLAB: Programación y Análisis
Introducción a MATLAB: Programación y Análisis
COMPUTADORAS CON
MATLAB
E-mail:jose08052010@[Link]
Orbegoso
PROGRAMA
•Introducción.
•Operaciones con matrices.
•Manipulación de vectores y
matrices.
•Funciones matriciales.
•Polinomios y procesado de
Programación en Computadora con MatLab – J.
señales.
•Funciones de funciones.
•Gráficos: 2D y 3D.
•Programación.
•Análisis de datos.
Orbegoso
•Análisis numérico
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
Programación en Computadora con MatLab – J.
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
Programación en Computadora con MatLab – J.
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: /
Orbegoso
log10(x)
• rats(x) rem(x,y) resto de x/y round(x) sign(x)
Comandos de ayuda:
• help
• lookfor
Orbegoso
42.13
Ejercicio 1.4 Según Hill y Lounasmaa, la ecuación de
la curva de inversión del helio 21.0 5.44T 0.132T 2
P es
Donde la presión vienen dada en atmósfera y la
temperatura T en grados Kelvin. Calcular el valor de
la presión a una temperatura de 293 ºK. Calcular el
valor de la temperatura para una presión de 1N/m2.
Nota: 1N/m2=9.265*10-6atm
Introducción_____________________________________
diary off
dir
type [Link]
Programación en Computadora con MatLab – J. Orbegoso
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
86 142 68
Programación en Computadora con MatLab – J.
6 9 2
4 8 7 92 164 106
5
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) sub_w=w(i:k:j)
Programación en Computadora con MatLab – J.
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
Orbegoso
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
Programación en Computadora con MatLab – J.
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
Programación en Computadora con MatLab – J. Orbegoso
0 1.0030
0.2 1.0234
0.4 1.0825
0.6 1.1869
0.8 1.3342
Orbegoso
1 1.5415
Vectores y matrices_______________________________
456
789
B=inv(A).
Vectores y matrices_______________________________
En MATLAB se accede a los elementos de un vector poniendo el índice
entre paréntesis (por ejemplo x(3) ó x(i)). Los elementos de las matrices
se acceden poniendo los dos índices entre paréntesis, separados por una
coma (por ejemplo A(1,2) ó A(i,j)). Las matrices se almacenan por
columnas (aunque se introduzcan por filas, como se ha dicho antes),
y teniendo en cuenta esto puede accederse a cualquier elemento de una
matriz con un sólo subíndice. Por ejemplo, si A es una matriz (3x3) se
obtiene el mismo valor escribiendo A(1,2) que escribiendo A(4).
Los operadores matriciales de MATLAB son los siguientes:
+ adición o suma
Programación en Computadora con MatLab – J. Orbegoso
– 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:
Programación en Computadora con MatLab – J. Orbegoso
>> 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
Programación en Computadora con MatLab – J. Orbegoso
b=sparse(f1,c1,m1,5,5];
full(b)
a=sparse(f,c,m)
s=a+b
p=a*b
[f2,c2,m2]=find(p)
e=full(sparse(f2,c2,m2))
Vectores y matrices_______________________________
Ejercicio 2.1 Dados los vectores definidos por
x=(1,4.5,7.8) y=(sen(90),cos(45),0)
Realizar los cálculos siguientes:
x+y;el producto escalar de x e y; calcular el
ángulo que forman ambos vectores.
Ejercicio 2.2 Para un laboratorio se compran los
materiales especificados en la tabla siguiente.
Ref. Precio Cantida
arti. d
Programación en Computadora con MatLab – J. Orbegoso
Dado un polinomio
x3+2x
se representa por
>> pol1=[1 0 2 0]
Programación en Computadora con MatLab – J.
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;
Programación en Computadora con MatLab – J.
Y=polyval(p,x);
Para multiplicar y dividir polinomios tenemos los
comandos especiales conv(p1,p2) y
deconv(p1,p2)
Ejemplo5:
Orbegoso
=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______________________________________
rats(r)
x3 x2 1 35 13 1
3 2
2
1
x 3 x 4 9( x 2) 3( x 2) 9( x 1)
[pol1,pol2]=residue(r,p,k)
Polinomios______________________________________
p=[1, 6,0,1];
d=polyder(p) % es decir 3x2+12x
Programación en Computadora con MatLab – J.
Orbegoso
Polinomios______________________________________
Ejercicio3.2
a) presion=[-0.132 4.55 –21.0];
Programación en Computadora con MatLab – J.
presion0=polyval(presion,273.15-268.25)
b) presion1=3*9.265e-006;
presion(3)=presion(3)-presion1
temp=roots(presion)
Orbegoso
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)
Programación en Computadora con MatLab – J.
dsolve(‘D5y-D4y+2*D3y-2*D2y+Dy-y=0’,’x’)
Orbegoso
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)’)
Programación en Computadora con MatLab – J.
Orbegoso
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
Programación en Computadora con MatLab – J. Orbegoso
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
Programación en Computadora con MatLab – J. Orbegoso
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
Programación en Computadora con MatLab – J. Orbegoso
>>[V,D]=eig(A)
Programación en Computadora con MatLab – J.
Orbegoso
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
Programación en Computadora con MatLab – J. Orbegoso
Ejercicio4.1
A=[6 18 2;7 –2 –4;4 10 –6];
d=det(A)
Programación en Computadora con MatLab – J.
b=[1;2;3];
sol=A\b
A(1,3)=-10
d=det(A)
sol=A\b
Orbegoso
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)
Programación en Computadora con MatLab – J.
Orbegoso
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:
ambos ejes.
• loglog() ídem con escala logarítmica en ambos
ejes.
• semilogx() ídem con escala lineal en el eje de
ordenadas y logarítmica en el eje de abscisas.
Orbegoso
x=
132453
» plot(x)
FUNCIÓN PLOT
Ejemplo2
x=0:pi/90:2*pi;
y=sin(x).*cos(x);
plot(x,y)
grid on
Programación en Computadora con MatLab – J. Orbegoso
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
Programación en Computadora con MatLab – J. Orbegoso
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
Programación en Computadora con MatLab – J. Orbegoso
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
Programación en Computadora con MatLab – J. Orbegoso
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)’)
Programación en Computadora con MatLab – J.
Orbegoso
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
Programación en Computadora con MatLab – J.
» 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.
Programación en Computadora con MatLab – J.
Ejemplo8:
x=[1,2,1,0];
y=[0,1,2,1];
figure
fill(x,y,’r’)
Orbegoso
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);
Programación en Computadora con MatLab – J.
z=4*teta;
plot3(x,y,z)
axis([-1 3 -1 3 0 120]);
xlabel('eje x')
ylabel('eje y')
Orbegoso
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:
Programación en Computadora con MatLab – J. Orbegoso
x=[Link];y=[0:50];
%Obtenemos la malla del dominio
[X Y]=meshgrid(x,y);
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)
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.
Programación en Computadora con MatLab – J.
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
[angx,angz,rad]=cart2sph(x,y,z)
Programación en Computadora con MatLab – J. Orbegoso
M(j)=getframe;
GRÁFICOS: 2D Y 3D______________________________
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.')
Orbegoso
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=[Link];
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.')
Programación en Computadora con MatLab – J.
ylabel('Temperatura, ºC')
legend('P=25 atm.','P=35 atm.','P=45 atm.','P=55 atm.')
Orbegoso
Programación en Computadora con MatLab – J.
Orbegoso
GRÁFICOS: 2D Y 3D______________________________
GRÁFICOS: 2D Y 3D______________________________
ylabel('eje y')
zlabel('eje z')
title('superficie z=xy')
subplot(222)
contour3(Z)
grid off
xlabel('eje x')
ylabel('eje y')
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')
Programación en Computadora con MatLab – J. Orbegoso
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')
Programación en Computadora con MatLab – J.
Orbegoso
GRÁFICOS: 2D Y 3D______________________________
GRÁFICOS: 2D Y 3D______________________________
GRÁFICOS: 2D Y 3D______________________________
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
Programación en Computadora con MatLab – J. Orbegoso
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 [Link]/[Link]
Programación en Computadora con MatLab – J.
R=0.0821
t=p*v/(n*R);
temp=gases(20,10,10)
PROGRAMACIÓN________________________________
nargchk(mínimo,máximo,número_entrada)
Orbegoso
PROGRAMACIÓN________________________________
for k=n1:incre:n2
end
for k=vector_columna
end
if
if if
if elseif whil
else elseif e
end else
end end end
Orbegoso
end
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
Programación en Computadora con MatLab – J.
if(v(i)>=0)
q=q[q,1];
else
q=[q,0];
end
end
q=v>=0
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
Programación en Computadora con MatLab – J. Orbegoso
switch expresion
case expresion_0
comandos_0 que deben ejecutarse
case expresion_1
comandos_1 que deben ejecutarse
case expresion_2
comandos_2 que deben ejecutarse
otherwise
comandos escoba que deben ejecutarse
end
PROGRAMACIÓN________________________________
formateados y no formateados.
PROGRAMACIÓN________________________________
Lectura de datos formateados:
[datos,contador]=fscanf(ident,’formato’,cuantos)
1.-Lee datos del archivo ident.
2.-Los datos leídos se guardan en datos.
3.-cuantos, indica cuántos datos vamos a leer.
.-un escalar k
.-un vector[n,m], en este caso se leeran los
datos necesarios para rellenar una matriz de orden
n x m columna a columna.
.-inf todos los datos del archivo.
Programación en Computadora con MatLab – J.
%e: notación
exponencial
PROGRAMACIÓN________________________________
Escritura en fichero
Escritura de datos formateados:
contador=fprintf(ident,’formato’,datos,controles)
\n línea nueva
Orbegoso
Ejercicio6.1:
Utilizando estructuras de control construir una
función que nos calcule las raíces de una ecuación
Programación en Computadora con MatLab – J. Orbegoso
de segundo grado
ax2+bx+c=0
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’)
Programación en Computadora con MatLab – J. Orbegoso
end
discri=b^2-4*a*c;
raiz=[];
if(discri==0)
raiz=-b/(2*a);
disp([‘Raiz doble=‘,num2str(raiz)])
return
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
Programación en Computadora con MatLab – J. Orbegoso
end
fprintf(1,'\t%s\t\t',variable)
else
fprintf(1,'\t%s\t',variable)
end
end
nombres=[];
califica=[];
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];
Programación en Computadora con MatLab – J. Orbegoso
califica=[califica; fscanf(ident,'%i',4)'];
fprintf(1,'\n%9s %s %9s',nombre, apellido1,
apellido2)
fprintf(1,'\t%i\t\t%i\t\t%i\t\t%i',califica(i,:))
end
fclose(ident)
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
Programación en Computadora con MatLab – J. Orbegoso
medida.
Veamos algunos comandos interesantes:
Cálculo del mínimo, máximo, media y mediana.
[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
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
Programación en Computadora con MatLab – J.
r=corrcoef([x,y])
Nos da el grado de relación entre x e y.
N
x ( i ) y ( i )
r i 1
N
x ( i ) 2
N
y ( i ) 2
Orbegoso
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
Programación en Computadora con MatLab – J.
N
s=cov([x,y]) x ( i ) y ( i )
s i 1
N1
Orbegoso
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)
Programación en Computadora con MatLab – J.
stairs(y)
ANÁLISIS DE DATOS______________________________
Gráfico de errores:
errorbar(x,y,e)
Histograma angular:
rose similar a hist pero realiza un histograma
angular los valores de la muestra es de ángulos
en radianes.
Curvas de regresión
p=polyfit(x,y,n)
Programación en Computadora con MatLab – J. Orbegoso
.-2D
matriz_Z=interp2(X,Y,Z,matriz_X,matriz_Y,opcion
)
opcion:
-’bilinear’: interpolación lineal
-’bicubic’ :interpolación cúbica
-’nearest’
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.
Programación en Computadora con MatLab – J. Orbegoso
ylabel(‘Frecuencia’)
subplot(222)
[n,p]=hist(peso);
plot(p,n)
title(‘poligono de frecuencias’)
xlabel(‘Peso’)
ylabel(‘Frecuencia’)
subplot(223)
ANÁLISIS DE DATOS______________________________
stairs(peso)
title(‘Stairs’)
ylabel(‘Peso’)
xlabel(‘Individuo’)
subplot(224)
stem(peso)
title(‘Stem’)
ylabel(‘Peso’)
Programación en Computadora con MatLab – J. Orbegoso
xlabel(‘Individuo’)
maximo=max(peso)
minimo=min(peso)
media=mean(peso)
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
Programación en Computadora con MatLab – J. Orbegoso
conductividad eléctrica
T(ºC) a K(cm)
los 600 -1
y a los 1000ºC.
100 51813
300 28571
500 17483
700 11696
900 9116
ANÁLISIS DE DATOS______________________________
Ejercicio7.2
temp=[Link];
conduc=[51813 28571 17483 11696 9116];
pol1=polyfit(temp,conduc,1)
temp1=[Link];
conduc1=polyval(pol1,temp1)
conduc1e=polyval(pol1,temp);
plot(temp1,conduc1,temp,conduc1e,’o’,temp,conduc,’
Programación en Computadora con MatLab – J. Orbegoso
*’)
legend(‘recta de regresion’,’conductividades
estimadas’,...
‘conductividades medidas’)
xlabel(‘temperatura ºC’)
ylabel(‘Conductividad electrica (ohm cm)^{-1}’)
cond1_600=polyval(pol1,600)
cond1_1000=polyval(pol1,1000)
ANÁLISIS DE DATOS______________________________
pol2=polyfit(temp,conduc,2)
temp2=[Link];
conduc2=polyval(pol2,temp2)
conduc2e=polyval(pol2,temp);
figure
plot(temp2,conduc2,temp,conduc2e,'o',temp,conduc,'
*')
legend('recta de regresion','conductividades
Programación en Computadora con MatLab – J. Orbegoso
estimadas',...
'conductividades medidas')
xlabel('temperatura ºC')
ylabel('Conductividad electrica (ohm cm)^{-1}')
cond2_600=polyval(pol2,600)
cond2_1000=polyval(pol2,1000)
corre1=corrcoef([conduc',conduc1e'])
corre2=corrcoef([conduc',conduc2e'])
ANÁLISIS DE DATOS______________________________
Ejercicio7.3:
[x,y]=meshgrid(-[Link]);
z=peaks(x,y);
Dada esta función ver la diferencia entre la
interpolación nearest, bilinear y bicubic
Programación en Computadora con MatLab – J. Orbegoso
ANÁLISIS DE DATOS______________________________
Ejercicio7.3:
[x,y]=meshgrid(-[Link]);
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)
Programación en Computadora con MatLab – J.
figure
mesh(xi,yi,zi2)
figure
mesh(xi,yi,zi3)
Orbegoso
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
Programación en Computadora con MatLab – J. Orbegoso
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
Programación en Computadora con MatLab – J.
‘ ‘ nombres(p(3)+1p(4))];
disp(alumno)
end
Orbegoso
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.
min=fminbnd(‘funcion’,a,b,opciones)
Ejemplo1:
Calcular un mínimo local de la función f(x)=3x4-
4x3 en el intervalo [-1 2]
Orbegoso
fminbnd(‘3*x^4-4*x^3’,-1,2)
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)
min=fminsearch(‘funcion’,x0)
La diferencia es que en lugar de dar un intervalo
damos un vector x0 que indica el pto. Entorno al
cual deseamos minimizar la función.
Ejemplo2:
Minimizar la función f(x)=sen(xy) en el entorno de
[0,0]
ANÁLISIS NUMÉRICO_____________________________
Para calcular los ceros de un función tenemos el
comando fzero
raiz=fzero(‘funcion’,x0)
Calcula la raíz de la función f(x)=0 a partir del
iterante inicial x0
Ejemplo3:
Calcular una solución de la ecuación sen(x)-2cos(2x)
+x2=2-2.
Programación en Computadora con MatLab – J. Orbegoso
Esto es f(x)=sen(x)-2cos(2x)+x2-2+2 =0 .
Función continua para la elección del iterante
buscamos un intervalo donde la función cambie de
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’)
ANÁLISIS NUMÉRICO_____________________________
ia=quad(‘sin(x)+1’,0,2*pi); %(6.2832)
xmin=pi;xmax=2*pi;
ymin=0;ymax=pi;
result=dblquad('y*sin(x)
+x*cos(y)',xmin,xmax,ymin,ymax)
%-9.8698
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
Programación en Computadora con MatLab – J.
Orbegoso
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
Programación en Computadora con MatLab – J.
y 1 y 2
y 2 1 y 12 y 2 y 1
Escribimos el fichero ODE
Orbegoso
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, \
Programación en Computadora con MatLab – J. Orbegoso
mu=1')
xlabel('Tiempo T')
ylabel('Solucion Y')
legend('Y1','Y2')
Programación en Computadora con MatLab – J. Orbegoso
ANÁLISIS NUMÉRICO_____________________________
AYUDA
La ayuda es lo mas importante de matlab,
help nombre_comando
help nombre_toolbox
Algunas importantes son
help graph2d
help graph3d
Programación en Computadora con MatLab – J. Orbegoso
help specgraph
help save
Podemos ver ejemplos hechos con matlab
poniendo
demo
Para saber más: [Link]
[Link]
Esta última hace referencia a los compiladores de c de matlab, los mex files