Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Archivos m.
En el momento de ejecutar una aplicación en alguna área de interés, a veces es necesario realizar
varias secuencias de algunas operaciones, algunas de ellas en forma repetida, lo cual resulta
sumamente tedioso. Lo cual puede ser hecho por un programa , que desde luego debe estar bien
estructurado, y entendible por la computadora. Para ello se usan los ficheros script, también llamado
archivos .m
Un fichero script es un conjunto de sentencias u órdenes que se ejecutan en forma secuencial. En
algunos casos debido a la estructura misma del programa se llamara función.
Para que estos programas sean coherentes y los pueda leer el programa Matlab, deben seguir un
orden lógico. Estos ficheros tienen extensión m. y se pueden editar y/o ejecutar las veces que sea
necesario.
En algunos casos es necesario que el programador ingrese algunos datos para que el programa
funcione. Estos deberán ser ingresados por teclado posiblemente, y en algún formato adecuado.
Para esto hay comandos adecuados.
_ Para comprobar los archivos .m que tiene en la carpeta de trabajo de MATLAB pruebe la orden
what.
_ Para saber la carpeta de trabajo que MATLAB está usando existe la orden pwd.
1
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
_ Para saber la lista de todos los archivos en la carpeta de trabajo de MATLAB pruebe la orden dir.
Aparecerán los archivos de tipo .m y también los de otros tipos.
- Con el comando cd, se muestra el directorio de trabajo actual.
>> what
M-files in the current directory C:\Users\Malca\Documents\MATLAB
DistPaL curva3d05 datos prom
curva3d01 curva3d06 dfun prom_2
curva3d02 curvar3 ejemplo01 prom_3
curva3d03 curvasR3 ejemplo4_2 prommult5
curva3d04 curvatemp fun solcuad
>> pwd
ans = C:\Users\Malca\Documents\MATLAB
>> dir
. curva3d04.m datos.asv prom.m
.. curva3d05.m datos.m prom_2.m
DistPaL.asv curva3d06.m datos.xlsx prom_3.m
DistPaL.m curvar3.asv datos_lluvia.xls prommult5.m
curva3d01.m curvar3.m dfun.m solcuad.m
curva3d02.m curvasR3.asv ejemplo01.m
curva3d03.asv curvasR3.m ejemplo4_2.m
curva3d03.m curvatemp.asv fun.asv
curva3d04.asv curvatemp.m fun.m
>> cd
C:\Users\Malca\Documents\MATLAB
Ahora crearemos un programa, para ello abriremos un archive Nuevo, de tipo m-file, segun lo
indicado en los siguientes graficos.
2
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Para ello lo primero a hacer es abrir un archivo m, e ir escribiendo en el. La primera parte comprende
un breve comentario sobre lo que hace el programa, estas líneas siempre van precedidas del símbolo
de porcentaje (%), lo cual le indica a MatLab que no debe ejecutarse.
Si queremos visualizar ello basta con llamar al programa precedido del comando help.
solcuad.m Ejecucucion
% programa que resuelve una >> solcuad
ecuación cuadrática sol_1 = 1.2899
% 5x2-8x+2=0 sol_2 = 0.3101
>> help solcuad
sol_1=(8+sqrt(8^2-4*5*2))/10 programa que resuelve una
sol_2=(8-sqrt(8^2-4*5*2))/10 ecuación cuadrática
5x2-8x+2=0
>>
3
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Ejemplo: En el siguiente caso se construirá una función, la cual tiene una pequeña diferencia en su
estructura que contiene una línea adicional, que será explicada con mayor detalle en el siguiente
acápite.
Se creara la función: y = f (x)= x3 + 5x2 - 8x + 4 . Luego de lo cual se podrá evaluar, graficar y hacer
algunas cosas más propias de las funciones matemáticas.
fun.m Ejecucucion
function y=fun(x) >> fun(3),fun(1),fun(7),fun(13)
ans = 34
% programa que calcula el valor ans = 0
de ans = 438
% una función dado el valor de x. ans = 2604
>>
y=x.^3+3*x.^2-8*x+4; >> x=-6:0.1:5;
>> y=fun(x);
>> plot(x,y)
>>
>> help fun
programa que calcula el valor de
una función dado el valor de x.
>>
200
150
100
50
-50
-100
-6 -4 -2 0 2 4 6
4
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
VARIABLES GLOBALES
Recuerde que las variables escritas en un archivo script (programa), se ejecutan como si estuvieran
en la ventana de comandos, salvo las que están en un ficheros tipo fuction.
Cuando se ejecuta un fichero script, las variables utilizadas en los cálculos dentro del fichero deben
tener valores asignados previamente en el mismo script. Esta asignación se puede hacer de tres
formas:
- Variable definida y asignada en el fichero script.
- Variable definida y asignada en la ventana de comandos.
- Variable definida y asignada en el fichero script, pero luego se cambia en la ventana de
comandos
Ejemplo: Ahora presentaremos un programa que halla el puntaje promedio de varias jugadas en un
casino.
prom.m Ejecución
% este programa calcula el >> prom
promedio Puntuacion_Media =
% de un conjunto de jugadas 82.5000
j1=80; >> help prom
j2=85; este programa calcula el
j3=75;
promedio
j4=90;
de un conjunto de jugadas
Puntuacion_Media=(j1+j2+j3+j4)/4
>>
5
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Prom_2.m
% Calculo del promedio de cuatro jugadas
% los valores se ingresan por la ventana de
comandos
% con las variables j1, j2, j3 y j4
Puntuacion_Media=(j1+j2+j3+j4)/4
Ejecución en MatLab
>> clear % para limpiar memoria de variables pre asignadas
>> prom_2
??? Undefined function or variable
'j1'.
6
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Al ejecutar este comando se muestra en la ventana de comandos el mensaje indicado, luego del cual
el usuario ingresara el valor de la variable en forma adecuada.
Ejemplo: Igual al caso anterior, se hallara el valor promedio de un conjunto de puntajes de jugadas
en un casino.
Prom_3.m
% este programa calcula el promedio
% de un conjunto de tres jugadas
% las cuales se ingresan en la ventana de
comandos
% usando el comando input
j1=input('Ingrese la primera puntuación:')
j2=input('Ingrese la segunda puntuación:')
j3=input('Ingrese la tercera puntuación:')
j4=input('Ingrese la cuarta puntuación:')
Puntuacion_Media=(j1+j2+j3+j4)/4
Ejecucion en MatLab
>> prom_3
Ingrese la primera puntuacion:87
j1 = 87
Ingrese la segunda puntuacion:98
7
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
j2 = 98
Ingrese la tercera puntuacion:67
j3 = 67
Ingrese la cuarta puntuacion:82
j4 = 82
Puntuacion_Media = 83.5000
>> help prom_3
este programa calcula el promedio
de un conjunto de tres jugadas
las cuales se ingresan en la ventana de comandos
usando el comando input
>>
8
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Ejemplo:
>> disp('Hola a todos')
Hola a todos
>> A=[1 7 -2;4 -5 6;8 5 -9]
A=
1 7 -2
4 -5 6
8 5 -9
>> disp(A)
1 7 -2
4 -5 6
8 5 -9
>> disp('La matriz buscada es:')
La matriz buscada es:
>> disp(A)
1 7 -2
4 -5 6
8 5 -9
>> B=[1 7 -2]
B = 1 7 -2
>> disp(['la matriz buscada es:',num2str(B)])
la matriz buscada es:1 7 -2
>>
Ejemplo:
>> x=[1:10]';
>> P=[x x.^2 x.^3];
>> disp(' numero cuadrado cubo'),disp(P)
numero cuadrado cubo
1 1 1
2 4 8
3 9 27
4 16 64
9
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
>>
Ejemplo
>> disp(['La ','matemática ','es ','la ','madre ','de ','todas ','las ','ciencias'])
La matemática es la madre de todas las ciencias
>> disp(['La','matematica','es','la','madre','de','todas','las','ciencias'])
Lamatematicaeslamadredetodaslasciencias
>> disp(['La ','matemática ','es ','la ','madre ','de ','todas ','las ','ciencias'])
La matemática es la madre de todas las ciencias
>> disp(['Aritmetica';'Algebra';'Geometria';'Analisis';'Discreta'])
??? Error using ==> vertcat
CAT arguments dimensions are not consistent.
>> disp(['Aritmetica';'Algebra ';'Geometria ';'Analisis ';'Discreta '])
Aritmetica
Algebra
Geometria
Analisis
Discreta
>>
En la última línea de los comandos las palabras debían tener la misma longitud, de 10 letras,
incluyendo espacios.
Ejemplo: En este programa hallaremos el promedio de los primeros 20 enteros positivos múltiplos
de 5.
Solución:
Prommult5.m
% en el ejemplo se crea un vector
% con los 20 primeros múltiplos de 5
% y luego se halla el promedio de ellos
r=[1:20];
z=5*r;
disp('Los veinte múltiplos de 5, son:')
disp(z)
disp(' ')
disp('el valor promedio es')
prom=sum(z)/norm(z);
disp(prom)
Ejecución en MatLab:
>> prommult5
Los veinte múltiplos de 5, son:
Columns 1 through 12
5 10 15 20 25 30 35 40 45 50 55 60
10
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Columns 13 through 20
65 70 75 80 85 90 95 100
el valor promedio es
3.9199
>>
Ejemplo: Mostrar una tabla con los n primeros enteros positivos, sus cuadrados y sus cubos.
Solución:
Ejemplo4_2.m
% Este programa crea una tabla de los
primeros n números enteros positivos
% sus cuadrados y sus cubos
n=[1:5]';
cuadrado=n.^2;
cubo=n.^3;
disp(' n n^2 n^3')
tabla=[n,cuadrado,cubo];
disp(tabla)
Ejecución en MatLab:
>> ejemplo4_2
n n^2 n^3
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
El comando fprintf
Este comando visualiza salidas de programas en la pantalla, a diferencia del disp., aquí se puede dar
algún formato a la presentación de los datos.
Visualizando mensajes de texto:
fprintf(‘Mensaje en forma de cadena’)
ejemplo02.m
%ahora tenemos un programa que
obtiene cuadrados y cubos
n=[1:5]';
cuadrado=n.^2;
cubo=n.^3;
disp(' n n^2
n^3')
tabla=[n,cuadrado,cubo];
disp(tabla)
fprintf('ahi tenemos la relación de
cuadrado y cubos')
11
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
de Matlab:
>> prog01
n n^2 n^3
1 1 1
2 4 8
3 9 27
Los elementos del formato para los datos, son cuatro algunos opcionales otros obligatorios: -
5.2f
El primero llamado flag o bandera (opcional)
Símbolo Descripción
- Justificación izquierda dentro del campo
+ Visualiza el carácter del signo (+ ó -) delante del
numero
0 Añade ceros si el numero es más pequeño que
el campo
Lo segundo es el ancho del campo, que corresponde al primer número (5 en el ejemplo),el cual nos
indica el menor número de dígitos de la visualización. (Opcional)
12
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Aquí va un ejemplo en el cual hay insertados varios valores numéricos, dentro del texto.
ej04.m
% tenemos un conjunto de doce datos de lluvia en miles de litros,
en forma
% mensual. En la amazonia peruana
%p representa el valor promedio de las lluvias
D=[286 253 254 305 274 203 165 190 161 228 224
280]
m=min(D);
M=max(D);
S=sum(D);
P=mean(D);
fprintf('\nEl valor medio de las lluvias es %6.2e mensual.\n',P)
13
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
La ejecución en Matlab
>> ej04
D = 286 253 254 305 274 203 165 190 161 228 224
280
El valor medio de las lluvias es 2.35e+002 mensual.
Ejemplo adicional
ej06.m
% archivo ejecutable de nombre: ejem06.m
% uso de los comandos de entrada por teclado, y salida por
14
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
pantalla.
w=[1:10;sqrt(1:10)]
fprintf('Un entero es %g y su raíz cuadrada es %g \n',w)
z=[1:10;sqrt(1:10);(1:10).^2;(1:10).^3]
fprintf(' n=%g sqrt(n)=%g n^2=%g n^3=%g \n',z)
z=[1000555:1000560;sqrt(1000555:1000560)]
fprintf('n=%2.3g sqrt(n)=%1.10g\n',z)
fprintf('n=%2.6g sqrt(n)=%1.10g\n',z)
fprintf('n=%2.6g sqrt(n)=%4.10g\n',z)
La ejecución en Matlab
>> malca
cual es tu nombre: amado
tus apellidos son: malca villalobos
de que orden son las matrices cuadradas A y B: 4
ingrese la matriz A : [1 2 3 4;3 5 1 7;6 1 3 5;7 0 5 1]
A=
1 2 3 4
3 5 1 7
6 1 3 5
7 0 5 1
ingrese la matriz B : [9 2 3 4;3 5 8 7;1 1 3 5;7 0 5 0]
B=
9 2 3 4
3 5 8 7
1 1 3 5
7 0 5 0
la suma A+B, la resta A-B es :
10 4 6 8
6 10 9 14
15
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
7 2 6 10
14 0 10 1
-8 0 0 0
0 0 -7 0
5 0 0 0
0 0 0 1
El producto A*B, la division A/B es :
46 15 48 33
92 32 87 52
95 20 60 46
75 19 41 53
w= Columns 1 through 10
1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000
8.0000 9.0000 10.0000
16
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
z = 1.0e+003 *
z = 1.0e+006 *
n=1e+006 sqrt(n)=1000.277462
n=1e+006 sqrt(n)=1000.277961
n=1e+006 sqrt(n)=1000.278461
n=1e+006 sqrt(n)=1000.278961
n=1e+006 sqrt(n)=1000.279461
n=1e+006 sqrt(n)=1000.279961
n=1.00056e+006 sqrt(n)=1000.277462
n=1.00056e+006 sqrt(n)=1000.277961
n=1.00056e+006 sqrt(n)=1000.278461
17
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
n=1.00056e+006 sqrt(n)=1000.278961
n=1.00056e+006 sqrt(n)=1000.279461
n=1.00056e+006 sqrt(n)=1000.279961
n=1.00056e+006 sqrt(n)=1000.277462
n=1.00056e+006 sqrt(n)=1000.277961
n=1.00056e+006 sqrt(n)=1000.278461
n=1.00056e+006 sqrt(n)=1000.278961
n=1.00056e+006 sqrt(n)=1000.279461
n=1.00056e+006 sqrt(n)=1000.279961
>>
donde:
num: Es una matriz de tipo numérico en el cual serán guardados todos los datos numéricos
encontrados dentro de la hoja y rango especificado.
text: Matriz de tipo celda donde se guardaran todos las cadenas que sean encontradas dentro de la
hoja y rango especificado. Cada cadena se guarda en una celda dentro de la matriz.
NombreArchivo: El nombre o ruta del archivo a leer. Este parámetro debe ser una cadena.
18
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
19
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
>> [C,D]=xlsread('datos.xlsx','hoja2','c6:j8')
C=
1 2 3 4 5 6 7
1 4 9 16 25 36 49
1 8 27 64 125 216 343
D=
'numero'
'cuadrado'
'cubo'
>>
>> xlsread('datos.xlsx','hoja2','c6:j8')
ans =
1 2 3 4 5 6 7
1 4 9 16 25 36 49
1 8 27 64 125 216 343
>>
Lo primero que debemos conocer es la función y la sintaxis necesaria para realizar esta operación;
Esta se llama xlswrite y su sintaxis es la siguiente:
xlswrite( NombreArchivo, Datos )
Donde:
Estado= regresa 1 cuando la operación de escritura ha sido un éxito, 0 en caso contrario.
NombreArchivo: El nombre o ruta del archivo al que se escribirá, si no se escribe la ruta completa,
tomara por deafult que el archivo se encuentra en el current directory, si el archivo no existe lo
creará. Este parámetro debe ser una cadena.
Datos: Son los datos que se escribirán en el archivo, pueden ser numéricos o caracteres.
Hoja: Es la hoja en la que se escribirá, por default Hoja1, este parámetro debe ser una cadena.
CeldaInicial: A partir de esta se empezara la escritura de los datos, este parámetro debe ser una
cadena.
20
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Archivo de excel
21
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Archivo de excel
22
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
EJEMPLOS ADICIONALES
El area de un triangulo
area.m
function [A] = area(a,b,c)
% Calcula el area de un triangulo
cualquiera
% se tienen las longitudes de los lados
a, b y c
% Ingreso: a,b,c: Longitudes de los
lados
% Salida: A: area del triangulo
%
p = (a+b+c)/2;
A = sqrt(p*(p-a)*(p-b)*(p-c));
La ejecución en Matlab
>> help area
Calcula el area de un triangulo cualquiera
se tienen las longitudes de los lados a, b y c
Ingreso: a,b,c: Longitudes de los lados
Salida: A: area del triangulo
>> area(5,7,12)
ans = 0
>> area(3,4,5)
ans = 6
>> area(3,4,50)
ans = 0 +6.1872e+002i
>> area(13,45,50)
ans = 282.3190
>>
F=zeros(1,n);
F(1)=1;
F(2) = 1;
for i = 3:n
F(i) = F(i-1) + F(i-2);
end
f = F(n);
23
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
La ejecución en Matlab
>> help Fib1
Retorna el n-esimo numero
de la Sucesion de Fibonacci.
1, 1, 2, 3, 5, 8, . . .
F(1)=1, F(2)=1,
F(n+2)=F(n+1)+F(n), si n entero positivo
>> Fib1(1)
ans = 1
>> Fib1(11)
ans = 89
>> Fib1(-11)
??? Attempted to access F(-11); index must be a positive
integer or logical.
Error in ==> Fib1 at 14
f = F(n);
>> Fib1(16)
ans = 987
>>
24
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
La ejecución en Matlab
>> Fib3(6)
ans = 8
>> Fib3(16)
ans = 987
>>
25
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
80
70
60
50
40
30
20
10
0
0 2 4 6 8 10 12
4. FICHEROS SCRIPT
PROBLEMAS
Nota: Además de los problemas que se proponen a continuación, todos los problemas del acápite
anterior se pueden resolver también utilizando ficheros script.
Los siguientes problemas deben ser resueltos creando un programa en un fichero script y
posteriormente ejecutándolo en la ventana de comandos.
1. Se ha diseñado sobre papel una copa cónica que tiene un volumen de 250 cm3. Determine el
radio r de la base y el área de la superficie S de este diseño para una serie de distintos bocetos de
copas que tienen de altura h de 5, 6, 7, 8 y 9 cm.
El cálculo del volumen V y el área superficial vienen dados por las formulas:
1 2
V= pr h S = p r r 2 + h2
3
r
x
24 pies
h
q q
6 pies
8º
2. En un cine, el ángulo q a partir del cual un espectador ve la película depende de la distancia x del
espectador a la pantalla. Para un cine de las dimensiones como las que se muestran en la figura
adjunta, calcule el ángulo q (en grados) para los espectadores que están sentados a distancias de
30, 45, 60, 75 y 90 pies de la pantalla.
3. La población de un determinado país es de 50 millones, cantidad que se duplicara
previsiblemente en 20 años. Calcule la población en 5, 10 y 15 años definiendo un vector t con tres
elementos y utilizando operaciones elemento a elemento para el cálculo. El crecimiento de la
26
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
w
q
A
5. Escriba un fichero script que calcule el balance de una cuenta de ahorros al final del año, durante
10 años. La cuenta tiene un capital inicial de $ 1000 y un interés de 6,5% que produce beneficios
anualmente. Visualice la información en una tabla.
Para un capital inicial A, y una tasa de interés r, el balance B, después de n años, viene dado por la
n
æ ö
expresión: B = Açç1 + r ÷÷
çè 100 ø÷
6. La velocidad v y la distancia d, en función del tiempo, de un coche que tiene una aceleracion
constante a, vienen dados por: v (t )= at y d (t ) = 1 at 2
2
Determine v y d para cada segundo, durante 10 segundos, para un coche con una aceleración a =
1,55 m/s2. Muestre los resultados en una tabla de tres columnas en la cual la primera sea el tiempo
(s), la segunda sea la distancia (m) y en la tercera la velocidad (m/s).
7. Cuando se conectan diferentes resistencias en paralelo en un circuito eléctrico, la corriente a
través de cada una de estas resistencias viene dada por: in = vs / Rn donde in y Rn representan la
intensidad de corriente a través de la resistencia n y su valor de resistencia propiamente dicho,
siendo vs el potencial de la fuente. La resistencia equivalente, Req , en este caso, se puede calcular
a partir de la expresión: 1 1 1 1
= + +L +
Req R1 R2 Rn
La intensidad de la corriente de la fuente viene dada por is = vs / Re q , y la potencia Pn , disipada por
cada resistencia vienen dada por: Pn = vsin .
Escriba un programa, utilizando un fichero script, que calcule la corriente que pasa por cada
resistencia, asi como la potencia disipada por cada una, en un circuito como el que se muestra en la
figura con resistencias colocadas en paralelo. Cuando el fichero script se ejecute, este debe pedir al
usuario que introduzca el voltaje de la fuente, y después, en un vector, los valores correspondientes
a las resistencias. El programa debe mostrar en una tabla las resistencias en la primera columna, la
27
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
corriente que pasa por cada una de ellas en la segunda, y la potencia que disipan en la tercera
columna. Después, el programa debe mostrar también la intensidad de corriente de la fuente y al
potencia total del circuito.
45
34
20
26
60
10
+
Vs = 48 V -
8. La grafica de la función f (x)= ax3 + bx2 + cx + d pasa por los puntos (-2, -3.4), (-0.5, 5.525), (1,
16.7) y (2.5, 70.625). Calcule las constantes a, b, c y d escribiendo para ello un sistema de
ecuaciones con cuatro incógnitas, utilizando posteriormente MATLAB para resolver el sistema.
9. Cuando se llevan cálculos de estructuras es habitual trabajar con sistemas como el que se
muestra en la figura adjunta, consistente en una estructura compuesta de miembros o elementos
encadenados unos con otros por sus extremos, y donde lo que se trata es determinar las fuerzas
que inciden sobre cada elemento. Para la estructura que se muestra en la figura adjunta, las fuerzas
de los siete miembros vienen determinadas por las siguientes siete ecuaciones:
F1sen (36,87º)= - 2000 Fcos
1 (36,87º)+ F2 = 0
F3 + F1sen (36,87º)= 0 F4 - F1 cos (36,87º)= 0
- F3 - F5 sen (36,87º)= 3000 F6 + F5 cos (36,87º)- F2 = 0
F5 sen(36,87º)+ F7 = 0
Escribe las ecuaciones en forma matricial y utilice MATLAB para calcular las fuerzas de los
elementos de esta estructura. Una fuerza positiva implica una fuerza de tensión, mientras que una
fuerza negativa implica una fuerza de comprensión. Visualice los resultados en una tabla.
2000 N 3000 N
2 6
o o o
36,87º 36,87º
3 5 7
1
4
o o
28
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Considere una función usual, con una variable de entrada (independiente, y una variable de salida
(dependiente). Lo que varia es la cantidad de argumentos que pueden tener estas variables.
Ejemplo:
y f x 2 x 6 , una variable de entrada, y una de salida.
z F x, y 2 x 2 6 xy y 3 8 , dos variables de entrada, y una de salida.
u, v G x, y, z 2 x 5 y z, x 3 y 5z , tres variables de entrada, y dos de salida.
Para realizar estas funciones se usaran archivos script de extensión: ****.m. En el desarrollo de
estas funciones es posible usar funciones predefinidas por MatLab, también se pueden usar funciones
definidas por el usuario, las cuales deben ubicarse siempre en la carpeta de trabajo de MatLab.
Funciones definidas por el usuario; generalmente para representar una función que se usara en
varios programas adicionales.
x FUNCIÓN y f x
29
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Con esta función se podrían hacer muchas cosas, como: graficar, derivar, integrar, etc.
Veamos una de ellas, grafiquemos en el intervalo [-10,10]
350
300
250
200
150
100
50
-50
-10 -5 0 5 10
30
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Ejemplo: Cálculo de la altura y la distancia máximas que alcanzan un proyectil, cuando se lanza con
un ángulo determinado, y con una velocidad inicial dada.
funcuad.m
Function [hmax,dmax]=trayectoria(v0,theta)
% Cálculo de la altura y la distancia máximas, que alcanzan un
proyectil
%
% Los argumentos de entrada son:
% v0: velocidad inicial en m/s
% theta: ángulo en grados sexagesimales.
%
% Los argumentos de salida son:
% hmax: altura máxima en metros
% dmax: distancia máxima en metros
g=9.81;
v0x=v0*cos(theta*pi/180);
v0y=v0*sin(theta*pi/180);
thmax=v0y/g;hmax=v0y^2/(2*g);
ttot=2*thmax;dmax=v0x*ttot;
Grafico resultante
TRAYECTORIA DE UN PROYECTIL
250
200
ALTURA (m)
150
100
50
0
0 100 200 300 400 500 600
DISTANCIA (m)
31
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
32
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Cuerpo de la función
Aquí se tiene el código del programa mismo, que incluirá operaciones de entrada y/o salida, también
salida de gráficos si el problema lo amerita.
FUNCIONES EN LINEA
Se usan para realizar funciones simples, que también pueden tener una o más variables de entrada.
nombre inline 'exp resion matematica en forma de cadena '
nombre inline 'exp resion matematica ','arg1','arg 2', ,'arg n '
y f x 3x 2 6 x 8
Ejemplo: Considerando la función cuadrática:
>> G=inline('3*x+6*y+9*x*y-6','x','y')
G = Inline function:
G(x,y) = 3*x+6*y+9*x*y-6
>> G(1,2)
ans = 27
>> G(1,2),G(6,8)
ans = 27
ans = 492
>> [G(1,2), G(3,5), G(8,1), G(3,7)]
ans = 27 168 96 234
>> x=[1 2 3],y=[7 6 4]
x= 1 2 3
y= 7 6 4
>> G(x,y)
??? Error using ==> inlineeval at 15
Error in inline expression ==> 3*x+6*y+9*x*y-6
33
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Como aparece un error debemos redefinir la función, para cuando los argumentos son vectores o
matrices.
34
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
EL COMANDO “feval”
Este comando evalúa el valor de una función, en algún o algunos valores dados. La diferencia con
el caso anterior, está en que aquí se da la función, solo el nombre, y se evalúa en el valor dado.
variable = feval(‘nombre_funcion’,valor_argumento)
Ejemplo 01: Aquí vamos a definir una función H, y luego la evaluamos en x=1.
>> H=inline('exp(x.^2)./(1+x.^4)')
H = Inline function: H(x) = exp(x.^2)./(1+x.^4)
>> feval(H,1)
ans = 1.3591
>>
Ejemplo 02:
>> D=feval(inline('exp(x.^2)./(1+x.^4)'),1)
D = 1.3591
>> H=inline('exp(x.^2)./(1+x.^4)')
H = Inline function: H(x) = exp(x.^2)./(1+x.^4)
>> feval(H,1)
ans = 1.3591
>> G=inline('exp(x.^2)./(y+x.^4)')
G = Inline function: G(x,y) = exp(x.^2)./(y+x.^4)
>> feval(G,1,1)
ans = 1.3591
>> feval(G,4,5)
ans = 3.4046e+004
>> D=feval(inline('exp(x.^2)./(1+x.^4)'),1)
D = 1.3591
>> D=feval('sin',0)
D= 0
>> D=feval('sin',pi/6)
D = 0.5000
>> D=feval(inline('cos(x)+tan(x)'),pi/7)
D = 1.3825
35
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
6. Escriba una función que convierta las unidades de un par de torsión (fuerza que causa la rotación
de un objeto) de libras-pulgadas a newtons-metro. Utilice la siguiente línea de definición para la
36
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
10. Escriba una función que calcule la nota final de un estudiante a partir de la nota de su examen
final, sus dos exámenes parciales y de los cinco trabajos realizados durante el curso. Los exámenes
parciales se puntúan de 0 a 100, y cada uno es un20% de la nota final. El examen final tiene la
misma escala de puntuación, y es un 40% de la nota final. Los trabajos, sin embargo, puntúan de 0 a
10, y todos ellos en conjunto representan un20% de la nota final.
La función debe tener la siguiente definición: g = notasfinales (R) , donde la entrada será una matriz
R que contenga en cada fila las notas de cada estudiante. Además por cada fila, se tendrá 8
columnas que representarán las notas de los trabajos (las cinco primeras), la nota de los dos,
37
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
exámenes parciales (las dos siguientes) y la nota del examen final (la última columna) de cada
estudiante. La salida de la función será un vector columna g con la nota final del curso. Cada fila de
este vector será la nota final del estudiante cuyas notas se relacionan con la correspondiente la fila
de la matriz R .
La función debe usarse para calcular las notas finales de cualquier número de estudiantes. Para el
caso de un solo estudiante, la matriz R tendrá una sola fila. Aplique esta función en los siguientes
casos:
a) Utilice la Ventana de Comandos para calcular la nota de un estudiante con las siguientes
calificaciones: 10, 5, 8, 7, 9, 75, 87, 69.
b) Escriba un fichero script que pida al usuario las notas de los estudiantes y las almacene en un
array (cada estudiante en una fila). El programa debe calcular seguidamente las notas finales
utilizando la función notasfinales . Ejecute el fichero script en la Ventana de Comandos para
calcular las notas finales de los siguientes cuatro estudiantes:
Estudiante A: 7, 9, 5, 8, 10, 90, 70, 85
Estudiante B: 6, 4, 7, 0, 7, 60, 71, 50
Estudiante C: 5, 9, 10, 3, 5, 45, 75, 80
Estudiante D: 8, 8, 7, 7, 9, 82, 81, 88
11. Cuando se conectan n resistencias en paralelo, su resistencia equivalente REq viene
determinada por:
1 1 1 1
...
REq R1 R2 Rn
Escriba una función que calcule REq . Utilice la siguiente definición: REQ = req (R) , donde la
entrada será un vector en el cual cada elemento representa un valor de la resistencia, y la salida
será el valor de la resistencia equivalente REq . Utilice esta función para calcular la resistencia
equivalente de las siguientes resistencias en paralelo:
50, 75, 300, 60, 500, 180 y 200
12. Escriba una función que proporcione un número entero aleatorio en un rango concreto
especificado a partir de dos números. Utilice para ello la siguiente definición de función:
n = r a n d i n t (a,b) , donde los dos argumentos de entrada a y b son los números que determinan
el rango, y la salida será el número aleatorio calculado n .Utilice posteriormente está función en la
Ventana de Comandos para:
Generar un número aleatorio entre 1 y 49
Generar un número aleatorio entre -35 y -2
13. El momento de inercia superficial I x0 de un rectángulo alrededor del eje x0 que pasa por el
1 3
Centroide viene determinado por I x0 bh . El momento de inercia alrededor del eje x paralelo
12
a x0 viene dado por I x I x0 Ad x2 , donde A es el área del rectángulo, y d x la distancia entre los
dos ejes.
38
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
b
w
x0 t
h
dx h
t
x
Escriba una función que calcule el momento de inercia superficial de una viga en forma de " I"
alrededor del eje que pasa por su Centroide (ver dibujo). Utilice para ello la siguiente definición de
función: I = I v i g a (w, h, t) . Las entradas de la función serán el ancho w , la altura h y el grosor t
del nervio y las pestañas de la viga. (El momento de inercia del área compuesta se obtiene
dividiendo el área en distintas partes y sumando el momento de inercia de cada una de ellas.)
Utiliza la función para calcular el momento de inercia de una viga en forma de "I" cuyas
dimensiones son w 200 mm, h 300 mm y t 22 mm.
14. La representación bidimensional del estado de tensión en un punto de un material cargado
queda definido por las tres componentes de la tensión xx , yy , xy .Las tensiones normales máxima
y mínima (tensiones principales) en el punto, max y min , se calculan a partir de las componentes
min 2 2
Escriba una función que calcule las tensiones principales a partir de las componentes de la tensión.
Utilice para ello la siguiente línea de definición de función:
Smax,Smin TensionPrincipal (Sxx,Syy,Sxy) . Los argumentos de entrada serán las tres
componentes de la tensión, y la salida las tensiones máxima y mínima.
Utilice posteriormente esta función para calcular las tensiones principales para los siguientes
estados de tensión:
xx 150 MPa, yy 40 MPa y xy 80 MPa
xx 12 ksi, yy 16 ksi y xy 7 ksi.
15. En un filtro paso-bajo (filtro que pasa señales de bajas frecuencias), la relación de voltajes viene
determinada por:
V 1
RV 0
Vi 1 RC
2
39
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Escriba una función que calcule la relación de voltajes. Utilice para ello la siguiente línea de
definición: RV = pasobajo (R, C, w) . Los argumentos de entrada son el valor de la resistencia R
en (ohmios), la capacidad del condensador C en F (faradios) y la frecuencia w de la señal de
entrada en rad/s. Diseñe la función de forma que w pueda ser un vector.
Escriba un fichero script que utilice la función pasobajo para generar un gráfico RV en función de
,102 106 rad/s . El gráfico debe tener escala logarítmica en el eje horizontal . Cuando se
ejecute el fichero script, éste debe pedir al usuario que introduzca los valores de R y C . Etiquete
los ejes convenientemente y ejecute el script para los valores R 1200 y C 8 F .
16. En un filtro paso-banda (filtro que pasa señales con frecuencias dentro de un cierto rango), la
relación de voltajes viene determinada por:
V0 RC
RV
Vi 1 2 LC RC
2 2
40
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Un programa en MatLab, es una secuencia de instrucciones lógicamente ordenadas, que le indica al programa en forma
detallada todo lo que debe hacer. Si le indicamos algo que no es coherente matemáticamente, obviamente generara un
error.
En un programa por lo general hay que tomar algunas ‘decisiones’, que la asume el computador, para ello hay que darle
la orden adecuada. Así vamos a tener diferentes tipos de instrucciones:
Operadores relacionales
Operadores lógicos
Sentencias condicionales
Sentencias de iteración
Ficheros de función
Programa principal
Subprogramas
OPERADORES RELACIONALES
Estos son un conjunto de operadores básicos, con los cuales se construye cualquier expresión lógica, la cual arroja el
valor “1” si la expresión es verdadera, y genera el valor “0” si al expresión es falsa. Estas expresiones nos ayudan a tomar
decisiones.
Considere los siguientes valores de las variables:
>> x=4,y=5,z=8,w=-6
x= 4
y= 5
z= 8
w = -6
>>
Operador Descripción Tecla rápida Ejemplo
relacional:
Menor que Alt 60 >> x+y<8
< ans = 0
Mayor que Alt 62 >> z+y>w
> ans = 1
Menor o igual que Alt 60, alt 61 >> 2*x+3*y<=38+w
<= ans = 1
Mayor o igual que Alt 62, alt 61 >> x-z+y>=w
>= ans = 1
Igual a Alt 61, alt 61 >> 5*x-z==18+w
== ans = 1
Diferente de Alt 126, alt 61 >> x+y+z+w~=11
~= ans = 0
Notas:
01) El signo “=”, solo asigna un valor, a diferencia de el signo”==” que compara.
41
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
02) El resultado de la comparación será 1, cuando sea verdadero, y 0 cuando sea falso.
>> B=A>=5
>> C=[11 12 44;51 61 71;93 86 44]
>> D=C+5
>> C=[21 -12 44;55 71 71;83 96 54]
>> B==C, D~=B
>> X=B==C, Y=D~=B, Z=C<=D
Otro ejemplo, en el que vamos a comparar los elementos de una matriz con el numero más pequeño de las maquina:
eps = 2.2204e-16
>> A=[2 3 6 -8 0 5 ]
A = 2 3 6 -8 0 5
>> abs(A)<eps
ans = 0 0 0 0 1 0
>>
En MATLAB los operadores relacionales pueden aplicarse a vectores y matrices, y eso hace que
tengan un significado especial. Por ejemplo, dada una matriz A la comparacion abs(A)<eps genera
una matriz de 0's y 1's con el mismo tamaño de A. El elemento (i; j) de dicha matriz es 1 si |Aij| <
eps, siendo eps el epsilon de la maquina (=2.204e-16).
>> A=[-1 2 0; 0 -1 -3; 1 -1 0]
A=
-1 2 0
0 -1 -3
1 -1 0
>> B=abs(A)<eps
B=
0 0 1
1 0 0
0 0 1
>>
42
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
ans = 1
>>
Así pues, la sentencia any(any(abs(A)<eps)) se puede utilizar como una condición. Será verdadera
si y solo si algún elemento de A es, en modulo, más pequeño que eps. En caso contrario es falsa.
Hay un operador lógico similar: all. Responde true si todos los elementos del vector son distintos de
cero; en caso contrario, responde false. Con la matriz A de más arriba:
>> all(A)
ans = 0 1 0
>>
En efecto, la _unica columna de A con todos sus elementos distintos de cero es la segunda. Pero
como ninguna columna de A tiene todos sus elementos menores que eps:
>> all(abs(A)<eps)
ans = 0 0 0
>>
Vemos en estos ejemplos que al igual que en otros lenguajes de programación, si una comparación
se cumple el resultado es 1 (true), mientras que si no se cumple es 0 (false). Recíprocamente,
cualquier valor distinto de cero es considerado como true y el cero equivale a false. Cuando los
operadores relacionales de MATLAB se aplican a dos matrices o vectores del mismo tamaño, la
comparación se realiza elemento a elemento, y el resultado es otra matriz de unos y ceros del
mismo tamaño, que recoge el resultado de cada comparación entre elementos. Por ejemplo:
43
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
>> A
A=
1 2
0 3
>> isfinite(A)
ans =
1 1
1 1
>> isnumeric(A)
ans = 1
>> isreal(A)
ans = 1
>> isvector(A)
ans = 0
>>
OPERADORES LÓGICOS
Nom Tecla Ejemplo
Operador Descripción
bre rápida
& y La conjunción Alt 38 >> (6<9 & 0==7-6)+~(5>=3 & 7~=8-1)
44
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
ans = 1
La disyunción Alt 124 >> (4|-8)+(6&0)+(~(7>9)|(5==-8))
| o inclusiva ans = 2
La negacion Alt 126 >> ~0+~5+~(-7)
~ no ans = 1
Verdad si cualquiera de los
any elementos de un vector es no cero
Verdad si todos los elementos de un
all vector son no cero
Algunos ejemplos
>> x=[-1 1 1]; y=[ 1 2 -3];
>> x>0, y>0
ans =0 1 1
ans =1 1 0
>> x>0 & y>0
ans =0 1 0
>> x>0 | y>0
ans =1 1 1
>> xor(x>0,y>0)
ans =1 0 1
>> any(x>0)
ans =1
>> all(x>0)
ans =0
>>
Para terminar con los operadores lógicos estudiamos otro comando muy útil: find. Este comando
devuelve los indices (los lugares que ocupan) los elementos no nulos de un vector. Por ejemplo
>> x=[-3 1 0 -inf 0]
x =-3 1 0 -Inf 0
>> f=find(x)
f =1 2 4
Una primera aplicación es extraer de x los elementos no nulos:
>> x(f)
ans = -3 1 -Inf
Podemos extraer los elementos finitos
> x(find(isfinite(x)))
ans =
-3 1 0 0
o reemplazar las componentes negativas por cero:
>> x(find(x<0))=0
x=01000
Cuando find se aplica a una matriz se hace mirandola como un vector; es decir al vector A(:) que se
obtiene -recordemos- poniendo las columnas de A una debajo de otra. Por ejemplo
>> A=[ 4 2 16; 12 4 3], B=[12 3 1; 10 -1 7]
A=
4 2 16
45
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
12 4 3
B=
12 3 1
10 -1 7
>> C=A<B
C=
110
001
>> C(:)
ans =
1
0
1
0
0
1
>> find(A<B)
ans =
1
3
6
Otro posible uso de find con matrices es [i,j]=find(A) que devuelve vectores i y j con los índices de
las filas y columnas de A distintos de cero, respectivamente. Asi
>> [i,j]=find(A<B)
i=
1
1
2
j=
1
2
3
nos dice que en las posiciones (1; 1), (1; 2) y (2; 3) están los elementos de A que son menores que
los de B.
46
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Ejemplo de aplicación:
El vector:
T = [25 38 30 33 34 35 36 38 39 39 40 39 37 35 35 35 34 33 32 32 31 30 28 24]
Representa la temperatura en grados centígrados, por horas del dia 12 de Enero.
a) Indicar cuantas veces la temperatura fue mayor de 30 grados.
b) El número de horas que la temperatura estuvo entre 25 y 35 grados.
c) El número de horas que la temperatura no estuvo entre 20 y 30 grados.
∑𝑛 2
𝑖=1(𝑥𝑖 −𝑥̅ ) 𝑓𝑖
d) Hallar la temperatura promedio 𝑣 =
𝑛
Solución
47
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
>> sum(T>30)
ans = 19
>> find(T>30)
ans = Columns 1 through 14
2 4 5 6 7 8 9 10 11 12 13 14 15 16
Columns 15 through 19
17 18 19 20 21
>>
Rpta: 30 veces, en las horas: 2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
48
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
PROGRAMACION EN MatLab
END : Determina hasta cual orden llega el efecto de if, for, y while. (Para ejemplos de su uso ver
if, while y for)
IF: Verifica si se cumple cierta condición, y de acuerdo a si se cumple o no realiza la acción que
se desee.
WHILE: Realiza una parte del programa mientras se cumpla alguna condición.
FOR: Muy parecido al While, pero utiliza un contador, es útil si se quiere repetir una parte del
programa un número determinado de veces.
CLEAR: Borra todas las variables de la memoria. Es recomendable usarlo al principio de todos
los programas. (simplemente escriba clear; al comienzo del programa)
PLOT: Sirve para obtener resultados gráficos en 2D.
DISP: Sirve para escribir texto de salida o vectores. de resultados.
INPUT: Se utiliza para que el programa pida valores de variables mientras se ejecuta.
49
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
SENTENCIAS CONDICIONALES
Sentencia Condicional: if – end
if condición
Sentencias
end
......üï
ïï Instrucciones
......ý
ï MatLab
......ïïïþ
50
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Instrucciones
End
Ejemplo: Decidir si un numero entero positivo ingresado por la ventana de comandos es múltiplo de
3 o de 5.
Solución
Ejemplo: Un trabajador tiene una remuneración básica como vendedor de 1 200 nuevos soles, pero si
las ventas en el mes son mayores a 50 000, tiene una bonificación adicional del 1% sobre la
diferencia. Indicar el salario para diferentes casos de ventas.
Solución
51
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Existe también la bifurcación múltiple, en la que pueden concatenarse tantas condiciones como se
desee, y que tiene la forma:
if condicion1
bloque1
elseif condicion2
bloque2
elseif condicion3
bloque3
else % opción por defecto, cuando no se cumplan las condiciones 1,2,3
bloque4
end
Donde la opción por defecto else puede ser omitida: si no esta presente no se hace nada en caso
de que no se cumpla ninguna de las condiciones que se han chequeado.
52
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Ejemplo: Se necesita calculare el volumen de agua en un tanque, con la forma que se indica en el
grafico
Diametro 44 m
rh
16 m
h
29 m
Diametro 20 m
SOLUCION: El volumen es igual
53
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
ìï 100p h 0 £ h £ 29
ïï
V (h) = ïí 4 æ3h 3
ö 4000p
ïï p çç - 47÷ ÷ - 29 < h £ 45
ïïî 3 çè 4 ÷
ø 3
Archivo: volumen.m
% programa que calcula el volumen de agua
% de un deposito cilíndrico-conico
% la entrada es el nivel del agua en m.
% La salida es el volumen de agua en m3.
h=input('indique el nivel del agua del tanque\n');
if (h<=29)
V=100*pi*h;
else
V=((4/3)*(((3*h/4)-47)^3))-(4000*pi/3);
end
fprintf('El volumen de es: %6.2f metros cubicos\n',V);
Ejecución en MatLab
>> volumen
indique el nivel del agua del tanque 20
El volumen de es: 6283.19 metros cubicos
>> volumen
indique el nivel del agua del tanque 25
El volumen de es: 7853.98 metros cubicos
>>
ìï x 0 £ x
Ejemplo: Hallando el valor absoluto de un numero. x = ïí
ïïî - x x < 0
Archivo: valorabs.m Ejecución en MatLab
function y=valorabs(x) >> valorabs(88)
% esta fumncion calcula el valor ans = 88
absoluto >> valorabs(-45)
% de un numero real x ans = 45
% donde el resultado es x, si es no >> valorabs(0)
negativo ans = 0
% y es -x si es negativo >>
if (x>=0)
y=x;
else
y=-x;
end
54
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Ejemplo: Determinar si un numero entero positivo es par o impar, con un enfoque: : if – elseif – else - end
55
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
if n<0 | n==0
disp('Introduce un número positivo');
elseif rem(n,2)==0
a=n/2;
else
a=(n+1)/2
end
Naturalmente la condición n<0 | n==0 podría sustituirse por la más compacta n<=0. Se ha escrito
de la forma expuesta para hacer uso de una condición con dos relaciones y un operador lógico.
56
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Sentencia: switch-case
Es otra estructura para el control de flujo de un programa. Esta sentencia proporciona un mecanismo para escoger y
ejecutar un grupo de instrucciones de entre varios grupos posibles.
Estructura lógica
57
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Ejemplo de aplicación:
Escribir un programa para convertir una expresión de longitud, que puede estar en m, dm, cm, mm, dam, hm, km,
pulgada, pie, yarda. En otro número equivalente en otra unidad indicada por el usuario.
SOLUCION:
Por cuestiones del espacio en la hoja, primero presentaremos la ejecución y luego el programa.
58
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Ejecución en MatLab
>> cambiounidad
Introduzca el valor de la distancia que hay que convertir: 3777
Introduzca la unidad actual de la distancia (m, cm, dm, mm, dam, hm, km): dm
Introduzca la nueva unidad para la distancia (m, cm, dm, mm, dam, hm, km): km
V=0.3777km
>> cambiounidad
Introduzca el valor de la distancia que hay que convertir: 6799
Introduzca la unidad actual de la distancia (m, cm, dm, mm, dam, hm, km): ham
Introduzca la nueva unidad para la distancia (m, cm, dm, mm, dam, hm, km): m
Horror, La unidad de entrada o la de conversión se ha tecleado en forma incorrecta\n
>> cambiounidad
Introduzca el valor de la distancia que hay que convertir: 98888888
Introduzca la unidad actual de la distancia (m, cm, dm, mm, dam, hm, km): mm
Introduzca la nueva unidad para la distancia (m, cm, dm, mm, dam, hm, km): km
V=98.8889km
>>
Programa en MatLab
59
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Archivo: cambiounidad.m
Vent=input('Introduzca el valor de la distancia que hay que
convertir:\n');
UnitEnt=input('Introduzca la unidad actual de la distancia (m, cm, dm,
mm, dam, hm, km):\n','s');
UnitSal=input('Introduzca la nueva unidad para la distancia (m, cm, dm,
mm, dam, hm, km):\n','s');
error=0;
switch UnitEnt
case 'm'
Vi=Vent;
case 'cm'
Vi=Vent/100;
case 'dm'
Vi=Vent/10;
case 'mm'
Vi=Vent/1000;
case 'dam'
Vi=Vent*10;
case 'hm'
Vi=Vent*100;
case 'km'
Vi=Vent*1000;
otherwise
error=1;
end
switch UnitSal
case 'm'
Vf=Vi;
case 'cm'
Vf=100*Vi;
case 'dm'
Vf=10*Vi;
case 'mm'
Vf=1000*Vi;
case 'dam'
Vf=Vi/10;
case 'hm'
Vf=Vi/100;
case 'km'
Vf=Vi/1000;
otherwise
error=1;
end
if error==1
disp('Horror, La unidad de entrada o la de conversión se ha tecleado
en forma incorrecta\n')
else
fprintf('V=%g%s\n',Vf,UnitSal)
end
Ejemplo05: Elabore un programa que pida la edad de una persona, y visualice lo siguiente
Si 0 £ edad < 6 , mostrar: infante
Si 6 £ edad < 12 , mostrar: niño
Si 12 £ edad < 18 , mostrar: adolescente
Si 18 £ edad < 25 , mostrar: joven
Si 25 £ edad < 60 , mostrar: adulto
Si 60 £ edad , mostrar: anciano
60
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Edad=menu('Indique su
edad:','0<=E<6','6<=E<12','12<=E<18','18<=E<25','25<=E<60','60<=E');
switch Edad
case 1
disp('Infante')
case 2
disp('Niño')
case 3
disp('Adolescente')
case 4
disp('Joven')
case 5
disp('Adulto')
case 6
disp('Anciano')
end
61
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
BUCLES o ITERACIONES
Los bucles o iteraciones se usan para controlar el flujo de un programa. En un bucle, la ejecución de
uno o varios comandos se repite varias veces consecutivamente. Cada una de estas repeticiones se
denomina paso o iteración.
En MatLab tenemos definido dos tipos de bucle:
Bucle while-end: El numero de iteraciones no se conoce al inicio del bucle, depende de que se
cumpla o no alguna condición.
En ambos casos se puede salir de estos bucles, antes de que acaben con el comando breack.
62
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
disp([x, sin(x)])
end
0.5236 0.5000
0.7854 0.7071
1.0472 0.8660
k
n
(- 1) k
Ejemplo: Calcular la suma de términos de la siguiente serie: åk= 1 2k
SOLUCION:
Programa: sumserie.m Ejecución en MatLab
% este programa calcula la suma de >> sumserie
términos ingrese el numero de términos de la
% de la serie: serie: 5
% Sum(k=1:n)((-1)^k)*k/(2^k)) la suma de los términos de la serie es: -
% a función suma 0.2813
% los n primeros números naturales >> sumserie
% el resultado es la suma de tales ingrese el numero de términos de la
números serie: 99
la suma de los términos de la serie es: -
n=input('ingrese el numero de 0.2222
términos de la serie: \n'); >> sumserie
s=0; ingrese el numero de términos de la
for k=1:1:n serie: 5
s=s+((-1)^k)*k)/(2^k); la suma de los términos de la serie es:
end 1.7813
fprintf('la suma de los términos de >>
la serie es: %5.4f \n',s)
Ejemplo: La función seno se puede aproximar usando la serie de Taylor. Como sigue:
k
¥
(- 1) x 2 k + 1
sen( x) = å , donde x esta en radianes
k = 1 (2k + 1)!
SOLUCION:
63
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
64
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Diagrama de flujo
for k=1:n
x(n)>0&(rem(x(n),3)==0
F | rem(x(n),8)==0)
V
x(n)<0 & x(n)>-10
F x(n) = 3*x(n)
x(n)= (x(n))^2
end
Archivo: cambiavector.m
for k=1:1:n
if x(k)>0 & ( rem(x(k),3)==0 | rem(x(k),8)==0 )
x(k)=3*x(k);
elseif x(k)<0 & x(k)>-10
x(k)=x(k)^2;
end
end
x
65
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Ejecucion en MatLab
>> cambiavector
Ingrese un vector con elementos enteros:
[1 5 9 0 -5 -30 64]
x = 1 5 27 0 25 -30 192
>> cambiavector
Ingrese un vector con elementos enteros:
[1 5 7 16 15 -20 -7 9 0 -5 -30 64]
x = 1 5 7 48 45 -20 49 27 0 25
-30 192
>>
Y por supuesto, se pueden encajar múltiples bucles for. . . end unos dentro de otros. El siguiente código
proporciona una matriz simétrica 5 x 5 con el elemento i/j en la posicion (i; j) para i >= j:
>> n=5; A=eye(n);
>> for j=2:n
for i=1:j-1
A(i,j)=i/j;
A(j,i)=i/j;
end
end
>> A
A=
1.0000 0.5000 0.3333 0.2500 0.2000
0.5000 1.0000 0.6667 0.5000 0.4000
0.3333 0.6667 1.0000 0.7500 0.6000
0.2500 0.5000 0.7500 1.0000 0.8000
0.2000 0.4000 0.6000 0.8000 1.0000
Ejemplo: Crear una matriz de orden m por n, donde el elemento i j este dado por la expresión:
ai j = 3i - 4 j
SOLUCION:
66
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Programa: creamatriz.m
% Creacion de una matriz de orden mxn
% Donde el elemento i j esta dado por
% a(i,j)=3i-4j
m=input('ingrese el numero de filas de la matriz ');
n=input('ingrese el numero de columnas de la matriz ');
A=zeros(m,n);
for k=1:1:m
for l=1:1:n
A(k,l)=3*k-4*l;
end
end
A
Ejecucion en MatLab
>> creamatriz
ingrese el numero de filas de la matriz 4
ingrese el numero de columnas de la matriz 5
A=
-1 -5 -9 -13 -17
2 -2 -6 -10 -14
5 1 -3 -7 -11
8 4 0 -4 -8
>> creamatriz
ingrese el numero de filas de la matriz 5
ingrese el numero de columnas de la matriz 8
A=
-1 -5 -9 -13 -17 -21 -25 -29
2 -2 -6 -10 -14 -18 -22 -26
5 1 -3 -7 -11 -15 -19 -23
8 4 0 -4 -8 -12 -16 -20
11 7 3 -1 -5 -9 -13 -17
>> creamatriz
ingrese el numero de filas de la matriz 0
ingrese el numero de columnas de la matriz 0
A = []
>>
Ejemplo: Construya el triangulo de Pascal como una matriz de orden n por n. Donde el elemento
a(1,j)=a(i,1)=1; a(i,j)= a(i,j-1)+a(i-1,j) para todo i>1, j>1.
Solución:
SOLUCION:
67
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Programa: matrizpascal.m
% Programa que construya el triangulo de Pascal
% como una matriz de orden n por n.
% Donde el elemento a(1,j)=a(i,1)=1
% a(i,j)= a(i,j-1)+a(i-1,j)
% para todo i>1, j>1.
68
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Este tipo de bucle se usa cuando hay necesidad de un proceso iterativo, pero se desconoce cuantos
pasos deben hacerse, generalmente está sujeto a condiciones que se hallan al ejecutar la solución del
`problema.
En algún caso será necesario del uso de algún comando que pare el programa en caso de que no se
halle la condición pedida.
Estructura lógica
while exp resion _ condicional
....ü
ïï Instrucciones
ý
....ïïþ de MatLab
end
Donde la expresión condicional puede ser una expresión vectorial o matricial. Las sentencias se siguen
ejecutando mientras haya elementos distintos de cero en condición; es decir, mientras haya algún o algunos
elementos true. El bucle se termina cuando todos los elementos de condición son false (es decir, cero).
Recomendaciones:
La expresión condicional del comando while debe incluir al menos una variable
Respecto a esta variable debe tener un valor asignado cuando se ejecute el comando while por
primera vez
La o las varibles de la expresión condicional deben cambiar entre la sentencia while y end, de otro
modo se tendría un bicle infinito
Para evitar un bucle infinito se puede usar el comando break
Un bucle infinito también se puede terminar con Ctrl + C 0 Ctrl + break
Ejemplo: En el siguiente ejemplo se ejecutan una serie de operaciones sobre un cierto número n mientras este
se mantenga mayor que 1. Concretamente, si n es par se divide por 2 y si es impar se multiplica por 3 y se le
suma 1:
while n>1
if rem(n,2)==0
n=n/2
else
n=3*n+1
end;
end;
¿Crees que este proceso tiene fin cualquiera que sea el valor de n? (Conjetura de Collatz, misterio de Siracusa,
problema de Kakutani, algoritmo de Hasse o problema de Ulam).
Ejemplo: A una variable x se le incrementa su valor inicial en 7, mientras que esta sea menor de 200.
69
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
SOLUCION:
Programa: incrementador.m
% Este programa incrementa un numero inicial en 7,
% mientras este sea menor que 200
x=input('Ingrese un numero: \n');
n=0;
while x<200;
x=x+7;
n=n+1;
end
fprintf('El nuevo valor es: %-3.2i \n',x)
fprintf('Se ha incrementado %-3i veces el siete\n',n)
Ejecucion en MatLab
>> incrementador
Ingrese un numero: 45
El nuevo valor es: 206
Se ha incrementado 23 veces el siete
>> incrementador
Ingrese un numero: 234
El nuevo valor es: 234
Se ha incrementado 0 veces el siete
>>
Ejemplo: Elaborar un programa que divida en tres partes un intervalo, y tome la parte intermedia
hasta que la longitud sea menor que 0.001
SOLUCION:
70
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Programa: trisecaintervalo.m
% Este programa divide en tres partes un intervalo
% y toma la parte intermedia
% hasta que la longitud sea menor que 0.001
a=input('Ingrese el lado izquierdo del intervalo: \n');
b=input('Ingrese el lado derecho del intervalo: \n');
if b-a > 0.001
while b-a>0.001;
a=(b+2*a)/3;
b=(a+b)/2;
end
fprintf('El lado izquierdo del nuevo intervalo es: %-3.5f
\n',a)
fprintf('El lado derecho del nuevo intervalo es: %-
3.5f\n',b)
else
fprintf('Los datos no generan un intervalo valido. &$####
\n')
end
Ejecucion en MatLab
>> trisecaintervalo
Ingrese el lado izquierdo del intervalo: 1
Ingrese el lado derecho del intervalo: 4
El lado izquierdo del nuevo intervalo es: 2.49977
El lado derecho del nuevo intervalo es: 2.50023
>> trisecaintervalo
Ingrese el lado izquierdo del intervalo: 5
Ingrese el lado derecho del intervalo: 2
Los datos no generan un intervalo valido. &$####
>>
Ejemplo: La función exponencial al ser expresada como una serie de Taylor, queda como sigue:
¥
xn x 2 x3 x 4 x5
x
e = å
n= 0 n!
= 1+ x + + + +
2! 3! 4! 5!
+L
Hallar el valor de e x , con los sumandos necesarios hasta que el ultimo sumando sea menor que
0.000001. Además la suma no debe pasar de 30 términos, si fuese el caso hay que indicar que se
necesitan más sumandos.
Hallar con este programa: e 2 , e- 4 , e10 y e 20
SOLUCION:
71
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Programa: seriexp.m
% Este programa calcula el valor de e^x con la Serie de
Taylor
% hasta que el ultimo termino sea menor que 0.00000l,
% o haya 30 términos como máximo
s=s+(x^n)/factorial(n);
n=n+1;
sn=abs((x^n)/factorial(n));
end
if n>=30
fprintf('Se necesitan mas de 30 terminos \n')
else
fprintf('El valor de exp(%f) es %-3.5f\n',x,s)
end
Ejecucion del programa
>> seriexp
Ingrese el valor de x: 2
El valor de exp(2.000000) es 7.38906
>> seriexp
Ingrese el valor de x: 21
Se necesitan mas de 30 terminos
>> seriexp
Ingrese el valor de x: 0
El valor de exp(0.000000) es 1.00000
>> seriexp
Ingrese el valor de x: 8
Se necesitan mas de 30 terminos
>> seriexp
Ingrese el valor de x: 5
El valor de exp(5.000000) es 148.41316
>>
El comando break se usa principalmente para terminar un posible bucle infinito; si esta dentro de un bucle, pero si esta en
un programa normal, termina el programa.
El comando “continue” lo que hace es terminar la iteración de un bucle y pasar a la siguiente iteración.
72
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
EJEMPLOS ADICIONALES
Ejemplo01. Usando el bucle for - end, hallar la raíz cuadrada de los primeros 20 números, y
presentarlos en una tabla de 20 por 2.
if n<0
disp('Error, ingreso un valor inadecuado ')
break
elseif n==0
fact=p;
else
for k=1:n
p=p*k;
end
fact=p;
end
Ejemplo03:METODO DE BISECCION
Considérese la ecuación f (x)= 0 , Donde la función f cumple las condiciones para aplicar el método de las tangentes
en cierto intervalo. La solución se da por un proceso iterativo:
ìï x1
ïï
í f ( xk )
ïï xk + 1 = xk - , k = 1, 2,3, L
ïïî f '( xk )
73
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
if abs(d)>tol
sol=[]
disp('El numero de iteraciones no es suficiente o el proceso diverge')
else
sol=x'
disp('El numero de iteraciones es:')
k
end
74
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
x(1)=x1;
k=1;
d=1;
while d>=tol & k<miter
x(k+1)=-exp(x(k));
d=abs(x(k+1)-x(k));
k=k+1;
end
disp(x')
fprintf('El numero de iteraciones es: %5.0f',k)
Ejemplo 05: En los meses de Enero a Diciembre del 2012, se registro un promedio de lluvia mensual :
286 253 254 305 274 203 165 190 161 228 224 280
Hallar el valor promedio en el año
El numero de meses en que la temperatura estuvo debajo de la media, y en qué meses se dio.
clear
lluvia=[286 253 254 305 274 203 165 190 161 228 224 280];
n=length(lluvia);
prom=sum(lluvia)/n;
D=zeros(1,n);
for k=1:n
D(k)=lluvia(k)>prom;
end
D
7. PROGRAMACION EN MATLAB
PROBLEMAS PROPUESTOS
1. Calcule las siguientes expresiones a mano, sin utilizar MATLAB . Utilice luego MATLAB para
comprobar que el resultado es correcto.
a) 5 8 3
b) y = 7 3 1 6 2
75
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
c) y = (7 3) 1 (6 2)
20
d) y 2 x 4 5 - 7
4
2. Sean a = 10 y b = 6. Calcule las siguientes expresiones a mano, sin utilizar MATLAB. Utilice luego
MATLAB para comprobar que el resultado es correcto.
a) y a b b
b
b) y a b
2
b
c) y a b
2
3. Sean v 4 2 1 5 0 1 3 8 2 y w 0 2 1 -1 0 -2 4 3 2 . Calcule las siguientes expresiones
a mano sin utilizar MATLAB. Utilice luego MATLAB para comprobar que el resultado es correcto.
a) v w
b) w v
4. A partir de los vectores v y w del ejercicio anterior, utilice operadores relacionados para crear un
vector compuesto por los elementos de w que sean mayores que los elementos de v
5. Calcule las siguientes expresiones a mano, sin utilizar MATLAB .Utilice luego MATLAB para comprobar
que le resultado es correcto
a) 5&-2
b) 8 216 5& 2
c) 4&0 8 410
6. La temperatura máxima diaria (en °F) en Nueva York y Anchorage, Alaska, durante el mes de enero de
2001 vienen dadas en los siguientes vectores (datos tomados del Ministerio Nacional de Meteorología y
Oceanografía de Estados Unidos).
TNY = 31 26 30 33 33 39 41 41 34 33 45 42 36 39 TANC = 37 24 28 25 21 28 46 37 36 20 24 31 34 40
37 45 43 36 41 37 32 32 35 42 38 33 40 37 36 51 50 43 36 34 41 42 35 38 36 35 33 42 42 37 26 20 25 31
Escriba un programa script que calcule:
a) La temperatura media en ese mes para cada ciudad.
b) El número de días que estuvo la temperatura de cada ciudad por debajo de la media.
c) El número de días, y a qué días del mes corresponden, en los cuales la temperatura de Anchorage fue
mayor que la temperatura de Nueva York.
d) El número de días, y a qué días del mes corresponden, en los cuales la temperatura fue igual en
ambas ciudades.
e) El número de días, y a qué días del mes corresponden, en los cuales la temperatura de ambas
ciudades se mantuvo por encima de 32°F (sin helar).
76
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
4e x 2 6 x 2
f ( x) x 2
2 x 2,5
( x 6,5)1/3 2,5 x 6
a) Escribiendo un fichero script que utilice bucles y sentencias condicionales.
b) Cuando una función f ( x) para utilizarla posteriormente en un fichero script.
8. Escriba un programa script que calcule las raíces reales de una función cuadrática ax 2 bx c 0 .
Llame al fichero raicescuad . Cuando el fichero se ejecute, éste debe pedir al usuario que introduzca los
valores de las constantes a, b y c . Para calcular las raíces de la ecuación , el programa calculará el
discriminante D :
D=b 2 4ac
Si D 0, el programa visualizará un mensaje del tipo: “La ecuación tiene dos raíces”, y los valores de las
raíces se visualizarán en la línea siguiente.
Si D =0, el programa visualizará un mensaje del tipo: “La ecuación tiene una raíz”, y el valor de la raíz se
visualizará en la línea siguiente.
Si D 0, el programa visualizará un mensaje del tipo: “La ecuación no tiene raíces reales”.
Ejecute el fichero script en la Ventana de Comandos tres veces para calcular las soluciones de las siguientes
ecuaciones:
a) 2 x2 8x 3 0
b) 15 x 2 10 x 5 0
c) 18 x 2 12 x 2 0
9. Utilice bucles para crear una matriz A de dimensión 4 x 7, en la cual el valor de cada elemento sea la
suma de sus índices (el número de la fila y el número de la columna de cada elemento). Por ejemplo, el valor
del elemento A (2,5) será 7.
10. Utilice bucles y sentencias condicionales para crear una matriz de dimensión 5 x 8, en la cual el valor
de cada elemento sea igual a la raíz cuadrada de la suma de los índices de cada elemento, siempre que el
elemento no se encuentre en una columna o fila par. El valor de un elemento que éste en una fila o columna
par será igual a la suma del cuadrado de los índices. (Los índices de un elemento de una matriz son el
número de fila y el número de columna que le corresponden.)
11. Escriba un programa (utilizando un bucle) que calcule la suma de los m primeros términos de la serie:
m
1
n 0
(1) n
2n 1
(n 0,1, 2,..., m)
Esta serie se denomina se denomina serie de Leibniz, y converge a / 4 . Ejecute el programa para m 10 y
m 500 . Compare posteriormente estos resultados con el valor exacto / 4 .
12. Sea el vector x 15 -6 0 8 -2 5 4 -10 0,5 3 . Escriba un programa que utilice sentencias
condicionales y bucles para calcular la suma de los elementos positivos del vector x .
13. Escriba un programa script que encuentre el menor número entero impar que sea divisible por 3, y
cuyo cubo sea mayor que 4000. Utilice un bucle que comience en 1 y se detenga cuando encuentre el
77
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
número que cumpla las condiciones anteriores. Finalmente el programa visualizará el mensaje: “El número
pedido es: ” , y visualizará seguidamente el número calculado.
14. Escriba una función que ordene los elementos de un vector de cualquier longitud, de mayor a menor.
Utilice la siguiente línea de definición de función: y = ordenar (x) . La entrada de la función será un vector x
de cualquier longitud, y la salida y será un vector que contendrá los elementos de x en orden descendente.
No se puede utilizar la función predefinida de MATLAB sort para este ejercicio. Cree su propia función y
pruébela con un vector de 14 elementos (enteros) generados aleatoriamente y distribuidos entre -30 y 30.
Utilice la función rand de MATLAB para generar el vector inicial.
15. Escriba una función que ordene los elementos de una matriz. Utilice la siguiente línea de definición de
función: B = ordenarmatriz (A) , donde A será una matriz de cualquier tamaño, y B será otra matriz del
mismo tamaño con los elementos de A ordenados de forma ascendente, fila por fila. De esta forma, los
elementos B (1,1) y B ( m, n ) serán, respectivamente, los elementos menor y mayor de la matriz ordenada.
Pruebe posteriormente está función en una matriz de dimensión 4 x 7, con los números enteros generados
aleatoriamente y distribuidos entre -30 y 30. Utilice la función rand de MATLAB para generar la matriz inicial.
16. Escriba un programa (fichero script) que calcule el coste de enviar un paquete en función de la
siguiente tabla de precios:
El programa debe pedir al usuario que introduzca el peso y el tipo de servicio. Seguidamente, el programa
visualizará el coste del servicio. Si se introduce un paquete que pese más de 50 libras para un servicio de
aire o tierra, el programa visualizará un mensaje del tipo: “No se realiza reparto por aire o tierra para
paquetes con peso superior a las 50 libras”. Si se introduce el peso de un paquete que supera las 10 libras de
peso para un servicio nocturno, el programa visualizará un mensaje del tipo: “No se realizan entregas
78
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
nocturnas para paquetes que pesen más de 10 libras”, Ejecute el programa e introduzca los valores 0,5 , 6,3 ,
20 y 50,4 libras para servicios de tierra y aire, así como 2, 8 , 1 y 13 libras para el servicio de reparto
nocturno.
17. Sea el vector x 1: 50 . Escriba un programa en un fichero script que borre del vector x aquellos
elementos que son divisibles por 3, 4 ó 5. Al final el programa debe mostrar el vector resultante.
18. Escriba una función MATLAB que calcule las coordenadas polares de un punto correspondiente a un
sistema de coordenadas cartesianas, en un plano de dos dimensiones. Utilice la siguiente línea de definición
de función para ello: theta radio = CartesianoApolar (x,y) Los argumentos de entrada serán las
coordenadas cartesianas x e y del punto, y los argumentos de salida serán el ángulo θ y la distancia radial
(radio) al punto en cuestión. El ángulo θ vendrá dado en grados, y su medida será relativa al eje x positivo, de
tal forma que sea un número positivo en los cuadrantes І, ІІ y ІІІ, y un número negativo en el cuadrante ІV.
Utilice posteriormente esta función para calcular las coordenadas polares de los puntos (15, 3), (-7, 12), (-17,
-9) y (10, -6,5).
19. Un deposito de gasóleo tiene la forma de un cilindro vertical rematado por sus dos extremos
hemisféricos, tal y como se muestra en la figura adjunta. El radio del cilindro y de los hemisferios es r 40 ,
y la longitud de la parte cilíndrica es 1,2 metros.
Escriba una función (definida de la forma: V = Vtanque (h) que calcule el volumen del depósito en
función de la altura h. Utilice posteriormente la función para representar un gráfico del volumen en
función de la altura, para 0 h 2 metros.
20. La velocidad en función del tiempo, de una partícula que se mueve a lo largo de una línea recta, se
representa en el gráfico adjunto y viene dada por las siguientes ecuaciones:
79
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
1, 4t 0 t 10 s
14 5sen( t 10 ) 10 t 25 s
10
v( x)
9 25 t 35 s
9
9 t 35 35 t 40 s
5
Escriba dos funciones MATLAB: una de ellas debe calcular la velocidad de la partícula en un instante t (utilice
la siguiente definición de función v = velocidad (t) , y la otra función deberá calcular la aceleración de la
partícula también en el instante t (utilice para ello la siguiente definición de función: a = aceleración (t)) .
Escriba posteriormente un programa, en un fichero script, que represente las gráficas de la velocidad y la
aceleración, en función del tiempo, de una partícula en movimiento (las dos gráficas deben aparecer en la
misma ventana gráfica). Para ello, dentro del fichero script, cree primero un vector t , para 0 t 40
segundos, y después utilice las funciones velocidad y aceleración para crear los vectores v y a , que se
utilizarán para generar la representación gráfica.
21. Una báscula se compone de una bandeja sujeta a una serie de muelles, tal y como se muestra en la
figura adjunta. Cuando se sitúa un objeto en la bandeja, ésta se mueve hacia debajo de forma que el peso
del objeto se puede calcular a partir del desplazamiento de la bandeja. Inicialmente ,solo los dos muelles
exteriores soportan el peso. Sin embargo, si el objeto es lo suficientemente pesado, la bandeja hará contacto
con el tercer muelle situado justo entre los otros dos exteriores.
80
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Para resolver una ecuación del tipo: E (x)= 0 , se usara el comando: fzero
fplot('x*exp(-x)-0.2',[0 8])
grid
sol1=fzero('x*exp(-x)-0.2',0.7)
sol2=fzero('x*exp(-x)-0.2',3)
sol3=fzero('x*exp(-x)-0.2',0.7,optimset('display','iter'))
81
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
newton.m
function
[resultado,iteraciones]=newton(fun,dfun,x,precision)
>> [resultado,iteraciones]=newton('fun','dfun',0,0.001)
d = 0.500000000000000
resultado = -0.566311003197218
iteraciones = 2
>> [resultado,iteraciones]=newton('fun','dfun',0,0.00001)
d = 0.500000000000000
resultado = -0.567143165034862
iteraciones = 3
>>
82
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
pfijo.m
function [sol,x,err,k]=pfijo(g,x1,tol,maxiter)
if err>tol;
sol=[];
disp('Insuficientes iteraciones')
else
sol=x(k);
end
El archivo de la función es:
g.m
function y=g(x)
y=-exp(x);
>> [sol,x,incr,k]=pfijo('g',1,0.001,10)
insuficientes iteraciones
sol = []
x = 1.0000 -2.7183 -0.0660 -0.9361 -0.3921 -0.6756 -0.5088 -0.6012 -0.5482 -0.5780
incr = 0.0299
k = 10
>> [sol,x,incr,k]=pfijo('g',1,0.001,40)
sol = -0.5675
x = 1.0000 -2.7183 -0.0660 -0.9361 -0.3921 -0.6756 -0.5088 -0.6012
-0.5482 -0.5780 -0.5610 -0.5706 -0.5652 -0.5683 -0.5665 -0.5675
incr = 9.9594e-004
k = 16
>>
83
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
150 1.6
1.4
100
eje de las ordenadas
1.2
1
50
0.8
0 0.6
0.4
-50
0.2
-100 0
-100 -80 -60 -40 -20 0 20 -2 -1.8 -1.6 -1.4 -1.2 -1 -0.8 -0.6 -0.4 -0.2 0
eje de las abscisas
MËTODO DE BISECCIÓN
Programa en MatLab
84
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
biseccion.m
function
[sol,x,err,iter]=biseccion(fun,a,b,tol,maxiter)
% Aplica biseccion a la funcion f en el intervalo [a,
b]
% Variables de entrada
% tol: precision deseada
% maxiter: tope de iteraciones
% sol: solucion aproximada
% x: vector de iteraciones
% err: distancia entre los dos ultimos
% iter: número de iteraciones
if fa*fb>0;
disp('La funcion debe tener diferente signo en los
extremos del intervalo')
return
end
85
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
incr = 7
iter = 0
>> [sol,x,incr,iter]=biseccion('fun',-1 ,8,0.0001,40)
sol = -0.5672
x = 3.5000 1.2500 0.1250 -0.4375 -0.7188 -0.5781 -0.5078 -0.5430
-0.5605 -0.5693 -0.5649 -0.5671 -0.5682 -0.5677 -0.5674 -0.5673
-0.5672
incr = 6.8665e-005
iter = 17
>> [sol,x,incr,iter]=biseccion('fun',-1 ,8,0.0001,10)
insuficientes iteraciones
sol = -0.5693
x = 3.5000 1.2500 0.1250 -0.4375 -0.7188 -0.5781 -0.5078 -0.5430
-0.5605 -0.5693
incr = 0.0088
iter = 10
>>
METODO DE LA SECANTE
Aproximación a una raíz de f(x)=0 a partir de unos valores iníciales p0 y p1 mediante la iteración
Programa en MatLab
secante.m
function
[p1,err,k,y]=secant(fun,p0,p1,delta,epsilon,max1)
% Aplica biseccion a la funcion f en el intervalo [a,
b]
%
% Variables de entrada
% fun: la funcion en forma de cadena de caracteres 'f'
% p0 y p1 son las aproximaciones iniciales a un cero de
f
% delta: tolerancia para p1
% epsilon: tolerancia para el valor de f en el cero
% max1: es el numero maximo de iteraciones
%
% Variables de salida
% p1: es la aproximacion del cero
% err: es el error final obtenido
% k: el numero de iteraciones
% y=fun(p1)
err=1;k=0;y=feval(fun,p1);
for k=1:max1
p2=p1-feval(fun,p1)*(p1-p0)/(feval(fun,p1)-
feval(fun,p0));
err=abs(p2-p1);
relerr=2*err/(abs(p2)+delta);
p0=p1;
p1=p2;
y=feval(fun,p1);
if (err<delta) | (relerr<delta) |
(abs(y)<epsilon),return,end %break,end
end
86
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Numero Combinatorio
Calculando el factorial de un entero no negativo mediante un bucle
function f=buclefact(n)
% Calculande el factorial n mediante un bucle,
% n debe ser entero no negativo
f=1;
if n<0;
disp('n debe ser entero no negativo')
else
for k=2:n
f=f*k;
end
end
>> buclefact(0)
ans = 1
>> buclefact(1)
ans = 1
>> buclefact(2)
ans = 2
>> buclefact(8)
ans = 40320
>>
Calculando el factorial de un entero no negativo mediante el comando prod
>> prod(1:8)
ans =
40320
>>
ænö
Calculando el numero combinatorio çç ÷ ÷
çèk ø÷
÷
Usando la formula anterior
function c=numcombin(n,k)
% Calcula el numero combinatorio,
% con la formula del cociente de factoriales
87
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
if n-k<0
disp('Ingrese numeros adecuados')
return
else
c=buclefact(n)/buclefact(k)/buclefact(n-k);
end
>> numcombin(30,6)
ans = 593775
>> numcombin(3,12)
Ingrese numeros adecuados
>>
ænö
Calculando el numero combinatorio çç ÷ ÷
çèk ø÷
÷
Usando la formula desarrollada de productos
function c=numcombin2(n,k)
% Calcula el numero combinatorio,
% con su formula directa
c=1;
if n-k<0
disp('Ingrese numeros adecuados')
return
else
for r=1:k
c=c*(n-r+1)/r;
end
end
>> numcombin2(3,12)
Ingrese numeros adecuados
ans = 1
>> numcombin2(13,12)
ans = 13
>> numcombin2(13,7)
ans = 1716
>>
Teclear lo siguiente
function C=tartaglia(n)
% Calcula la n esima fila del triangulo de Tartaglia
C=1;
if n<0
disp('Ingrese numeros adecuados')
88
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
return
else
for r=1:n
C(r+1)=C(r)*(n-r+1)/r;
end
end
>> tartaglia(5)
ans = 1 5 10 10 5 1
>> tar
function C=tartaglia2(n)
% Calcula la n esima fila del triangulo de Tartaglia
v=[1 1];
disp(v)
for r=2:n
v=[v 0]+[0 v];
disp(v)
end
>> tartaglia2(5)
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
>>
b (n)
b (k )- å
r= k + 1
ak r xr
xn = xk = , k = n - 1, n - 2,...,1
an n ak k
Programa:
sustiregresiva.m
function X=sustiregresiva(A,B)
% Datos
% A es una matriz triangular superior, invertible de orden n
% B es una matriz de orden n por 1 (columna)
% Resultado
%X es la solucion del sistema lineal AX=B
%
n=length(B);
X=zeros(n,1);
X(n)=B(n)/A(n,n);
89
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
for k=n-1:-1:1
X(k)=(B(k)-A(k,k+1:n)*X(k+1:n))/A(k,k);
end
%Considere f(t,y)=(t-y)/2
% Si y(0)=1, entonces y(t)= 3e^(-t/2) - 2 +t
% Si y(0)=4, entonces y(t)= 6e^(-t/2) - 2 +t
[t,y]=meshgrid(1:5,4:-1:1)
dt=ones(4,5)
dy=(t-y)/2
quiver(t,y,dt,dy)
hold on
x=1:0.01:6
z1=3*exp(-x/2)-2+x
z2=6*exp(-x/2)-2+x
plot(x,z1,x,z2)
hold off
4.5
3.5
2.5
1.5
0.5
1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6
90
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Ejecución en MatLab
>> E=euler('f',0,3,1,30)
E=
0 1.0000
0.1000 0.6000
0.2000 0.4500
0.3000 0.4250
…………………………
2.9000 2.9000
3.0000 3.0000
>>
91
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
% M es el numero de pasos
%
%Resultado
% H=[T' Y'] %es una matriz columna, donde T son las abscisas
%e Y son las ordenadas
h=(b-a)/M;
T=zeros(1,M+1);
Y=zeros(1,M+1);
T=a:h:b;
Y(1)=ya;
for k=1:1:M
k1=feval(f,T(k),Y(k));
k2=feval(f,T(k+1),Y(k)+h*k1);
Y(k+1)=Y(k)+h+(h/2)*(k1+k2);
end
E=[T' Y'];
% Graficando la solucion
x=E(:,1);y=E(:,2);plot(x,y),grid
Fractal de Feigenbaum
http://mimosa.pntic.mec.es/jgomez53/matema/conocer/fractales.htm
Población del año siguiente = r * población de este año * (1 – población de este año)
92
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Un biólogo, Robert May, decidió ver qué sucedía con las ecuaciones cuando cambiaba el valor de la
tasa de crecimiento. A valores bajos de tasa de crecimiento, la población se establecería en un único
número. Por ejemplo, si la tasa de crecimiento es 2,7, la población se establecerá en 0,6292. Cuando
se incrementa la tasa de crecimiento, la población final se incrementaría también. Entonces, sucedió
algo extraño. Tan pronto como la tasa de crecimiento pasaba de 3, la línea se rompía en dos. En lugar
de establecerse en una única población, saltaría entre dos poblaciones distintas. Tendría un valor para
un año, otro para el siguiente, repitiendo el ciclo para siempre. Incrementar la tasa de crecimiento un
poco más provocó que saltara entre cuatro valores distintos. Cuando el parámetro crecía aún más, la
línea se bifurcaba de nuevo. Las bifurcaciones llegaban más y más rápidamente hasta que de pronto,
aparecía el caos. Pasada una cierta tasa de crecimiento, se hacía imposible predecir el
comportamiento de la ecuación. Sin embargo, bajo una inspección más detallada, es posible ver
líneas claras. Mirando más de cerca, estas líneas revelan pequeñas ventanas de orden, donde la
ecuación va a través de las bifurcaciones de nuevo antes de volver al caos. Esta auto-similitud, el
hecho de que el gráfico tenga una copia exacta de sí mismo oculta en su interior, viene a ser un
aspecto importante del caos.
La ecuación Logística x = ax(1- x), a > 0 es una ecuación de punto fijo que modela una
población, cuyo crecimiento está limitado. Donde los iterados pueden presentar un comportamiento
caótico.
Los puntos fijos son 0 y 1-1/a
Ffunction feigenbaum
% fractal de Feigenbaum
p=0;q=4;
r=0;s=1;
h=(q-p)/500;
X=zeros(1,100001); Y=X;
93
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
c=1;
for a =p:h:q
x=0.5;
for k=1:400
x=a*x*(1-x)
if k>200
X(c)=a;
Y(c)=x;
c=c+1;
end
end
c-1
end
plot(X,Y,'-','markersize',1)
axis([p,q,r,s])
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0 0.5 1 1.5 2 2.5 3 3.5 4
f x = x3 + 2 x 2 + 10x - 20
Considere la función ( ) cuya grafica es:
>> x=-10:10;
>> y=x.^3+2*x.^2+10*x-20;
>> plot(x,y),grid
>>
1500
1000
500
-500
-1000
-10 -5 0 5 10
94
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
20
x=
x 2 + 2 x x + 10
Graficando las dos funciones que aparecen en la ecuación tenemos:
20
h(x)= x g (x) =
x 2 + 2 x x + 10
>> x=-10:0.1:10;y=20./(x.^2+2*x+10);plot(x,y),grid,hold on
>> x=-10:10;y=x;plot(x,y),grid
>>
10
-2
-4
-6
-8
-10
-10 -5 0 5 10
>> x=0:0.1:5;y=20./(x.^2+2*x+10);plot(x,y),grid,hold on
>> x=0:0.1:5;y=x;plot(x,y)
>> grid
>>
4.5
3.5
2.5
1.5
0.5
0
0 1 2 3 4 5
function B=ptofijo(n)
95
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
>> ptofijo(10)
ans =
1.000000000000000
1.538461538461539
1.295019157088122
1.401825309448600
1.354209390404292
1.375298092487380
1.365929788170655
1.370086003401819
1.368241023612835
1.369059812007482
>>
>> ptofijo(20)
ans =
1.000000000000000
1.538461538461539
1.295019157088122
1.401825309448600
1.354209390404292
1.375298092487380
1.365929788170655
1.370086003401819
1.368241023612835
1.369059812007482
1.368696397555516
1.368857688628725
1.368786102577989
1.368817874396085
1.368803773143633
1.368810031675092
96
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
1.368807253960778
1.368808486788930
1.368807939624842
1.368808182471759
>>
ANEXOS
97
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
FORMATO ASCCI
31 71 G 111 o 151 ù 191 +
32 72 H 112 p 152 ÿ 192 +
33 ! 73 I 113 q 153 Ö 193 -
34 " 74 J 114 r 154 Ü 194 -
35 # 75 K 115 s 155 ø 195 +
36 $ 76 L 116 t 156 £ 196 -
37 % 77 M 117 u 157 Ø 197 +
38 & 78 N 118 v 158 × 198 Ã
39 ' 79 O 119 w 159 ƒ 199 Ã
40 ( 80 P 120 x 160 á 200 +
41 ) 81 Q 121 y 161 í 201 +
42 * 82 R 122 z 162 ó 202 -
43 + 83 S 123 { 163 ú 203 -
44 , 84 T 124 | 164 ñ 204 ¦
45 - 85 U 125 } 165 Ñ 205 -
46 . 86 V 126 ~ 166 ª 206 +
47 / 87 W 127 • 167 º 207 ¤
48 0 88 X 128 Ç 168 ¿ 208 Ð
49 1 89 Y 129 ü 169 ® 209 Ð
50 2 90 Z 130 é 170 ¬ 210 Ê
51 3 91 [ 131 â 171 ½
52 4 92 \ 132 ä 172 ¼
53 5 93 ] 133 à 173 ¡
54 6 94 ^ 134 å 174 «
55 7 95 _ 135 ç 175 »
56 8 96 ` 136 ê 176 _
57 9 97 a 137 ë 177 _
58 : 98 b 138 è 178 _
59 ; 99 c 139 ï 179 ¦
60 < 100 d 140 î 180 ¦
61 = 101 e 141 ì 181 Á
62 > 102 f 142 Ä 182 Â
63 ? 103 g 143 Å 183 À
64 @ 104 h 144 É 184 ©
65 A 105 i 145 æ 185 ¦
66 B 106 j 146 Æ 186 ¦
67 C 107 k 147 ô 187 +
68 D 108 l 148 ö 188 +
69 E 109 m 149 ò 189 ¢
70 F 110 n 150 û 190 ¥
98
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Apéndice:
Resumen de caracteres, comandos y funciones
La siguientes tablas contiene los caracteres, comandos y funciones MATLAB que se han ido viendo a
lo largo de este libro, ordenados por categorías.
Carácter Descripción
+ Suma.
- Resta.
* Multiplicación escalar y de arrays.
.* Multiplicación de arrays elemento a elemento.
/ División derecha.
\ División izquierda.
./ División derecha elemento a elemento.
.\ División izquierda elemento a elemento.
Exponenciación
. Exponenciación elemento a elemento.
: Dos puntos; creación de vectores con elementos de igual
espaciado, representación de rangos de elementos en arrays.
= Operador de asignación.
( ) Paréntesis; establece precedencia, encierra los argumentos
de entrada en una función, acceso indexado a elementos de
un array.
] Corchetes; formación de arrays; encierra los argumentos de
entrada y salida en funciones.
, Coma; separa los índices de acceso a un array y los
argumentos de una función;permite separar comandos en la
misma línea.
; Punto y coma; evita la visualización de la ejecución de un
comando; separa filas en la declaración de un array.
' Comilla simple; transpuesta de una matriz, creación de
cadenas.
… Puntos suspensivos; continuación de una línea en la
siguiente.
% Porcentaje; crea comentarios, especifica un formato de
salida.
< Menor que.
> Mayor que
99
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Carácter Descripción
<= Menor o igual que
>= Mayor o igual que
== Igual.
= No igual (diferente)
Y lógico
O lógico
NO
100
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
101
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Carácter Descripción
102
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
103