Introducción A Matlab
Introducción A Matlab
Introducción A Matlab
La distribución
a = 2 < enter>
b=3; < enter>
x= 7 < enter>
x^2; < enter>
Hasta aquí los cálculos que habíamos hecho se realizaron como en una
calculadora. El hecho de poder introducir variables nos ofrece nuevas
posibilidades, entre otras:
Almacenar datos que podamos usar posteriormente:
69 4 69 69
√
3
√
Ejemplo 4. Hallar la expresión: 33 x + 33 x + 2 33 x
23 23 √
5
23
1.3 REGLAS PARA NOMBRAR LOS DATOS EN MATLAB
Las reglas que se utilizan para nombrar las variables son las siguientes:
nombre significado
Ans alamcenael ultimo resultado no
asignado a una variable
epsilon de la maquina: es el
Eps numero
más pequeño que sumado a 1
genera un
número mayor que 1 en el
ordenador
Pi п
iyj unidad imaginaria
Date fecha
Inf ∞
NAN no es un numero: representa una
expresión detergida
Para obtener información sobre las variables definidas en una sesión de trabajo
se utilizan las ordenes who y whos. La primera muestra las variables que
tienen valores asignados, la segunda nos da además información sobre el
tamaño y el tipo de dato.
Ejemplo:
x = rand (100,100)
s= ‘ Hola mundo‘
t= 1 + 2 + 3 + ...
4 + 5 + 6 % .... continua la linea anterior
who x = rand (100,100)
s= ‘ Hola mundo‘
t= 1 + 2 + 3 + ...
4 + 5 + 6 % .... continua la linea anterior
La orden clear all. Se utiliza para borrar todas las variables hasta el momento;
si a la orden se le añade una lista de variables (separada por espacios en
blanco) solo se borra las variables de la lista.
FORMATOS: los tipos de datos que se almacenan en Matlab son variados. Los
más básicos son:
En Matlab, la precisión con la que se presentan los números reales
internamente es siempre la misma y esta entre 15 o 16 dígitos. Esta precisión
se puede ver en la variable eps, nombrada anteriormente
Cuando es necesario que los datos de entrada sean por pantalla, se debe
ordenar:
Ejemplo 1.
Solución:
Ejercicios:
1. Diseñe un programa que determine el cociente y el residuo de una
división entera.
Solución
2. Realizar un programa que obtengas las depreciaciones acumuladas y
los valores reales de cada año de un automóvil comprado en 18000
dólares, en 1996 durante los seis años siguientes suponiendo un valor
de recuperación a rescate de 1100 dólares, conociendo la fórmula de la
depreciación anual constante d para cada año de vida útil.
costo−valor de recuperacion
D=
vidautil
Solución
Solución
Solución
disp(‘ superficie de un cilindro‘);
r=input(‘ ingrese el valor del radio r :‘);
superf=pi*r^2;
disp(‘superficie es s: ‘),superf
Solución
disp(‘ hallando el perimetro y superficie de un
cuadrado‘);
r=input(‘ ingrese el valor del lado :‘);
l=a*a;
p=4*a;
disp(‘ el perimetro es:‘),l
disp(‘ la superficie es:‘),l
5
C= ( F−32)
9
Solución
disp(‘ convierte grados fahrenheit en celsius‘);
f=input(‘ ingrese el valor en grados fahrenheit:‘);
celsius=(5/9)*(f-32);
disp(‘ la temperatura en °C:‘),celsius
Matlab ejecuta análisis estadístico sobre conjuntos de datos. Estos conjuntos de datos
se almacenan en matrices orientadas por columnas. Matlab incluye, entre otras, las
siguientes funciones estadísticas:
Ejemplos:
>> X =[1 2 3 4 5 6 ]
>>cumprod (X) %matriz de productos acumulados
>> cumsum (X) %sumas acumuladas
>> mean (X) % media
>> median (X) % mediana
>> Z = [5 7 9 2 9 3 1 7 5 1 3 9 2 7 5 1 5 5 1 8];
>> tabulate (Z) % tabla de frecuencias genera a partir de una serie de valores
>> rango (Z) % rango de cada columna (diferencia entre el máximo y el minino)
>> b=[1:0.2:2]
>> b=linspace(1,2,5)
>> b=linspace(1,2)
Para construir una matriz, se debe tener en cuenta las siguientes reglas:
>X = [5 7 9 2 9; 3 1 7 5 1; 3 9 2 7 5; 1 5 5 1 8]
X=
5 7 9 2 9
3 1 7 5 1
3 9 2 7 5
1 5 5 1 8
Una vez definida una matriz o un vector, se puede acceder a sus elementos o
sobmatrices con las ordenes:
Función Salida
V(i) Coordenada i del vector v
A(i,j) Elemento de la matriz A que ocupa la posición i, j
A(:,j) Columna j de la matriz A
A (:,end) Columna ultima de la matriz A
A (i,: ) Fila i de la matriz A
A (end,:) Fila ultima de la matriz A
A (v, w ) Submatriz de A que contiene las filas indicadas en las coordenadas
de v y las columnas indicadas en w
A (i,: ) = [ ] Elimina la fila i de la matriz A
A (:.j ) = [ ] Elimina la columna j de la matriz A
Nota: [ ] representa la matriz vacía (empty matrix )
Ejemplo 1.
3 4 1 2 3 5 6
A=
1 2 3
[
4 5 6 ]
7 8 [ ] [ ] [ ]
;B= 3 6 ;C= 4 5 6 ;D= 7 8
7 8 9 9 10
>> A = [ 1 2 3; 4 5 6 ];
>>B = [ 3 4 ; 3 6 ; 7 8 ];
>> C = [ 1 2 3; 4 5 6 ; 7 8 9 ] ;
>> D= [ 5 6 ; 7 8 ; 9 10 ] ;
>> pause
19 26 33
27 36 45
39 54 69
A2 = [ 14 2 3
5 6 ] = [ 161
2 4 9
25 36 ]
>> R= A. ^2
R=
1 4 9
16 25 36
|
Para la transpuesta es necesario aplicar
1 4
1 2 3
|
A= [
4 5 6
=2 5
3 6
]
>> R = A|
R=
1 4
2 5
3 6
Dadas dos matrices M y N con el mismo numero de filas, se puede dfinir una
matriz F formada por todas las columnas de M y N:
>>M=rand (3), N=eye (3,2), C= [M ; N]
>>l = tril (A) % convierte en ceros todos los elementos que quedan encima de
la diagonal principal
>> u =triu (A) %convierte en ceros todos los elementos que quedan debajo de
la diagonal principal
Operación de matriz
m
(A * B)I,J= ∑ AikBkj , 1≤i≤n , 1≤ j ≤l
k =1
3 4
A*B
1 2 3
[
4 5 6 ][
3 6 =
7 8 ]
3+¿ 6+¿ 21 4+ ¿12+¿ 24
[
12+ ¿15+ ¿ 42 16+¿ 30+¿ 48
=
30 40
69 94 ][ ]
>>R=A*B
R=
30 40
69 94
3 4 3+16 6+ 20 9+ 24 19 26 33
B*A= 3 6
7 8 [ ][ 1 2 3
4 5 6 ] [ ][
= 3+24 6+ 30 9+ 36 = 27 36 45
7+32 14+ 40 21+ 48 39 54 69 ]
>>R=B*A
R=
FUNCION SALIDA
ones (n) matriz cuadrada nxn de unos
ones (m,n)matriz mxn de unos.
zeros(n) matriz cuadrada nxn de ceros
zeros(m,n)matriz mxn de ceros.
eye(n) matriz identidad nxn.
eye(m,n) matriz mxn con unos en la diagonal principal y el resto ceros.
matriz cuadrada nxn de números aleatorios entre 0 y 1 y distribución
rand(n) uniforme
rand(mxn) matriz mxn de números aleatorios entre 0 y 1 y distribución uniforme
randn(n) matriz cuadrada nxn de números aleatorios, distribución N(0,1)
randn(m,n
) matriz mxn de números aleatorios, distribución N(0,1)
>>A=eye(5) % matriz identidad 5x5
>>A(3,4)=10, A(2,5)=1
>>B=A
>>B(:,2)=[]
Ejemplos:
Solución
Solución
>> A=rand (5 , 7)
>> V= linspace ( 5 , 7 , 7)
>> A(end , : ) =v
HM(:,:,1) =
1 2 3
4 5 6
HM(:,:,2) =
7 8 9
10 11 12
Ejemplos:
>A = zeros (2,3); B = ones (2,3); % definimos dos matrices de las mismas
dimensiones cat (1,A,B) % las concatena una debajo de la otra
Ans =
0 0 0
0 0 0
1 1 1
1 1 1
Ans =
0 0 0 1 1 1
0 0 0 1 1 1
>> cat (3, A,B) % las concatena como distintas capas de una hipermatriz
Ans(:,:,1)=
Hallar solución.
clc
clear all
a1= [1 2 3; 1 3 8; 5 6 4];
b1=[6;19;5];
r= rank(A1);
ra=rank([A1 b1]);
x=A1\B1;
disp('el resultado de la matriz es \'),x
pause
disp('Otra forma utilizando la funcion rref')
E=rref([A1 b1])
disp('el resultado de la matriz es \'),E
x + 2y + 3z = 6
x + 3y + 8y = 19
2x + 3y + z = -1
5x + 6y + 4z = 5
Hallar solución
x + 2y + 3z = 6
x + 3y + 8y = 19
2x + 3y + z = -1
5x + 6y + 4z = 5
x + 2y + 3z = 6
0
{ x+ ¿2 y−¿ z=¿2 x−¿ y +¿ z=¿ 3 x +¿ y ¿ 0
0
Hallar solución
Sistema compatible indeterminado. Para obtener la solución general
calculamos una base del espacio de soluciones mediante la orden.
>>X=null(A3)
0 0 0
0 0 0
Ans(:,:,2)=
1 1 1
1 1 1
1. Las funciones que operan sobre escalares, como sin, cos, etc., se
aplican sobre sobre hipermatrices elemento a elemento (igual que ocurre
al aplicarlas sobre vectores y matrices).
2. Las funciones que operan sobre vectores, como sum, max, etc., se
aplican a matrices e hipermatrices según la primera dimensión,
resultando un array de una dimensión inferior.
3. Las funciones matriales propias del algebra lineal, como det, inv, etc.,
no se pueden aplicar a hipermatrices, para aplicarlas habría que extraer
las matrices correspondientes.
FUNCIONES BASICAS EN MATLAB
Obviamente, las funciones matemáticas habituales también están predefinidas
en matlab, con la única particularidad de que actúan sobre vectores o matrices
elemento a elemento.
Matlab, incluye una serie de funciones que permite las operaciones con
facilidad.
>> log(exp(3))
>>sin(2*pi/3)
>>f(4)
>>fl =inline(´x2´,´x´)
>>fl(4)
Sea x2-9 =0
symx
solve(x.^2-9)
solve ('x^2-2*x-15=0')
f=@(x)x^2-9
fzero(f,0.5)
f =
@(x)x^2-9
ans =
3
Ejemplo 1. Hallar elaborar el script para hallar la raíz de una expresión de la
forma: ax2 + bx + c = 0
Solución
clc
clear all
a=input('ingrese el valor de a:');
b=input('ingrese el valor de b:');
c=input('ingrese el valor de c:');
[x1,x2]=quadform (a,b,c);
fprintf('Las raices son:' )
fprintf('/t/t' % 10.6f/n/n' ,x1)
fprintf('/t/t' % 10.6f/n/n' ,x2)|
Solución
%%
%
% <<FILENAME.PNG>>
%
solucion
clc
clear all
f = input ('Ingrese los datos de temperatura en
Fahrenheir [F] : ');
C = 5/9* (f-32);
fprintf('%5.2f (en Fahrenheit) es %5.2f (en Celsius) .
\n',f,c)
fid=fopen('temperatura.txt','w'); % almacena los datos
calculados
fprintf(fid, '%5.2f(Fahrenheit) es
%5.2f(celsius).\n',f,c);
fclose(fid);
clc
clear all
x=0.25; n=1:6; c=1./cumprod ([1 n]);
for n=1:7, T(n)=polyval (c(n:-1:1),x); end
fprintf('\n T_n(x) |T_n(x)-exp(x)|\n');
fprintf('--------------------------------------\n');
fprintf('%15.6f %8.3e\n', [T;abs(T-exp(x))])
%%
%
% <<FILENAME.PNG>>
%
clc
clear all
t= (0:.01:3)' ;
y=4+cos(t)-0.05*sin(t)+0.2*randn(size(t));% datos
A = [ones(size(t)) cos(t) sin(t) ]*c;
max( abs(f(t)-y) )
ezplot(f,[0 3]
hold on, plot(t,y,'r.')
%%
%
% <<FILENAME.PNG>>
%
GRAFICOS EN MATLAB
4.1 Gráficos en 2D
al realizar un gráfico con MATLAB se abre automáticamente una ventana
grafica o figura.
También se puede crear una figura que no contenga ningún grafico con la
orden:
función Salida
figure genera una ventana gráfica.
figure (n) genera la ventana grafica número n; si ya existe, la activa.
función Salida
close cierra la ventana grafica activada.
close (n) cierra ventana grafica número n.
close all cierra todas las ventanas graficas.
función salida
Clf borra el contenido de una ventana grafica activada. Manteniendola abierta
función Salida
hold on mantiene activa la ventana grafica actual.
hold off cada grafico se realiza en una ventana diferente. Es la opcion por defecto.
Hold intercambia hold on y hold off
función salida
plot (x,y) Sí x e y son numeros. Dibuja el punto de coordenadas (x,y). Si
se trata de los vectores x= (x1, x2,… xn), y= (y1, y2, … , yn).
dibuja el conjunto de puntos {(x1,y1)… (xn, yn)} y los enlaza
con segmentos.
plot (x,y,s) hace lo mismo que plot (x,y) pero con las opciones
especificadas en s. en s puede aparecer un simbolo de cada una
de las columnas de la siguiente tabla, encerrados entre
comillas simples.
plot (x1 , y1 ,s1 x2, y2 , s2 , … , ) Dibuja en una misma gráfica, los gráficos definidos por las ternas
(xi , yi , si ) . Si no se especifican los parámetros si, el dibujo
se realiza con trazo continuo y un color distinto para cada
grafica. Utilizando los siete primeros colores de la tabla en el
orden señalado. Si se necesitan más colores se repiten
cíclicamente.
función salida
title (texto) sitúa el texto como título del grafico en la parte superior del mismo, en gráficos 2D
xlabel (´texto´) sitúa el texto al lado del eje x en gráficos 2D
ylabel (´texto´) sitúa el texto al lado del eje y en gráficos 2D
text (x,y,´texto´) sitúa el texto en el punto (x,y) en un gráfico 2D
gtext (´texto´) permite situar el texto en un punto seleccionado con el ratón en un gráfico 2D
Ejemplo:
>> x = [ −2 −1 0 1 2 3 ]; y = [ 4 1 01 4 9 ];
La función plot nos permite otras opciones como superponer graficas sobre
los mismos ejes:
>> xlabel(´texto´)
>> ylabel(´texto´)
>> title(´texto´)
>> gtext(´texto´)
>> grid
Fija valores máximo y mínimo de los eje: axis( [xmin xmax ymin ymax ] )
>> x = 1:360; y 1 =sind (x); y2 =cosd (x);y3 =exp (x); y4 =exp (-x);
>> x =[ −2 0 2 0 −2 ]; y =[ 4 8 4 0 4 ];
>> x = [ −2 0 2 0 −2 ]; y = [ 4 8 4 0 4 ];
Ejemplos:
clc
clear all
x=linspace(-pi;pi);y1=sin(x); y2=cos(x);
plop(x,y1,'r *',x,y2,' g o' )
xlabel(' ejex' )
ylabel(' ejey' )
gtext('sen x' )
gtext('cos x' )
title('Graficas del seno y del coseno')
grid on
%%
%
% <<FILENAME.PNG>>
%
respectivamente
4.2 Gráficos en 3D
También podemos crear graficas en 3 dimensiones, se trata de extender la
orden de plot (2-D) a plot3 (3-D) donde el formato será igual pero los datos
estarán en tripletes
>> z = [3 5 10 5 3];
La orden [X,Y]=meshgrid(x,y) crea una matriz X cuyas filas son copias del
vector x y una matriz Y cuyas columnas son copias del vector y. para
generar la grafica de malla se usa la orden mesh(X,Y,Z), mesh acepta un
argumento opcional para controlar los colores. Tambien puede tomar una
matriz como argumento: mesh(Z).
clc
Clear all
X =-10:0.5:10; y = -10:0.5:10;
Surf (X,Y,Z)
View (10,70)
Colorbar
Surf (X,Y,Z)
Shading interp
Algunas propiedades
Grafique una función matemática de la forma: y = sen(x), x [ 0; 5 ] con un
incremento de 0.5.
%.......proceso de ejecucion......
x=linspace(xmin,xmax,100);
[x,t] = meshgrid(x,t);
for i=size(t,2);
xx=x-v*t(i);
c=(M/sqrt(4*pi*Dx*t(i))).*exp(-
(xx.*xx)/4*Dx*t(i));
end
%..................salida....... .
surf(x,t,c)
Animaciones en Matlab
La opción comet permite animaciones simples en la grafica.
clc
clear all
T= (0:0.01:2)*pi;
figure, axis equal, axis([-1 1 -1 1]) hold on
pause
comet(cos(T), sin(T))
clc
clear all
figure (‘doublebuffer‘, ‘on‘). flash-free redraws
t = linspace(0.8*pi,800)‘;
for s = 0:0.01:1
x=exp(-s*t).*cos(6*s*t+t);
y=exp(-s*t).*sin(6*s*t+t);
plot(x,y), axis([-1 1 -1 1])
pause (0.01)
end
end
movieview(M)
podemos almacenar en formato de video *.avi con la
opcion:
movie2avi(M,‘video.avi‘)
tambien es posible incorporar un sonido:
clc
clear all
x = (0:0.1:250)*pi; y = zeros(1,200); z =
(0:0.1:1000)*pi;
sound([sin(x), y, sin(x), y, sin(z*4/5), y,...
sin(8/9*x), y, sin(8/9*x), y, sin(8/9*x), y,
sin(z*3/4)]);
OPCIONES ADICIONALES
Como ejemplo, considérese la función escalar de dos variables V =x 2 + y , la
gradiente de V esta definido como el vector campo.
∂V
∗∂ V
∂x
∇ V =( )
∂y
¿( 2 x∗1)
PROGRAMANDO EN MATLAB
CONDICIONAL IF
If condición I
Instrucciones I
Elseif
Instrucciones 2
Else
Instrucciones 3
End
Ejemplo 1:
Crea un programa en el que se introduzcan dos números por el teclado y que nos diga
cuál es el mayor.
Ejemplo 2:
n=input(’dime un numero’)
if a>9| n<0
disp.( ’Intruduzca un numero correcto’)
return
end
clc
if g==n
disp(’correcto!!!!! ’)
else
disp.( ’no acertaste’)
end
BUCLES
El control de flujo es extremadamente poderoso porque este hace que cálculos
pasados sirvan para realizar cálculos futuros. Matlab ofrece 3 estructuras para la toma
de decisiones o control de flujo.
Loop FOR
En un Loop for un grupo un grupo de comandos es ejecutado un número
predeterminado de veces. La forma general es:
For X arreglo
Comandos
End
Ejemplo:
Programa que calcula el seno de x para x entre 0 y pi con intervalos de 1
While condición
Instrucciones
End
Ejemplo:
Preguntar un numero al usuario y detenerse cuando ese numero sea mayor que 100.
n=1;
while n<100
n=input(’numero ’)
Para crear un fichero que contenga una función es muy importante crear o guardar el fichero
m con el mismo nombre de la función para su correcta ejecución posterior.
Como siempre, la creación de funciones quedara mas clara con los ejemplos explicativos que
se incluyen a continuación:
x
Definir una función que sea f =2∗cos ( )
2
Se muestra a continuación la función creada y un ejemplo de aplicación.
Function y=cos2(x)
X=input(’ingrese el angulo: ’)
Y=2.*cos((x)./2
. RAMIFICACION MULTIPLE
Valor 3 Valor 2
VARIABLE
Distinto Valor 1
Sentencia Sentencia Sentencia Sentencia
3 4 1 2
El comando que se utiliza es SWITCH y se realiza de la siguiente manera:
Case valor 1
Sentencia 1
Case valor 2
Sentencia 2
Case 3
Sentencia 3
Otherwise
Sentencia 4
End
Ejemplo:
Crear un programa que realice operaciones matemáticas con dos números según la opción
elegida.
Crear programa
n=input(’numero 1: ’)
m=input(’numero 2: ’)
disp(’1 suma’)
disp(’2 resta’)
disp(’3 multiplicacion’)
disp(’4 division’)
operación=input(’elija una opcion’)
disp.( ’resultado :’)
switch operación
case 1
disp.(n+m)
case 2
disp(n-m)
case 3
disp(n*m)
case 4
disp(n/m)
otherwise
disp(’no has elegido bien’)
end
Ejemplo:
Podemos mezclar en un programa varias sentencias de este estilo. Aquí podemos ver un
programa que escribe por pantalla los primos del 1 al 100 usando las sentencias if, while y for.
Matlab incorpora una serie de funciones para resolver ecuaciones diferenciales ordinarias. Si
se trata de un problema rígido deberíamos usar: ode15s, ode23s, ode23t, u ode23tb, si por el
contrario se trata de un problema sin rigidez: ode113, ode23 y ode45. Para saber mas de sus
funciones consultar la ayuda de Matlab o bibliografía recomendada.
Ejemplos:
>> feval (‘cos, [0 pi/3 pi]) % para evaluarlo en varios puntos debemos darlo como un vector
>> feval (@cos, [0 pi/3 pi]) % es lo mismo que lo anterior, da igual comillas que el @
>> fminbnd (@sind,0,360) % valor del dominio donde el valor toma el mínimo.
>> fzero (‘sind’, 100) % l valor más próximo a 100 donde la función seno vale cero
>> quad (‘sin’,0, pi) % integral definida del seno desde (hasta pi
Si tenemos un fichero *.m, lo primero que debemos hacer es asegurarnos de que sea una
función, para ello en la primera línea del fichero debe aparecer:
Function nombre (el nombre de la función debe coincidir con el nombre del fichero)
Ejemplo
Y (t + h) = y(t)+hy’(t)
ALGORITMO:
h=0.1;
n=0.5/h;
y(1)=0.5;
x=0:h:0.5;
fpr i=1:n;
dy(i)=-2*x(i)-y(i);
y(i+1)=y(i)+h*dy(i);
end
y1=-3*exp(-x)-2*x+2;%solucion analitica
plot(x,y,’r’*,x,y1,’o’); % create the plot
xlabel(’x); % label the x-axis
ylabel(’ function f(x)’); % label the y-ax’
title(’ y1=3*exp(-x)-2*x+2’);
grid
PRACTICA 1
36. Diseñe un programa que permita ingresar sueldos y categorías (a,b,c,d) de un grupo de
trabajadores de una empresa enseguida incrementar el sueldo en un.
Solución
37. Elabore un programa para entrevistar a un grupo de personas sobre sus preferencias
electorales entre los candidatos a y b. Al final el programa debe reportar el numero de
personas que prefieren al candidato b. Con sus porcentajes correspondientes.
Solución
Solución
Solución
Solución
45. Dado tres números determinar si la suma de cualquier pareja de ellos es igual al tercer
número, si se cumple esta condición, escribir “iguales” y en caso contrario escribir “distinto”.
Solución
Las horas que pasan de 35 horas se pagan a 1.5 veces la tarifa normal
Solución