Sie sind auf Seite 1von 65

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

6
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

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

7
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

j1 = 87
Ingrese la segunda puntuacion:98
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');

8
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

ingrese su edad:
45
>> 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

9
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

3 9 27
4 16 64
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:

10
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Columns 1 through 12
5 10 15 20 25 30 35 40 45 50 55 60
Columns 13 through 20
65 70 75 80 85 90 95 100

el valor promedio es
3.9199
>>

Ejemplo: Mostrar una tabla con los n primeros enteros positivos, sus cuadrados y sus cubos.
Solución:
Ejemplo4_2.m
% Este programa crea una tabla de los
primeros n números enteros positivos
% sus cuadrados y sus cubos
n=[1:5]';
cuadrado=n.^2;
cubo=n.^3;
disp(' n n^2 n^3')
tabla=[n,cuadrado,cubo];
disp(tabla)
Ejecución en MatLab:
>> ejemplo4_2
n n^2 n^3
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125

El comando fprintf
Este comando visualiza salidas de programas en la pantalla, a diferencia del disp., aquí se puede dar
algún formato a la presentación de los datos.
Visualizando mensajes de texto:
fprintf(‘Mensaje en forma de cadena’)

ejemplo02.m
%ahora tenemos un programa que
obtiene cuadrados y cubos
n=[1:5]';
cuadrado=n.^2;
cubo=n.^3;
disp(' n n^2
n^3')
tabla=[n,cuadrado,cubo];
disp(tabla)
fprintf('ahi tenemos la relación de
cuadrado y cubos')

11
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

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


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)

12
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

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)

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

13
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

S=sum(D);
P=mean(D);
fprintf('\nEl valor medio de las lluvias es %6.2e mensual.\n',P)
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

14
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

ej06.m
% archivo ejecutable de nombre: ejem06.m
% uso de los comandos de entrada por teclado, y salida por
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

15
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

la suma A+B, la resta A-B es :


10 4 6 8
6 10 9 14
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

16
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000


8.0000 9.0000 10.0000

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

17
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

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

19
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

'Mes'
'LLuvia'
>>
>> [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.

20
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

CeldaInicial: A partir de esta se empezara la escritura de los datos, este parámetro debe ser una
cadena.
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

21
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

>> [estado]=xlswrite('arch_datos2.xlsx',A,'matriz','A5:C7')
estado = 1
Archivo en la PC, en la carpeta de trabajo de MatLab

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

23
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

F(i) = F(i-1) + F(i-2);


end
f = F(n);
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, Re q , 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) >>
% Cálculo del valor de una
y=funcuad(1),z=funcuad(2),w=funcuad(3)
función cuadrática y= 1
% z = 16
% El argumento de entrada es: w = 37
% x: un numero real
% >> y=funcuad([1,2,3])
% El argumento de salida es: y = 1 16 37
% y = 3x^2+6x-8, tambien >> y=funcuad([1;2;3])
real
y=
y=3*x.^2+6*x-8; 1
16
37
>>

29
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Archivo script: funcuad.m

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
La conjunción Alt 38 >> (6<9 & 0==7-6)+~(5>=3 & 7~=8-1)
& y 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

44
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

>> 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
12 4 3
B=
12 3 1
10 -1 7
>> C=A<B
C=
110
001
>> C(:)
ans =
1
0
1
0
0

45
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

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])
Si todos son no nulos el valor es 1. ans = 1
all(A) "A >> 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,
find(A) 4
indicando el lugar donde se hallan
5
6
8
9

46
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

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

47
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

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

Diagrama de flujo Pr ograma


......
en MatLab
Si exp. condicional
Falso Sentencia
if ......üï
ïï Instrucciones
Verdadero ......ý
ï MatLab
......ïïïþ
Instrucciones
End
Pr ograma
End ......
en MatLab

Ejemplo: Decidir si un numero entero positivo ingresado por la ventana de comandos es múltiplo de
3 o de 5.
Solución

50
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Archivo: multiplo35.m Ejecución en MatLab


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

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 25000
un monto M, el sueldo es S indique el salario base
% si la ventas superan M, el sueldo es 1200
S 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 1200.00 nuevos soles
es de: %6.2f nuevos soles\n',S); >>

51
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Existe también la bifurcación múltiple, en la que pueden concatenarse tantas condiciones como se
desee, y que tiene la forma:
if condicion1
bloque1
elseif condicion2
bloque2
elseif condicion3
bloque3
else % opción por defecto, cuando no se cumplan las condiciones 1,2,3
bloque4
end
Donde la opción por defecto else puede ser omitida: si no esta presente no se hace nada en caso
de que no se cumpla ninguna de las condiciones que se han chequeado.

Sentencia Condicional: if – else - end

Aquí se ejecutan dos grupos de instrucciones

Esquema logico Estructura lógica

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

52
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

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
>> paroimpar
positivo')
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
ìï 100p h 0 £ h £ 29
ïï
V (h) = ïí 4 æ3h 3
ö 4000p
ïï p çç - 47÷ ÷ - 29 < h £ 45
ïïî 3 çè 4 ÷
ø 3

53
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

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

Archivo: paroimpar2.m Ejecución en MatLab


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

55
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

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

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

57
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

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

58
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

59
PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

%Uso del comando menu


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

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

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

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

63
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

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

65

Das könnte Ihnen auch gefallen