Você está na página 1de 11

UNIVERSIDAD

POLITECNICA SALESIANA
METODOS NUMERICOS
FACULTAD DE
INGENIERIA ELECTRICA
ESTEBAN HERRERA
PERIODO 46
2015-2015
TEMA: MTODOS ESTUDIADOS + EJERCICIOS DE CHAPRA .

Biseccin
1- Iniciar programa.
2-Introducir la funcin (polinomio).
3-Introducir lmite inferior.
4- Introducir limite Superior.
5- Introducir porcentaje de error.
6- El programa multiplica los lmites y espera que sean menores a cero.
7- El programa calcula la primera aproximacin de la raz.
8- Se determina en que sub-intervalo se encuentra la raz.
9- Si el producto de los lmites es menor que cero volver al paso 7.
10- Si el producto de los lmites es mayor que cero volver al paso 3.
11- Si el producto de los lmites es igual a cero la raz se ha encontrado.
12- Imprimir resultados.
13-Fin

Cdigo Matlab
disp('METODO DE BISECCION');
disp('-------------------');
f=input('INGREESE FUNCION: ','s');
xai=input('INGRESE LIMITE INFERIOR DEL INTERVALO:');
xbi=input('INGRESE LIMITE SUPERIOR DEL INTERVALO:');
tol=input('INGRESE PORCENTAJE DE ERROR:');
f=inline(f);
i=1;
ea(1)=100;
if f(xai)*f(xbi)<0
xa(1)=xai;
xb(1)=xbi;
xr(1)=(xa(1)+xb(1))/2;
fprintf('It. Xa Xr Xb Error aprox \n');
fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \n',i,xa(i),xr(i),xb(i));
while abs(ea(i)) >= tol,
if f(xa(i))*f(xr(i))<0
xa(i+1)=xa(i);
xb(i+1)=xr(i);
end
if f(xa(i))*f(xr(i))>0
xa(i+1)=xr(i);
xb(i+1)=xb(i);
end
xr(i+1)=(xa(i+1)+xb(i+1))/2;
ea(i+1)=abs((xr(i+1)-xr(i))/(xr(i+1))*100);
fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \t %7.3f \n',...
i+1,xa(i+1),xr(i+1),xb(i+1),ea(i+1));
i=i+1;
end

else
fprintf('NO EXISTE UNA RAIZ EN ESTE INTERVALO');
end

Falsa posicin
Algoritmo

1- Iniciar programa.
2-Introducir la funcin (polinomio).
3-Introducir lmite inferior.
4- Introducir limite Superior.
5- Introducir porcentaje de error.
6- El programa multiplica los lmites y espera que sean menores a cero.
7- El programa calcula la primera aproximacin de la raz.
8- Se determina en que sub-intervalo se encuentra la raz con la formula.
9- Si el producto de los lmites es menor que cero volver al paso 7.
10- Si el producto de los lmites es mayor que cero volver al paso 3.
11- Si el producto de los lmites es igual a cero la raz se ha encontrado.
12- Imprimir resultados.
13-Fin
Codigo Matlab
disp('METODO DE FALSA POSICIN');
disp('-------------------');
f=input('INGREESE FUNCION: ','s');
xai=input('INGRESE LIMITE INFERIOR DEL INTERVALO:');
xbi=input('INGRESE LIMITE SUPERIOR DEL INTERVALO:');
tol=input('INGRESE PORCENTAJE DE ERROR:');
f=inline(f);
i=1;

ea(1)=100;
if f(xai)*f(xbi)<0
xa(1)=xai;
xb(1)=xbi;
xr(1) = xbi-((f(xbi))*(xai-xbi))/(f(xai)-f(xbi))
fprintf('It. Xa Xr Xb Error aprox \n');
fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \n',i,xa(i),xr(i),xb(i));
while abs(ea(i)) >= tol,
if f(xa(i))*f(xr(i))<0
xa(i+1)=xa(i);
xb(i+1)=xr(i);
end
if f(xa(i))*f(xr(i))>0
xa(i+1)=xr(i);
xb(i+1)=xb(i);
end
xr(i+1)=(xa(i+1)+xb(i+1))/2;
ea(i+1)=abs((xr(i+1)-xr(i))/(xr(i+1))*100);
fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \t %7.3f \n',...
i+1,xa(i+1),xr(i+1),xb(i+1),ea(i+1));
i=i+1;
end
else
fprintf('NO EXISTE UNA RAIZ EN ESTE INTERVALO');
end

Punto fijo

Algoritmo
1-Inicio.
2-Ingresamos la funcin f(x).
3-Ingresamos la funcin g(x) ya despejada.

4-Ingresamos el primer valor que ser tomado como el punto medio del intervalo.
5-Introducimos el porcentaje de error al que deseamos llegar.
6-Realizamos la derivada de la funcin g
7-Al ingresar el valor inicial dg menor 1 converge caso contrario dg mayor que 1 no converge y
se tiene que ingresar una nueva funcin

Cdigo Matlab
clear, clc
cf = input('Ingrese la funcion f: ');
cg = input('Ingrese la funcion g: ');
f = inline(cf);
g = inline(cg);
syms x
dg = diff(cg, x);
x = input('Ingrese el primer valor: ');
if ( abs(eval(dg))<1 )
tol = input('Ingrese la tolerancia: ');
disp('
n
xo
error')
fprintf('
0.0000
%7.4f
------\n',x)
n = 0;error = 100;
while(error > tol)
n = n+1;
anterior = x;
x = g(x);
error = abs(x-anterior);
disp([n,x,error])
end
else
disp('Ingrese otra funcion g(x), pues con la actual, el metodo diverge')
end

Newton raphson
Algoritmo
1.- Inicio.
2.- Pedir la funcin al usuario.
3.- Pedir el valor inicial.
4.- Pedir el porcentaje de error.
5.- Se guardaran en el programa los valores de entrada.
6.- El programa calculara la primera derivada.
7.- Dependiendo de la eleccin para calcular la raz, graficara la funcin desde un intervalo a otro.
8.- Los clculos seguirn hasta que l error aproximado sea menor que el error limite, y la raz se
imprimir.
9.- Fin
Codigo Matlab
clear, clc;
cf = input('Ingrese la funcin a evaluar: ');
syms x
f = inline(cf);
derivada = diff(cf, x);
df = inline(derivada);
tol = input('Ingrese la tolerancia: ');
error = 50;
x = input('Ingrese un valor inicial: ');
n = 0;
disp('
n
xi
error')
while(error > tol)
fprintf('\t%i\t%3.5f\t%f\n', n, x, error);
n = n+1;
x = x-f(x)/df(x);
error = abs ( f(x) );
end

Newton-Raphson modificado
Algoritmo
1.- Inicio.
2.- Pedir la funcin al usuario.
3.- Pedir el valor inicial.
4.- Pedir el porcentaje de error.
5.- Se guardaran en el programa los valores de entrada.
6.- El programa calculara la primera derivada y la segunda derivada.
7.- Dependiendo de la eleccin para calcular la raz, graficara la funcin desde un intervalo a otro.
8.- Los clculos seguirn hasta que l error aproximado sea menor que el error limite, y la raz se
imprimir.
9.- Fin
clear all, clc
syms x
f = input('Funcin
:','s');
x0 = input('Aproximacin inicial :');
tol= input('Tolerancia
:');
disp('Datos de salida')
df = diff(sym(f));
f = inline(char(f));
df = inline(df);
x = x0;
e = abs(f(x));
i = 0;
fprintf('%s\t\t\t%s\t%s\n','it.','x','f(x)');
while (e>=tol)
fprintf('%d\t%f\t%f\n',i,x,f(x))
nwr = x - (f(x)/df(x));
e = abs(f(x));
x = nwr;
i = i+1;
end

secante
Mtodo de la Secante
1- Iniciar.
2- Introducir la funcin o la ecuacin que quiere calcular.
3- Introducimos o ingresamos el primer valor o x0.
4- Introducir el o ingresamos el segundo valor o x1
5-Ingresamos la tolerancia o el porcentaje de error que deseamos encontrar (tol).
7- Calculamos la raz que deseamos encontrar.
9- Si el error mayor que la tolerancia se continua con las iteraciones
10-Si el error es menor o igual a la tolerancia esa sera la respuesta a nuestro problema.
10- Imprimir resultados.
11- Fin.

clear, clc
cf = input('Ingrese la funcin: ');
f = inline(cf);
x0 = input('Ingrese el primer valor: ');
x1 = input('Ingrese el segundo valor: ');
tol = input('Ingrese la tolerancia: ');
error = 100;
n = 0;
fprintf('

fprintf('

%i

x0

x1
%4.4f

x2

error\n');

%4.4f ------

------\n',n,x0,x1);

while (error>tol)
x2 = x1 -(x1-x0)*f(x1)/(f(x1)-f(x0));
error = abs( f(x2) );
fprintf('

%i

%4.4f

%4.4f

%4.4f

x0=x1;
x1=x2;
n = n+1;
end

ejercicios

6.20
clear, clc;
cf = input('Ingrese la funcin a evaluar: ');
syms x
f = inline(cf);
derivada = diff(cf, x);
df = inline(derivada);
tol = input('Ingrese la tolerancia: ');
error = 50;

%4.4f\n',n,x0,x1,x2,error);

x = input('Ingrese un valor inicial: ');


n = 0;
disp('

xi

error')

while(error > tol)


fprintf('\t%i\t%3.5f\t%f\n', n, x, error);
n = n+1;
x = x-f(x)/df(x);
error = abs ( f(x) );
end

Resultado
6.22) Haga un programa amigable para el usuario por el mtodo de la secante
modificado, con base en la figura 6.4 y la seccin 6.3.2. Prubelo con la repeticin
del clculo del ejemplo 6.8.
D{1,1}='function [x,ff,err,iter]=secante_mod(x0,func,errmin,maxit,sigma)';
D{1,2}='iter=1;';
D{1,3}='er=100;';
D{1,4}='xold=x0;';
D{1,5}='x(1)=x0;';
D{1,6}='ff(1)=feval(func,x(1));';
D{1,7}='err(1)=er;';
D{1,8}='while ((err>errmin) & (iter<maxit));';
D{1,9}='cor=sigma*xold*feval(func,xold)...';
D{1,10}='/(feval(func,(1+sigma)*xold)-feval(func,xold));';
D{1,11}='xr=xold-cor;';
D{1,12}='er=abs((xr-xold)/xr)*100;';
D{1,13}='iter=iter+1;';
D{1,14}='x(iter)=xr;';
D{1,15}='ff(iter)=feval(func,xr);';
D{1,16}='err(iter)=er;';
D{1,17}='xold=xr;';
D{1,18}='end;';
[nrow,ncol]=size(D);
fid=fopen('secante_mod.m','w');
for i=1:1:ncol;
fprintf(fid,D{1,i});fprintf(fid,'\n');
end;
fclose(fid)

6.24) Desarrolle un programa amigable para el usuario para el mtodo de NewtonRaphson con base en la figura 6.4 y la seccin 6.6.2. Pruebe con la solucin del
ejemplo 6.11.
clear, clc;
cf = input('Ingrese la funcin a evaluar: ');
syms x
f = inline(cf);
derivada = diff(cf, x);
df = inline(derivada);
tol = input('Ingrese la tolerancia: ');
error = 50;
x = input('Ingrese un valor inicial: ');
n = 0;
disp('

xi

error')

while(error > tol)


fprintf('\t%i\t%3.5f\t%f\n', n, x, error);
n = n+1;
x = x-f(x)/df(x);
error = abs ( f(x) );
end

Punto: 4.52
Punto: 4.54

Você também pode gostar