Está en la página 1de 10

Universidad Simón Bolívar

Departamento de Transporte y Conversión de Energía


Sistemas de Potencia III (CT4211)
Ricardo Díaz
13-10377

Tarea 1

La presente asignación tiene como objetivo emplear el método de Newton Raphson para resolver un
sistema de ecuaciones, esto tomando dos caminos distintos:

 El empleo de softwares (MATLAB) que permita resolver el sistema mediante un ciclo iterativo.
 Resolver la ecuación tradicionalmente (a mano alzada) con ayuda de una calculadora.

El método de Newton Raphson sirve para la resolución de ecuaciones no lineales, se basa en


aproximaciones partiendo desde unos valores de arranque hasta alcanzar los valores deseado de las
incógnitas de interés cumpliendo los criterios de convergencia. Este método se deduce a partir de la serie
de Taylor.

Si se utiliza esta expresión y se evalúa en un punto 𝑥 = 𝑥1 , se sabe que la ecuación evaluada en ese
punto tiene una raíz, aproximando los términos de la serie que son superiores a la derivada de primer
orden a cero, entonces nos queda que:

𝛿𝑓(𝑥0 )
𝑓(𝑥1 ) ≈ 𝑓(𝑥0 ) + (𝑥1 − 𝑥0 ) ≈ 0
𝛿𝑥

De esta ecuación aproximada, se despeja 𝑥1 se obtiene la siguiente expresión:

−1
𝛿𝑓(𝑥0 )
𝑥1 = 𝑥0 − [ ] 𝑓(𝑥0 )
𝛿𝑥

Entonces, en general, para una sola variable, la expresión viene dada por:

−1
(𝑘+1) (𝑘)
𝛿𝑓(𝑥 (𝑘) )
𝑥 =𝑥 −[ ] 𝑓(𝑥 (𝑘) )
𝛿𝑥

Para sistemas de ecuaciones con varias variables, la ecuación pasa a tomar la siguiente forma:

𝑥̅ (𝑘+1) = 𝑥̅ (𝑘) − [𝐽]̅ −1 𝑓̅(𝑥̅ (𝑘) )


̅ (𝑘) ), mientras [𝐽]̅ es una matriz de
Donde ahora, 𝑥̅ (𝑘+1) representa un vector, así como también 𝑓 (𝑥̅
derivadas parciales llamada Jacobiano. El error o tolerancia viene dado por:
𝑒 = |𝑥̅ (𝑘+1) − 𝑥̅ (𝑘) |

Ahora, visto todo lo anterior la ecuación, la ecuación correspondiente a resolver es la de la Figura 1:

Figura 1: Sistema de ecuaciones a resolver

Procedemos a resolverlo de las dos formas planteadas.

Método 1: Empleo de software matemático (MATLAB)


Hacemos una rutina en el entorno de MATLAB llamada “New_Rap”. Esta rutina sirve para resolver
ecuaciones no lineales de dos variables mediante el método de Newton Raphson, en el editor el usuario
es capaz de colocar los valores de arranque, la tolerancia y el número límite de iteraciones. En la Figura 2
se puede ver lo antes indicado:

Figura 2: Valores iniciales, tolerancia e iteraciones.

Luego, más abajo tenemos la primera matriz en donde se colocarán los resultados de aplicar NR y los
errores asociados por defecto. Usamos la función “syms” para definir las variables x1 y x2, así como las
funciones asociadas a las ecuaciones, esto nos permitirá derivar y poder evaluar las funciones y evaluar
variables sin mucho problema. En la Figura 3 podemos observar esto:
Figura 3: Entrada de las funciones

Después, usamos la función diff para obtener las derivadas parciales de f1 y f2, y escribimos las
matrices de funciones y el Jacobiano.

Aquí empezamos la rutina, en este ciclo while existen dos condiciones:

La primera tiene que ver con el numero límite de iteraciones que desea el usuario, al alcanzar esta
cifra el bucle terminará. La segunda posibilidad tiene que ver con el error o tolerancia deseada por el
usuario, cuando el error de ambas variables sea menor que el error mínimo deseado el bucle terminará.

Al finalizar el bucle creamos una nueva matriz en donde separaremos los resultados del número de
iteraciones y la unimos a las condiciones con que iniciamos el proceso. Finalmente, imprimimos los
resultados de cada iteración.

Para efectos de este problema, se tomaron como puntos de arranque (2,3), con un error de 10*10-3,
y un máximo de 20 iteraciones. Los resultados se muestran a continuación.

Figura 4: Resultados de aplicar Newton Raphson

En los anexos se muestra el código empleado.


Método 2: A mano alzada

Utilizamos todos los métodos vistos anteriormente:

Figura 5: Funciones a trabajar

Figura 6: Derivadas Parciales


Figura 7: Definicion de las matrices.

Figura 8: Iteración 1
Figura 9: Iteración 2

Figura 10: Iteración 3


Figura 11: Iteración 4

Figura 12: Iteración 5


Anexos:
%Ricardo Diaz
%Carnet: 13-10377
%Tarea 1: Newton Raphson

%Limpiamos con clear y con clc

clear all
clc

n=0; %Contador

%Condiciones iniciales y que introduce el usuario


X0= [2;1]; %Valor de arranque
error= 1*10^-3; %Tolerancia o error deseado
iter= 20; %Numero de iteraciones límites

%No tocar
tabla=zeros(iter,5); %Tabla inicial de resultados
errx1= 100; %Error inicial por defecto
errx2= 100; %Error inicial por defecto

syms x1 x2 f1 f2

%Escribimos las funciones

f1(x1,x2)= x1^2+x2^2-25;
f2(x1,x2)= 3*x1+2*x2-12;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Ahora hallamos las derivadas de las dos funciones

df1x1= diff(f1,x1);
df1x2= diff(f1,x2);
df2x1= diff(f2,x1);
df2x2= diff(f2,x2);

%Armamos dos vectores o matrices: Uno de funciones y el otro el Jacobiano

F=[f1;f2];
J=[df1x1 df1x2;df2x1 df2x2];

%Comenzamos a construir la tabla de resultados con los valores iniciales

tabla0= [n X0(1,1) errx1 X0(2,1) errx2];


n=1;

% Aqui empezamos la rutina, en este ciclo while existen dos condiciones:

%La primera tiene que ver con el numero límite de iteraciones que desea el
%usuario, al alcanzar esta cifra el bucle terminará.
%La segunda posibilidad tiene que ver con el error o tolerancia deseada por
%el usuario, cuando el erro de ambas variables sea menor que el error
%minimo deseado el bucle terminará.

while iter>=n && (errx1>error || errx2>error);

%Evaluacion en las matrices de funciones y el jaobiano


Fe= F(X0(1,1),X0(2,1));
Je= J(X0(1,1),X0(2,1));

%Resultado de las variables


Xn= X0 - inv(Je)*Fe;

%Numero de iteracion en tabla


tabla(n,1)= n;

%Nuevos valores de las variables


tabla(n,2)= Xn(1,1);
tabla(n,4)= Xn(2,1);

%Errores
tabla(n,3)= abs(Xn(1,1)-X0(1,1));
tabla(n,5)= abs(Xn(2,1)-X0(2,1));
errx1= tabla(n,3) + 0;
errx2= tabla(n,5) + 0;

%Nuevos valores iniciales


X0= Xn+0;
%Contador suve uno
n=n+1;

end

%Ahora hacemos el vaciado final, organizamos todo los resultados en una


%nueva matriz

k= n-1;
ord=zeros(k,5);

for i=1:1:k

%Actualización de la tabla de resultados

ord(i,1)=tabla(i,1);
ord(i,2)=tabla(i,2);
ord(i,3)=tabla(i,3);
ord(i,4)=tabla(i,4);
ord(i,5)=tabla(i,5);

end

%Unimos las condiciones de arranque con los resultados de las iteraciones


resultado=[tabla0;ord];
fprintf('Los resultados de emplear Newton Raphson para la resolucion de las
ecuaciones fueron:\n\n\n');
fprintf(' Iter x1 errx1 x2 errx2\n');
disp(resultado);

También podría gustarte