ecuaciones no lineales
DESCRIPTION
ecuaciones no linealesTRANSCRIPT
The MATLAB Notebook v1.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:
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:
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*fl0);';
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 & itererrmin) & (itererrmin) & (iter