You are on page 1of 6

PONTIFICIA UNIVERSIDAD JAVERIANA

FACULTAD DE INGENIERA
DEPARTAMENTO DE INGENIERA CIVIL

SERIE DE TAYLOR Y SOLUCIN DE ECUACIONES NO LINEALES

Oscar Javier Garca-Cabrejo

Bogot, Marzo de 2008

CDIGO DE LA SERIE DE TAYLOR PARA DIFERENTES FUNCIONES


La serie de Taylor para diferentes funciones se puede implementar empleando una expresin del tipo:

f x
k 0

f ' c
x c k
k!

donde f() es la funcin a analizar, f'() es su correspondiente derivada y c es el punto cercano a donde se
quiere realizarla estimacin.
Aplicando esta expresin para el caso de la funcin exponencial se tiene:

exp x 1 x

x 2 x3

2
3!

Esta expresin se encuentra implementada en el siguiente cdigo:


ST1{1,1}='function [c]=exp_taylor(x,n)'
ST1{1,2}='c=1.0;';
ST1{1,3}='for i=1:1:n;';
ST1{1,4}='c=c+(x.^i)./(factorial(i));';
ST1{1,5}='end;';
[nrow,ncol]=size(ST1);
fid=fopen('exp_taylor.m','w'');
for i=1:1:ncol;
fprintf(fid,ST1{1,i});fprintf(fid,'\n');
end;
fclose(fid);
Una vez se ha creado esta funcin, esta ya se puede utilizar para realizar la aproximacin numrica de la
funcin exponencial especificando el valor de x y el nmero de trminos n, de la siguiente forma:
est=exp_taylor(0.5,3);
y el valor real de la exponencial estara dado por:
real=exp(0.5);
con lo cual es posible calcular el error relativo asociado:
Er=abs((real-est)/est)*100;

Para el caso de la funcin coseno, el cdigo que la implementa es el siguiente:


ST2{1,1}='function [c]=cos_taylor(x,n)';
ST2{1,2}='c=1.0;';
ST2{1,3}='for i=1:1:n;';
ST2{1,4}='c=c+((-x^2)^i)/factorial(2*i);';

ST2{1,5}='end;';
[nrow,ncol]=size(ST2);
fid=fopen('cos_taylor.m','w'');
for i=1:1:ncol;
fprintf(fid,ST2{1,i});fprintf(fid,'\n');
end;
fclose(fid);
Para el caso de la funcin seno, el cdigo que la aproxima usando la serie de Taylor es la siguiente:
ST3{1,1}='function [c]=sin_taylor(x,n)';
ST3{1,2}='c=0.0;';
ST3{1,3}='for i=0:1:n;';
ST3{1,4}='c=c+((-x.^2).^i)/factorial(2*i+1);';
ST3{1,5}='end;';
ST3{1,6}='c=x*c;';
[nrow,ncol]=size(ST3);
fid=fopen('sin_taylor.m','w');
for i=1:1:ncol;
fprintf(fid,ST3{1,i});fprintf(fid,'\n');
end;

CDIGO DEL MTODO DE LA BISECCIN


A{1,1}='function [x,f,err,iter]=bisection(xl,xu,func,maxit,errmin)';
A{1,2}='iter=1;';
A{1,3}='er=100;';
A{1,4}='xr=xl;';
A{1,5}='root=0;';
A{1,6}='x(1)=xl;';
A{1,7}='f(1)=feval(func,x(1));';
A{1,8}='err(1)=er;';
A{1,9}='while (err > errmin & iter < maxit );';
A{1,10}=' xold=xr;';
A{1,11}='xr=0.5*(xl+xu);';
A{1,12}='fr=feval(func,xr);';
A{1,13}='fl=feval(func,xl);';
A{1,14}='if(fr*fl<0);';
A{1,15}='xu=xr;';
A{1,16}='root=xr;';
A{1,17}='elseif(fr*fl>0);';
A{1,18}='xl=xr;';
A{1,19}='root=xr;';
A{1,20}='else';
A{1,21}='root=xr;';
A{1,22}='end';
A{1,23}='er=(abs(xr-xold)/xr)*100;';
A{1,24}='iter=iter+1;';
A{1,25}='x(iter)=xr;';

A{1,26}='f(iter)=feval(func,xr);';
A{1,27}='err(iter)=er;';
A{1,28}='end;';
[nrow,ncol]=size(A);

fid=fopen('bisection.m','w');
for i=1:1:ncol;
fprintf(fid,A{1,i});fprintf(fid,'\n');
end;
fclose(fid);

CDIGO DEL MTODO DE NEWTON


B{1,1}='function [x,f,err,iter]=newton(xguess,func,dfunc,errmin,maxit)';
B{1,2}='iter=1;';
B{1,3}='er=100;';
B{1,4}='x(1)=xguess;';
B{1,5}='f(1)=feval(func,x(1));';
B{1,6}='err(1)=er;';
B{1,7}='xrold=xguess;';
B{1,8}='xr=xguess;';
B{1,9}='while (er>=errmin & iter<maxit)';
B{1,10}='xrold=xr;';
B{1,11}='xr=xrold-(feval(func,xrold)/feval(dfunc,xrold));';
B{1,12}='er=abs((xr-xrold)/xr)*100;';
B{1,13}='iter=iter+1;';
B{1,14}='x(iter)=xr;';
B{1,15}='f(iter)=feval(func,xr);';
B{1,16}='err(iter)=er;';
B{1,17}='end';

[nrow,ncol]=size(B);
fid=fopen('newton.m','w');
for i=1:1:ncol;
fprintf(fid,B{1,i});fprintf(fid,'\n');
end;
fclose(fid);
CDIGO DEL MTODO DE LA SECANTE
C{1,1}='function [x,f,err,iter]=secante(x0,x1,func,errmin,maxit)';
C{1,2}='iter=1;';
C{1,3}='er=100;';
C{1,4}='xold0=x0;';
C{1,5}='xold1=x1;';
C{1,6}='x(1)=x1;';
C{1,7}='f(1)=feval(func,x1);';
C{1,8}='err(1)=er;';
C{1,9}='while (err>errmin) & (iter<=maxit);';
C{1,10}='fii=feval(func,xold1);';
C{1,11}='fi=feval(func,xold0);';

C{1,12}='xr=xold1-(fii*(xold0-xold1)/(fi-fii));';
C{1,13}='er=abs((xr-xold1)/xr)*100;';
C{1,14}='iter=iter+1;';
C{1,15}='x(iter)=xr;';
C{1,16}='f(iter)=feval(func,x(iter));';
C{1,17}='err(iter)=er;';
C{1,18}='xold0=xold1;';
C{1,19}='xold1=xr;';
C{1,20}='end;';
[nrow,ncol]=size(C);
fid=fopen('secante.m','w');
for i=1,ncol;
fprintf(fid,C{1,i});fprintf(fid,'\n');
end;
fclose(fid);

CDIGO DEL MTODO DE LA SECANTE MODIFICADA


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);
PROBLEMA DE PRUEBA
El flujo en canal abierto se encuentra descrito por la famosa ecuacin de Manning, la cual se encuentra
expresada:

1
AR 2/ 3S01/ 2
n

donde:
Q es el caudal en m3/s
A es el rea de la seccin transversal en m
R es el radio hidralico en m
S0 es la pendiente en %
Recordando que el radio hidralico R se encuentra definido como:

A
P

donde A es el rea de la seccin y P es el permetro mojado. Con esta definicin la ecuacin de Manning
queda expresada como:

1 A5 / 3 1 / 2
S0
n P2/3

de tal forma que si se quiere resolver empleando mtodos numricos se puede expresar como

1 A5 / 3 1 / 2
S0 Q 0
n P2/3
Las expresiones del rea y del permetro mojado dependen de la geometra de la seccin. Para el caso de
una seccin rectangular las expresiones aparecen consignadas en las notas de clase. Por ejemplo, para un
canal de seccin trapezoidal de base m y profundidad b se tiene que el rea est dada por: