Soluciones computacionales- Análisis numérico
Julio MayoTrabajo10 de Septiembre de 2020
2.547 Palabras (11 Páginas)195 Visitas
1. Dado un número real, mostrar su respectiva representación en formato IEEE 754 y viceversa, con los respectivos errores absoluto y relativo generados.
x=input('Digite la 1 si va de real a IEEE o 2 si es viceversa: ');
clc;
switch x
case 1
disp('real a IEEE');
valor_real=input('Digite el valor a convertir: ');
valorIEEE=dec2bin(typecast(single(valor_real),'uint32'),32)
valor_aprox=typecast(uint32(bin2dec(valorIEEE)), 'single');
error_absoluto=valor_real-valor_aprox;
error_relativo=abs((error_absoluto)/valor_real);
fprintf('Error absoluto es: %d \n, Error relativo es: %d\n',error_absoluto,error_relativo);
case 2
disp('IEEE a real');
valor_real=input('Digite el valor a convertir: ','s');
valorreal=typecast(uint32(bin2dec(valor_real)), 'single')
valor_aprox=dec2bin(typecast(single(valorreal),'uint32'),32);
xx=bin2dec(valor_real);
yy=bin2dec(valor_aprox);
error_absoluto=xx-yy;
error_relativo=abs((xx-yy)/xx);
fprintf('Error absoluto es: %d \n, Error relativo es: %d\n',error_absoluto,error_relativo);
otherwise
disp('Valor invalido');
end
Caso 1
real a IEEE
Digite el valor a convertir: 14646494646
valorIEEE =
01010000010110100011111111110001
Error absoluto es: 4.380000e+02
Error relativo es: 2.990476e-08
Caso 2
IEEE a real
Digite el valor a convertir: 01010000010110100011111111110001
valorreal =
1.4646e+10
Error absoluto es: 0.000000e+00
Error relativo es: 0
x>2
Valor invalido
2. Dado una función, generar el polinomio obtenido con la serie de Taylor y mostrar los respectivos errores absoluto y relativo generados, con sus respectivas gráficas.
syms x;
f = input('Digite la funcion ');
a = input ('Digite el valor de a ');
n = input ('Digite el valor de n ');
xi = input ('Digite el valor de xi ');
suma=0;
i=0;
ErA=0;
ErR=0;
for i=0:n
suma = suma + ((subs(diff(f,i),a)*(x-a)^i)/(factorial(i)));
hold on;
i = i+1;
end
disp ('El modelo matematico es')
disp (suma)
img = ezplot(suma);
set(img,'color','cyan')
hold on;
img = ezplot(f);
set(img,'color','blue')
hold on;
legend (char(suma), char(f))
xlabel('x')
ylabel('y')
title ('Serie de Taylor')
ErA = abs(subs(f,xi)-subs(suma,xi));
ErR = ((ErA/subs(f,xi))*100);
fprintf('Error absoluto: %d \nErro relativo: %d \n',ErA,ErR)
Digite la funcion exp(-x)
Digite el valor de a 1
Digite el valor de n 5
Digite el valor de xi 0
El modelo matematico es
(828390857088487*(x - 1)^2)/4503599627370496 - (828390857088487*x)/2251799813685248 - (828390857088487*(x - 1)^3)/13510798882111488 + (828390857088487*(x - 1)^4)/54043195528445952 - (828390857088487*(x - 1)^5)/270215977642229760 + 828390857088487/1125899906842624
Error absoluto: 5.941848e-04
Erro relativo: 5.941848e-02
[pic 1]
3. Presentar un problema de Ingeniería afín a la que estudia el grupo, en la que tengan que resolver una ecuación no lineal, aplicando los métodos Newton Raphson, Bisección, Secante y Regula Falsi Modificado. Elaborar una tabla en la que aparezca la raíz encontrada, el error absoluto, el número de iteraciones consumidas en cada método y el tiempo de procesamiento en cada caso y las gráficas de cada método.
En una planta industrial se está diseñando un tanque esférico para almacenar ácidos líquidos para una planta en Cartagena. El volumen de líquido que puede contener el tanque para un nivel específico se calcula con la ecuación:
V = (pi*h^2*(3R-h))/3
Donde V = volumen (m3), h = profundidad del agua en el tanque (m) y R = radio del tanque (m). Considerando que el radio del tanque es 4 m, y que se desea encontrar el nivel del tanque si se sabe que el volumen almacenado en el mismo es 100 m3. Determine la(s) raíces de la función dada físicamente posibles. Si se sabe que el error permitido es de 10^-9.
- Newton
syms x;
disp('Metodo de Newton-Raphson ');
f = input('Escriba la función: ');
xi = input('Digite el valor incial : ');
tol = input('Digite la tolerancia : ');
contador=0;
tic
while (abs(subs(f,xi))>tol)
xm = xi-subs(f,xi)/subs(diff(f),xi);
xi = xm;
contador = contador+1;
end
raiz = xi;
fprintf('la raiz es: %d \nNumero de interaciones: %d \n',raiz, contador)
tiempo=toc
Escriba la función: ((pi*x^2*(12-x))/(3))-100
Digite el valor incial : 1
Digite la tolerancia : 10^-9
la raiz es: 3.316106e+00
Numero de interaciones: 5
tiempo =
0.1229
- Bisección
syms x;
Fx=input('Ingrese la funcion: ','s');
a=input('Ingrese a : ');
c=input('Ingrese c : ');
e=input('Ingrese el error : ');
contador=0;
tic
x=a;
Fa=eval(Fx);
x=c;
Fc=eval(Fx);
while abs(c-a)>e
b=(a+c)/2;
x=b;
Fb=eval(Fx);
if Fa*Fb<=0
c=b;
Fc=Fb;
else
a=b;
Fa=Fb;
end
contador = contador + 1;
end
fprintf('\nEl resultado sera %.4f\n Numero de iteraciones: %d \n',b,contador);
tiempo=toc
Ingrese la funcion: ((pi*x^2*(12-x))/(3))-100
Ingrese a : 1
Ingrese c : 5
Ingrese el error : 10^-9
El resultado sera 3.3161
Numero de iteraciones: 32
tiempo =
0.0174
- secante
f=input('Ingrese la funcion: ','s');
a=input('Ingrese a : ');
b=input('Ingrese b : ');
tol=input('Ingrese el error : ');
tic
contador=0;
while (abs(subs(f,b))>tol)
xm = b-((b-a)*subs(f,b))/(subs(f,b)-subs(f,a));
a=b;
b=xm;
contador = contador + 1;
end
raiz=b;
fprintf('la raiz es: %d \nNumero de iteraciones %d \n',raiz, contador)
tiempo = toc
Ingrese la funcion: ((pi*x^2*(12-x))/(3))-100
Ingrese a : 1
Ingrese b : 5
Ingrese el error : 10^-9
la raiz es: 3.316106e+00
Numero de iteraciones 5
tiempo =
0.1045
- Regula falsi
f=input('Ingrese la funcion: ','s');
...