PROGRAMACIÓN
FUNCIONES Y BUCLES
Matlab permite la ejecución de conjuntos de comandos escritos secuencialmente en
la ventana de edición y que son almacenados en un archivo nombre.m. Para
ejecutar un archivo basta con teclear su nombre (sin extensión) en modo interactivo
en la ventana de comando y pulsar enter. En el archivo .m se pueden introducir
textos explicativos comenzando la línea con el símbolo %.
FUNCTION
El comando function permite la definición de funciones con la siguiente sintaxis:
Function: parámetros_salida = nombre_función(parámetros_entrada)
cuerpo de la función
se va new→function→ ahí aparece → function [ output_args ] =
Untitled4( input_args )
%UNTITLED4 Summary of this function goes here
% Detailed explanation goes here
end
se llena lo que se quiere calcular y va al espacio de trabajo de matlab y se llama
con el nombre del archivo, se coloca los valores y se corre y da el resultado.
Una vez definida la función se guarda en un archivo nombre_función.m para su
posterior utilización. Cuando los parámetros de salida son más que uno se sitúan
entre corchetes separados por comas. Si los parámetros de entrada son más que
uno se separan por comas.
Ejemplo: sssiiii
Definir la función fun1(x) = x^3 -2x+cos(x)
En la ventana de edición:
function p = fun1(x) % el nombre del archivo es fun1
% Definición de una función simple
p = x^3 – 2*x+cos(x)
La función se guarda en un archivo fun1.m
Podemos luego utilizar esta función, por ejemplo,
>> fun1(3*pi/2)
ans=
95.2214
Definición de una función simple
Ejemplo: siiiii
Solución de una ecuación de segundo grado
function [x1,x2] = cuadratica(a,b,c)
%Esta funcion calcula las raices de una ecuacion cuadratica
%la sintaxis es [x1,x2]=cuadratica(a,b,c)
If nargin<3
Error (‘faltan datos’)
end
radical = sqrt(b^2-4*a*c);
x1= (-b+radical) / (2*a);
x2= (-b-radical) / (2*a);
if isreal(x1)
disp(‘raicces reales’)
else
disp(‘raíces imaginarias’)
end
el archivo es cuadratica.m
>> help cuadratica
Esta funcion calcula las raices de una ecuacion cuadratica la
sintaxis es [x1,x2]=cuadratica(a,b,c)
>> [x1,x2]=cuadratica(1,2,3)
x1 =
-1.0000 + 1.4142i
x2 =
-1.0000 - 1.4142i
EVALUACION DE FUNCIONES
feval:
La evaluación de una función en sus argumentos, también puede realizarse con el
comando feval que tiene la siguiente sintaxis:
feval(‘F’,arg1,arg2,…)
Evalúa la función F (archivo F.m) en los argumentos especificados arg1, arg2, …..
Ejemplo: ssiiii
function [x1,x2] = ecuacion2(a,b,c)
% Solución de la ecuación de segundo orden
d = b^2 – 4*a*c;
x1 = (-b + sqrt(d))/(2*a);
x2 = (-b - sqrt(d))/(2*a);
Para resolver la ecuación x2 + 2x +3 = 0
>> [x1, x2] = feval(‘ecuacion2’,1,2,3)
o también:
>> [x1, x2] = ecuacion2(1,2,3)
eval: evalua una cadena que contiene una expresión MATLAB, sentencia o llamada
función.
Sintaxis: eval(‘strinng’)
GLOBAL
Normalmente cada función de Matlab definida como un archivo–M contiene sus
variables como variables locales, esto es, su efecto es al interior de este archivo
independientemente de otros archivos. Es posible definir otras variables que tenga
efecto en otros archivos-M con variables globales usando el comando global con
la siguiente sintaxis:
global x y z ... define las variables x, y, z,....como globales
ESTRUCTURAS REPETITIVAS
FOR
Permite repetir la ejecución de un bloque de sentencias, un numero definido de
veces .Si se omite el incremento, se asignara un incremento de 1.
Tiene la siguiente sintaxis:
For variable= valor_inicial: incremento: valor final
Sentencias
end
caso1:
for i= 1:n
comandos
end
caso2:
for i=n:-0.2:1
comandos
end
caso 3:
for i=1:m
for i=n comandos
end
end
Ejemplo:
Sumar los enteros pares de 1 a 100
suma=0;
for i=1:2:100
suma=suma+i;
end
disp('El resultado es: ')
display(suma)
%matlab entrega: suma 2500
WHILE
Mientras se ejecuta una condición se ejecutan los comandos o sentencias.
while condición
sentencias
end
Ejemplo: sii
Calcular los volúmenes de las esferas para radio igual a: 1,2,3,4,5
r=0;
while r<5
r=r+1;
vol=(4/3)*pi*r^3;
fprintf('El radio es =%g y el volumen es =%g \n',r,vol)
end
Mat-lab entrega:
El radio es =1 y el volumen es =4.18879
El radio es =2 y el volumen es =33.5103
El radio es =3 y el volumen es =113.097
El radio es =4 y el volumen es =268.083
El radio es =5 y el volumen es =523.599
Ejemplo: noo
Gz=tf(1,[0.4 0.3])
Gzc=zpk(1,[-1 0.2],0.5)
SIGA=1
while SIGA ==1
clc
disp('LA FUNCION DE TRANSF. EN LAZO ABIERTO ES: ')
Gla = Gz*Gzc
disp(' ');
disp('LA FUNCION DE TRANSF. EN LAZO CERRADO ES: ')
Glc = feedback(Gla,1)
disp('PARA SEGUIR OPRIMA ENTER')
pause
clc
disp(' ');
disp('LOS POLOS DEL SISTEMA SON : ');
Polos = pole(Glc)
disp('QUE TIENEN MAGNITUDES Y ANGULOS DE :');
Mag = abs(Polos)
Ang1 = angle(Polos);
Ang = Ang1*180/pi
if (Mag(1)<1)&(Mag(2)<1)
disp('EL SISTEMA ES ESTABLE');
else
disp('EL SISTEMA ES INESTABLE');
end
disp(' ');
disp('PARA SEGUIR OPRIMA ENTER');
pause
SIGA = input (' PRESIONE 1 PARA SEGUIR ');
end
Ejemplo: siii
Genere una tabla que suministre los inversos, cuadrados y raíces cuadradas del 1
al 5
i=0;
while i<5
i=i+1;
A(i)=i;
B(i)=1/i;
C(i)=i^2;
D(i)=sqrt(i);
end
E=[A',B',C',D']
E=
1.00 1.00 1.0000 1.0000
00 00
2.00 0.50 4.0000 1.4142
00 00
3.00 0.33 9.0000 1.7321
00 33
4.00 0.25 16.0000
00 00
2.0000
5.00 0.20 25.0000
00 00
2.2361
BREAK
Termina la ejecución de un bloque For y/o While mas interno de los que comprende
dicha sentencia.
ESTRUCTURAS CONDICIONALES
Son instrucciones que permiten controlar un bloque de sentencias según cumplan o
no una condición.
IF
caso 1: la forma mas simple se escribe asi.
if condición
sentencias
end
Caso 2: con 2 bloques de sentencia
If condición
Bloque 1 de sentencias
else % opción por defecto cuando no se cumple la condición.puede ser omitida
bloque 2 de sentencia
end
caso 3: con condiciones múltiples (anidadas)
if condición1
bloque1
elseif condción2
bloque2
elseif condición3
bloque3
else % sino cumple condiciones anteriores
bloque4
end
elseif
elseif, como su nombre lo sugiere, es una combinación de if y else. Del mismo
modo que else, extiende una sentencia if para ejecutar una sentencia diferente en
caso que la expresión if original se evalue como false. Sin embargo, a diferencia de
else esa alternativa solo se ejecuta si la expresión condicional del elseif se evalua
como true.
Pude haber varios elseif dentro la misma sentencia if. La primera expresión elseif(si
hay alguna) que se evalue como TRUE seria ejecutada.
La sentencia elseif es ejecutada solamente si la expresión elseif precedentes son
evaluadas como FALSE, y la expresión elseif actual se evaleua como TRUE
SWITCH
Similar a la instrucción if anidada Se evalúa una expresión y se compara con las
expresiones en case. Se ejecuta el bloque que corresponda con ese resultado. Si
ninguno es igual se ejecuta el bloque de otherwise.
switch expresión
case expresión1
bloque1
case expresión2
bloque2
.........................
otherwise
bloque3
end
Ejemplo:
disp('SELECCIONE PRESIONANDO :');
disp(' 1: PARA FUNCION DE LA PLANTA EN TF ');
disp(' 2: PARA FUNCION DE LA PLANTA EN ZPK ');
n=input('SELECCIONE LA OPCION : ');
disp(' ');
switch n
case 1
num = input('ENTRE NUMERADOR DE LA PLANTA : num = ');
den = input('ENTRE DENOMINADOR DE LA PLANTA : den = ');
disp('LA FUNCION DE TRANSFERENCIA DE LA PLANTA ES : Gp(s) = ');
Gp = tf(num,den)
disp(' ');
case 2
Z = input('Entre vector de ceros : Z = ');
P = input('Entre vector de polos : P = ');
K = input('Ganancia es igual a : K = ');
disp('LA FUNCION DE TRANSFERENCIA DE LA PLANTA ES : Gp(s) = ');
Gp = zpk(Z,P,K)
end
Operadores de relación:
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
== Igual
= No es igual a
Operadores lógicos:
& AND
⏐ OR
NOT
Xor XOR
LECTURA Y ESCRITURA DE VARIABLES
INPUT
Aparece un mensaje en pantalla pidiendo un dato. el valor digitado será asignado a
la variable. Si se desea una cadena se debe añadir el argumento ‘s’.debe ser
tecleada por el usuario.
n = input (‘Teclee el polinomio’)
Ejemplo:
calif = input('Dame la calificacion: ');
if calif >= 3.0
disp(' ')
disp('Aprobado')
end
if calif < 3.0
disp(' ')
disp('Desaprobado')
end
% Otra forma
calif = input('Dame la calificacion: ');
if calif >= 3.0
disp(' ')
disp('Aprobado')
else
disp(' ')
disp('Desaprobado')
end
Ejemplo:
El precio del vino está condicionado a la cantidad requerida. Hasta 5 botellas el
precio unitario es de $10.000, de 6 a 12 botellas el precio es de $12.000, y a partir
de 13 a $15.000. Elaborar un programa, que pegunta cuántas botellas se desean,
indique el precio unitario y el total del gasto.
c=input('¿Cuántas botellas quiere? ');
if c<5
Pu=10000;
Pt=Pu*c;
elseif c<=12
Pu=12000;
Pt=Pu*c;
else
Pu=15000;
Pt=Pu*c;
end
disp('Precio unitario: ')
Pu
disp('Precio total: ')
Pt
DISP
Permite visualizar en la pantalla un
mensaje de texto o el valor de una
matriz sin imprimir su nombre
. disp(‘Universidad de Colombia’)
fprintf permite visualizar un valor numérico o el resultado de una expresión guardada por el
usuario
Sintaxis:
fprintf(‘ aquí se escribe el mensaje y el formato de la variable’, ariable)
Formato:
S →para cadena de caracteres.
d→ para variables enteras
f →para variables decimales
Ejemplo
Área=100
Fprintf(‘el área del rectángulo es:%12.3f/n’,área)
El área del rectángulo es: 100.000
Dond/n indica que el promt >> aparecerá en la siguiente linea
% 12.3f indica que el valor tendrá un formato con 3 cifras decimales y de 12 caracteres
incluyendo los decimales
9.2.1 FIND
Para el ejemplo del movimiento del péndulo, calcular por programación el ángulo
para un tiempo dado.
%Programa en Matlab
g=9.8;
w=2;
L=0.6;
B=0.08;
m=w/g;
%Para correr el simulink tiene que en K>>movpendulo y luego correrlo
disp('Realice la simulacion y de return para ejecutar')
keyboard
a=length(t);
tf=t(a);
delta=tf/a;
%calcular el angulo para un tiempo T dado
T=input('Entre el tiempo de T: ');
i=find(t <(T+delta) & t >(T-delta));
disp('El desplazamiento angular es de: ')
AngR=teta(i(2))
AngG=AngR*180/pi
APLICACIONES
Ejercicio5: Movimiento parabólico
Ecuaciones
x'' 0 Movimiento unforme
y'' g Movimiento acelerado
condiciones iniciales:
Vo=100m/seg
θ=300