Universidad Mariano Galvez de Guatemala.
Catedratico: Ing. Mario Alberto Tucubal.
Curso: Analisis Numerico
Código: 1012 – 135
Sede: Central.
Jornada: Matutina
“Laboratorio de viernes 21 de Febrero”
Alumno: Josué Miguel Reguán Villatoro.
Carné: 010 17 1146
EJERCICIO #1
CORRIDA DEL PROGRAMA:
TABLA DE ERRORES
CÓDIGO DE EJERCICIO #1:
func = (9.8(68.1))/C*(1-e{(c/68.1)*10})-40 %Función de la cual se desea conocer las raices
lin = -20; %Valor del límite inferior para los ejes de la gráfica
lsup = 20; %Valor del límite superior para los ejes de la gráfica
paso = 2
; %Paso o resolución para el gráfico
x=(lin:paso:lsup);
y = func(x);
plot(x,y);
title('Gráfica de la función') %Título de la gráfica
xlabel('Eje x') %Título del eje x de la gráfica
ylabel('Eje y') %Título del eje y de la gráfica
grid on; %Activa la cuadricula en la gráfica
xl = 4
xu = 20
test = func(xl)*func(xu)
if test>0,error('no hay cambio de signo'),end
A = [xl xu];
B = [0 0];
C1 = xr;
C2 = 0;
plot(A,B,'-o','MarkerSize',10,'MarkerEdgeColor','k','MarkerFaceColor','k')
grid on
axis1 = (xl-1);
axis2 = (xu+1);
axis([axis1 axis2 -0.5 0.5])
hold on
plot(C1,C2,'-o','MarkerSize',10,'MarkerEdgeColor','r','MarkerFaceColor','r')
line(A,B)
hold off
title('Gráfica de los puntos xl xr xu') %Título de la gráfica
xlabel('Eje x') %Título del eje x de la gráfica
ylabel('Eje y') %Título del eje y de la gráfica
grid on; %Activa la cuadricula en la gráfica
test2 = func(xl)*func(xr)
if test2 < 0
xu = xr
elseif test2 > 0
xl = xr
elseif test2 == 0
xr = 0
end
xrold = xr;
xr = (xl + xu)/2
ea = abs((xr - xrold)/xr) * 100
Es = 0.01; %Criterio de paro para el método de Bisección
Resultados = biseccion(func,xl,xu,Es)
function Resultados = biseccion(f,xl,xu,Es)
xr=xl; % Da un valor inicial a xr
iter=0; % variable de conteo de iteraciones
ea=100;
R=[]; %Matriz que contendrá los datos para realizar la tabla
while (1) %Ciclo while para realizar las iteraciones
xrold=xr; %Definición incial de xr
xr=(xl+xu)/2; %Cálculo del xr nuevo para el método de Bisección
iter=iter+1; %Incremento del número de iteración.
fxlxr=f(xl)*f(xr); %Cálculo de la función evaluada en xl y xr para ver si hay cambio de signo
if xr ~= 0 %Si xr es distinto a 0, se calcula el valor del error aproximado
ea = abs((xr - xrold)/xr) * 100;
end
F=[iter xl xu xr f(xl) f(xr) fxlxr ea]; %Vector fila con los datos de cada iteración
%F=[iter xl f(xl) xu f(xu) xr f(xr) ea]; %Vector fila con los datos de cada iteración
R=[R;F]; %Adición del vector fila F a la tabla con los resultados del programa.
producto = f(xl)*f(xr); %Variable para verificar el producto de f(xl) y f(xu)
if producto < 0 %Si el producto es menor a 0, xu se sustituye por xr
xu = xr;
elseif producto > 0 %Si el producto es mayor a 0, xl se sustituye por xr
xl = xr;
else
ea = 0; %Si el error absoluto es igual a 0, el ciclo termina (eso indica que ya se encontró el valor de xr
%para la cual la función es 0, por tanto en ese caso xr sería la raíz).
end
if ea <= Es %Si el error relativo aproximado es menor que la tolerancia, se termina el método.
break
end
end
Resultados=array2table(R,'VariableNames', {'i' 'xl' 'xu' 'xr' 'f(xl)' 'f(xr)' 'f(xl)*f(xr)' 'ea'}); %Creación de la tabla
end
EJERCICIO #2
CORRIDA DEL PROGRAMA:
CODIGO DEL PROGRAMA:
disp('METODO GRAFICO POR MEDIO DE BISECCIÓN ') %titulo
disp('___________________')
Fun=input('Ingrese la función: ','s');
a=input('Ingrese el limite inferior: ');
b=input('Ingrese el limite superior: ');
e=input('Ingrese el paso entre funciones: ');
Funcion= inline(Fun);
fa=Funcion(a); %evalua la funcion en el limite inferior
fb=Funcion(b); %evalua la funcion en el limite superior
cont=0; % contador se inicializa en cero
fprintf(' \n %1s %8s %9s %10s %10s %10s %10s \n ','cont', 'a', 'b','c','fa','fb','fc'); % imprime el encabezado,
el titulo de la tabla
while((abs(b-a))> e) % cilclo while, mietras el valor de la diferencia del limite sup - limite inf sea mayor que
el porcentaje de error haga
c=(a+b)/2; %variable para el promedio de los limites
fc=Funcion(c); %la funcion se evalua en el promedio c
if((fa*fc)<0) % si el producto de las funciones fa y fc es menor que cero imprime en la tabla
fprintf('\n %7f %8f %9f %10f %10f %10f %10f \n ',cont,a,b,c,fa,fb,fc);
b=c;
else
if((fc*fb)<0) %si el producto de las funciones fc y fb es menor que cero imprime en la tabla
fprintf('\n %7f %8f %9f %10f %10f %10f %10f \n ',cont,a,b,c,fa,fb,fc);
a=c;
end
end
cont=cont+1; %aumentamos el contador en 1
end %fin while
fprintf(' \n El valor aproximado de la raiz es:');
disp(c) %imprimimos la raiz aproximada
fprintf(' \n El numero de iteraciones es:');
disp(cont)