Sie sind auf Seite 1von 5

Números de punto flotante con Scilab

María Isabel David


1. Analice el computo de la suma Pitagórica

(a) Defina una función en scilab para calcular h(a, b)

function y=h1(a, b)
y=sqrt(abs(a^2)+abs(b^2))
endfunction

(b) Evalúe en las entradas a = 1 y b = 1. ¿Corresponde al resultado esperado?


h1(1,1)
ans =
1.414213562373095145D+00
Si corresponde al resultado esperado porque da raíz cuadrada de 2
(c) Evalúe en las entradas a = 10200 y b = 1. ¿Corresponde al resultado
esperado?
¿Por qué?
h1(10^200,1)
ans =
Inf
No corresponde con el resultado esperado hay overflow
(d) Evalúe en las entradas a = 10−200 y b = 10−200. ¿Corresponde al resultado
esperado? ¿Por qué?
h1(10^-200,10^200)
ans =
Inf
No corresponde con el resultado esperado hay overflow

2. Observamos que la suma Pitagórica produce overflow, cuando a o b son


grandes. Para resolver este problema sugerimos escalar el computo por a o
b, dependiendo de cuál de los dos es mas grande. Por ejemplo, si a es el mas
grande, considere la expresión:
donde r = b/a
(a) Escriba una expresión para h2 (a, b) cuando b es el más grande.

(b) Defina una función scilab para calcular h2 (a, b) que tenga en cuenta
las dos expresiones dependiendo de cual de los dos (a ´o b) es el mas
grande.

function y=h2(a, b)
M=max(abs(a),abs(b))
if(M==0)then
y=0
else
m=min(a,b)
r=m/M
y=abs(M)*sqrt(1+r^2)
end
endfunction
(c) Evalúe la función h2 (10200 , 1) y h2 (1, 10200 ). ¿Qué sucede?
h2(10^200,1)
ans =
9.99999999999999970D+199
h2(1,10^200)
ans =
9.99999999999999970D+199
(d) Evalúe en las entradas a = 10−200 y b = 10−200 . ¿Qué sucede?
h2(10^-200,10^-200)
ans =
1.41421356237309498D-200
(e) ¿Qué sucede al evaluar h2 (0, 0)? Mejore la definición la función h2 para
que incluya este caso.
h2(0,0)
ans = 0.

3. Un experimento num´érico interesante consiste en calcular el producto


escalar de los siguientes dos vectores

x = [2.718281828, −3.141592654, 1.414213562, 0.5772156649,


0.3010299957]
y = [1486.2497, 878366.9879, −22.37492, 4773714.647, 0.000185049]
Utilice Scilab para calcular la sumatoria de las tres formas siguientes:

(a) En orden ascendente x1y1 + x2y2 + x3y3 + x4y4 + x5y5.

n = [2.718281828 -3.141592654 1.414213562 0.5772156649 0.3010299957]


m = [1486.2497 878366.9879 -22.37492 4773714.647 0.000185049]
function i=a3(x, y)
i=0
for j=1:1:5
i=x(j)*y(j)+i
end
endfunction
a3(n,m)
ans =
1.025188136829667182D-10

(b) En orden descendente x5y5 + x4y4 + x3y3 + x2y2 + x1y1.

function i=b3(x, y)
i=0
for j=5:-1:1
i=x(j)*y(j)+i
end
endfunction
b3(n,m)
ans =
-1.564330887049436569D-10

(c) En orden del mayor al menor.

function i=c3(x, y)
i=0
k=0
j=0
for w=1:1:5
h(w)=x(w)*y(w)
end
for r=1:1:5
if h(r)>0 then
j=h(r)+j
else
k=h(r)+k
end
end
i=k+j
endfunction
c3(m,n)
ans =
0.000000000000000000D+00

4. Repita el ejercicio anterior, pero elimine el 9 final de x4 y el 7 final de


x5 . ¿Qu´e efectos provoca este pequen˜o cambio en los resultados?

s = [2.718281828 -3.141592654 1.414213562 0.577215664 0.301029995]


o = [1486.2497 878366.9879 -22.37492 4773714.647 0.000185049]

a3(s,o)
ans =
-4.296342739891585369D-03

b3(s,o)
ans =
-4.296342998713953421D-03

c3(s,o)
ans =
-4.296342842280864716D-03

Das könnte Ihnen auch gefallen