0% encontró este documento útil (0 votos)
51 vistas8 páginas

Practica10 ProgramacionMatLab

1. El documento describe una práctica sobre programación en MATLAB. Explica que MATLAB puede automatizar tareas repetitivas y ofrece características de lenguajes como C, Fortran y Pascal. 2. Se describen dos tipos de archivos ejecutables en MATLAB: archivos de comandos y archivos de función. También se explican características del lenguaje de programación como bucles, condicionales y operadores. 3. Se proveen consejos para escribir buenos programas en MATLAB, incluyendo el uso de pseudocódigo, legibil

Cargado por

Denis15-16
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
51 vistas8 páginas

Practica10 ProgramacionMatLab

1. El documento describe una práctica sobre programación en MATLAB. Explica que MATLAB puede automatizar tareas repetitivas y ofrece características de lenguajes como C, Fortran y Pascal. 2. Se describen dos tipos de archivos ejecutables en MATLAB: archivos de comandos y archivos de función. También se explican características del lenguaje de programación como bucles, condicionales y operadores. 3. Se proveen consejos para escribir buenos programas en MATLAB, incluyendo el uso de pseudocódigo, legibil

Cargado por

Denis15-16
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 8

PRÁCTICA NUMERO 10

PROGRAMACIÓN EN MATLAB

Por: Ing. Mario René De León García.

La utilidad de MatLab es más evidente cuando muchas tareas que son repetitivas y engorrosas, pueden programarse para
hacer más sencillas estas labores. MatLab utiliza un lenguaje propio pero que incorpora muchas características de “C”,
considerándose un lenguaje de alto nivel como lo podría ser Fortran y Pascal; esto hace que aquellos usuarios que estén
familiarizados con estos programas no tengan que preocuparse por formalismos y sintaxis de programación.

Como se mencionó previamente, es posible crear dos tipos de archivos ejecutables con extensión “.m”; los archivos de
comandos y los archivos de función. Estos archivos pueden crearse desde el editor de archivos de MatLab o desde cualquier
editor de texto ASCII.

1. CARACTERÍSTICAS DEL LENGUAJE

Al llegar a esta práctica, el lector estará familiarizado con el uso de MatLab, por lo que estará listo para aplicar las
numerosas características de su lenguaje de programación, esto a través de ejemplos prácticos que le guiaran en el aprendizaje de
estas estructuras. Se aconseja su especial atención a los usos de las marcas de puntuación, así como a los diferentes
delimitadores y operadores, especialmente los operadores de matriz y operadores relacionales. Para el control del flujo de
instrucciones, MatLab dispones de lazos o bucles utilizando “for” y “while”; o bien bifurcaciones o construcciones “if-elseif-else” 0
“switch-case-otherwise. Todas las sentencias de control de flujo deben terminar con su respectiva sentencia “end”. Para más
información, vea la ayuda del programa.

2. ¿CÓMO HACER BUENOS PROGRAMAS?

Escribir archivos de comando o función en MatLab es más fácil de hacerlo que en otros lenguajes de programación que
existen, sin embargo, escribir un programa eficiente es un arte que viene a través de la experiencia. A continuación se presentan
algunos apuntes que ayudan y que deben tenerse en mente.

2.1 Pseudo código. Antes de iniciar a escribir un programa, utilice un pseudo código. Hágalo completamente en español,
piense en la estructura lógica y la correcta secuencia de las operaciones; defina las variables de entrada y salida; escriba
el programa con palabras sencillas. Al finalizar y estar completamente seguro de que el programa hace lo que usted
quiere, inicie la traducción al lenguaje de MatLab.

2.2 Legibilidad. Seleccione un nombre representativo para el programa, así como para las variables utilizadas. Escriba
suficientes comentarios en el cuerpo del programa. Diseñe y escriba una completa línea de comentarios de ayuda (Se
escribe al inicio del programa). Asegúrese de incluir la sintaxis de cómo usar el programa.

2.3 Manejabilidad. Mantenga su programa manejable, esto es, en procesos complicados divida los cálculos en programas o
funciones más pequeñas. Mantenga sus programas pequeños en longitud.

2.4 Robustez. Agregue opciones de verificación de errores y salida, incluyendo mensajes de ayuda en caso de un error.

2.5 Capacidad de expansión. Estructure el programa para poder extenderlo a otras aplicaciones u otro tipo de datos. Por
ejemplo, si usted escribe una función con variables escalares, pero considera que podría usarse posteriormente para
variables vectoriales, escriba el programa con esto en mente.

2.6 No se olvide de las líneas de comentarios al inicio del programa, que son utilizadas como ayuda en línea por MatLab, útil
tanto para un usuario o para el mismo autor del programa. No olvide escribir la sintaxis de ejecución del archivo. Se
recomienda escribir el nombre del archivo en letras mayúsculas, seguido de su descripción en letras minúsculas, esto para
que el programa mismo no provoque algún problema de ejecución.
Programación en MatLab 2

2.7 Recuerde, el comando “Ellipsis” (tres puntos consecutivos) escrito al final de una línea de comandos, dará continuidad en
la siguiente línea, cuando no alcance el espacio para escribir las sentencias deseadas. Sin embargo, no se puede utilizar
para interrumpir una cadena de caracteres encerradas dentro de apóstrofes.

3. LAZOS, RAMALES Y CONTROLES DE FLUJO

MatLab tiene su propia sintaxis para las sentencias de control de flujo, tal como los lasos “for” y “while”; así como ramales
o estructuras “if-elseif-else”. Además, provee tres comandos: “break”, “error” y “return”, para controlar la ejecución de archivos.

En la siguiente hoja de trabajo se ejemplificaran el uso de estos comandos, por lo que escriba los programas de la forma
indicada y córralos para entender su aplicación.

EJERCICIOS

Escriba las siguientes rutinas y corralas. Depure el programa si encuentra errores de ejecución.

1. Genere un archivo llamado “solucion.m” que resuelva el siguiente sistema de ecuaciones:

El archivo debe contener las siguientes líneas de comandos:

% ----------- ----Este es el archivo “solucion.m” ---------------------


% --Resuelve un sistema de ecuaciones de 3x3 en función del parámetro r —--

A=[5 2*r r;3 6 2*r-1;2 r-1 3*r]; % Crea una matriz A


B=[2;3;5]; % Crea una matriz B
Det_A=det(A) % Calcula el determinante
X=A\B % Encuentra X

Para ejecutar el comando, desde la ventana de comandos escriba las siguientes líneas:

>>r=1
>>solucion

2. Genere un archivo llamado “solucionf.m” para generar un archivo de función que resuelva el sistema de ecuaciones del
numeral anterior, donde “r” será una variable de entrada, mientras que “Det_A” y “X” serán las variables de salida.

function[Det_A,X]=solucionf(r);
% “solucion” resuelve un sistema de ecuaciones de 3x3 con parámetro r
% Para ejecutar este archivo, escriba:
% [Det_A,X]=solución(r)
% r es la variable de entrada, mientras que Det_A y X son las de salida
%----------------------------------------------------------------------

A=[5 2*r r;3 6 2*r-1;2 r-1 3*r]; % Crea una matriz A


B=[2;3;5]; % Crea una matriz B
Det_A=det(A) % Calcula el determinante
X=A\B % Encuentra X

Preparado por: Ing. Mario René De León García


Programación en MatLab 3

Puede ejecutar el archivo de la forma siguiente:

>>[Det_A,X]=solucionf(1);

Ejecute nuevamente la función, escribiendo la declaración anterior para la función pero sin el punto y coma al final. ¿Qué sucede?

Observe que después de la ejecución de la función, en la ventada de Workspace, solo aparecen las variables de salida declaradas
en la llamada de la función: “Det_A” y “X”.

3. Modifique el archivo anterior para verificar si el determinante de la matriz A es cero, desplegando un mensaje en caso lo
sea, previo a resolver el sistema de ecuaciones.

Sustituya la última línea del archivo por lo siguiente:

if Det_A==0
disp(‘El sistema no tiene solución’);
else
X=A\B
end

4. Encuentre un cero de la función

Inicialmente intente hacerlo desde la ventana de comandos:

>>fun=r.^3-32.5*r.^2+(r-22).*r+100
>>r0=fzero(fun,5)

Ahora cree un archivo de función llamado “funcionR.m”

function f=funcionR(r);
% funcionR crea la función f=r^3-32.5r^2+(r-22)r+100
f= r.^3-32.5*r.^2+(r-22).*r+100

Ahora ejecute la función “fzero” escribiendo la siguiente línea en la ventana de comandos

>>fzero(‘funcionR’,5)

5. Utilizando una función de referencia.

Se repetirá el ejercicio del numeral anterior pero con funciones de referencia. Para esto se utilizaran las funciones creadas en el
numeral anterior “fun” y “funcionR”. Escriba en la línea de comandos:

>>f1=@fun;

Luego corra la función “fzero”

>>r1=fzero(f1,5);

Preparado por: Ing. Mario René De León García


Programación en MatLab 4

Ahorra corra la función utilizando “funcionR”

>>f2=@funcionR

Luego corra la función “fzero”

>>r2=fzero(f2,5)

6. Resuelva la siguiente ecuación diferencial de primer orden (ODE, Ordinary diferential ecuation), para diferentes valores de
y .

Cree el archivo de función “ode1.m” para definir la ecuación. Escriba el siguiente contenido:

function xdot=ode1(t,x);
% ode1: function que calcula la derivada xdot para los valores dados de t y x
% Sintaxis de llamada: xdot=ode1(t,x)
%--------------------------------------------------------------------------------
global k_valor c_valor
xdot=k_valor*x+c_valor*sin(t);

Ahora cree el archivo de comandos “solecuacion.m” que resuelve la ecuación diferencial ordinaria.

% Archivo de comando para resolver una ecuación diferencial ordinaria de 1er orden
Global k_valor c_valor % declara las variables globales
k_valor=5;c_valor=2; % Se especifica el valor de las variables globales
ts=[0,20]; % Especifica el intervalo de tiempo [t0, t_final]
x0=1.0; % Se especifica la condición inicial
[t,x]=ode23(‘ode1’,ts,x0); % ejecute ode23 para resolver la ODE

NOTA: El comando “global” hace accesible un conjunto de variables para todas o algunas funciones sin necesidad de declararlas
en la lista de variables de entrada. En este caso, si los valores de k_valor y c_valor son modificados en el archivo de
comando, los mismos estarán disponibles en el archivo “ode1”. La declaración “global” aparece solamente en los
archivos de función y comandos de este ejercicio, por lo que solamente estarán disponibles para estos archivos.

7. For - end. Un lazo “For” es usado para repetir una instrucción o un grupo de instrucciones para un número de veces
establecidas. Se utiliza como un contador para repetir una o un grupo de instrucciones.

Cree un archivo de comandos denominado “lazo.m”

% Ejemplo 1 de for –end


For m=1:5
num=1/(m+1)
disp(num)
end

Cree un archivo de comandos denominado “lazo2.m”

% Ejemplo 2 de for – end


For m=5:-1:1
k=1/(exp(n))
disp(k)
end

Preparado por: Ing. Mario René De León García


Programación en MatLab 5

La sentencia for repite un conjunto de instrucciones un número predeterminado de veces. La sentencia for de MATLAB es muy
diferente y no tiene la generalidad de la sentencia for de C/C++/Java. La siguiente construcción ejecuta sentencias con valores de
k de 1 a n, variando de uno en uno.

for k=1:n
sentencias
end

o bien,

for k=vectorValores
sentencias
end

Donde vectorValores es un vector con los distintos valores que tomará la variable k. En el siguiente ejemplo se
presenta el caso más general para la variable del bucle (valor_inicial:incremento: valor_final); el bucle se ejecuta por primera vez
con k=n, y luego k se va reduciendo de 0.2 en 0.2 hasta que llega a ser menor que 1, en cuyo caso el bucle se termina:

for k=n: –0.2:1


sentencias
end

En el siguiente ejemplo se presenta una estructura correspondiente a dos bucles anidados. La variable l es la que varía más
rápidamente (por cada valor de k, l toma todos sus posibles valores):

For k=1:m
for l=1:n
sentencias
end
end

Una última forma de interés del bucle for es la siguiente (A es una matriz):

for k=A
sentencias
end

En la que la variable k es un vector que va tomando en cada iteración el valor de una de las columnas de A.

Cuando se introducen interactivamente en la línea de comandos, los bucles for se ejecutan sólo después de introducir la
sentencia end que los completa.

Preparado por: Ing. Mario René De León García


Programación en MatLab 6

8. While – end. Un lazo o bucle “while” se utiliza para ejecutar un grupo de instrucciones por un número indefinido de veces
hasta que una condición especificada se cumpla.

Cree un archivo de comandos denominado “Laso3” y escriba las siguientes instrucciones:

% Ejemplo del uso de un lazo while – end


% Se calcula las potencias con base 2 y exponentes de 1 hasta 5
num=1;i=1;
while num<6
num=2^i;
i=i+1;
disp(num)
end

La estructura del bucle while es muy similar a la de C/C++/Java. Su sintaxis es la siguiente:

while condicion
sentencias
end

Donde condicion puede ser una expresión vectorial o matricial. Las sentencias se siguen ejecutando mientras haya elementos
distintos de cero en condicion, es decir, mientras haya algún o algunos elementos true. El bucle se termina cuando todos los
elementos de condicion son false (es decir, cero).

9. If-elseif-else. Esta estructura provee bifurcaciones lógicas para realizar cómputos o cálculos.

Cree el archivo “ifelse.m”

% Ejemplo del uso de “if-elseif-else”


i=6;j=21;
if i>5;
k=i;
disp(k)
elseif (i>1) & (j==20)
k=5*i+j;
disp(k)
else
k=1;
disp(k)
end
disp(‘fin del archivo’)

En su forma más simple, la sentencia if se escribe en la forma siguiente (obsérvese que –a diferencia de C/C++/Java– la
condición no va entre paréntesis, aunque se pueden poner si se desea):

if condicion
sentencias
end

Preparado por: Ing. Mario René De León García


Programación en MatLab 7

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 para cuando no se cumplan las condiciones 1,2,3
bloque4
end

La opción por defecto else puede ser omitida: si no está presente no se hace nada en caso de que no se cumpla ninguna
de las condiciones que se han chequeado. Una observación muy importante: la condición del if puede ser una condición matricial,
del tipo A==B, donde A y B son matrices del mismo tamaño. Para que se considere que la condición se cumple, es necesario que
sean iguales dos a dos todos los elementos de las matrices A y B (aij=bij,1≤i≤m, 1≤j≤n). Basta que haya dos elementos aij y bij
diferentes para que las matrices ya no sean iguales, y por tanto las sentencias del if no se ejecuten. Análogamente, una condición
en la forma A~=B exige que todos los elementos sean diferentes dos a dos (aij≠bij, 1≤i≤m, 1≤j≤n). Bastaría que
hubiera dos elementos aij y bij iguales para que la condición no se cumpliese. En resumen:

if A==B exige que todos los elementos sean iguales dos a dos
if A~=B exige que todos los elementos sean diferentes dos a dos

Como se ha dicho, MATLAB dispone de funciones especiales para ayudar en el chequeo de condiciones matriciales. Por ejemplo,
la función isequal(A, B) devuelve un uno si las dos matrices son idénticas y un cero en caso de que difieran en algo.

10. Switch-case-otherwise. Esta estructura provee otra forma de realizar bifurcaciones para realizar cálculos. Una
expresión “switch (variable)” es utilizada para definir diferentes casos de ejecución.

% Ejemplo de la estructura switch-case-otherwise


color=input(‘color=’,’s’);
switch color
case ‘rojo’
c=[1 0 0];
disp(‘Felicidad’)
case ‘verde’
c=[0 1 0];
disp(‘Fortuna’)
case ‘azul’
c=[0 0 1];
disp(‘Dinero’)
otherwise
error(‘Escogió un color invalido’)

La sentencia switch realiza una función análoga a un conjunto de if...elseif concatenados. Su forma general es la siguiente:

switch switch_expresion
case case_expr1,
bloque1
case {case_expr2, case_expr3, case_expr4,...}
bloque2
...
otherwise, % opción por defecto
bloque3
end

Preparado por: Ing. Mario René De León García


Programación en MatLab 8

Al principio se evalúa la switch_expresion, cuyo resultado debe ser un número escalar o una cadena de caracteres. Este
resultado se compara con las case_expr, y se ejecuta el bloque de sentencias que corresponda con ese resultado. Si ninguno es
igual a switch_expresion se ejecutan las sentencias correspondientes a otherwise. Según puede verse en el ejemplo anterior,
es posible agrupar varias condiciones dentro de unas llaves (constituyendo lo que se llama un cell array o vector de celdas); basta
la igualdad con cualquier elemento del cell array para que se ejecute ese bloque de sentencias. La “igualdad” debe entenderse en
el sentido del operador de igualdad (==) para escalares y la función strcmp() para cadenas de caracteres). A diferencia de
C/C++/Java16, en MATLAB sólo se ejecuta uno de los bloques relacionado con un case.

11. Break. El comando Break dentro de un lazo “while” o “for” finaliza la ejecución del lazo, aun si la condición de un lazo
If es verdadero.

Cree el archivo “detener.m” con el siguiente contenido:

% Ejemplo de Break
for i=1:5
if i>2 % Verifica si i es menor a 2
disp(‘el programa terminó’)
break % Termina la ejecución del lazo
end
disp(‘Presione Enter’)
end

Cree el archivo “detener2.m” con el siguiente contenido:

% Ejemplo de Break
% Se calcula las potencias con base 2 y exponentes de 1 hasta 5
num=1;i=1;
while num<6
num=2^i;
i=i+1;
disp(num)
if i>4
disp(‘El programa terminó’)
end
end

Preparado por: Ing. Mario René De León García

También podría gustarte