You are on page 1of 8

Laboratorio 5 Mtodos Numricos y Programacin Ciclo 02-2011

En la siguiente gua de laboratorio se intentara analizar uno a uno la mayora de mtodos vistos en clase, tanto para la obtencin de las races de una ecuacin as como los mtodos de interpolacin polinomial ms utilizados. En prcticas anteriores nos identificamos con el entorno de MATLAB, la creacin de archivos *.m o m-file y las distintas funciones que este programa nos ofrece tales como las sentencias if, los lazos for y while , as como el comando switch. Todas estas funciones nos servirn para el desarrollo de esta prctica ya que para esta no nos enfocaremos tanto en el mtodo sino mas bien en su programacin , para esto se presentan los programas correspondientes a todos los mtodos ya con su variables de salida y entrada correspondientes, asi como una breve explicacin de estas. Antes de comenzar es necesario recordar la forma de ingresar o almacenar una funcin en MATLAB . una funcin en MATLAB debe ser definida escribiendo antes de la funcin la expresin @(x) que nos indica que esta variable ser reconocida como funcin y podr ser evaluada con el comando feval. Ej. >>f=@(x) x2 f= @(x)x2 >>y=feval(f,3) Y= 9

Races de una ecuacin


Para la obtencin de las races de una ecuacin estudiaremos los siguientes mtodos: o Mtodo de biseccin. o Mtodo del punto fijo. o Mtodo de la Secante. o Mtodo de Newton-Rhapson. Mtodo de Biseccin.

function [err]=bisecc(f,a,b,Iter_max,tol) %Entradas

%f es la funcin a evaluar %a y b son el extremo izquierdo y el extremo derecho %tol es la tolerancia %Iter_max es el numero maximo de iteraciones %Salidas %c es el cero %yc es la funcion evaluada en "c" %err es el error estimado de la aproximacin ya=feval(f,a); yb=feval(f,b); err=abs(b-a); if ya*yb>0 disp('el metodo no es aplicables en esta seccion de la curva') else k=1; fprintf(' k | a c b f(c) ') disp(' ') fprintf('-----------------------------------------------------') while k<Iter_max c=(b+a)/2; yc=feval(f,c); disp(' ') fprintf(' %1.0f if yc==0 a=c; b=c; elseif yc*ya>0 a=c; ya=yc; elseif yc*yb>0 b=c; yb=yc; end k=k+1; err=abs(b-a); if err<tol break end end end

%1.6f

%1.6f

%1.6f

%1.6f

',k,a,c,b,yc)

Ejercicio1. Encontrar la raz de la ecuacin f(x)=x*sen(x)-1 que se encuentra dentro del intervalo [0,2] con una tolerancia de 0.0001 . Mtodo del punto fijo

function [k,p,err,P]=fixpt(g,p0,tol,max1) %Entradas %g es la funcin de iteracin %p0 es el punto de partida %tol es la tolerancia %max1 es el nmero mximo de iteraciones %Salidas %k es el nmero de iteraciones realizadas

%p es la aproximacin al punto fijo %err es la diferencia entre dos terminos consecutivos %P es la sucesin completa P(1)=p0; for k=2:max1 P(k)=feval(g,P(k-1)); err=abs(P(k)-P(k-1)); relerr=err/(abs(P(k))+eps); p=P(k); if (err<tol) || (relerr<tol) return

end end if k==max1 disp('Se ha excedido el nmero maximo de iteraciones') end P=P';

Ejercicio 2. Dada una funcin g(x)=4+4x-0.5x encontrar la raz por medio del mtodo del punto fijo tomando como valor inicial p0=3.8. Metodo de Newton-Rhapson

La iteracin de Newton-Rhapson pretende hallar una raz de la ecuacin f(x) mediante el calculo de un punto fijo de la funcin g(x), donde g(x) se define como: () = () A esta funcin g(x) se le conoce como funcin iterativa de Newton-Rhapson . Para poder utilizar esta ecuacin debe de cumplirse que la deriva f(x) 0 en el punto x que se est evaluando para que no se genere una indeterminacin. De esta forma el proceso iterativo lo podemos representar como : = 1 (1 ) para k=1,2,3,
1

function [p0 err k y]=newton_raphson(p0,tol, max1) %p0 es la aproximacin inicial a un cero de f %delta es la tolerancia para p0 %max1 es el nmero mximo de iteraciones %Salidas %p0 es la aproximacin al cero de la funcin %err es una estimacin del error con el mtodo de Newton-Raphson %k es el nmero de iteraciones realizadas %y es el valor de la funcin f(p0) syms x f=eval(input('Ingrese la funcion f= ','s')); df=diff(f,x); for k=1:max1 p1=p0-subs(f,p0)/subs(df,p0);

err=abs(p1-p0); relerr=2*err/(abs(p1)+tol); p0=p1; y=subs(f,p0); if (err<tol)||(relerr<tol); return; end end

Ejercicio 3. Dada la function f(x)=1980*(1-exp(-x/10))-98*x y con un punto inicial p0=16 , encontrar la raz de dicha funcin por medio del mtodo de Newton-Rhapson. Metodo de la Secante

Este mtodo es muy parecido al mtodo de Newton-Rhapson con la nica diferencia que la derivada de la funcin la sustituye por la pendiente de una lnea que pasa por dos puntos que cortan por medio de una lnea secante a las curva de la funcin. Debido a esto es que necesitamos para comenzar a iterar dos puntos iniciales p0 y p1. La formula de iteracin es la siguiente: +1 = ( 1 ) (1 )

function [p1, err, k]=secante(p0,p1,delta,max1) %Entradas %p0 y p1 son las aproximaciones iniciales de un cero de f %delta es la tolerancia para p1 %epsilon es la tolerancia para los valores de la funcin %max1 es el nmero mximo de iteraciones %Salidas %p1 es la aproximacin al cero %err es una estimacin del error de p1 %k es el nmero de iteraciones realizadas %y es el valor de la funcin f(p1) syms x f=eval(input('Ingrese la funcion f= ','s')); for k=1:max1 p2=p1-subs(f,p1)*(p1-p0)/(subs(f,p1)-subs(f,p0)); err=abs(p2-p1); relerr=2*err/(abs(p2)+delta); p0=p1; p1=p2; if (err<delta)||(relerr<delta);return;end end

Mtodos de interpolacion. Cuando tenemos una serie de datos tanto de x como y se pueden hacer distintas aproximacin a para determinar un funcin que pase por todos los puntos anteriormente dados. Por lo general utilizamos mtodos de interpolacin polinomial. En esta prctica veremos algunas definiciones y los programas de los mtodos numricos de aproximacin que se vern en el curso. Tales mtodos de interpolacin son : o Interpolacin de Lagrange o Polinomio interpolador de Newton o Mtodo de mnimos Cuadrados Interpolacion de Lagrange

La interpolacion de Lagrange se basa en que dados una serie de datos se puede generar polinomios a partir de los valores de x y al multiplicar cada polinomio por su respectiva evaluacin en la funcin se obtiene un polinomio que se aproxima a la funcin real dentro de la regin de datos. La frmula para crear este polinomio es la siguiente ( ) = ( ) =1

Y a partir de los polinomios anteriormente generados podemos crear un nuevo polinomio que interpola a todos los valores dentro de la regin, de la siguiente manera: = 1 1 + 2 2 + +
%programa que genera la interpolacion de Lagrange y la evalua en un punto xbarra function pbarra = lagrange(x, f, xbarra) N = length(x); pbarra = 0; for i = 1:1:N p = 1; for j = 1:1:N if j ~= i p = p*(xbarra - x(j))/(x(i)-x(j)); end; end; pbarra = pbarra + f(i)*p; end;

Polinomio interpolador de Newton

Otro mtodo de interpolacion muy conocido es el polinomio de Newton. En este caso se supone que x0,x1,xn son N+1 nmeros distintos de [a,b]. Entonces existe un nico polinomio Pn(x) de grado menor o igual a N tal que : = Que puede desarrollarse de la siguiente forma: = 0 + 1 0 + + 0 1 . 1 Siendo = 0 , 1 , , = 0,1,2, , este trmino es calculado mediante un procedimiento llamado diferencias divididas de Newton
%programa para crear las diferencias Divididas de Newton function d = dif_newton(x,f) N = length(x); for j = 1:1:N d(j) = f(j); end; for k = 1:1:N-1 for j = N:-1:k+1 d(j) = (d(j)-d(j-1))/(x(j)-x(j-k); end end;

= 0,1, ,

%programa que genera el polinomio interpolador y lo evalua en un punto xbarra function pbarra = newton(x,f, xbarra) d = dif_newton(x,f); N = length(d); pbarra = d(N); for i = N-1:-1:1 pbarra = pbarra *(xbarra - x(i)) + d(i); end;

Metodo de lo Minimos Cuadrados

EL mtodo de mnimos cuadrados es una tcnica de anlisis numrico utilizada dentro de la optimizacin numrica, en la que dada una serie de pares de datos, se intenta encontrar la funcin que mejor se aproxime a los datos, es decir, que tenga el mejor ajuste.

%creando las funciones phi para las operaciones de los minimos cuadrados function p = funciones_phi() disp('1. funcion polinomial') disp('2. distintas funciones de phi') opc=input('ingrese el numero de la operacion que desea realizar') switch opc case 1 n=input('ingrese el grado del polinomio') for j = 0:1:n magic = ['@(x) x.^', int2str(j)]; p(j+1) = {eval(magic)}; end; case 2 n=input('ingrese el numero de funciones phi') for j = 1:1:n mensaje=strcat('ingrese la funcion phi',int2str(j),' = ') magic = ['@(x)', char(inputdlg(mensaje))]; p(j+1) = {eval(magic)}; end; end

%Calcula ecuaciones normales %Entradas: %Vector de puntos x %Vector de puntos f %Vector de pesos w %Funcin polinomial phi (que es la salida p del programa anterior) %Salidas %Matrices de Ecuaciones normales A y B function [A, B] = ecuaciones_normales(x,f,w,phi) N = length(phi);M = length(x); for k = 1:1:N for j= k:1:N A(k,j) = 0; for i = 1:1:M A(k,j) = A(k,j)+ w(i)*feval(phi{k},x(i))*feval(phi{j},x(i)); end; A(j,k) = A(k,j); end; B(k) = 0; for i = 1:1:M B(k) = B(k) + w(i)*feval(phi{k}, x(i))* f(i); end; end;

Ej. La forma de utilizarlos es como se muestra en el ejemplo: >> x=[4 4.2 4.5 4.7 5.1 5.5 5.9 6.3 6.8 7.1]; >> f=[102.56 113.18 130.11 142.05 167.53 195.14 224.87 256.73 299.50 326.72]; >> p=funciones_phi() 1. funcion polinomial 2. distintas funciones de phi ingrese el numero de la operacion que desea realizar 1

opc = 1 ingrese el grado del polinomio 1 n= 1 p= @(x)x.^0 @(x)x.^1 w=ones(1,10); >> [a b]=ecuaciones_normales(x,f,w,p) a= 10.0000 54.1000 54.1000 303.3900 b= 1.0e+004 * 0.1958 1.1367 >> coef=inv(a)*b' coef = -194.1382 72.0845 De donde se obtiene que para el conjunto de puntos x y f utilizados inicialmente el ajuste de grado uno viene dado por la ecuacin y=72.0845x-194.1382. Ejercicios a desarrollar en el laboratorio. 1. Con los datos: x=[4, 4.2, 4.5, 4.7, 5.1, 5.5, 5.9, 6.3, 6.8, 7.1]; f=[102.56, 113.18, 130.11, 142.05, 167.53, 195.14, 224.87, 256.73, 299.50, 326.72]; Construya el polinomio de mnimos cuadrados de tercer grado Construya la aproximacin de mnimos cuadrados de la forma Construya la aproximacin de mnimos cuadrados de la forma 2. Crecimiento logstico de poblaciones. Cuando una poblacin P(t) no puede crecer ms all de un cierto valor lmite L, la grfica de la funcin P(t) es una curva, llamada curva logstica, de ecuacin . = + Elabore un programa en MATLAB que calcule A y C para los siguientes pares de datos, siendo L un valor conocido. (0, 200), (1, 400), (2, 650), (3, 850), (4, 950) y L = 1000.

You might also like