Vous êtes sur la page 1sur 9

METODO DE NEWTON RAPHSON PARA SISTEMAS NO LINEALES

El Mtodo NewtonRaphson se utiliz empleando la derivada (al evaluar, es la pendiente de la recta tangente) de un funcin, para calcular su interseccin con el eje de la variable independiente; esto es, la raz. Dicho clculo se bas en la expansin de la serie de Taylor de primer orden

Donde

es el valor inicial de la raz y

es el valor en el cual la recta tangente es, por definicin, igual a cero y la

intercepta al eje x . En esta interseccin, ecuacin (6.17) se reordena para tener

Que es la forma del mtodo de Newton-Raphson para una sola ecuacin. La forma para mltiples ecuaciones se obtiene en forma idntica. Sin embargo, se debe usar una serie de Taylor de mltiples variables para tomar en cuenta el hecho de que ms de una variable independiente contribuye a la determinacin de la raz. En el caso de dos variables, una serie de Taylor de primer orden se escribe para cada ecuacin no lineal como

De la misma manera como en la versin para una sola ecuacin, la raz aproximada corresponde a los valores de x y y, donde situacin, se reordena la ecuacin (6.19) como: son iguales a cero. En tal

Debido a que se conocen todos los valores con subndice i (corresponde al ultimo valor estimado), las nicas incgnitas son y Entonces, la ecuacin (6.20) es un conjunto de dos ecuaciones lineales con dos incgnitas. En consecuencia, se pueden usar manipulaciones algebraicas (por ejemplo, la regla de Cramer) para resolverlo:

El denominador de cada una de estas ecuaciones se conoce formalmente como el determinante Jacobiano del sistema. La ecuacin (6.21) es la versin para dos ecuaciones del Mtodo de Newton-Raphson. Como en el siguiente ejemplo, se puede emplear en forma iterativa para determinar las races de dos ecuaciones simultaneas. Newton-Raphson para un sistema no lineal.

PROGRAMA IMPLEMENTADO EN MATLAB


clc disp('METODO DE NEWTON RAPHSON PARA SISTEMAS NO LINEALES') clear all syms x y z f g h dx dy disp(' ') disp('Digite las funciones f1(x,y)=0 y f2(x,y)=0, para calcular su punto de interseccin') disp(' ') %f1=4*x.^2-20*x+(1/4)*y.^2+8 f1=input('f1(x,y)= '); %f2=(1/2)*x*y.^2+2*x-5*y+8 f2=input('f2(x,y)= '); disp(' ') disp('Digite el punto inicial: ') %P0=[0 0]

P0=input('P0= '); x=P0(1); y=P0(2); disp(' ') %clculo de los incrementos jf1=jacobian(f1); jf2=jacobian(f2); disp('Nmero de iteraciones N') %n=5; n=input('n= '); disp(' ') disp('Digite la tolerancia') %tol=0.0001; tol=input('tol= '); disp(' ') disp('Tabla de resultados:') disp('_________________________________________________________________ ') disp('Iteracion x y f1 f2 dx dy Tol') disp('_________________________________________________________________ ') for i=[1:n] x1=x; y1=y;

jf1e=eval(jf1); jf2e=eval(jf2); f1e=eval(f1); f2e=eval(f2); %sistema de ecuaciones para calcular dx y dy [dx dy]=solve(jf1e(1)*dx+jf1e(2)*dy+f1e, jf2e(1)*dx+jf2e(2)*dy+f2e); dx=eval(dx); dy=eval(dy); x=x+dx; y=y+dy; x2=x; y2=y; tole=max(abs([x2-x1 y2-y1])); disp(sprintf(' %d %.5f %.5f %.5f %.4f %.3f %.3f %.3f',i,x,y,f1e,f2e,dx,dy,tole ));

clear dx dy syms dx dy if tole<=tol tole=tol; break end end disp('_________________________________________________________________ ') disp('Resultado') disp(x) disp(y) if tole~=tol disp('Excedido el nmero mximo de iteraciones') end

BISECCIN

Mtodo de la Biseccin
El mtodo de la biseccin o corte binario es un mtodo de bsqueda incremental que divide el intervalo siempre en 2. Si la funcin cambia de signo sobre un intervalo, se evala el valor de la funcin en el punto medio. La posicin de la raz se determina situndola en el punto medio del subintervalo donde exista cambio de signo. El proceso se repite hasta mejorar la aproximacin. Algoritmo Paso 1 Elegir los valores iniciales Xa y Xb, de tal forma de que la funcin cambie de signo: f(Xa)f(Xb) < 0 Paso 2 La primera aproximacin a la raz se determina con la frmula del punto medio de esta forma:

Paso 3 Realizar las siguientes evaluaciones para determinar el intervalo de la raz: a. Si f(Xa)f(Xb) < 0, entonces la solucin o raz est entre Xa y Xpm, y Xb pasa a ser el punto medio (Xpm). b. Si f(Xa)f(Xb) > 0, entonces la solucin o raz est fuera del intervalo entre Xa y el punto medio, y Xa pasa a ser el punto medio (Xpm).

Paso 4 Si f(Xa)f(Xb) = 0 Error = | Xpm Xpm 1 | < Tolerancia Donde Xpm es el punto medio de la iteracin actual y Xpm 1 es el punto medio de la iteracin anterior. Al cumplirse la condicin del Paso 4, la raz o solucin es el ltimo punto medio que se obtuvo. Para el error relativo porcentual se tiene la siguiente frmula:

% Programa que aproxima una raiz de la forma f(x)=0, dado el intervalo


% VARIABLES, SIMBOLOS, PRAMETROS clc clear %Captura de datos fun = input('Funcion que define a la ecuacion = ','s');%def f=inline(fun);%os uns funcion fun I=input('Intervalo = '); a=I(1); Ni=0; b=I(2); TOL=input('Tolerancia = '); NO=input('Numero max de iteracciones = '); i=1; FA=f(a); sw=0; fprintf('%8s %6s %6s %6s %6s %6s %6s %6s','N Item','a','f(a)','b','p','f(p)','P-P0','signo\n') while i <= NO fprintf('\n') Ni=Ni+1; p=a+(b-a)/2; FA=f(a); FP=f(p); if (b-a)/2<TOL fprintf('Raiz encontrada con exito\n\n') fprintf('La raiz aproximada es : \t') fprintf('%5.4f',p) fprintf('\n') fprintf('Numero de pasos : ') fprintf('%i',Ni) fprintf('\n') sw=1;

break end i=i+1; if FA*FP>0 fprintf('%7i %5.4f %5.4f %5.4f %5.4f %5.4f %5.4f %2s',Ni,a,FA,b,p,FP,(b-a)/2,'+') a=p; else fprintf('%7i %5.4f %5.4f %5.4f %5.4f %5.4f %5.4f %2s',Ni,a,FA,b,p,FP,(b-a)/2,'-') b=p; end end if sw==0 disp('') disp('Excedio numero de iteracciones')

End

ELIMINACION GAUSIANA
% Programa que aproxima una raz de la forma f(x)=0, dado el intervalo que a la raiz % % VARIABLES, SIMBOLOS, PRAMETROS % clc clear sw=0; %%Captura de datos cont=0; A=input('Digite la Matriz de orden (N*N) (A) : '); B=input('Digite Matriz de orden B(N,1) en forma de vector : '); if length(A)==length(B) N=length(A); x = 1:N; else fprintf('Las matrices deben tener el mismo tamao en las columnas') break; end factor=0; for k=1:N-1 for i=k+1:N if A(k,k)==0 for j=1:N aux=A(k,j); A(k,j)=A(i,j);

A(i,j)=aux; end aux=B(i); B(i)=B(k); B(k)=aux; else factor=A(i,k)/A(k,k); for j=k:N A(i,j)=A(i,j)-factor*A(k,j); end B(i)=B(i)-factor*B(k); end

end end fprintf('La Matriz resultante A \n'); A fprintf('La Matriz resultante A \n'); B fprintf('\n') x(N)=B(N)/A(N,N); for i=N-1:-1:1 aux=0; for j=i+1:N aux=aux+A(i,j)*x(j); end x(i)=(B(i)-aux)/A(i,i); end %x(i)=(A(i,n+1)-aux)/A(i,i); %end fprintf('La x resultantes son : \n') x' fprintf('\n') End

Mtodo de runge Kuta


clc; clear; fprintf('Metodo de runge Kuta de orden 4\n') fprintf('') fprintf('Entrada\n\n') Fun=input('Digite la funcion f(x,y)=d(y)/d(x) : ','s'); %f=inline(Fun,'x','y'); int=input('Digite los extremos del intevalo : '); a=int(1); b=int(2); y0=input('Digite la condicion inicial y(a) : '); M=input('Digite el numero los pasos : '); h=(b-a)/M; T=zeros(1,M+1); Y=zeros(1,M+1); T=a:h:b; Y(1)=y0; for j=1:M k1=feval(Fun,T(j),Y(j)); k2=feval(Fun,T(j)+h/2,Y(j)+k1/2); k3=feval(Fun,T(j)+h/2,Y(j)+k2/2); k4=h*feval(Fun,T(j)+h,Y(j)+k3); Y(j+1)=y(j)+(k1+2*k2+2*k3+k4)/6; end R=[T' Y'] fprintf('Resultados/n') R End

Vous aimerez peut-être aussi