Está en la página 1de 15

UNCP – FACULTAD DE INGENIERÍA MECÁNICA

MG. ARTURO HUBER GAMARRA MORENO

Algoritmos y programación en Matlab - Teoría de errores


INTRODUCCION

MATLAB proporciona un lenguaje de programación muy poderoso con un


ambiente computacional interactivo. Una ventaja muy importante que tiene
programar en MATLAB cuando lo comparamos con otros lenguajes de
programación, es que MATLAB no requiere que se declaren las variables y sus
tipos al principio del programa ya que estas se definen automáticamente.
Actualmente el sistema Matlab se usa tanto a nivel académico, dentro de la
universidad, como a nivel de investigación e industria para la resolución de
complicados problemas científicos o de ingeniería. Es empleado para el desarrollo
de cálculo numérico de propósito general pudiendo manipular vectores y matrices
tanto reales como complejos con funciones y fórmulas de variadas ramas de la
matemática y resolución de problemas con formulación matricial que aparecen en
control, estadística y procesado de señales. Matlab aporta, por medio de los
toolbox (que no se incorporan en el sistema base sino que se adquieren
separadamente), funciones para resolver problemas específicos como por
ejemplo procesado de señales, diseño de sistemas de control, identificación de
sistemas, simulación de sistemas dinámicos, optimización, redes neuronales, etc.

Es este apartado se comenzará viendo las bifurcaciones y bucles, y la lectura y


escritura interactiva de variables, que son los elementos básicos de cualquier
programa de una cierta complejidad.

A los archivos que contienen códigos de MATLAB se les llama archivos-M (M-
files) y tienen la extensión .m. que son Scripts y Funciones.

Los Scripts no aceptan datos de entrada o producen argumentos de salida. Usan


datos de variables que se han usado previamente en la sesión con MATLAB.
Las funciones pueden aceptar datos o argumentos de entrada y regresan también
datos de salida. Las variables internas de una función son variables locales.

1. Control de flujo
Al proceso de toma de decisiones se le llama control del flujo.
Antes de ponerse a escribir el programa, sobre todo si es un poco largo o
complejo, es útil trazar un esquema, en lenguaje corriente, de lo que se quiere
hacer. A eso se le denomina un diagrama de flujo. Si lo que se pretende está
claro, escribir el programa se reduce a traducir el diagrama de flujo del
castellano al lenguaje de MATLAB.
Veamos un caso simple. Construyamos el diagrama de flujo de un programa
que escoja un número al azar del 0 al 9 y nos pida que lo adivinemos. Una
vez escogido el número, el programa debe informar si hemos acertado o no.
El diagrama de flujo correspondiente es:
UNCP – FACULTAD DE INGENIERÍA MECÁNICA
MG. ARTURO HUBER GAMARRA MORENO

Figura Nº 1 Diagrama de Flujo

En un diagrama de flujo ha de buscarse la claridad, la concisión, el rigor. Con


un buen diagrama de flujo, gran parte del trabajo está hecho. Puede ser
tentador comenzar a escribir directamente el programa en el editor, con la
esperanza de hacerlo todo bien a la primera. Suele ser más eficaz, sin
embargo, escribir antes el diagrama de flujo, para luego intentar pasarlo al
lenguaje informático elegido.

2. Operadores para Condiciones


Operadores relacionales
Con las expresiones relacionales se pueden realizar preguntas de respuesta
unívoca (verdadero o falso), que permitan luego tomar una decisión.
> mayor que
< menor que
== igual que
~= diferente que
<= menor o igual que
>= mayor o igual que

Nota: Para obtener el carácter ~ pulsar simultáneamente:


<Alt> + <126>

3. Condicionales
Condicional Simple
Si se desea ejecutar un conjunto de instrucciones en el caso de que se
cumpla una condición, usaremos una estructura if.
Dependiendo de una condición, el programa decide el curso que seguirá
La manera más sencilla de usarla es la siguiente:
if condicion lógica
ordenes de Matlab
UNCP – FACULTAD DE INGENIERÍA MECÁNICA
MG. ARTURO HUBER GAMARRA MORENO

end
El resultado de una condición permite tomar una decisión, es decir, si la
condición es verdadera se ejecutan determinadas sentencias. El diagrama de
flujo se ramifica:

Diagrama de flujo Sintaxis en Matlab

if (condición)
sentencias
end

Condicional if

Condicional Doble
Existe la posibilidad de ejecutar ciertas sentencias si la condición es
verdadera, y otras diferentes si la condición es falsa.
Usando A partir del caso anterior se observa la necesidad de introducir una
alternativa cuando no se cumpla la condición. Esto se hace mediante el
comando else. La estructura habitual para este comando es:
Diagrama de flujo Sintaxis en Matlab

if (condición)
sentencias A
else
sentencias B
end

Condicional if - else

Ejemplo: Elabore una aplicación en MATLAB que permita ingresar un número


y nos diga si el número ingresado es positivo, negativo o cero.
Solución:
%PROGRAMA QUE INGRESA UN NUMERO E IMPRIMA SI EL NUMERO ES
%POSITIVO, NEGATIVO O CERO
clc
x=input('ingrese un numero : ');
if (x>0)
UNCP – FACULTAD DE INGENIERÍA MECÁNICA
MG. ARTURO HUBER GAMARRA MORENO

disp('El numero es positivo ...');


else
if (x<0)
disp('El numero es negativo ....');
else
disp('El numero es CERO ....');
end
end
Función input: Permite imprimir un mensaje en la línea de comandos de
MATLAB y recuperar como valor de retorno un valor numérico o el resultado
de una expresión tecleada por el usuario. Después de imprimir el mensaje, el
programa espera que el usuario teclee el valor numérico o la expresión.
Ejemplos:
>> n = input('Teclee el número de ecuaciones: ')
>> nombre = input('¿Cómo te llamas?: ','s')
Función disp: Permite imprimir en pantalla un mensaje de texto o el valor de
una matriz, pero sin imprimir su nombre. En realidad, disp siempre imprime
vectores y/o matrices: las cadenas de caracteres son un caso particular de
vectores.
Ejemplos:
>> disp('El programa ha terminado')
A=rand(4,4)
>> disp(A)
Condicional Múltiple
switchvariable
casevalor1,
sentencias A
casevalor2,
sentencias B
case ...
...
otherwise,
sentencias X
end
Ejemplo: Elabore una aplicación en MATLAB que permita ingresar un número
entero y nos muestre el día de la semana correspondiente a dicho número
según la siguiente tabla:
Numero Día
UNCP – FACULTAD DE INGENIERÍA MECÁNICA
MG. ARTURO HUBER GAMARRA MORENO

0 Domingo
1 Lunes
2 Martes
3 Miércoles
4 Jueves
5 Viernes
6 Sábado

Si el número ingresado no está entre 0 y 6 se debe mostrar un mensaje


‘numero incorrecto’
Solución:
%Uso del switch case
clc;
dia = input('ingrese numero de dia de la semana: ');
switch dia
case 0,
disp('Domingo');
case 1,
disp('Lunes');
case 2,
disp('Martes');
case 3,
disp('Miercoles');
case 4,
disp('Jueves');
case 5,
disp('Viernes');
case 6,
disp('Sabado');
otherwise,
disp('numero incorrecto');
end

4. Bucles
Los bucles permiten repetir las mismas o análogas operaciones sobre datos
distintos.
La sentencia for
UNCP – FACULTAD DE INGENIERÍA MECÁNICA
MG. ARTURO HUBER GAMARRA MORENO

Repite un conjunto de sentencias un número predeterminado de veces. La


siguiente construcción ejecuta sentencias con valores de i de 1 a n, variando
de uno en uno.
for i=1:n
sentencias
end

Ejemplo: Elabore una aplicación en MATLAB que permita ingresar los


primero “n” números consecutivos y calcule su suma. El valor de “n” debe
ingresarse desde el teclado
Solución:
%Programa que imprime los "n" numeros consecutivos y
%calcule su suma
clc;
n=input('Cantidad de numeros consecutivos a sumar? : ');
s=0;
for i=1:n
fprintf('%2d \n',i);
s=s+i;
end
disp('La suma es: ');
disp(s)

Función fprintf permite la salida formateada de los valores de i


2: Columna donde se inicia la salida de valor de i
d: Para variables enteras
\n: Salto de línea

La sentencia for anidados


for i=1:m
for j=1:n
sentencias
end
end
Sentencia while
Su sintaxis es la siguiente:
while condicion
sentencias
end
UNCP – FACULTAD DE INGENIERÍA MECÁNICA
MG. ARTURO HUBER GAMARRA MORENO

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).
Ejemplo: Elabore una aplicación en MATLAB que permita calcular la suma y
el promedio de “n” números ingresados desde el teclado.
Solución:
%Programa que calcula la suma y el promedio de
%"n" numeros ingresados
clc;
suma=0;
n=1;
cant=input('ingrese cantidad de numeros a sumar: ');
while n<=cant,
num=input('Ingrese numero: ');
suma=suma+num;
n=n+1;
end
prom=(suma/cant);
disp('La suma de los numeros es: ');
disp(suma);
disp('El promedio de los numeros es: ');
disp(prom);

5. Funciones
También pueden programarse funciones. La primera instrucción de un fichero
que contenga una función de nombre fun debe ser:
function[argumentos de salida]=fun(argumentos de entrada)
Es conveniente que el fichero que contenga la función se llame como ella; así,
la función anterior debería guardarse en el fichero fun.m.
Ejemplo: Si se desea programar una función que calcule, mediante el
algoritmo de Euclides, el máximo común divisor de dos números naturales,
basta escribir un fichero euclides.m cuyo contenido sea:
function m=euclides(a,b)
% Cálculo del máximo común divisor de dos números
% naturales mediante el algoritmo de Euclides
if a<b
c=b;
b=a;
a=c;
UNCP – FACULTAD DE INGENIERÍA MECÁNICA
MG. ARTURO HUBER GAMARRA MORENO

end
while b>0
c=rem(a,b);
a=b;
b=c;
end
m=a;
Si, una vez escrito el fichero anterior, en el espacio de trabajo o en un
programa se escribe la instrucción

mcd=euclides(33,121)

En la variable mcd se almacenará el valor 11.


Las variables de una función son siempre locales. Por tanto, aunque en el
seno de la función se modifiquen los argumentos de entrada, el valor de las
variables correspondientes queda inalterado.
Por ejemplo, en la función euclides.m se modifica el valor de los argumentos
de entrada, pero, sin embargo:

>>x=15;
>>mcd=euclides(x,3);
>>x
x =
15

Si se pretende que las modificaciones de un argumento de entrada afecten a


la variable correspondiente, deberá situarse dicho argumento, además, en la
lista de argumentos de salida.

6. Ejercicios resueltos

Ejemplo 01) Escribir una función f=par(n) que devuelva f = 1 si n es par y f =


0 si no.
Solución
function f=par(n)
if n/2==round(n/2)
f=1;
else
f=0;
end

Ejecución
>> par(8)

ans =

>> par(9)
UNCP – FACULTAD DE INGENIERÍA MECÁNICA
MG. ARTURO HUBER GAMARRA MORENO

ans =

Ejemplo 02) Escribamos una función f=natural(n) que nos devuelva f = 1 si n


es natural y f = 0 si no. Un número es natural si es entero y positivo.
Solución
function f=natural(n)
f=0;
if n==round(n) & n>0
f=1;
end
Ejecución
>> natural(5)

ans =

>> natural(-3)

ans =

>> natural(3.8)

ans =

Ejemplo 03) Sabiendo que las coordenadas cartesianas de una


circunferencia son de la forma x=r cos(θ), y=r sen(θ) crea una función que se
llame circunferencia1.m que dibuje una circunferencia y que tenga como
parámetros de entrada el radio y el ángulo. La función tiene que tener como
parámetros de salida todos los pares de valores x,y . Para realizar el
programa, hay que tener en cuenta que el radio permanece constante y lo que
va cambiando es el ángulo θ.
Solución
function [x,y]=circunferencia1(radio, paso)
r=radio;
fi=0;
i=0;
if paso>60
error('Angulo muy grande')
end
for fi=0:paso:360
fi2=fi*2*pi/360;
UNCP – FACULTAD DE INGENIERÍA MECÁNICA
MG. ARTURO HUBER GAMARRA MORENO

i=i+1;
x(i)=r*cos(fi2);
y(i)=r*sin(fi2);
end
plot(x,y,'o')

Ejecución
>> circunferencia1(6,15)

ans =

Columns 1 through 12

6.0000 5.7956 5.1962 4.2426 3.0000 1.5529


0.0000 -1.5529 -3.0000 -4.2426 -5.1962 -5.7956

Columns 13 through 24

-6.0000 -5.7956 -5.1962 -4.2426 -3.0000 -1.5529 -


0.0000 1.5529 3.0000 4.2426 5.1962 5.7956

Column 25

6.0000

7. ERRORES
Los errores numéricos se generan con el uso de aproximaciones para
representar cantidades y/o operaciones. Esto da lugar a dos tipos de errores:
de truncamiento y de redondeo
Los errores de truncamiento, resultan de representar aproximadamente un
procedimiento matemático exacto. Por ejemplo, en la solución numérica al
problema del objeto en caída libre, usamos una aproximación al proceso de
derivación, el cual es un procedimiento matemático exacto.
UNCP – FACULTAD DE INGENIERÍA MECÁNICA
MG. ARTURO HUBER GAMARRA MORENO

𝒅𝒚 𝒗(𝒕𝒊+𝟏 ) − 𝒗(𝒕𝒊 )
=
𝒅𝒙 𝒕𝒊+𝟏 − 𝒕𝒊
Esto genera errores de truncamiento durante el
procedimiento.
Los errores de redondeo resultan de representar aproximadamente números
que son exactos. Por ejemplo, aún en la "solución exacta" al problema del
objeto en caída libre, los resultados impresos en la tabla de velocidades no
son totalmente exactos puesto que el numero e es un número irracional y por
lo tanto su extensión decimal es infinita y no periódica lo que nos impide
escribirlo de forma completamente exacta. Usando 5 decimales, tenemos:
𝒆 = 𝟐. 𝟕𝟏𝟖𝟐𝟖
Esto genera errores de redondeo durante los cálculos.

En ambos casos tenemos que:

valor verdadero = valor aproximado + error

Definición. Definimos el error absoluto como:

EV = valor verdadero - valor aproximado

Esta definición de error tiene un pequeño defecto, como veremos en el


siguiente:
Ejemplo
Al medir la longitud de una varilla para construcción se obtiene el resultado
aproximado de 19,999 cms. mientras que al medir la longitud de un clavo, se
obtiene el resultado de 9 cms. Suponiendo que los valores verdaderos de la
varilla y el clavo son de 20,000 cms. y 10 cms. respectivamente, calcular el
error absoluto en ambos casos.
Solución: Tenemos los siguientes resultados:
Para el caso de la varilla, el error absoluto se calcula como:

EV = 20,000-19,999 = 1cm

Para el caso del clavo, el error absoluto se calcula como:

EV = 10 - 9 = 1cm

En ambos casos, el error absoluto es igual, pero obviamente tiene mayor


trascendencia el error en el caso del clavo que en el caso de la varilla, es
decir, necesitamos comparar el error absoluto contra el valor verdadero y esto
da lugar a la siguiente definición.

Definición. Definimos el error relativo como sigue:


UNCP – FACULTAD DE INGENIERÍA MECÁNICA
MG. ARTURO HUBER GAMARRA MORENO

error absoluto
Er 
valor verdadero

Esto es:
valor verdadero  valor aproximado
Er 
valor verdadero
Y también se define el error relativo porcentual, como sigue:

Iˆr  E r  100%
Es decir,
valor verdadero  valor aproximado
Iˆr   100%
valor verdadero
De hecho el error que más usamos es este último, ya que nos da una idea en
tanto por ciento del error que se está cometiendo.
Por ejemplo, en el caso de la varilla el error relativo porcentual es:
1
Iˆr   100%  0.005
20000
Mientras que en el caso del clavo, el error relativo porcentual es:
1
Iˆr   100%  10
10
Podemos observar, que el error relativo porcentual refleja mejor la gravedad o
no gravedad del error que se está cometiendo. Es claro, que en el caso de la
varilla no es trascendente ya que representa solamente un 0.005% con
respecto al valor verdadero, mientras que en el caso del clavo, el error si es
representativo ya que es del 10% del valor verdadero.
Finalmente, mencionaremos que un proceso de aproximación puede
detenerse cuando el valor absoluto del error relativo porcentual es menor que
una cierta cota, fijada de antemano.
Sin embargo, todavía tenemos un pequeño defecto en nuestro análisis del
error. Los métodos numéricos se aplican en realidad, a problemas que no se
pueden resolver analíticamente; en nuestro ejemplo del cuerpo en caída libre,
en realidad no es necesario aplicar ningún método numérico, puesto que
conocemos la solución exacta del problema. Por lo tanto, en una situación
real, desconoceremos el valor verdadero de la solución al problema; luego
entonces estaremos imposibilitados de calcular el error relativo porcentual.

La forma de resolver este problema es pensar que para obtener una cierta
aproximación a un valor, tuvimos que haber obtenido una aproximación
anterior al mismo valor. Una vez calculada la nueva aproximación
procedemos a calcular otra aproximación al mismo valor y así sucesivamente.
Si el método realmente converge a un resultado (que esperamos sea a la
UNCP – FACULTAD DE INGENIERÍA MECÁNICA
MG. ARTURO HUBER GAMARRA MORENO

solución del problema), todas estas aproximaciones se estarán aproximando


entre sí y al valor al cual convergen.
Definición. Definimos el error aproximado porcentual, como sigue:

aprox. actual  aprox. previa


Iˆa  100%
aprox. actual
Como mencionamos anteriormente, el proceso se detiene cuando se ha
logrado disminuir el valor absoluto del error aproximado porcentual hasta un
cierto rango fijado de antemano.

Esto es, cuando Iˆa  IˆS


Se puede probar que si tomamos IˆS  0.5  10
2n
 
% entonces podemos
tener la seguridad de que la aproximación ó resultado tiene al menos “n” cifras
significativas, es decir, posee al menos “n” dígitos confiables.
Ejemplo.
Usar el siguiente resultado de series:

1
 n!  e
n 0

para aproximar el número irracional e hasta 4 cifras significativas.

ˆ
Solución: Primero calculamos el valor de I s como sigue:

IˆS  0.5  10 2n %   0.5  10 24  0.005%

En seguida, usamos la serie, agregando un término cada vez, para obtener


nuevas aproximaciones hasta que se logre que:

Iˆa  0.005%
En el primer paso, tenemos simplemente un término:
1
e 1
0!
En el segundo paso, tenemos la suma de dos términos:
1 1
e  2
0 ! 1!
Aquí, podemos calcular el primer error aproximado:
actual  previa 2 1
Iˆa   100%   100%  50%
actual 2
UNCP – FACULTAD DE INGENIERÍA MECÁNICA
MG. ARTURO HUBER GAMARRA MORENO

Seguimos agregando términos de la serie puesto que no se ha cumplido el


objetivo:
Tenemos que:
1 1 1
e    2.5
0 ! 1! 2 !
Y calculamos el error aproximado correspondiente:
2.5  2
Iˆa  100%  20%
2.5
El proceso se continúa hasta lograr la meta. Resumimos los resultados en la
siguiente tabla:

# términos Aprox. al valor e Error aproximado

1 1

2 2 50%

3 2.5 20%

4 2.666666667 6.25%

5 2.708333333 1.54%

6 2.716666667 0.307%

7 2.718055556 0.051%

8 2.718253968 0.007%

9 2.718278770 0.0009%

Así pues, el resultado que se obtiene es:


e  2.718281526


Que en realidad tiene 8 cifras significativas. La cota impuesta por S , nos asegura
que tendremos almenos n cifras significativas; en este ejemplo, obtuvimos 4 cifras
significativas más.

8. Ejercicios propuestos

1) Elabore una aplicación que calcule el factorial de “n” con opciones para
verificar si “n” es un entero y si éste es o no negativo.
2) Escriba el programa correspondiente en MATLAB si se desea sumar todos
los elementos aij de una matriz n x m, si esto se puede hacer realizando la
suma:
UNCP – FACULTAD DE INGENIERÍA MECÁNICA
MG. ARTURO HUBER GAMARRA MORENO

n m
suma  a
i 1 j 1
ij

3) Las soluciones de la ecuación cuadrática:

ax2  bx  c  0
están dadas por:
 b  b 2  4ac
x1, 2 
2a

Escriba una función que calcule las respectivas soluciones.

4) Utilizando una función recursiva escriba un programa para determinar el


factorial de un número entero “n” ingresado desde el teclado.

También podría gustarte