UNIVERSIDAD NACIONAL DE COLOMBIA FACULTAD DE INGENIERA BOGOT, 10 DE OCTUBRE DE 2014
Introduccin
En el mbito de la ingeniera en algunas ocasiones se hace evaluar una funcin en un punto concreto o conocer sus races pero no se conoce la funcin como tal, es entonces imposible conocer dicho valor utilizando los mtodos tradicionales y se hace necesario acudir a algunos mtodos numricos que permitan obtener un valor aproximado. Si conocemos una serie de puntos de la funcin (abscisas y ordenadas) podemos aplicar bien sea el mtodo del polinomio interpolador de Lagrange o el mtodo del polinomio interpolador de Newton para obtener un polinomio que se asemeje a la funcin real en un intervalo, y una vez conocido este polinomio se puede aplicar un mtodo de solucin para ecuaciones no lineales, como en este caso el mtodo de la falsa posicin o el mtodo de la secante para obtener la raz deseada de dicho polinomio. Para desarrollar estos mtodos numricos es necesario realizar una serie de operaciones que si bien son en general sencillas pueden ser un poco engorrosas por lo cual es provechoso acudir al entorno de Scilab donde una vez definidos los cdigos solo es necesario introducir los valores conocidos en cada caso, ahorrndonos tiempo ya que el sistema puede realizar varias iteraciones rpidamente.
Se tiene en mente que se quieren hallar las dos primeras races del polinomio que interpola por el polinomio interpolador de Lagrange y el mtodo de la secante y los siguientes datos de la tabla. Y -0,61 -0,21 1,21 -0,05 X 2,45 3,4 4,35 5,3
Adicionalmente se quiere hallar la primera raiz del polinomio que interpola por el polinomio de Newton y el mtodo de la Falsa Posicin del siguiente conjunto de datos.
Y -0,62 -0,28 1,28 -0,06 X 1,85 2,7 3,55 4,4
Los distinto cdigos estipulados para llevar a cabo lo descrito anteriormente se presente a continuacin y se muestra su resultado en una impresin de pantalla al final. 1) Se crea la un archivo llamado funcin. sci donde se definen las funciones de Lagrange, Newton y una funcin general para desarrollar los mtodos de la secante y falsa posicin //Se define la funcin de Lagrange function [P]=lagrange(X, Y) //X nodos,Y valores n=length(X); // n es el nmero de nodos. (n-1) es el grado x=poly(0,"x"); // Se crea una variable X como polinomio P=0; for i=1:n, // Se inicia un contador i que va hasta n L=1; for j=[1:i-1,i+1:n] // se define un j que toma valores hasta n pero sin tomar el valor de i L=L*(x-X(j))/(X(i)-X(j)); // se aplica la frmula del polinomio interpolador de Lagrange end P=P+L*Y(i); // se define la solucin P end endfunction
function [P]=newton(X, Y) //X nodos, Y valores n=length(X); // n es el numero de nodos. (n-1) es el grado for j=2:n, // se inicia un contador j que toma valores hasta n for i=1:n-j+1, Y(i,j)=(Y(i+1,j-1)-Y(i,j-1))/(X(i+j-1)-X(i)); // Se calculan los coeficientes del polinomio interpolador de Newton end, end, x=poly(0,"x"); // Se crea una variable x como polinomio P=Y(1,n); for i=2:n, P=P*(x-X(i))+Y(i,n-i+1); // Se define la solucin al sistema como un vector P end endfunction;
//------------------------------FUNCION------------------------------------------- //Ac se define una funcin Z utilizando los coeficientes del polinomio obtenidos en el paso anterior
function z=fun(x) C=coeff(P); //Se define un vector C con los coeficientes del polinomio P
z=C(4)*x^3+C(3)*x^2+C(2)*x+C(1) //Utilizamos el vector C para crear el polinomio Z que se aplicar a los mtodos de la Secante y Falsa posicin
endfunction
2) Ahora se crea un archivo SciNotes con el siguiente cdigo y se guarda como cdigo.sce desde donde se ejecutan las funciones ya definidas
clc; disp(" ** Laboratorio Parcial #1.. - Grupo 4 ** ") disp("Integrantes: Jonatan Lopez 25441120, Cristian Sanabria 223652 ") ww=getdate(); mprintf( "AA:%d ,MM:%d ,DD:%d a las HH:%d ,MM:%d ,SS:%d \n",ww(1),ww(2),ww(6),ww(7),ww(8),ww(9)); X=[2.45;3.4;4.35;5.3] // Se define el vector X (nodos) Y=[-0.61;-0.21;1.21;-0.05] // Se define el vector Y (valores de la funcin) [P]=lagrange(X,Y) // Se aplica la funcin Lagrange a los vectores anteriormente definidos mprintf("\n\nP=") disp(P=lagrange(X,Y)) i=P
//------------------------------PRIMERA RAIZ------------------------------------------------------- x0=2.45; x1=3.4; //Se definen dos puntos de partida x2=4 //se define x2 para correr el while while abs(fun(x2))>0.0001 x2=x1-fun(x1)*(x1-x0)/(fun(x1)-fun(x0)) xo=x1; x1=x2; x0=xo; //Se desarrolla la frmula de Secante, para que itere hasta cumplir la condicin expresada en el while.
end mprintf("el primer cero de la funcin es %f \n",x2); mprintf("con un error absoluto de %f \n",fun(x2));
//Se muestra el cero y su respectivo error evalundolo en la funcin.
x0=6; x1=5.3; //Se definen dos puntos de partida cercanos a la raz deseada x3=4 //se define x3 para correr el while while abs(fun(x3))>0.0001 x3=x1-fun(x1)*(x1-x0)/(fun(x1)-fun(x0)) xo=x1; x1=x3; x0=xo; //Se desarrolla la frmula de Secante, para que itere hasta cumplir la condicin expresada en el while.
end mprintf("el segundo cero de la funcin es %f \n",x3); mprintf("con un error absoluto de %f \n",fun(x3));
//Se muestra el cero y su respectivo error evalundolo en la funcin.
x=[1:0.2:7]; f=horner(i,x); subplot(211) xtitle( 'Mtodo de Lagrange') ; plot(x,f,'r') // Se crea la grfica punto por punto plot(2.45,-0.61,"o") plot(3.4,-0.21,"o") plot(4.35,1.21,"o") plot(5.3,-0.05,"o") plot(x2,fun(x2),"x") plot(x3,fun(x3),"x")
//-----------------------NEWTON------------------------------------------------ X=[1.85;2.7;3.55;4.4] // Se define el vector X como los puntos del sistema Y=[-0.62;-0.28;1.28;-0.06] // Se define el vector Y como los valores de la funcin P=newton(X,Y) // Se aplica la funcin a los vectores X y Y
mprintf("\n\nP=") disp(P=newton(X,Y)) // Se muestra la solucin i=P
//----------------------------PRIMERA RAIZ-------------------------------------- a=2.7; b=3.55; //Se definen dos puntos de partida c=4; //se define c paea correr el while while abs(fun(c))>0.0001 c=b-(fun(b)*(b-a)/(fun(b)-fun(a))); yc=fun(c); // Se evala el posible cero
ya=fun(a);
yb=fun(b);
if yb*yc<0 then //Se determina cul de las dos fronteras a=c; // debe ser remplazada elseif ya*yc<0 then b=c; end end
//Se desarrolla la frmula de Falsa Posicin, para que itere hasta cumplir la condicin expresada en el while.
mprintf("el cero de la funcin es %f \n",c); mprintf("con un error absoluto de %f \n",fun(c));
//Se muestra el cero y su respectivo error evalundolo en la funcin.
x=[1:0.2:5.25]; f=horner(i,x); subplot(212) xtitle( 'Mtodo de Newton') ; plot(x,f,'r') // Se crea la grfica usando punto por punto plot(1.85,-0.62,"o") plot(2.7,-0.28,"o") plot(3.55,1.28,"o") plot(4.4,-0.06,"o") plot(c,fun(c),"x")
Ahora se ejecuta primero el SciNotes llamado cdigo.sci y luego se ejecuta el SciNotes llamado cdigo.sce La siguiente captura de pantalla muestra la consola al ejecutar el SciNotes: cdigo.sce
Se observa que primero desarrolla el caso del mtodo de Lagrange junto con el mtodo de la secante, y en segundo lugar desarrolla el ejercicio del mtodo de Newton junto con el mtodo de falsa posicin. Tambin muestran las grficas de ambos casos por medio de la funcin plot como se observa en la siguiente captura de pantalla:
En ambas grficas se seala con unos crculos azules los puntos conocidos de la funcin y con unas X azules las races del polinomio. En las grficas se evidencia que aparentemente hay un cero positivo antes del cero hallado representado por la X. Este cero es despreciado por el hecho de que se encuentra fuera del rango de los valores usados para hacer el polinomio y adems si se tuviese en cuenta el primer valor de X dado en los datos originales se ve claramente que un polinomio de grado cuatro no tendra presente este cero. Conclusiones - De los desarrollado anteriormente queda claro que para hallar el polinomio interpolador de un conjunto de datos ambos mtodos usados, el polinomio interpolador de Lagrange y el de Newton, requieren de un sencillo algoritmo implementado de manera computacional. De igual manera al emplear el mtodo de la Secante o el de Falsa Posicin para hallar las races de los polinomios. - El error permitido es fcil de modificar en los cdigos explicados para hallar las races de los polinomios. Con esto se permite manejar de manera cmoda el error al usar los algoritmos segn sea el caso al que se aplique.