Está en la página 1de 103

PROGRAMACION CON MATLAB Mg.

Amado Malca Villalobos

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.

Notas sobre los ficheros script


- Un fichero script es una secuencia de comandos de MatLab, también denominado programa.
- Cuando se ejecuta un fichero script, MatLab ejecuta los comandos en el orden en que éstos han
sido escritos, igual que si se ejecutaran uno a uno en la ventana de comandos.
- Cuando un fichero script contiene un comando que produce una salida o resultado (ejemplo una
asignación de variable sin un punto y coma al final), la salida se visualiza en la ventana de
comandos.
- La utilización de ficheros script es conveniente, ya que estos pueden ser editados (es decir se
pueden corregir o modificar), y se pueden ejecutar tantas veces como se quiera.
- Los ficheros script se pueden crear y editar en cualquier editor de texto. Asimismo el texto se
puede copiar y pegar desde estos editores a MatLab para ser ejecutado.
Los ficheros script también de denominan ficheros M, ya que la extensión .m es la que utiliza y
reconoce MatLab cuando se guardan estos archivos.
- Un fichero script se puede ejecutar, bien tecleando su nombre en la Ventana de Comandos (y
pulsando la tecla enter) o bien desde la ventana del editor a través del icono Run (ejecutar).
- Estos programas siempre deben estar en el directorio actual de MatLab, para poder ejecutarse.
Que se puede ver en la siguiente figura

Ordenes útiles para carpetas


Como ya se ha dicho, si el archivo de texto no se graba en la carpeta de trabajo de MATLAB no
podrá ser ejecutado. Conviene tener ciertas herramientas que ayuden a comprobar esta situación.

_ 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

Ejemplo: Resolver la ecuación cuadrática 5x2 - 8x + 4 = 0

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

Grafico de la función en el intervalo [-6, 6]

4
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Vista de la ventana de comandos en MatLab, del archivo m, y del grafico de la función.

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

Variable definida y asignada en el fichero script.


La asignación de la variable forma parte del fichero, Si se quiere cambiar el valor simplemente se
edita el fichero y se guarda los cambios.

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

Variable definida y asignada en la ventana de comandos.


En este caso el o los valores de la variable se indican en la ventana de comandos, y luego se ejecuta
el programa. Aquí los valores de las variables solo se cambian en la ventana de comandos.

Ejemplo: El programa requerido es el mismo anterior, hallaremos el puntaje promedio de varias


jugadas en un casino. Pero los valores se ingresaran por teclado.

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

Error in ==> prom_2 at 5


Puntuacion_Media=(j1+j2+j3+j4)/4
>> j1=87, j2=90, j3=86, j4=64 % corrigiendo el problema de las variables
j1 = 87
j2 = 90
j3 = 86
j4 = 64
>> prom_2
Puntuacion_Media = 81.7500
>> help prom_2
Calculo del promedio de cuatro jugadas
los valores se ingresan por la ventana de comandos
con las variables j1, j2, j3 y j4

Variable definida y asignada en el fichero script, pero luego se cambia en la ventana de


comandos. Comando input
En esta opción la variable se define en el fichero script, y cuando se ejecuta tal archivo al usuario se
le pide un valor concreto a través de la ventana de comandos, y a estas variables se les asigna el
valor correspondiente.
Esto se hace con el comando input. Cuya sintaxis es:

æ' mensaje que se muestra ö ÷


nombre _ var iable = input çç ÷
÷
çèen la ventana de comandos 'ø
÷

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
>>

COMANDO DE INGRESO DE DATOS:


Un dato cualquiera o una matriz puede ingresarse mediante el teclado a pedido de algún programa,
los llamados archivos ****.m, mediante el comando: input
Hay dos tipos de objetos que ingresan por teclado, numéricos (Matriz) o como una cadena de letras
y/o símbolos (String).
Los formatos son:
x=input('comentario: ')
x=input('comentario: \n')
o tambien:
x=input('ingrese su nombre: ','s')
x=input('ingrese su nombre: \n ','s')

En el primer caso aparecerá el comentario en la pantalla, y la matriz ingresada se asignara a la


variable x.
En el segundo la diferencia está en que el cursor para ingresar la información pasa a la siguiente
línea.
En el tercer caso aparecerá el comentario en la pantalla, y se asignara a la variable x. La diferencia
está en que en el tercer caso la variable no solo puede ser una matriz sino también una cadena de
caracteres cualesquiera.
En el cuarto caso, al igual que el segundo, el cursor para ingresar la información pasa a la siguiente
línea.

Ahora veamos algunos ejemplos:

>> A=input('ingrese su edad: ');


ingrese su edad: 46
A = 46
>> A=input('ingrese su edad: ');
ingrese su edad: 25
>> A=input('haga su pregunta: ','s');
haga su pregunta: que es la matemática
A = que es la matemática
>> A=input('ingrese su edad:\n');
ingrese su edad:
45

8
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

>> A=input('Estado civil:\n','s');


Estado civil:
Soltero

COMANDOS DE SALIDA DE DATOS


La salida en pantalla de los resultados de un programa se hace de diferentes maneras. Algunos se
realizan por defecto como el resultado de alguna operación. Otra opción es con los comandos:
disp fprintf
Comando disp
El formato de disp es:
disp(‘comentario’)
disp(variable)
en el primer caso la salida es algún comentario, en el segundo se imprime en pantalla una variable.

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')

Ahora viene la ejecución, en la ventana de comandos

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

ahi tenemos la relación de cuadrado y cubos >>

Caracteres especiales usados


Símbolo Descripción
\n Carácter de escape, se empieza una nueva línea.
\b Carácter de borrado
\t Tabulación horizontal

Ahí va un ejemplo de uso de estos caracteres especiales,


escribiremos:
Las matrices, son el objeto fundamental del MatLab
>> fprintf('Las matrices,\n son el objeto fund\bamen\btal
del Mat\t\tlab\n');
Las matrices,
son el objeto funametal del Mat lab
>>

El comando fprintf para la visualización de datos y texto juntos


fprintf(‘Texto %-5.2f texto adicional’, nombre_variable)

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)

El tercero es corresponde a la precisión, lo cual indica el numero de dígitos que se mostraran a la


derecha del punto decimal. (Opcional)

12
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

El cuarto elemento es el que corresponde al formato de conversión (f en el ejemplo). Es obligatorio,


las opciones son:
Símbolo Descripción
e Notación exponencial en minúsculas (ej:
2.456e+002)
E Notación exponencial en mayúsculas (ej:
2.456E+002)
f Notación de punto fijo (ej: 245.6)
g Representación en formato corto de e o f
G Representación en formato corto de E o f
i Entero
Ejemplo:
ej03.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]
P=mean(D)
fprintf('\nEl valor medio de las lluvias es %6.2e mensual.\n',P)
fprintf('\nEl valor medio de las lluvias es %-16.2f mensual.\n',P)
fprintf('\nEl valor medio de las lluvias es %08i mensual.\n',P)
fprintf('\nEl valor medio de las lluvias es %6g mensual.\n',P)
La ejecución en MatLab
>> ej03
D = 286 253 254 305 274 203 165 190 161 228 224
280
P = 235.2500
El valor medio de las lluvias es 2.35e+002 mensual.
El valor medio de las lluvias es 235.25 mensual.
El valor medio de las lluvias es 2.352500e+002 mensual.
El valor medio de las lluvias es 235.25 mensual.
>>

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

fprintf('\nEl valor mínimo es %4i , el máximo es %4i y el total de


lluvias es %6i.\n',m,M,S)

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.

El valor mínimo es 161 , el máximo es 305 y el total de lluvias es


2823.
>>

Presentación de arrays (Matrices)


ej05.m
%ahora presentaremos una matriz
%donde
%fila uno: números naturales
%fila dos: el cuadrado
%fila tres: la raíz cuadrada
x=[1:8];
y=x.^2;
z=sqrt(x);
w=[x;y;z]
fprintf('el numero %i su cuadrado %i su raíz %f\n',w)
La ejecución en MatLab
>> ej5
w=
1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000
8.0000
1.0000 4.0000 9.0000 16.0000 25.0000 36.0000 49.0000
64.0000
1.0000 1.4142 1.7321 2.0000 2.2361 2.4495 2.6458
2.8284
el numero 1 su cuadrado 1 su raíz 1.000000
el numero 2 su cuadrado 4 su raíz 1.414214
el numero 3 su cuadrado 9 su raíz 1.732051
el numero 4 su cuadrado 16 su raíz 2.000000
el numero 5 su cuadrado 25 su raíz 2.236068
el numero 6 su cuadrado 36 su raíz 2.449490
el numero 7 su cuadrado 49 su raíz 2.645751
el numero 8 su cuadrado 64 su raíz 2.828427
>>

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.

nombre=input('cual es tu nombre: ','s');


apellidos=input('tus apellidos son:\n','s');
n=input('de que orden son las matrices cuadradas A y B:\n');

A=input('ingrese la matriz A :\n')


B=input('ingrese la matriz B :\n')
disp('la suma A+B, la resta A-B es :')
disp(A+B),disp(A-B)
disp('El producto A*B, la division A/B es :')
disp(A*B),disp(A/B)

temp=[25.6 33.7 34.1 35.6 36.8]


fprintf('la temperatura en la mañana es %e grados F \n',temp)
fprintf('la temperatura en la mañana es %f grados F \n',temp)
fprintf('la temperatura en la mañana es %g grados F \n',temp)
fprintf('la temperatura en la mañana es \n %g grados F \n',temp)

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

0.0698 0.3101 0.3101 -0.1240


1.1395 0.6202 -0.3798 -1.2481
0.5814 -0.1938 0.8062 0.0775
0.0504 -0.0724 0.2610 0.9289

temp = 25.6000 33.7000 34.1000 35.6000 36.8000

la temperatura en la mañana es 2.560000e+001 grados F


la temperatura en la mañana es 3.370000e+001 grados F
la temperatura en la mañana es 3.410000e+001 grados F
la temperatura en la mañana es 3.560000e+001 grados F
la temperatura en la mañana es 3.680000e+001 grados F
la temperatura en la mañana es 25.600000 grados F
la temperatura en la mañana es 33.700000 grados F
la temperatura en la mañana es 34.100000 grados F
la temperatura en la mañana es 35.600000 grados F
la temperatura en la mañana es 36.800000 grados F
la temperatura en la mañana es 25.6 grados F
la temperatura en la mañana es 33.7 grados F
la temperatura en la mañana es 34.1 grados F
la temperatura en la mañana es 35.6 grados F
la temperatura en la mañana es 36.8 grados F
la temperatura en la mañana es
25.6 grados F
la temperatura en la mañana es
33.7 grados F
la temperatura en la mañana es
34.1 grados F
la temperatura en la mañana es
35.6 grados F
la temperatura en la mañana es
36.8 grados F

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

1.0000 1.4142 1.7321 2.0000 2.2361 2.4495 2.6458


2.8284 3.0000 3.1623

Un entero es 1 y su raíz cuadrada es 1


Un entero es 2 y su raíz cuadrada es 1.41421
Un entero es 3 y su raíz cuadrada es 1.73205
Un entero es 4 y su raíz cuadrada es 2
Un entero es 5 y su raíz cuadrada es 2.23607
Un entero es 6 y su raíz cuadrada es 2.44949
Un entero es 7 y su raíz cuadrada es 2.64575
Un entero es 8 y su raíz cuadrada es 2.82843
Un entero es 9 y su raíz cuadrada es 3
Un entero es 10 y su raíz cuadrada es 3.16228

z = 1.0e+003 *

0.0010 0.0020 0.0030 0.0040 0.0050 0.0060 0.0070


0.0080 0.0090 0.0100
0.0010 0.0014 0.0017 0.0020 0.0022 0.0024 0.0026
0.0028 0.0030 0.0032
0.0010 0.0040 0.0090 0.0160 0.0250 0.0360 0.0490
0.0640 0.0810 0.1000
0.0010 0.0080 0.0270 0.0640 0.1250 0.2160 0.3430
0.5120 0.7290 1.0000

n=1 sqrt(n)=1 n^2=1 n^3=1


n=2 sqrt(n)=1.41421 n^2=4 n^3=8
n=3 sqrt(n)=1.73205 n^2=9 n^3=27
n=4 sqrt(n)=2 n^2=16 n^3=64
n=5 sqrt(n)=2.23607 n^2=25 n^3=125
n=6 sqrt(n)=2.44949 n^2=36 n^3=216
n=7 sqrt(n)=2.64575 n^2=49 n^3=343
n=8 sqrt(n)=2.82843 n^2=64 n^3=512
n=9 sqrt(n)=3 n^2=81 n^3=729
n=10 sqrt(n)=3.16228 n^2=100 n^3=1000

z = 1.0e+006 *

1.0006 1.0006 1.0006 1.0006 1.0006 1.0006


0.0010 0.0010 0.0010 0.0010 0.0010 0.0010

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
>>

IMPORTACION Y EXPORTACION DE DATOS


Procesando datos de fuentes externas (Importación)
Escribiendo datos en un manejador de datos (Exportación)

DE EXCEL A MATLAB (xlsread)


Importando datos desde Excel a Matlab.

Para esto contamos con un comando llamado xlsread y su sintaxis es:


xlsread (' NombreArchivo ')

[num, text ] = xlsread ( NombreArchivo, Hoja, Rango)

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

Ejemplo: Ahora se leerá un archivo en Excel, llamado datos.xlsx

Aquí vemos una hoja de datos en formato Excel


datos1.xlsx

Leyendo ahora con el comando xlsread


>> [A,B]=xlsread('datos.xlsx')
A=
1 2 3 4 5 6 7
180 156 147 206 210 235 222
NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN
1 2 3 4 5 6 7
1 4 9 16 25 36 49
1 8 27 64 125 216 343
B=
'Mes'
'LLuvia'
''
''
'numero'
'cuadrado'
'cubo'
>>
Leyendo por separado la información
>> [A,B]=xlsread('datos.xlsx','hoja2','c2:j3')
A=
1 2 3 4 5 6 7
180 156 147 206 210 235 222
B=
'Mes'
'LLuvia'
>>

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
>>

DE MATLAB A EXCEL (xlswrite)


Esta vez veremos cómo exportar datos desde MatLab a una hoja de datos de Excel.

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 )

[estado] = xlswrite( NombreArchivo, Datos, Hoja, CeldaInicial )

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

Ejemplo: Ahora se creara una matriz A, y luego se grabara en un archivo de Excel


Creando la matriz y escribiendo en la hoja de calculo
>> A=[1 7 -2;4 -5 6;8 5 -9]
A=
1 7 -2
4 -5 6
8 5 -9
>> xlswrite('arch_datos.xlsx',A)
Archivo en la PC, en la carpeta de trabajo de MatLab

Archivo de excel

Ejemplo: Ahora la matriz A se grabara en un archivo llamado “arch_datos2.xlsx”, en la hoja llamada


“matriz” en los rangos especificados
Creando la matriz y escribiendo en la hoja de calculo
>> A=[1 7 -2;4 -5 6;8 5 -9]
A=
1 7 -2
4 -5 6
8 5 -9
>> [estado]=xlswrite('arch_datos2.xlsx',A,'matriz','C1:E3')
Warning: Added specified worksheet.
> In xlswrite>activate_sheet at 294
In xlswrite>ExecuteWrite at 249
In xlswrite at 207
estado = 1
>> [estado]=xlswrite('arch_datos2.xlsx',A,'matriz','A5:C7')
estado = 1
Archivo en la PC, en la carpeta de trabajo de MatLab

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
>>

Los términos de la sucesión de Fibonacci


Fibo1.m
function f = Fib1(n)
% 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

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
>>

Los términos de la sucesión de Fibonacci


Fibo2.m
function f = Fib2(n)
% Retorna el n-esimo termino
% de la sucesion de Fibonacci.
if n==1
f = 1;
elseif n==2
f = 1;
else
f1 = 1; f2 = 1;
for i = 2:n-1
f = f1 + f2;
f1=f2; f2 = f;
end
end
La ejecución en Matlab
>> Fib2(4)
ans = 3
>> Fib2(40)
ans = 102334155
>>

24
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Los términos de la sucesión de Fibonacci con matrices


Fibo3.m
function f = Fib3(n)
% Retorna los terminos de la
% Sucesion de Fibonacci
% Usando matrices
A = [0 1;1 1];
y = A^n*[0;1];
f=y(1);

La ejecución en Matlab
>> Fib3(6)
ans = 8
>> Fib3(16)
ans = 987
>>

Promedio de un arreglo de numeros


promedio.m
function p = promedio(x)
% Calcula el promedio de los elementos
de un vector x
% y dibuja dicho vector, ploteando
% Sintaxis : promedio(x) donde x es el
vector a promediar
n=length(x);
p=0;
for i=1:n
p=p+x(i);
end
p=p/n;
plot(x);
La ejecución en Matlab
>> x=[3 4 8 2 7 10 18 45 78 3 2 9]
x = 3 4 8 2 7 10 18 45 78 3 2 9
>> promedio(x)
ans = 15.7500
>>
La grafica de los valores de x

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

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

población se puede modelar mediante la ecuación P = P0 2t / d , donde P es la población en el instante


t, P0 es la población en el instante t = 0 y d es el doble del tiempo.
4. Un excursionista necesita cruzar un área arenosa para poder ir del punto A a un campamento
que se encuentra en el punto B. Para hacer esto puede cruzar una zona arenosa
perpendicularmente al camino y a continuación andar a lo largo de el, o también puede cruzar la
zona arenosa con un ángulo q hasta el camino, y luego caminar a lo largo del camino. El
excursionista camina a una velocidad de 3,5 km/h en la arena, y a 5 km/h por el camino. Calcule el
tiempo que le lleva alcanzar el campamento contemplando distintos ángulos q de 0, 10, 20, 30, 40,
50 y 60 grados.
Las distancias w y u son, respectivamente, w = 4,5 km, y u = 14 km. Escriba un programa en un
fichero script que resuelva este problema. Calcule todas las variables dentro del fichero script.
Visualice los resultados en una tabla de dos columnas en la cual la primera columna sea q y la
segunda columna sea el tiempo t correspondiente.
u
B

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

FUNCIONES Y FICHEROS DE FUNCION

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 predefinidas: cos(x), sqrt(x), exp(x), det(A), etc.

Funciones definidas por el usuario; generalmente para representar una función que se usara en
varios programas adicionales.

x FUNCIÓN y  f  x

CREACIÓN DE UN ARCHIVO DE FUNCIÓN


Básicamente un archivo de función, es un archivo tipo .m, visto en el capitulo tres. Pero la diferencia
está en la primera línea, que lleva una forma especial, para indicar lo de función.
Ejemplo: Vamos a construir una función cuadrática, de la forma y  f  x   3x 2  6 x  8, x  R
funcuad.m Ejecución en la ventana de comandos de
MatLab
function y =funcuad(x) >> y=funcuad(1),z=funcuad(2),w=funcuad(3)
y= 1
% Cálculo del valor de una
función cuadrática
z = 16
% w = 37
% El argumento de entrada es: >> y=funcuad([1,2,3])
% x: un numero real y = 1 16 37
% >> y=funcuad([1;2;3])
% El argumento de salida es:
y=
% y = 3x^2+6x-8, tambien real
1
y=3*x.^2+6*x-8; 16
37
>>

Archivo script: funcuad.m

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]

En la ventana de comandos de MatLab.


>> x=-10:0.1:10; y=funcuad(x); plot(x,y),grid
>>
Grafico Resultante:
400

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;

%Creación de un grafico de la trayectoria


tplot=linspace(0,ttot,200);
x=v0x*tplot;;
y=v0y*tplot-0.5*g*tplot.^2;
plot(x,y), grid
xlabel('DISTANCIA (m)')
ylabel('ALTURA (m)')
title('TRAYECTORIA DE UN PROYECTIL')
Ejecución en la ventana de comandos de MatLab
>> [hmax,dmax]=trayectoria(120,30)
hmax = 183.4862
dmax = 1.2712e+003
>> [hmax,dmax]=trayectoria(80,60)
hmax = 244.6483
dmax = 564.9911
>>

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

Ventana del programa: trayectoria.m

LAS PARTES DE UN FICHERO DE FUNCIÓN

Línea de definición de la función


Aquí tenemos la expresión: “function”, que define el fichero como una función. También se define
el nombre de la función. Y finalmente se define el número y orden de los argumentos de entrada y
salida. Siempre va en la primera línea.
El esquema de esta línea es:
f unction [argumentos de salida]  nombre_funcion  argumentos de entrada 
O también
f unction argumento de salida  nombre_funcion  argumentos de entrada 

La línea H1 y las líneas de texto de ayuda


Inmediatamente después de la línea de definición de función, están la llamada línea H1 y las líneas
de texto de ayuda, que siempre empiezan con el símbolo “%”. Y proporcionan información
descriptiva sobre la función. La línea H1 es la que Matlab busca en algunos casos de búsqueda de
algunas palabras relacionadas con funciones.
Además esto se muestra con el comando “help nombre_funcion”
>> help trayectoria
Calculo de la la altura y la distancia máximas que alcanzan un proyectil

32
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Los argumentos de entrada son:


v0: velocidad inicial en m/s
theta: ángulo en grados.

Los argumentos de salida son:


hmax: altura máxima en metros
dmax: distancia máxima en metros

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:

>> f=inline('3*x^2+6*x-8') % definiendo una function en linea


f = Inline function:
f(x) = 3*x^2+6*x-8
>> f=inline('3*x^2+6*x-8','x') % agregando la variable
f = Inline function:
f(x) = 3*x^2+6*x-8
>> f(1)
ans = 1
>> f(2)
ans = 16

Ejemplo: Ahora consideraremos una función real de dos variables:

>> 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

Inner matrix dimensions must agree.


Error in ==> inline.subsref at 27
INLINE_OUT_ = inlineeval(INLINE_INPUTS_,
INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);

Como aparece un error debemos redefinir la función, para cuando los argumentos son vectores o
matrices.

>> G=inline('3*x+6*y+9*x.*y-6','x','y') % véase la diferencia


G = Inline function:
G(x,y) = 3*x+6*y+9*x.*y-6
>> G(x,y)
ans = 102 144 135
>>
Ahora una función de dos variables de entrada y dos de salida
>> 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(2,3)
ans = 33 -1
>> x=[1 3 5],y=[9 8 4]
x= 1 3 5
y= 9 8 4
>> g(x,y)
ans = 66 66 48 4 5 3
>> g(1,9),g(3,8),g(5,4)
ans = 66 4
ans = 66 5
ans = 48 3
>>

Ejemplos 02: g  x, y   4x5 y  7 x3 y 2  8x2 y 4  6x  29 y 6


>> G=inline('4*(x.^5).*y+7*(x.^3).*(y.^2)-8*(x.^2).*(y.^4)+6*x-29*(y.^6)')
G = Inline function:
G(x,y) = 4*(x.^5).*y+7*(x.^3).*(y.^2)-8*(x.^2).*(y.^4)+6*x-29*(y.^6)
>> G(5,6),G(8,7),G(9,1)
ans = -1505694
ans = -3547965
ans = 240676
>> x=[-2 -1 0 1 2 3 4 5],y=[-3 -2 -1 0 1 2 3 4]
x = -2 -1 0 1 2 3 4 5
y = -3 -2 -1 0 1 2 3 4
>> G(x,y)
ans = -23865 -2010 -29 6 135 -290 -15165 -105954

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)

Se tiene que seguir ciertos lineamientos, como son:


-El nombre de la función debe introducirse en forma de cadena.
-La función puede ser una de MATLAB, o alguna definida por el usuario.
- Los argumentos de entrada se separan por comas, y después del nombre de la función.
-Los argumentos de salida van entre corchetes, y separados por comas.

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. FUNCIONES Y FICHERO DE FUNCIÓN


PROBLEMAS PROPUESTOS
1. Escriba una función en MATLAB con dos argumentos de entrada y dos de salida. La función debe
calcular la altura en pulgadas y la masa en libras de una persona a partir de su altura en centímetros
y de su peso en kilogramos. Utilice la siguiente definición de función para el problema:
in,lb  SIaSTi  cm,kg  . Los argumentos de entrada son la altura en centímetros y el peso en
kilogramos, y los argumentos de salida son la altura en pulgadas y la masa en libras. Posteriormente
utilice está función en la Ventana de Comandos para:
a) Determinar la altura en pulgadas y la masa en libras de una persona que mide 170 cm y pesa 70
kg.
b) Determinar su propia altura y peso en pulgadas y libras, respectivamente.
2. Escriba una función MATLAB para la siguiente función matemática:
y  x   0,9x4 12x2  5x
La entrada de la función será x , y la salida será y . Escriba la función de forma que x pueda ser un
vector, utilícela para:
a) Calcular y(-3) e y(5).
b) Representar gráficamente la función y  x  para 4  x4 .
3. Escriba una función MATLAB para la siguiente función matemática:
r    2 1,1  sen 2 
La entrada de la función será  (en radianes) y la salida será r . Escriba la función de forma que 
pueda ser un vector, y utilícela para:
a) Calcular r  / 3 y r  3 / 2 
b) Representar gráficamente (en coordenadas polares) r   para 0    2
4. Escriba una función MATLAB que calcule el máximo o mínimo local de una función cuadrática de
la forma: f ( x)  ax2  bx  c . Utilice la siguiente línea de definición de la función :
 x,y  maxmin(a,b,c) . Los argumentos de entrada son las constantes. a, b y c y los argumentos de
salida son las coordenadas x e y del máximo o el mínimo de la función.
Utilice la función para calcular el máximo o el mínimo de las siguientes funciones:
a) f ( x)  3x 2  18x  48
b) f ( x)  5x 2  10 x  3
5. El valor P de una cuenta de ahorros, con un capital inicial P0 y una tasa de interés anual r (en
%) después de t años, viene dado por:
t
 r 
P  P0 1  
 100 
Escriba una función que calcule el valor futuro de una cuenta de ahorros. Utilice para ello la
siguiente línea de definición de función: P  saval  PO, r, t  . Las entradas de la función serán en
capital inicial, la tasa de interés y el número de años. La salida será el valor de la cuenta a partir de
los datos especificados en la entrada. Utilice posteriormente está función para calcular el valor de
un capital inicial de 10 000 €, a un interés anual del 6%, después de 13 años.

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

función: Nm = lbintoNm(lbin) . El argumento de entrada será el par en libras-pulgadas, y el


argumento de salida el par en newtons-metro. Utilice posteriormente esta función para convertir
500 libras-pulgada a newtons-metro.
7. Escriba una función que calcule los ángulos de un triángulo a partir de las longitudes de sus lados.
Utilice para ello la siguiente línea de definición de función: alp,bet,gam  triangulo(a,b,c) . Utilice
posteriormente esta función para calcular los siguientes triángulos:
a = 10, b = 15, c = 7
a = 6, b = 8, c = 10
a = 200, b = 75, c = 250
8. Escriba una función que calcule el vector unitario en la dirección de la recta que une dos puntos
(A y B) en el espacio. Utilice la siguiente línea de definición de función: n = unitvec (A,B) . La
entrada de la función serán dos vectores A y B, cada uno con tres elementos correspondientes a las
coordenadas cartesianas de dichos puntos. La salida será un vector con tres componentes que
representan las coordenadas del vector unitario en la dirección de A a B. Utilice posteriormente
esta función para determinar los siguientes vectores unitarios:
En la dirección del punto (2,6,5) al punto (-10,15,9)
En la dirección del punto (-10,15,9) al punto (2,6,5)
En la dirección del punto (1,1,2) al punto (2,1,1)
9. La forma tradicional de la ecuación de la recta en el plano x – y es: Ax + By + C = 0 . Además,
cualquier punto queda determinado por sus coordenadas en dicho plano  x0 , y0  . Escriba una
función MATLAB que calcule la distancia entre un punto y una recta en el plano x  y . Utilice para
ello la siguiente definición de función: d = DistPaL ( x0, y0, A, B, C) , donde los argumentos de
entrada son las coordenadas del punto y las tres constantes de la ecuación de la recta. El
argumento de salida será la distancia. Utilice posteriormente esta función para calcular la distancia
en los siguientes casos:
Punto : (2,-4), recta: 2 x  3,5 y  6  0 .
Punto (11,2): recta: y  2 x  6 , (observe que en este caso la ecuación de la recta no está
representada de la forma tradicional expuesta anteriormente).

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

de la tensión, de la forma:  max   xx   yy    xx   yy    xy2


2

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

Donde  es la frecuencia de la señal de entrada.

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
,102    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

Donde  es la frecuencia de la señal de entrada.


Escriba una función que calcule la relación de voltajes. Utilice para ello la siguiente línea de
definición: RV = pasobanda (R, C, L, w) . Los argumentos de entrada son el valor de la resistencia
R en  (ohmios), la capacidad del condensador C en F (faradios), el valor de la bobina
(inductancia) L en H (henrios) 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 pasobanda para generar un gráfico RV en función
de ,102    107 rad/s . El gráfico debe tener la escala logarítmica en el eje horizontal   .
Cuando se ejecute el fichero script , éste debe pedir al usuario que introduzca los valores de R , C
y L . Etiquete los ejes convenientemente y ejecute el script para los siguientes casos:
R  1100  C  9 F y L  7 mH
R  500  C  300 F y L  400 mH

40
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

PROGRAMACION CON MatLab

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.

Ejemplos: Ejecute los siguientes comandos, y analize el resultado:


>> (4>9)+(6==8-2)+(8+5~=13)+(6<=16)
>> (6<9+8)+(1+6>=8-2)+(7-7+8~=17)+(6>=56)
>> (56==78-21)-(16-45~=6*7+9)-(8^2+5==72/6)+3*(6<=16)
>> [1 5 8 9 80]>[2 6 7 28 6]
>> A=[1 2 4;5 6 7;9 8 4]
>> A>=5

>> 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
>>

La sentencia any(abs(A)<eps) genera un vector de 0's y 1's; 0 si la correspondiente columna es


cero y 1 en caso contrario. Es decir, any responde true si algún elemento no es cero y false si todos
son cero.
>> any(B)
ans = 1 0 1
>>
Y la sentencia any(any(abs(A)<eps)) produce un 0 (i.e. false) si todos los elementos de any(B) son
cero y 1 (true) en caso contrario.
>> any(any(B))

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:

>> A=[1 2;0 3]; B=[4 2;1 5];


>> A==B
ans =
0 1
0 0
>> A~=B
ans =
1 0
1 1
>> A>2
ans =
0 0
0 1
>>
Para saber si dos matrices son iguales, se puede usar la expresión isequal(A,B)
>> isequal(A,B)
ans = 0
La expresión isequal(A,B) es equivalente a all(all(A==B)). Por otra parte, isequal es una de las
muchas funciones lógicas que empiezan por is. He aqui una selección de ellas. Para obtener un
listado completo escribe doc is tras el prompt de MATLAB

43
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

ischar verdadero si la entrada es un vector de caracteres


isempty verdadero si la entrada es un vector vacio
isequal verdadero si los vectores son iguales
isfinite detecta los elementos finitos de un vector
isfloat verdadero si el vector es de elementos en coma flotante
isinf detecta los elementos infinitos de un vector
isinteger verdadero si el vector es de números enteros
isnan detecta los elementos que son NaN en un vector
isnumeric verdadero si el vector es de números (no de caracteres)
isprime detecta los números primos en un vector
isreal verdadero si todos los números del vector son reales
isvector verdadero si se trata de un vector

Algunos ejemplos adicionales con la matriz A de más arriba

>> 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.

FUNCIONES LÓGICAS PREDEFINIDAS


Función Ejemplos
Equivalencia Descripción
Lógica
La conjunción >> and(4<8,16==9+7)
and(a,b) a Ùb ans = 1
La disyunción inclusiva >> or(4>8,33~=9+7)
a Úb ans = 1
or(a,b)
La negacion >> not(4>8 | 33~=9+7)
.not(a) ~a ans = 0
La disyunción exclusiva >> xor(4>8,33~=9+7)
xor(a,b) aVb ans = 1
Cuantificador universal >> all([4 5 7 9])
all(A) "A Si todos son no nulos el valor es 1. ans = 1

46
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

>> all([4 5 7 9 0])


ans = 0
Cuantificador particular >> any([4 5 7 9 0])
Si algún elemento es no nulo el ans = 1
valor es 1 >> any([0 0 0 0 0 0 0])
any(A) $A ans = 0
>> any([0 0 0 0 0 0 6])
ans = 1
>> find([7 6 0 -4;5 -1 3
0;0 2 9 0])
ans = 1
2
Busca los elementos no nulos, y los enumera, 4
find(A)
indicando el lugar donde se hallan 5
6
8
9
10
>> find([7 6 0 -4;5 -1 3
0;0 2 9 0]>5)
Busca los elementos mayores que el valor d, e ans =
find(A>d)
indica el lugar donde se encuentran. 1
4
9

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 𝑣 =
𝑛

e) Hallar la varianza, y desviación estándar de los datos, con:


∑𝑛 2
𝑖=1(𝑥𝑖 −𝑥̅ ) 𝑓𝑖
𝑣=
𝑛

Solución

a) Indicar cuantas veces la temperatura fue mayor de 30 grados.

>> 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]


T = Columns 1 through 14
25 38 30 33 34 35 36 38 39 39 40 39 37 35
Columns 15 through 24
35 35 34 33 32 32 31 30 28 24
>> T>30
ans = Columns 1 through 14
0 1 0 1 1 1 1 1 1 1 1 1 1 1
Columns 15 through 24
1 1 1 1 1 1 1 0 0 0

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

b) El número de horas que la temperatura estuvo entre 25 y 35 grados.

>> T>25 & T<35


ans = Columns 1 through 14
0 0 1 1 1 0 0 0 0 0 0 0 0 0
Columns 15 through 24
0 0 1 1 1 1 1 1 1 0
>> sum(T>25 & T<35)
ans = 10
>> find(T>25 & T<35)
ans = 3 4 5 17 18 19 20 21 22 23
>>

Rpta: 10 veces, en las horas 3 4 5 17 18 19 20 21 22 23

c) El número de horas que la temperatura no estuvo entre 20 y 30 grados.

>> not(T>20 & T<30)


ans = Columns 1 through 14
0 1 1 1 1 1 1 1 1 1 1 1 1 1
Columns 15 through 24
1 1 1 1 1 1 1 1 0 0
>> find(not(T>20 & T<30))
ans = Columns 1 through 14
2 3 4 5 6 7 8 9 10 11 12 13 14 15
Columns 15 through 21
16 17 18 19 20 21 22
>> sum(not(T>20 & T<30))
ans = 21
>>

Rpta: 21 veces en las horas: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20


21 22

48
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

PROGRAMACION EN MatLab

Para la estructura de programación en MATLAB se requiere conocer por lo menos


los siguientes comandos:

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

La forma más simple de una bifurcación del tipo if . . . end es la siguiente

if condición
Sentencias
end

Aquí se ejecuta un solo conjunto de instrucciones

Esquema logico Estructura lógica


Pr ograma
......
en MatLab
Si exp. condicional

......üï
ïï Instrucciones
......ý
ï MatLab
......ïïïþ

50
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Diagrama de flujo End


Pr ograma
......
en MatLab
Falso Sentencia
if
Verdadero

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

Archivo: multiplo35.m Ejecución en MatLab


% Programa que determina si un entero >> multiplo35
positivo es Ingrese un entero positivo: sqrt(2)
% multiplo de 3 o de 5 El numero no es entero positivo
n=input('Ingrese un entero positivo'); >> multiplo35
if n~=round(n) | n<=0 Ingrese un entero positivo: -8
disp('El numero no es entero
El numero no es entero positivo
positivo')
>> multiplo35
break
end Ingrese un entero positivo: 60
El numero es múltiplo de 3
if rem(n,3)==0 El numero es múltiplo de 5
disp('El numero es múltiplo de 3') >> multiplo35
end Ingrese un entero positivo: 57
if rem(n,5)==0 El numero es múltiplo de 3
disp('El numero es múltiplo de 5') >> multiplo35
end Ingrese un entero positivo: 56
if rem(n,3)~=0 & rem(n,5)~=0 El numero no es múltiplo de 3, ni de
disp('El numero no es múltiplo de 3, 5
ni de 5') >>
end

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

Archivo: sueldo.m Ejecución en MatLab


>> sueldo
% programa que calcula el sueldo de una indique las ventas efectuadas en el
persona mes 30000
% en base al monto de las ventas indique el monto base de las ventas
% Si las ventas son menor o igual que un 25000
monto M, el sueldo es S indique el salario base
% si la ventas superan M, el sueldo es S 1200
mas El sueldo de cada trabajador es de:
% la diferencia de las ventas con M 1250.00 nuevos soles
V=input('indique las ventas efectuadas >> sueldo
en el mes\n'); indique las ventas efectuadas en el
M=input('indique el monto base de las mes 50000
ventas\n'); indique el monto base de las ventas
S=input('indique el salario base\n'); 60000
if (V>M) indique el salario base
S=S+0.01*(V-M); 1200
end El sueldo de cada trabajador es de:
fprintf('El sueldo de cada trabajador es 1200.00 nuevos soles
de: %6.2f nuevos soles\n',S); >>

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.

Sentencia Condicional: if – else - end

Aquí se ejecutan dos grupos de instrucciones

Esquema logico Estructura lógica

52
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Diagrama de flujo Pr ograma


......
en MatLab
Si exp. condicional
Falso
Sentencia
....ü
ïï Instrucciones
if
ý
....ïïþ 01 MatLab
Verdadero
Else
Grupo 1 de Grupo 2 de ....ü
ïï Instrucciones
Instrucciones Instrucciones
ý
....ïïþ 02 MatLab
End
End
Pr ograma
......
en MatLab

Ejemplo: Determinar si un numero entero positivo es par o impar


Archivo: multiplo35.m Ejecucion en MatLab
% Programa que determina si un entero >> paroimpar
positivo es Ingrese un entero positivo: 67
% par o impar El numero entero es impar
n=input('Ingrese un entero positivo: >> paroimpar
'); Ingrese un entero positivo: 34
if n~=round(n) | n<=0
El numero entero es par
disp('El numero no es entero
positivo') >> paroimpar
break Ingrese un entero positivo: sqrt(2)
end El numero no es entero positivo
>> paroimpar
if rem(n,2)==0 Ingrese un entero positivo: exp(log(5))
disp('El numero entero es par') El numero entero es impar
else
disp('El numero entero es impar')
end

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

SENTENCIA CONDICIONAL: IF – ELSEIF – ELSE - END


Aquí la ventaja es que se pueden ejecutar tres grupos de instrucciones en forma disyuntiva, es decir en forma
independiente.

Esquema lógico Estructura Lógica


Diagrama de flujo ......Pr ograma en MatLab
if exp. condicional
......ü ïï Instrucciones
Falso ý
Sentencia ......ïïþ 01 MatLab
if
elseif exp. condicional
Verdadero
Falso
Sentencia ......ü
ïï Instrucciones
Grupo 1 de ý
elseif
Instrucciones ......ïïþ 02 MatLab
Verdadero else
Grupo 3 de Grupo 2 de
......ü ïï Instrucciones
ý
Instrucciones Instrucciones ......ïïþ 03 MatLab
end
end ......Pr ograma en MatLab

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

Archivo: paroimpar2.m Ejecución en MatLab


% Programa que determina si un
entero positivo es >> paroimpar2
% par o impar Ingrese un entero positivo: 45
n=input('Ingrese un entero El numero entero es impar
positivo: '); >> paroimpar2
if n~=round(n) | n<=0 Ingrese un entero positivo: -78
disp('El numero no es entero El numero no es entero positivo
positivo') >> paroimpar2
break Ingrese un entero positivo: sqrt(2)
elseif rem(n,2)==0 El numero no es entero positivo
disp('El numero entero es par') >> paroimpar2
else Ingrese un entero positivo: 44
disp('El numero entero es El numero entero es par
impar') >>
end

Ejemplo: El siguiente programa comprueba si un numero es positivo, si no lo es produce un


mensaje de error con el comando disp que sirve para escribir mensajes en la pantalla (más
adelante se explica con detalle la acción de este comando). A continuación comprueba si, siendo
positivo, es par. La orden rem(p,q) calcula el resto de la división euclídea de p por q. Si el número
es positivo lo divide por 2 y en caso contrario, le suma 1 y el resultado lo divide por 2.

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

......Pr ograma en MatLab


switch exp resion
case valor 1
...... ü
ïï
ý Grupo 1 de instrucciones
...... ïïþ
case valor 2
...... ü ïï
ý Grupo 2 de instrucciones
...... ïïþ
case valor 3
...... ü
ïï
ý Grupo 3 de instrucciones
...... ïïþ
otherwise
...... ü ïï
ý Grupo 4 de instrucciones
...... ïïþ
end
......Pr ograma en MatLab

57
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

¿Cómo funciona la sentencia switch-case?


El valor de la expresión del switch se compara con los valores de cada comando case. Si se encuentra
una coincidencia, entonces se ejecutan las instrucciones que siguen a dicho comando case (solo un
grupo de instrucciones).
Si hay más de una coincidencia, solo se atenderá a la primera que se encuentra.
Si no se encuentran coincidencias se ejecutan las instrucciones que siguen al comando otherwise, si
este ha sido declarado (es opcional).
Si no se encuentran coincidencias y no está declarado el comando otherwise, entonces no se
ejecutara ninguna instrucción o grupo de instrucciones.
Una sentencia case puede tener más de un valor con el que establecer coincidencias. Para declararlos
solo es necesario ponerlos a continuación, uno detrás del otro, entre llaves y separados por comas, de
la forma: {valor1, valor2, valor3, . . . }. En este caso al tener más de un valor, el grupo de
instrucciones correspondientes al case se ejecutara siempre que al menos haya coincidencia con
alguno de los valores indicados.

Ejemplo: Decidir de un conjunto de notas de 0 a 20, en forma de un vector, y luego indicar:


a) cuantas están entre 0 y 10 inclusive.
b) Cuantas están entre 11 y 13 inclusive.
c) Cuantas están entre 14 y 17 inclusive.
d) Cuantas están entre 18 y 20 inclusive.

Archivo: notalumno.m Ejecución en MatLab


function notalumno(x) >> notalumno(5)
% Programa que discrimina notas: Desaprobado
% Dado las notas en forma de vector >> notalumno(15)
%cuantas están entre 0 y 10 inclusive. Bueno
%Cuantas están entre 11 y 13 inclusive. >> notalumno(sqrt(2))
%Cuantas están entre 14 y 17 inclusive.
Compre un cerebro
%Cuantas están entre 18 y 20 inclusive.
>> notalumno(-pi)
switch x Compre un cerebro
case {0,1,2,3,4,5,6,7,8,9,10} >> notalumno(20)
disp('Desaprobado') Excelente
case {11,12,13} >>
disp('Regular')
case {14,15,16,17}
disp('Bueno')
case {18,19,20}
disp('Excelente')
otherwise
disp('Compre un cerebro')
end

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

%Etapas de un ser humano


%Uso del comando menu

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 for-end: el numero de iteraciones se define al comienzo del 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.

BUCLES DEL TIPO FOR-END


Estructura Lógica
for k = f : s :t
k: variable índice del bucle
....ü
ïï Comandos f: valor inicial de k
ý
....ïïþ en MatLab s: incremento del valor k, por defecto 1
t: valor límite de la variable k
end

Ejemplo: Sumar los 50 primeros números enteros positivos múltiplos de 7.


Solución:
SOLUCION:
Programa: sumnat.m Ejecución en MatLab
function s=sumnat(n) >> sumnat(3)
% esta función suma de ans = 6
% los n primeros números naturales >> sumnat(0)
% el resultado es la suma de tales ans = 0
números >> sumnat(-6)
s=0; ans = 0
for k=1:1:n >> sumnat(6)
s=s+k ans = 21
end >>

Por ejemplo, para sumar los 25 primeros términos de la serie 1/n:


>> n=0;
>> for i=1:25
n=n+1/i;
end
>> n
n =3.8160
Otra forma de definir una expresión es usando notación vectorial:
>> for x=[pi/6 pi/4 pi/3]

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

Programa: senserie.m Ejecución en MatLab


% este programa calcula el seno de x, >> senserie
donde x esta en radianes ingrese el valor del ángulo en
% mediante la serie de Taylor % con n grados sexagesimales: 190
términos, en la serie ingrese el numero de términos a
% las variables de entrada son x en considerar: 3
grados sexagesimales El seno aproximado es: 0.5801
% y n que es el numero de términos >> senserie
% La salida es el valor aproximado del ingrese el valor del ángulo en
seno grados sexagesimales: 150
x=input('ingrese el valor del ángulo en ingrese el numero de términos a
grados sexagesimales: \n'); considerar: 7
n=input('ingrese el numero de términos El seno aproximado es: 0.5000
a considerar: \n'); >>
s=0;xr=x*pi/180;
for k=0:1:n-1
s=s+((-
1)^k)*(xr^(2*k+1))/factorial(2*k+1);
end
fprintf('El seno aproximado es: %5.4f
\n',s)

Puede comprobar para x = 1, en sexagesimales seria 180/pi.


k
1 1 1 1 (- 1)
sen(1) = - + - + ..... + + ....
1! 3! 5! 7! (2k + 1)!
Ejemplo: Ahora vamos a considerar el problema de cambiar los elementos de un vector bajo ciertas
condiciones.
El programa multiplica por tres los elementos del vector que sean positivos, y múltiplos de 3 ó 5; y
eleva al cuadrado los negativos mayores que -10.
SOLUCION:

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

% Este programa cambia los elementos de un vector.


% multiplica por tres los elementos positivos, y múltiplos de 3 ó
5
% eleva al cuadrado los negativos mayores que -10.

x=input('Ingrese un vector con elementos enteros: \n');


n=length(x);

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.

n=input('ingrese el orden de la matriz ');


A=ones(n,n);
for k=2:1:n
for l=2:1:n
A(k,l)=A(k,l-1)+A(k-1,l);
end
end
A
Ejecucion en MatLab
>> matrizpascal
ingrese el orden de la matriz 5
A=
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
>> matrizpascal
ingrese el orden de la matriz 4
A=
1 1 1 1
1 2 3 4
1 3 6 10
1 4 10 20
>>

Ejemplo09: Hallar los términos de la sucesión de Fibonacci hasta el término n

% Calculo de los terminos de la sucesion de Fibonacci:


% F(1)=1
% F(2)=1
% F(n+2)=F(n+1)+F(n), para todo n entero positivo

n=input('Ingrese la cantidad de terminos a mostrar: ');


F=zeros(n,1);
F(1)=1;
F(2)=1;
if n==1 | n==2
disp(F)
elseif n>2
for k=1:n-2
F(k+2)=F(k+1)+F(k);
end
disp(F)
else
disp('El valor de n, no es el adecuado')
end

68
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

BUCLES DEL TIPO WHILE - END

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

x=input('Ingrese el valor de x: \n');


n=1;sn=1;s=sn;
while sn>0.000001 & n<30

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
>>

LOS COMANDOS BREAK Y CONTINUE

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.

% Calculo de la raiz cuadrada de los n primeros enteros positivos


% usando el comando for-end
n=input('ingrese la cantidad de terminos: ');
u=[1:n]';
v=ones(n,1);
for k=1:1:n;
v(k)=sqrt(u(k));
end
%R=[u v];
%disp(R)
disp('')
disp('numero raiz cuadrada')
for k=1:n;
fprintf('%5.0i %5.4f\n',u(k),v(k))
end

Ejemplo02: Hallar el factorial de un número entero no negativo

% Calculo de el factorial de un numero entero no negativo

n=input('El valor de n, es: ')


p=1;

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

fprintf('El factorial de %5i es %5i\n',n,fact)

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

Según ello resolver: ex + x = 0, x Î [- 1,0]

% Solucion de una ecuacion f(x) = 0, por el metodo de Newton


%
clear
f=0;
df=0;
x(1)=input('ingrese el valor inicial');
tol=input('Ingrese la tolerancia');
miter=input('ingrese el nuemro maximo de iteraciones');
k=1;
d=1;
while abs(d)>=tol & k<miter
[f df]=fun(x(k));
x(k+1)=x(k)-(f/df);
d=x(k+1)-x(k);
k=k+1;
end

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

Ejemplo04: Método del Punto Fijo


Considérese la ecuación x = g (x), Donde la función g cumple las condiciones para aplicar el método del punto fijo. La
solución se da por un proceso iterativo:
ìïï x1
í
ïïî xk + 1 = g ( xk ), k = 1, 2,3,L
x0 = 2
Según ello resolver: 1 2
- 4 + 4x - x = x
2

% Solucion de una ecuacion por el metodo del Punto Fijo


%
% Calculo de los terminos de la sucesion de Fibonacci:
% con la funcion recursiva:
% F(1)=1
% F(2)=1
% F(n+2)=F(n+1)+F(n), para todo n entero positivo

x1=input('Ingrese la aproximacion inicial: ');


tol=input('Ingrese la tolerancia de error: ');
miter=input('Ingrese el numero maximo de iteraciones: ');

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).

7. Represente la siguiente función de dos formas distintas:

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:

Tipo de Peso Peso (2 – 10 Peso (10 – 50 libras)


servicio (0 – 2 libras)
libras)
Tierra 1,50 € 1,50 € + 0,50 € 5,50 € + 0,30 €
adicionales por adicionales por cada
cada libra o libra o fracción de
fracción de libra, a libra, a partir de las
partir de las 2 10 libras de peso.
libras de peso.
Aire 3,00€ 3,00 € + 0,50 € 10,20 € + 0,60 €
adicionales por adicionales por cada
cada libra o libra o fracción de
fracción de libra, a libra, a partir de las
partir de las 2 10 libras de peso.
libras de peso.
Nocturno 18 € 18 € + 6 € No se realizarán
adicionales por entregas para
cada libra o paquetes que pesen
fracción de libra, a más de 10 libras.
partir de las 10
libras de peso-

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.

k1  800 N / m, k2  1700 N / m, d  20mm


Escriba una función que calcule el peso W de un objeto en función del desplazamiento x de la bandeja en la
báscula. Utilice la siguiente definición para dicha función : W=báscula (x)
a) Utilice posteriormente esta función en la Ventana de Comandos para calcular el peso de dos objetos
que producen un desplazamiento de la bandeja de 1,5 y 3,1 cm.
b) Escriba un programa script que represente gráficamente el peso en función del desplazamiento x ,
para 0  x  4 cm.

80
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

APLICACIONES DE ANALISIS NUMERICO

Para resolver una ecuación del tipo: E (x)= 0 , se usara el comando: fzero

% Solución de una ecuación

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'))

% maximos y minimos de una funcion


fplot('x^3-12*x^2+40.25*x-36.5',[3 8])
[min fval]=fminbnd('x^3-12*x^2+40.25*x-36.5',3,8) % minimo de una
funcion
fplot('x^3-12*x^2+40.25*x-36.5',[0 8])
[max fval2]=fminbnd('-1*(x^3-12*x^2+40.25*x-36.5)',-1,8) % maximo
de una funcion
%Integracion numerica
clear
val2=quad('1/(x^2+1)',1,2) % sale error
format long
val3=quad('1./(x.^2+1)',1,2) % integración de simpson
val4=quad('1./(x.^2+1)',1,2,0.0001) % integración de simpson

val5=quadl('1./(x.^2+1)',1,2) % método de lobatto


val6=quadl('fun',1,2) % método de lobatto

%Integracion de una función en formato de puntos


x=[1 2 3 4 5 6 7 8 9];
y=[1 4 9 16 25 36 49 64 81];
val7=trapz(x,y)

Método de Newton para resolver la ecuación f(x) = 0


Este método requiere de algunas condiciones para la función f, como son la derivada, que además no
se anule en el intervalo dado.
f (xn )
xn+ 1 = xn - , " n = 0,1, 2,.....
f '(xn )
x
Resolviendo: e + x = 0 f (x)= ex + x f '(x)= e x + 1
Las funciones de iteracion:
fun.m dfun.m
function y=fun(x) function
y=exp(x)+x; y=dfun(x)
y=exp(x)+1;
El programa que resuelve la ecuación

81
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

newton.m
function
[resultado,iteraciones]=newton(fun,dfun,x,precision)

% Metodo del punto fijo para resolver fun(x) = 0


%
% Variables de entrada
% fun: La función
% dfun: La derivada de la funcion fun
% x: El valor inicial de la raiz
% tolerancia: El valor máximo del error
% Variables de salida
% resultado: La solucion aproximada
% iteraciones: El numero de iteraciones
iteraciones=0;
x0=x;
d=feval(fun,x0)/feval(dfun,x0)
while abs(d)>precision
x1=x0-d;
iteraciones=iteraciones+1;
x0=x1;
d=feval(fun,x0)/feval(dfun,x0);
end;
resultado=x0;

Resultado en la ventana de comandos de MatLab:

>> [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
>>

METODO DEL PUNTO FIJO


Función: e x + x = 0 , equivalente a: x = - e x , punto fijo en [-1, 0]
Programa en MatLab

82
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

pfijo.m
function [sol,x,err,k]=pfijo(g,x1,tol,maxiter)

% Aplica punto fijo a la expresion: x = g(x) en el


intervalo [a, b]
%
% Variables de entrada
% g: funcion
% xi: valor inicial de la raiz
% tol: precision deseada
% maxiter: tope de iteraciones
% sol: solucion aproximada
% x: vector de iteraciones
% err distancia entre los dos ultimos
% k: número de iteraciones
sol=0;
x(1)=x1;
err=tol+1;
sol=x(1);
k=1;

while err>tol & k<maxiter


x(k+1)=feval(g,x(k));
err=abs(x(k+1)-x(k));
k=k+1;
end

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);

Ejecutando en la ventana de comandos de MatLab

>> [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

METODO DE BISECCION: resolviendo x = G (x)


Función: e x + x = 0 , equivalente a: x = - e x
g(x) = exp(x) h(x) = -x en [-2,0]
f(x)=exp(x)+x, x en [-100,5] 2
200
1.8

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

Tiene una raíz en el intervalo: [-1, 0]

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

sol=0; x=[]; err=b-a; sol=0; iter=0;


fa=feval(fun,a); fb=feval(fun,b);

if fa*fb>0;
disp('La funcion debe tener diferente signo en los
extremos del intervalo')
return
end

while err>tol & iter<maxiter


c=(a+b)/2; x=[x,c]; fc=feval(fun,c);

if fc==0; % casualidad de que c sea la


solución
a=c;b=c;
elseif fa*fc<0; % cambio de signo en [a, c]
b=c; fb=fc;
else fb*fc<0; % cambio de signo en [c, b]
a=c; fa=fc;
end

err=b-a;iter=iter+1; % contador de iteraciones


end
sol=c; % solucion de salida
if err>tol;
disp('Insuficientes iteraciones')
end

El archivo de la función es:


fun.m
function y=fun(x)
y=exp(x)+x;

Ejecutando en la ventana de comandos de MatLab

>> [sol,x,incr,iter]=biseccion('fun',1 ,8,0.0001,40)


la funcion debe tener diferente signo en los extremos del intervalo
sol = 0
x = []

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

El archivo de la función es:


fun.m
function y=g(x)
y=exp(x)+x;

Ejecutando en la ventana de comandos de MatLab


>> [p1,err,k,y]=secant('fun',-1,0,0.01,0.001,40)
p1 = -0.5671
err = 0.0051
k= 3
y = 6.4583e-005
>>

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

>> help nchoosek


>> type nchoosek

Hallando la n esima fila del triangulo de Pascal

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
>>

SISTEMA LINEAL TRIANGULAR


Resolución de un sistema triangular superior: AX=B, por el método de sustitución regresiva.
El método funciona Siempre los elementos de la diagonal sean no nulos
n

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

Ejecución en la ventana de comandos


>> A=[1 2 3 8;0 4 5 7;0 0 6 6;0 0 0 2];B=[8; 3; 5;7];
>> sustiregresiva(A,B)
ans =
-7.9167
-2.0417
-2.6667
3.5000
>>

GRAFICA DE LOS VECTORES DE DIRECCIÓN DE UNA ECUACIÓN DIFERENCIAL


ORDINARIA

%Considere una función z = f(t,y) continua en [t0,t1]x[c,d]


%Y sea al ecuación diferencial: y' = f(t,y), con y(t0)= y0

%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

Método de Euler para resolver una ecuación diferencial

90
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Construcción de las aproximaciones a la solución del problema inicial: y ' = f (t , y) con


y (a)= y0 continua en [a, b]´ [c, d ] dadas por yk + 1 = yk + h f (tk , yk ), k = 0,1,...., M - 1.
Programa: euler.m
function E=euler(f,a,b,ya,M)
% Considere una función z = f(t,y) continua en [t0,t1]x[c,d]
% Y sea al ecuación diferencial: y' = f(t,y), con y(t0)= y0
% Datos
% f es la función en forma de caracteres 'f'
% a y b son los extremos del intervalo de definición
% ya es la condición inicial y(a)
% M es el numero de pasos
%
%Resultado
% E=[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
Y(k+1)=Y(k)+h+feval(f,T(k),Y(k))
end
E=[T' Y']
% Graficando la solucion
x=E(:,1);y=E(:,2);plot(x,y),grid

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
>>

SOLUCION DE UNA ECUACION DIFERENCIAL


Metodo de Heun
Construcción de las aproximaciones a la solución del problema inicial: y ' = f (t , y) con
y (a)= y0 continua en [a, b]´ [c, d ] dadas por
h
yk + 1 = yk + éêf (tk , yk )+ f (tk + 1 , yk + h * f (tk , yk ))ù
ú, k = 0,1,...., M - 1.
2ë û
Programa: heun.m
function E=heun(f,a,b,ya,M)
% Considere una función z = f(t,y) continua en [t0,t1]x[c,d]
% Y sea al ecuación diferencial: y' = f(t,y), con y(t0)= y0
% Datos
% f es la funcion en forma de caracteres 'f'
% a y b son los extremos del intervalo de definicion
% ya es la condicion inicial y(a)

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

Ejecucion en la ventana de comandos


>> E=heun('f',0,3,1,30)
E=
0 1.0000
0.1000 1.0538
0.2000 1.1098
…………………………..
2.9000 3.1740
3.0000 3.2631
>>

SOLUCION DE UNA ECUACION DIFERENCIAL


Método de Taylor de orden 4
Construcción de las aproximaciones a la solución del problema inicial: y ' = f (t , y) con
y (a)= y0 continua en [a, b]´ [c, d ], evaluando y '', y ''' e y '''' y usando el polinomio de Taylor en
cada paso.

Fractal de Feigenbaum
http://mimosa.pntic.mec.es/jgomez53/matema/conocer/fractales.htm

Un problema similar tiene lugar en la ecología, y la predicción de las poblaciones biológicas. La


ecuación sería simple si la población sólo creciera de forma indefinida, pero los efectos de los
predadores y un suministro de alimento limitado hacen esta ecuación incorrecta. La ecuación más
simple que tiene esto en cuenta es la siguiente:

Población del año siguiente = r * población de este año * (1 – población de este año)

En esta ecuación, la población es un número entre 0 y 1, donde 1 representa el máximo de población


posible y el 0 la extinción. R es la tasa de crecimiento. La pregunta era, ¿Cómo afectan estos
parámetros a la ecuación?. La respuesta obvia es que una mayor tasa de crecimiento implica que un
aumento en la población, mientras que una menor tasa de crecimiento decrementará el número. Esta
tendencia es cierta para algunas tasas de crecimiento, pero no para todas ellas.

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.

Figura 3: El diagrama de bifurcación para la ecuación de poblaciones. (James Gleick, Caos –


Creando una Nueva Ciencia, página 71)

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])

Ejecutando en la ventana de comandos


1

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

METODO DEL PUNTO FIJO CON MATLAB

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

Para hallar un punto fijo de la función se cambiara un poco la estructura de la función:

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

Donde vemos que el punto fijo esta en el intervalo [0,5]


Graficando las funciones en el intervalo de: [0,5]

>> 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

Ahora visualizamos que el punto fijo esta en el intervalo [1,2]


Entonces se puede inicializar el programa de punto fijo, con el valor inicial 1

function B=ptofijo(n)

95
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

% Programa de punto fijo para


% la funcion de iteracion: g(x)=20/(x^2+2x+10)
% para n iteraciones
x=1;
A(1)=x;
for k=2:n;
x=20./(x.^2+2*x+10);
A(k)=x;
end
B=A';

Ejecución en la ventana de comandos, con 10 y con 20 iteraciones:

>> 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.

Tabla A.1: Caracteres y operadores aritméticos.

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

Tabla A.2: Operadores relacionales y lógicos

Carácter Descripción
<= Menor o igual que
>= Mayor o igual que
== Igual.
= No igual (diferente)
 Y lógico
 O lógico
 NO

Tabla A.3: Comandos de gestión de entorno de trabajo


Carácter Descripción
Cd Cambia el directorio actual.
Clc Limpia la ventana de comandos
Clear Borra todas las variables de memoria
Clear x y z Borra las variables x, y y z de memoria
Fclose Cierra un fichero
Fopen Abre un fichero.
Global Declara variables globales
Help Muestra ayuda de comandos MATLAB
Lookfor Buscar una palabra determinada en la ayuda de MATLAB
Who Muestra las variables actuales en memoria
Whos Muestra información de las variables actuales en memoria

Tabla A.4: Variables predefinidas


Carácter Descripción
Ans Valor de la última expresión
Eps La diferencia más pequeña entre dos números.
I Raíz cuadrada de menos uno.
Inf Infinito
J Raíz cuadrada de menos uno (igual que i).
NaN Del inglés Not a Number (resultado no numérico)
Pi Número 

Tabla A.4: Variables predefinidas


Carácter Descripción
Format bank Dos dígitos decimales
Format compact Elimina líneas en blanco
Format long Formato de punto fijo con 14 dígitos
Format long e Notación científica con 15 dígitos decimales
Format long g Los 15 dígitos fijos o en coma flotante de un número
Format loose Añade líneas en blanco

100
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Format short Formato de punto fijo con 4 dígitos decimales


Format short e Notación científica con 4 dígitos decimales
Format short g Base de 5 dígitos fijos o en coma flotante.

Tabla A.6: Funciones matemáticas elementales


Carácter Descripción
abs Valor absoluto
exp Exponencial
factorial Función factorial
log Logaritmo natural o neperiano
log 10 Logaritmo en base 10
sqrt Raíz cuadrada.

Tablas A.7: Funciones trigonométricas


Carácter Descripción Carácter Descripción
acos Arcoseno (coseno inverso) Cos Coseno
acot Arcocotangente (tangente Cot Tangente
inversa)
asin Arcoseno (seno inverso) Sin Seno
atan Arcotangente (tangente inversa) Tan Tangente

Tabla A.8: Funciones hiperbólicas


Carácter Descripción Carácter Descripción
Cosh Coseno hiperbólico Sinh Seno hiperbólico
Coth Cotangente hiperbólica Tanh Tangente
hiperbólica

Tabla A.9: Redondeo


Carácter Descripción
Ceil Redondea hacia el infinito
Fix Redondea hacia cero
Floor Redondea hacia menos infinito.
Rem Devuelve el resto de la división de dos números
Round Redondea al entero más próximo
Sign Devuelve el signo.

Tabla A.10: Creación de arrays


Carácter Descripción
Diag Crea una matriz diagonal a parir de un vector. Crea un
vector a partir de la diagonal de una matriz.
Eye Crea una matriz identidad (matriz con unos en la diagonal
y ceros en el resto de las posiciones)
Linspace Crea un vector con espaciado constante
Ones Crea una matriz de unos.
Rand Crea una arrays con números aleatorios.
Randn Crea una matriz con números aleatorios con distribución
normal.

101
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Randperm Crea un vector a partir de la permutación de números


enteros.
Zeros Crea un array de ceros.

Tabla A.11: Manipulación de arrays.


Carácter Descripción
length Número de elementos de un vector.
reshape Redimensiona una matriz.
size Tamaño de una matriz.

Tabla A.12: Funciones relacionadas con arrays


Carácter Descripción
cross Calcula el producto cruzado de dos vectores.
det Calcula el determinante.
dot Calcula el producto escalar de dos vectores
inv Calcula la inverso de una matriz.
max Retorna el valor máximo.
mean Calcula el valor medio.
median Calcula el valor mediano.
min Retorna el valor mínimo.
sort Ordena los elementos en orden ascendente
std Calcula la desviación estándar.
surn Calcula la suma de elementos.

Tabla A.13: Entrada y Salida


Carácter Descripción
disp Visualiza una salida.
fprintf Visualiza o guarda una salida.
inpu t Pide al usuario una entrada por teclado.
uiimport Inicializa el asistente de importación de datos.
xlsread Importa dalos en formato Excel.
xlswrite Exporta datos en formato Excel.

Tabla A.14: Gráficos bidimensionales

Carácter Descripción

102
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

bar Crea un gráfico de barras verticales.


barh Crea un gráfico de barras horizontales.
fplot Representa gráficamente una función.
hist Crea un histograma.
hold of f Finaliza hold on.
hold on Mantiene un gráfico abierto para seguir añadiendo gráficas
line Añade gráficas a un gráfico existente.
loglog Crea un gráfico con escala logarítmica en ambos ejes.
pie Crea un gráfico de tarta o circular.
plot Crea un gráfico.
polar Crea un gráfico en coordenadas polares.
semilogx Crea un gráfico con escala logarítmica en el eje x.
semilogy Crea un gráfico con escala logarítmica en el eje y.
stairs Crea un gráfico de escalera.
stem Crea un gráfico de tallo o líneas verticales.

A.24: Cálculo simbólico


Carácter Descripción
collect Agrupa los términos de una expresión.
diff Calcula la derivada de una ecuación.
double Convierte número simbólicos a su forma numérica.
dsolve Resuelve una ecuación diferencial ordinaria.
expand Desarrolla una expresión.
ezplot Crea un gráfico a partir de una expresión.
factor Factoriza una expresión en polinomios de grado menor.
findsym Visualiza las variables simbólicas de una expresión.
int Calcula la integral de una expresión.
pretty Visualiza una expresión en forma algebraica.
simple Encuentra una expresión con el menor número de
simplify caracteres.
Simplifica una expresión.
solve Resuelve una ecuación o un sistema de ecuaciones.

subs Substituye números en expresiones simbólicas.


sym Crea un objeto simbólico.
syms Crea varios objetos simbólicos con una sola declaración.

103

También podría gustarte