Академический Документы
Профессиональный Документы
Культура Документы
Ingeniera Civil
Programacin y nociones bsicas sobre errores
0.1.1. Bucles
son iteraciones que se utilizan para controlar el flujo de un programa
for i=vi:inc:vf
instrucciones
end
while relacin
instrucciones
end
1
0.1.2. Sentencias condicionales
if-end . La sintaxis de este comando es
if relacin
instrucciones
end
if-else-end
if relacin
instruccin 1
else
instruccin 2
end;
Ejemplo 0.2 Construir una funcin raices.m que calcule las raices de un polinomio de se-
gundo grado ax2 + bx + c = 0 y calcule las raices de x2 3x + 2 = 0
Solucin:
2
La sentencia for-end
Ejercicio 0.1 A fin de aclarar las ideas ingrese los siguientes comandos y comente sus resul-
tados
for i=1:8
i
end
for i=1:3:19
i
end
Ejemplo 0.4 hacer un programa donde puedas calcular la suma de los n primeros nmeros
naturales
Solucin:
function s=Sumita(n)
suma=0;
for x=1:n,
suma = suma + x;
end;
s=suma;
Ejemplo 0.5 Hga un programa que reciba un vector y entregue el promedio del valor de sus
elementos
Solucin:
function p=promedio(x)
n=length(x);
suma=0;
for i=1:n
suma=suma+x(i);
end
p=suma/n;
3
(
2 sen2 (2x), x0
Ejemplo 0.6 Construya un programa que evalue la funcin f (x) =
1 ex , x>0
Solucin:
function y= f1(x)
n=length(x);
for i=1:n
if x(i)<=0
y(i)=2*(sen(2*x(i)))^2;
else
y(i)=1-exp(-x(i));
end
end
x 1, x 2.
Ejemplo 0.7 Construya un programa que evalue la funcin: f (x) = 1 x2 , 2 < x < 0,
1 ,
x0
x+1
Solucin:
function y= f2(x)
n=length(x);
for i=1:n
if x(i)<=-2
y(i)=x(i)-1;
elseif (x(i)>-2 & x(i)<0)
y(i)=1-x(i).^2;
else
y(i)=1/(x(i)+1);
end
end
Ejemplo 0.8 Escriba una funcin para elegir el mayor entre dos nmeros
Solucin:
function M=mayor(a,b)
if a>b
M=a;
else
M=b;
end
4
Ejemplo 0.9 Escriba una funcin que dada dos vectores A, B y encuentre los elementos de
la interseccin de ambos vectores
Solucin:
function C= interseccion(A,B)
m=length(A);
n=length(B);
k=1;
for i=1:m
for j=1:n
if A(i)==B(j)
C(k)=A(i);
k=k+1;
end
end
end
Solucin
function va= ValorAbsoluto(n)
if n >= 0
va = n;
else
va = -n;
end
Ejemplo 0.11 Construir una funcin raices1 que, que muestre el polinomio de segundo grado
ax2 + bx + c = 0 si tiene raices complejas o reales
Solucin
5
function [x1,x2]= raices1(a,b,c)
D = b^2-4*a*c;
for D>=0
disp (Raices Reales)
x1=(-b + sqrt(D))/(2*a);
x2=(-b - sqrt(D))/(2*a);
else
disp (Raices Complejas)
x1=(-b + sqrt(D))/(2*a);
x2=(-b - sqrt(D))/(2*a);
end
Ejemplo 0.12 Crear un programa tal que dada la matriz A cuadrada de dimensin n devuelva
una nueva matriz B cuyos elementos son elementos de A salvo los de la diagonal principal
que son ceros.
Solucin:
function B= Inters(A)
[m n]=size(A);
if (m == n)
error (la matriz no es cuadrada)
end
for i=1:m
for i=1:n
if i=j
B(i,j)=A(i,j);
else
B(i,j)=0;
end
end
end
Ejemplo 0.13 Haga un programa que calcule la traza de una matriz cuadrada.A de dimensin
n
6
Solucin:
function suma= Traza(A)
[m n]=size(A);
if (m == n)
error (la matriz no es cuadrada)
end
suma=0;
for i=1:m
for j=1:n
if i==j
suma=suma+A(i,j);
end
end
end
Solucin:
function N= norma(v)
n=length(v);
suma=0;
k=1;
while k <=n
suma=suma+v(k)^2;
k=k+1;
end
N=sqrt(suma);
Ejemplo 0.14 Haga un programa donde dado dos matrices cuadradas se calcule la suma
7
Solucin:
function C= SumMatrices(A,B)
[m1,n1]=size(A);
[m2,n2]=size(B);
if (m1=m2) | (n1=n2)
error (error en las dimensiones de las matrices)
end
for i=1:m1
for j=1:n1
C(i,j)=A(i,j)+B(i,j);
end
end
Ejemplo 0.15 Haga un programa que multiplique una matriz con un vector controlando las
dimensiones
X
n
mn n
Solucin: Sea la matrices A R y x R , el producto es yi = ai,j xj
j=1
function y= PMatrizVector(A,x)
[m n]=size(A);
p=size(x,1);
if (p=n)
error (error en las dimensiones)
end
y=zeros(m,1);
for i=1:m
for j=1:n
y(i)=y(i)+ A(i,j)*x(j);
end
end
Ejemplo 0.16 Haga un programa que multiplique una matriz cuadrada triangular superior
son un vector columna controlando las dimensiones
8
Solucin:
function k= PTriangSupVect(A,v)
n=size(A,1);
p=size(v,1);
k=zeros(n,1);
if (p=n)
error (error en las dimensiones)
end
for i=1:n
k(i)=A(i,i:n)*v(i:n);
end
Ejemplo 0.17 Haga un programa que multiplique dos matrices cuadradas triangulares y su-
periores, controlando las dimensiones
Solucin:
function r= ProdTriangSUp(A,B)
n=size(A,1);
p=size(B,1);
if (p=n)
error (error en las dimensiones)
end
r=zeros(n);
for i=1:n
for j=1:n
r(i,j)=A(i,i:j)*B(i:j,j);
end
end
Ejemplo 0.18 Crear un programa que efectue el producto punto o interior de dos vectores
9
Solucin:
function v= Producto_Punto(x,y)
n=length(x);
m=length(y);
if (n=m)
error (error en las dimensiones de los vectores)
end
v=0;
for i=1:n
v=v+x(i)*y(i);
end
Ejemplo 0.19 Haga un programa donde dado dos matrices cuadradas se calcule el producto
10
otra forma
function P= producto(A,B)
[m,p]=size(A);
[q,n]=size(B);
if (p=q)
error (producto matricial incompatible)
end
C=zeros(m,n):
for i=1:m
for j=1:n
C(i,j)=A(i,:)*B(:,j);
end
end
Ejercicio 0.4 1.
2. (x, y) = (3, 4)
3. (x, y) = (, 2)
Solucin:
function z=fun(x,y)
z=x+(2*y-x^2)/sqrt(x^2+y^2+1e-3);
>> z=fun(3,4)
z=
2.8000
>> z=fun(pi,sqrt(2))
z=
1.0979
Ejemplo 0.21 Realizar un programa que permita pasar de grados farentheit a Celsius
11
Solucin
function C= Celsius(o F)
C=5/9*(o F-32);
Ejemplo 0.22 Presentamos una funcin simple que calcula el rea de un trapezoide de una
seccin transversal en un canal abierto
b = 2
y = 0,75
z = 1,5
A=
2.34375
Ejemplo 0.23 calcula el rea de un trapezoide de una seccin transversal en un canal abierto,
permetro mojado y radio hidrulico
12
function [A,P,R]= A_trapezoidal(b,y,z)
% b =ancho mas bajo
% y = profundidad del flujo
% z = pendiente
% A = Area
% P = Permetro mojado
% R = Radio hidrulico
% A = Area
A = (b+z*y)*y;
P = b + 2*y*sqrt(1+z^2);
R = (b+z*y)*y/(b + 2*y*sqrt(1+z^2));
>> fplot(sin(x)/x,[-8,10])
Obtenemos el siguiente grfico
Ejemplo 0.24 Supongamos que conocemos la hora en que se conoce la temperatura en una
13
estacin meteorolgica
h 9 12 15 18 21 24
T 15.7 17.2. 19.5 16.7 15.5 12.6
14
Captulo 1
En este primer captulo an no estudiaremos los mtodos numricos, sino que veremos
algunos conceptos bsicos y sealaremos algunos factores que intervendrn en la resolucin de
problemas mediante el computador.
Existen diversas fases cuando intentamos resolver un problema mediante mtodos numri-
cos. Puede suceder que los resultados finales obtenidos no sean justamente los esperados,
aunque todas las fases hayan sido ejecutadas correctamente, los motivos pueden ser varios y
los estudiaremos a continuacin.
Ejemplo 1.1 Considere el trecho de un programa en Matlab, tal como se muestra en la figura
adjunta. Observe que en teora, debera cobrarse S/,1000000.
15
Programa principal
a=1;
b=0.0000000000000001;
c=1;
if a+b>c
disp(cobrar S/.1000000);
else
disp(pagar S/. 2000000);
end
Un error numrico grave cometido por el computador. Sin embargo, debido al error cometido
por el computador, se terminara pagando S/.2 000 000.
Laboratorio 1.1 Haga un programa en algn lenguaje de programacin que usted conozca,
de modo que en la prctica corrobore el Ejemplo anterior.
Al resolver un problema por mtodos numricos, los resultados obtenidos pueden depender
de:
Ejemplo 1.2 Sabemos que para calcular el rea de un crculo, tenemos que ingresar numrica-
mente el radio r y el valor de . El valor de r quiz pueda ser conocido exactamente (r = 2),
pero apenas podemos conocer una aproximacin de con un nmero finito de dgitos. As,
aproximando el valor de por 3,14, el rea del crculo ser:
3, 14 (2)2 = 12, 56 m2
16
Si consideramos 3, 1416, entonces el rea del crculo estar dada por:
Claramente las imprecisiones de los datos de entrada ocasionan imprecisiones en los resultados.
En el ejemplo anterior vimos que el mejor resultado se obtuvo en el ltimo caso. Pero,
cuando usamos un computador, cuntos dgitos decimales reconoce ste? El siguiente ejemplo
intentar aclarar esta situacin.
Ejemplo 1.3 Usando Matlab 6.0 en un PC de 32-bit con un sistema operativo Windows XP,
hicimos la siguiente operacin:
0,00000000000001 + 1
0,000000000000001 + 1
El ejemplo anterior nos hace ver que en el primer caso, cuando se usan los 14 dgitos a la
derecha del punto, el sistema de cmputo no comete error. Mientras que, si se usan 15 dgitos,
el sistema nos otorga una respuesta errada.
La razn se debe a que todo computador trabaja con un nmero finito y bien reducido
de dgitos, en nuestro caso 14 a la derecha del punto, si el nmero de dgitos sobrepasa lo
esperado, el sistema lo trunca o redondea, dependiendo del sistema utilizado.
17
El sistema con el que trabajamos comunmente es el decimal, un nmero x en este sistema
lo representaremos algunas veces, cuando se preste a confusin, por (x)10 . Por otro lado, el
sistema con el que trabaja un computador hoy en da es el binario, un nmero y en este sistema
ser representado por (y)2 . As por ejemplo.
(5)10 y (101)2
X
30000
S= ai
i=1
X
30000
S = 0, 5 1 = 0, 5 30000 = 15000
i=1
S = 3300, 00000000063
(0, 0001110000101000111101)2
Si el computador trabajara con 14 dgitos despus del punto, el nmero debera ser cortado o
redondeado, lo cual representa ya un error. Todos los clculos subsiguientes sern, afectadas
por este hecho.
Laboratorio 1.3 Utilizando algn lenguaje de programacin, haga un programa para ejecutar
18
lo tratado en el ejemplo 2.4.
Como vimos en el ejemplo 2.4, un nmero puede tener representacin finita con respecto a
una base, pero una representacin infinita en otra base. La base decimal es la que emplearemos
generalmente, pero antiguamente fueron empleadas otras bases, como la base 12 y la base 60.
Un computador opera normalmente en el sistema binario.
Observe los que pasa cuando un usuario interacta con el computador: Los datos de entrada
son enviados al computador por el usuario en el sistema decimal, esa informacin es convertida
al sistema binario por el computador, y, todas las operaciones son realizadas en ese sistema. Los
resultados finales sern convertidas para el sistema decimal y, finalmente, sern transmitidos
hacia el usuario. Todo este proceso es una fuente de errores que afectan el resultado final de
los clculos.
aj j + aj1 j1 + ... + a2 2 + a1 1 + a0 0
19
Reordenando y resaltando la base 10 tenemos
(10111)2 = 1 24 + 0 23 + 1 22 + 1 21 + 1 20
= 2(23 + 2) + 3 = 2 101 + 3 100
= (23)10
Laboratorio 1.4 En algn lenguaje de programacin, haga un programa tal que, dado un
nmero entero binario, retorne su equivalente decimal. E inversamente, dado un entero deci-
mal, otorgue su equivalente binario.
Notemos que r tiene una representacin finita, pero s y t tienen representaciones infinitas.
En trminos generales, dado un nmero entre 0 y 1 en el sistema decimal, Cmo obtener su
representacin binaria?
d1 , d2 , ..., dj , ...
tal que (0, d1 d2 ...dj ...)2 ser su representacin binaria en la base 2. As,
Por lo tanto, d1 representa la parte entera de 2 0, 125, que es igual a 0, mientras que
20
de donde d2 = 0. Repitiendo el procedimiento para 0, 5 tenemos
Laboratorio 1.5 Usando los procedimientos anteriores para convertir nmeros fraccionarios
decimales, a binarios, haga un programa usando algn lenguaje de programacin y verifique
que:
1. El nmero (0, 5)10 tiene una representacin binaria finita (0, 1)2
(0, 0001110000101000111101)2
Paso 1: A 1, S 2
21
Paso 2: Mientras S > 1, hacer
A
A
2
S 1+A
(.d1 d2 ...dt ) e
donde
En una computadora, slo una pequea cantidad de nmeros son representados exacta-
mente, por lo general, la representacin ser realizada por medio de truncamiento o redondeo.
Ejemplo 1.5 Considere una mquina que opera en el sistema = 10, t = 3, e [5; +5] .
Los nmeros no nulos representados en este sistema sern de la forma
m = 0, 100 105
M = 0, 999 10+5
22
Ahora, en esta misma mquina. Consideremos el subconjunto de nmeros reales caracterizados
por:
G = {x R : m |x| M}
|x| < m Por ejemplo, si x = 0, 345 107 . Este nmero no puede ser representado en
esta mquina porque el exponente e es menor que 5. La mquina en estas condiciones retorna
una advertencia de underflow .
|x| > M Por ejemplo, x = 0, 875 109 . En este caso, el exponente es mayor que 5 y la
mquina no lo puede representar, advierte la ocurrencia de overflow .
Algunos lenguajes de computador permiten que las variables sean declaradas en doble
precisin. En este caso, tal variable ser representada en el sistema de aritmtica de punto
flotante de la mquina, pero con aproximadamente el doble de dgitos disponibles en la mantisa.
Debemos resaltar que en estas condiciones, el tiempo de ejecucin y requerimientos de memoria
aumentan considerablemente.
Entonces,
x + y = (0, 937 + 0, 001272) 104 = 0, 938272 104
El resultado almacenado despus del truncamiento ser 0, 9382 104 . Mientras que despus
del redondeo ser 0, 9383 104 .
23
El cero puede representarse con una mantisa nula y cualquier exponente. Por lo general, se
utiliza el menor exponente posible de la mquina. Caso contrario, si se usa cualquier exponente
para denotar el cero, se puede perder dgitos significativos, tal como muestra el siguiente
ejemplo:
Ejemplo 1.7 Supongamos que tenemos una mquina que opera con base 10 y 4 dgitos en la
mantisa. Si denotramos al cero por 0, 0000 104 , al sumarlo al nmero y = 0, 3134 102 :
El resultado despus del truncamiento sera 0, 0031 104 = 0, 3100 102 . Esto significa que
fueron perdidos 2 dgitos del valor exacto.
Ejemplo 1.8 Represente los siguientes nmeros en un sistema de aritmtica de punto flotante
(con redondeo y con truncamiento) de 3 dgitos, cuando = 10, m = 104 y M = 10+4 :
Para el primer caso, con truncamiento nos resulta 0, 314 10, mientras que con redondeo
0, 314 10. Para el segundo caso, con truncamiento obtenemos 0, 100 102 y con redondeo
0, 100 102 . Y as sucesivamente:
Todo esto nos da una idea de los posibles errores que pueden suceder, ya sea por des-
conocimiento nuestro o por la limitacin del computador, en el proceso de la resolucin numri-
ca de problemas. Debemos advertir que an es posible realizar un anlisis ms completo del
manejo de errores, pero eso lo veremos en otra ocasin.
24
Frecuentemente, slo nos interesa la magnitud de este error. As por ejemplo, si x = 12, 60 y
x = 12, 81, el error absoluto es EAx = 12, 60 12, 81 = 0, 21. Mientras que la magnitud de
este error es |0, 21| = 0, 21.
Esta idea puede ser extendida para comparar la proximidad de vectores. Por ejemplo,
consideremos los vectores en R3 dados por
6, 1 6, 2
x = 5, 8 y x = 5, 9
11, 3 10, 9
Entonces, usando la norma euclidiana, la magnitud del error estara dada ahora por
p
kx xk = (6, 1 6, 2)2 + (5, 8 5, 9)2 + (11, 3 (10, 9))2 = 0, 4243
No obstante, el error absoluto definido en (1.2) quiz no tenga inters prctico en este caso.
En general, apenas el valor de x es conocido, lo que hace imposible obtener el error absoluto
exacto. Lo que se puede hacer en este caso es obtener una cota superior o una estimativa para
el mdulo del error absoluto, tal como muestra el siguiente ejemplo.
Ejemplo 1.9 Conocindo que h3, 14; 3, 15i , podemos tomar para x un valor dentro de
este intervalo y tendremos que:
|EA | = | x| < 0, 01
En este caso diremos que el error absoluto de x con respecto a , en mdulo, es menor que
0, 01. Ms an, diremos que el nmero x est representado con precisin menor que 0, 01.
Para evitar situaciones como la anterior, en la prctica es mejor utilizar otro criterio para
medir el error, ste es conocido como error relativo.
El error relativo es definido como el error absoluto dividido por el valor exacto, es decir:
EAx x x
ERx = =
x x
25
Frecuentemente, tambin se suele trabajar con el mdulo de este valor. Observe que el error
relativo respecto al primer premio de S/. 10 000 000 es
10
ER10 000 000 = 0, 000001
10 000 000
10
ER20 = 0, 5
20
Con esto, digamos que en este caso se midi el error con ms justicia.
Ejercicio 1.1 Convierta los siguientes nmeros decimales para su forma binaria: 26, 1278 y
0, 1217
Ejercicio 1.2 Convierta los siguientes nmeros binarios para su forma decimal: (101101)2 ,
(0, 111111101)2 y (0, 1101)2 .
Laboratorio 1.7 El siguiente algoritmo calcula de una forma aproximada la raz n-sima de
un nmero no negativo a.
En algn lenguaje de programacin, haga un programa para ejecutar este algoritmo. Modifique
el programa para que retorne tambin el nmero de pasos (iteraciones). Cmo utilizara el
error relativo para controlar el algoritmo?
26
2. (Dificultades con el clculo del factorial) El clculo de k! necesario en la serie de Taylor
puede ser hecho de modo a evitar la ocurrencia de overflow. Para esto es necesario
k
analizar cuidadosamente el k-simo trmino, xk! . Intente combinar el clculo del numera-
dor con el del denominador y realizar divisiones intermedias. Estudie una manera de
realizar esta operacin de modo que k! no se sobrecargue.
3. Con la modificacin del segundo item, la serie de Taylor puede ser calculada con los
trminos que se desee. Cul sera el criterio para detener su programa e interrumpir el
clculo de la serie?
27