Está en la página 1de 20

3 Anlisis de Flujo de Carga

Archivo texto con


la configuracin de
la red
Matrices usables
por el Matlab
Flujo de Carga
Matriz Admitancia
Resultados
Proceso
Entrada
Salida
[Y] [V,P,Q]
Slack
Carga_1
Carga_2
Carga_4 Carga_3
Gen_2
Gen_1
SL
G
G
G
VZ0
|V|
|V|
SL
SL
SL
SL
SL
% Datos de archivo de entrada %
% DATOS DE BARRA
% CARGA GENERACION min max Shunt Shunt
% BARRA TENSION MW MVAR MW MVAR MVAR MVAR MVAr SUCEPTANCIA
SL Slack 1 0 0 0 0 0 0 0 0
PQ Carga_1 1 200 30 0 0 0 0 0 0
PV Gen_1 1.05 60 8 500 0 0 0 0 0
PQ Carga_2 1 200 20 0 0 0 0 0 0
PV Gen_2 1.05 50 5 200 0 0 0 0 0
PQ Carga_3 1 100 30 0 0 0 0 0 0
PQ Carga_4 1 400 100 0 0 0 0 0 0
%
%
% DATOS DE LINEAS
% BARRA_1 BARRA_2 RESISTENCIA REACTANCIA SUCEPTANCIA
Linea Carga_1 Carga_3 0.023 0.138 0.271
Linea Carga_2 Carga_4 0.023 0.138 0.271
Linea Carga_1 Carga_2 0.015 0.092 0.181
Linea Carga_3 Carga_4 0.015 0.092 0.181
%
%
% DATOS DE TRANSFORMADORES
% BARRA_1 BARRA_2 RESISTENCIA REACTANCIA TAP
Trafo Slack Carga_1 0.0012 0.015 1
Trafo Gen_1 Carga_2 0.001 0.012 1
Trafo Gen_2 Carga_3 0.002 0.024 1

1.0000 1.0000 1.0000 200.0000 30.0000 0 0
2.0000 2.0000 1.0000 200.0000 20.0000 0 0
3.0000 3.0000 0.9500 100.0000 30.0000 0 0
4.0000 4.0000 0.8500 400.0000 100.0000 0 0
5.0000 5.0000 1.0500 60.0000 8.0000 500.0000 0
6.0000 6.0000 1.0500 50.0000 5.0000 200.0000 0
7.0000 7.0000 1.0000 0 0 0 0
1.0000 3.0000 0.0230 0.1380 0.2710 0 0
2.0000 4.0000 0.0230 0.1380 0.2710 0 0
1.0000 2.0000 0.0150 0.0920 0.1810 0 0
3.0000 4.0000 0.0150 0.0920 0.1810 0 0
7.0000 1.0000 0.0012 0.0150 1.0000 0 0
5.0000 2.0000 0.0010 0.0120 1.0000 0 0
6.0000 3.0000 0.0020 0.0240 1.0000 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
N=
1 4
5 6
7 7
8 11
12 14
0 0
pN=
'Carga_1'
'Carga_2'
'Carga_3'
'Carga_4'
'Gen_1'
'Gen_2'
'Slack'
Barras=
% Datos de archivo de entrada tomados (Gross, pag. 244)
%
% DATOS DE BARRA
% CARGA GENERACION min max Shunt Shunt
% BARRA TENSION MW MVAR MW MVAR MVAR MVAR MVAr SUCEPTANCIA
SL Slack 1 0 0 0 0 0 0 0 0
PQ Carga_1 1 200 30 0 0 0 0 0 0
PV Gen_1 1.05 60 8 500 0 0 0 0 0
PQ Carga_2 1 200 20 0 0 0 0 0 0
PV Gen_2 1.05 50 5 200 0 0 0 0 0
PQ Carga_3 1 100 30 0 0 0 0 0 0
PQ Carga_4 1 400 100 0 0 0 0 0 0
%
%
% DATOS DE LINEAS
% BARRA_1 BARRA_2 RESISTENCIA REACTANCIA SUCEPTANCIA
Linea Carga_1 Carga_3 0.023 0.138 0.271
Linea Carga_2 Carga_4 0.023 0.138 0.271
Linea Carga_1 Carga_2 0.015 0.092 0.181
Linea Carga_3 Carga_4 0.015 0.092 0.181
%
%
% DATOS DE TRANSFORMADORES
% BARRA_1 BARRA_2 RESISTENCIA REACTANCIA TAP
Trafo Slack Carga_1 0.0012 0.015 1
Trafo Gen_1 Carga_2 0.001 0.012 1
Trafo Gen_2 Carga_3 0.002 0.024 1

Se usa cuando se especifica datos generadores (estabilidad)
Comentarios:

Encabezado del programa, todos los comentarios que aparecen al principio del programa y hasta
la primera fila en blanco, automaticamente forman el help del mismo.

Funcin red2mat :

Esta funcin, convierte un archivo ASCII con los datos de la red, en matrices usables
por el Matlab

Argumentos de entrada:
Archivo ASCII con los datos de la red.
Nombre del archivo para almacenar los datos de salida (opcional).

Argumentos de salida:
Matrices N, pN, Barras.
function[N,pN,Barras]=red2mat(archivo,arsal)

% RED2MATConvierte un archivo tipo ASCII conteniendo los datos de la
% red necesarios para resolver flujo de carga monofasico, en matrices
% "usables" por el matlab para las rutinas de calculo.
%
% [N,pN,Barras]=red2mat(archivo,arsal)
%
% archivo : nombre del archivo ASCII
% arsal : nombre del archivo donde se quiere alamcenar los resultados (opcional)
% N : Matriz numerica "imagen" del archivo ASCII, los elementos
% aparecen segun el siguiente orden: barras PQ, barras PV,
% slack, lineas y transformadores
% pN : Matriz puntera hacia N, indicando fila inicial y fila final,
% para las Barras PQ, Barras PV etc.
% Barras : Vector con los nombres de las barras, en el orden PQ,PV, SL.
%
%
% Se incorpora datos de generadores para calculo de cortocircuito
% Se crean barras internas de las maquinas a los efectos del programa de estabilidad
1
2
3
fid=fopen(archivo); % Abre el archivo especificado

if fid == -1
error('Archivo no encontrado')
end

fila = fgetl(fid); % Se carga en fila la primera fila del archivo
nPQ=0; % Inicializacin del nmero de barras PQ,
nPV=0; % PV,
nLi=0; % lineas
nTr=0; % trafos y
nGr=0; % generadores.

% Dentro del while se va leyendo el archivo ASCII fila a fila y
% se van extrayendo los datos.

while fila ~= -1 % Mientras no se termine el achivo
[pal,resto]=strtok(fila); % Retorna el primer string delimitado por
% el espacio en blanco en pal, y el resto de
% de la fila en resto.
[b1,resto1]=strtok(resto);
[b2,resto2]=strtok(resto1);
if strncmp(pal,'PQ',2) | strncmp(pal,'pq',2), % Detecto una barra PQ
nPQ=nPQ+1;
BPQ(nPQ,1)={b1};
PPQ(nPQ,:)=str2num(resto1);
elseif strncmp(pal,'PV',2) | strncmp(pal,'pv',2),% Detecto una barra PV
nPV=nPV+1;
BPV(nPV,1)={b1};
PPV(nPV,:)=str2num(resto1);
elseif strncmp(pal,'S',1) | strncmp(pal,'s',1), % Detecto la barra Slack
BSL={b1};
PSL=str2num(resto1);
elseif strncmp(pal,'L',1) | strncmp(pal,'l',1), % Detecto una lnea
nLi=nLi+1;
BLin(nLi,1)={b1};
BLin(nLi,2)={b2};
PLin(nLi,:)=str2num(resto2);
elseif strncmp(pal,'T',1) | strncmp(pal,'t',1), % Detecto un transformador
nTr=nTr+1;
BTraf(nTr,1)={b1};
BTraf(nTr,2)={b2};
PTraf(nTr,:)=str2num(resto2);
elseif strncmp(pal,'G',1) | strncmp(pal,'g',1), % Detecto un generador
nGr=nGr+1;
BGen(nGr,1)={b1};
PGen(nGr,:)=str2num(resto1);
elseif strncmp(pal,'%',1)', % Detecto un comentario
else
err=['Error de codificacion en la fila: ',fila]; % Detecto un caracter invlido
error (err)
end
fila = fgetl(fid); % Se actualiza fila con la fila siguiente.
end
fclose(fid); % Se cierra el archivo
Comentarios:
1
- Cada vez que se ejecuta fila = fgetl(fid) se carga en fila la siguiente fila del archivo
identificado por fid, ejemplo:
fid=fopen('ejemplo7b.m');
fila=fgetl(fid)
fila =
% Datos de archivo de entrada tomados del Gross, pag. 244

fila=fgetl(fid)
fila =
%
2
-
fila=fgetl(fid)
fila =
% BARRA TENSION MW MVAR MW MVAR MVAR MVAR MVAR

[pal,resto]=strtok(fila)
pal =
%
resto =
BARRA TENSION MW MVAR MW MVAR MVAR MVAR MVAR

fila=fgetl(fid)
fila =
SL Slack 1 0 0 0 0 0 0 0

[pal,resto]=strtok(fila)
pal =
SL
resto =
Slack 1 0 0 0 0 0 0 0
Ejemplo:
3
-
Cada vez que detecta una barra PQ, va guardando en el vector BPQ el nombre de la barra
y en PPQ los parmetros,, quedando al final del while:
BPQ=
'Carga_1'
'Carga_2'
'Carga_3'
'Carga_4'
PPQ =
1 200 30 0 0 0 0 0
1 200 20 0 0 0 0 0
1 100 30 0 0 0 0 0
1 400 100 0 0 0 0 0
Observacin

BPQ es una variable tipo celda.
y la otras variables salen del while valiendo:
BPV=
'Gen_1'
'Gen_2'
PPV =
1.0500 60.0000 8.0000 500.0000 0 0 0 0
1.0500 50.0000 5.0000 200.0000 0 0 0 0


BSL =
'Slack'
PSL =
1 0 0 0 0 0 0 0
BLin =
'Carga_1' 'Carga_3'
'Carga_2' 'Carga_4'
'Carga_1' 'Carga_2'
'Carga_3' 'Carga_4'
PLin =
0.0230 0.1380 0.2710
0.0230 0.1380 0.2710
0.0150 0.0920 0.1810
0.0150 0.0920 0.1810
BTraf =
'Slack' 'Carga_1'
'Gen_1' 'Carga_2'
'Gen_2' 'Carga_3
PTraf =
0.0012 0.0150 1.0000
0.0010 0.0120 1.0000
0.0020 0.0240 1.0000
*
*
*
*
* Celdas
n_elem =
4 2 1 4 3 0
nB =
7

nF =
14
Barras =
'Carga_1'
'Carga_2'
'Carga_3'
'Carga_4'
'Gen_1'
'Gen_2'
'Slack'
pN =
1 4
5 6
7 7
8 11
12 14
0 0
BLTG =
'Carga_1' 'Carga_3'
'Carga_2' 'Carga_4'
'Carga_1' 'Carga_2'
'Carga_3' 'Carga_4'
'Slack' 'Carga_1'
'Gen_1' 'Carga_2'
'Gen_2' 'Carga_3'
n_elem=[nPQ nPV 1 nLi nTr nGr]; % Vector con cantidades de cada elemento.
nB=sum(n_elem(1:3)); % Numero total de barras
nF=sum(n_elem); % Numero total de elementos

% Conjunto de sentencias para atribuir los valores a pN, teniendo en
% cuenta la posisbilidad que no exista barras PV y/o transformadores.
if nPV & nTr,
pN=[1 nPQ;nPQ+1 nB-1;nB nB;nB+1 nB+nLi;nB+nLi+1 nB+nLi+nTr];
elseif ~nPV & ~nTr,
pN=[1 nPQ;0 0;nB nB;nB+1 nB+nLi;0 0];
elseif ~nTr,
pN=[1 nPQ;nPQ+1 nB-1;nB nB;nB+1 nB+nLi;0 0];
else
pN=[1 nPQ;0 0;nB nB;nB+1 nB+nLi;nB+nLi+1 nB+nLi+nTr];
end
% Verifico si existe generadores
if nGr & nTr,
pN(end+1,1:2)=[nB+nLi+nTr+1 nF];
elseif nGr
pN(end+1,1:2)=[nB+nLi+1 nF];
else
pN(end+1,1:2)=[0 0];
end
% Sentencias para concatenar en Barras los nombres de todas
% las barras [PQ;PV;SL], verificando si existe barras PV.
Barras=[BPQ(:,1)];
if nPV,
Barras=[Barras;BPV(:,1)];
end
Barras=[Barras;BSL(:,1)];

% En BLTG se concatenan las barras de las lneas y de
% los transformadores, verificando que existan transformadores y generadores
if nTr,
BLTG=[BLin;BTraf];
else
BLTG=BLin;
end
if nGr,
BLTG=[BLTG;[BGen BGen]];
end
4
5
6
7
a
b
c
d
e
8
% Se comienza a armar N, numerando las barras.
N=zeros(nF,11);
N(1:nB,1)=(1:nB)';
N(1:nB,2)=(1:nB)';

% Se le atribuyen nmeros a las barras de lineas y trafos y se verifica conectividad.
sN=zeros(size(BLTG));
for i=1:nB
T=i*strcmp(Barras(i,1),BLTG);
if T==0,
err=['La siguiente barra esta aislada de la red: ',char(Barras(i,1))];
error (err)
end
sN=sN+T;
end
if prod(prod(sN))==0,
a=find(sN==0);
disp(['Las siguientes barras no estan definidas:'])
disp(BLTG(a))
error (' ')
end
N(pN(4,1):nF,1:2)=sN; % Se completa la numeracin de las barras en N.
N(nF-nGr+1:nF,2)=(nB+1:nB+nGr)'; % Creo las barras internas de los generadores.
% Se cargan en N los parametros numericos de la red
N(pN(1,1):pN(1,2),3:11)=PPQ;
if nPV,
N(pN(2,1):pN(2,2),3:11)=PPV;
end
N(pN(3,1):pN(3,2),3:11)=PSL;
N(pN(4,1):pN(4,2),3:5)=PLin;
if nTr,
N(pN(5,1):pN(5,2),3:5)=PTraf;
end
if nGr,
N(pN(6,1):pN(6,2),3:5)=PGen;
end

if nargin==1, % Si se di solo un argumento de entrada
arsal=[strtok(archivo,'.') '.dat']; % crea un nombre para el archivo
end % de salda igual al de entrada pero
% con extensin .dat

save(arsal)
Comentarios:
4
-
N =
1 1 0 0 0 0 0 0 0 0 0
2 2 0 0 0 0 0 0 0 0 0
3 3 0 0 0 0 0 0 0 0 0
4 4 0 0 0 0 0 0 0 0 0
5 5 0 0 0 0 0 0 0 0 0
6 6 0 0 0 0 0 0 0 0 0
7 7 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
5
-
T =
1 0
0 0
1 0
0 0
0 1
0 0
0 0
sN =
1 0
0 0
1 0
0 0
0 1
0 0
0 0
T =
0 0
2 0
0 2
0 0
0 0
0 2
0 0
sN =
1 0
2 0
1 2
0 0
0 1
0 2
0 0
T =
0 0
0 0
0 0
0 0
7 0
0 0
0 0
sN =
1 3
2 4
1 2
3 4
7 1
5 2
6 3
6
- Al hacer prod(prod(sN)) se multiplican todos los elementos de la matriz, si da cero es
porque por lo menos un elemento vale cero, o sea una lnea o trafo tiene una barra no
definida.
a=find(sN==0), encuentra los ndices de los elementos iguales a cero.
7
-
a N =
1 1 1 200 30 0 0 0 0 0 0
2 2 1 200 20 0 0 0 0 0 0
3 3 1 100 30 0 0 0 0 0 0
4 4 1 400 100 0 0 0 0 0 0
5 5 0 0 0 0 0 0 0 0 0
6 6 0 0 0 0 0 0 0 0 0
7 7 0 0 0 0 0 0 0 0 0
1 3 0 0 0 0 0 0 0 0 0
2 4 0 0 0 0 0 0 0 0 0
1 2 0 0 0 0 0 0 0 0 0
3 4 0 0 0 0 0 0 0 0 0
7 1 0 0 0 0 0 0 0 0 0
5 2 0 0 0 0 0 0 0 0 0
6 3 0 0 0 0 0 0 0 0 0
- b
N =
1.0000 1.0000 1.0000 200.0000 30.0000 0 0 0 0 0 0
2.0000 2.0000 1.0000 200.0000 20.0000 0 0 0 0 0 0
3.0000 3.0000 1.0000 100.0000 30.0000 0 0 0 0 0 0
4.0000 4.0000 1.0000 400.0000 100.0000 0 0 0 0 0 0
5.0000 5.0000 1.0500 60.0000 8.0000 500.0000 0 0 0 0 0
6.0000 6.0000 1.0500 50.0000 5.0000 200.0000 0 0 0 0 0
7.0000 7.0000 0 0 0 0 0 0 0 0 0
1.0000 3.0000 0 0 0 0 0 0 0 0 0
2.0000 4.0000 0 0 0 0 0 0 0 0 0
1.0000 2.0000 0 0 0 0 0 0 0 0 0
3.0000 4.0000 0 0 0 0 0 0 0 0 0
7.0000 1.0000 0 0 0 0 0 0 0 0 0
5.0000 2.0000 0 0 0 0 0 0 0 0 0
6.0000 3.0000 0 0 0 0 0 0 0 0 0
N=
1.0000 1.0000 1.0000 200.0000 30.0000 0 0 0 0 0 0
2.0000 2.0000 1.0000 200.0000 20.0000 0 0 0 0 0 0
3.0000 3.0000 1.0000 100.0000 30.0000 0 0 0 0 0 0
4.0000 4.0000 1.0000 400.0000 100.0000 0 0 0 0 0 0
5.0000 5.0000 1.0500 60.0000 8.0000 500.0000 0 0 0 0 0
6.0000 6.0000 1.0500 50.0000 5.0000 200.0000 0 0 0 0 0
7.0000 7.0000 1.0000 0 0 0 0 0 0 0 0
1.0000 3.0000 0 0 0 0 0 0 0 0 0
2.0000 4.0000 0 0 0 0 0 0 0 0 0
1.0000 2.0000 0 0 0 0 0 0 0 0 0
3.0000 4.0000 0 0 0 0 0 0 0 0 0
7.0000 1.0000 0 0 0 0 0 0 0 0 0
5.0000 2.0000 0 0 0 0 0 0 0 0 0
6.0000 3.0000 0 0 0 0 0 0 0 0 0

- c
- d
N =
1.0000 1.0000 1.0000 200.0000 30.0000 0 0 0 0 0
2.0000 2.0000 1.0000 200.0000 20.0000 0 0 0 0 0
3.0000 3.0000 1.0000 100.0000 30.0000 0 0 0 0 0
4.0000 4.0000 1.0000 400.0000 100.0000 0 0 0 0 0
5.0000 5.0000 1.0500 60.0000 8.0000 500.0000 0 0 0 0
6.0000 6.0000 1.0500 50.0000 5.0000 200.0000 0 0 0 0
7.0000 7.0000 1.0000 0 0 0 0 0 0 0
1.0000 3.0000 0.0230 0.1380 0.2710 0 0 0 0 0
2.0000 4.0000 0.0230 0.1380 0.2710 0 0 0 0 0
1.0000 2.0000 0.0150 0.0920 0.1810 0 0 0 0 0
3.0000 4.0000 0.0150 0.0920 0.1810 0 0 0 0 0
7.0000 1.0000 0 0 0 0 0 0 0 0
5.0000 2.0000 0 0 0 0 0 0 0 0
6.0000 3.0000 0 0 0 0 0 0 0 0

- e
N =
1.0000 1.0000 1.0000 200.0000 30.0000 0 0 0 0 0 0
2.0000 2.0000 1.0000 200.0000 20.0000 0 0 0 0 0 0
3.0000 3.0000 1.0000 100.0000 30.0000 0 0 0 0 0 0
4.0000 4.0000 1.0000 400.0000 100.0000 0 0 0 0 0 0
5.0000 5.0000 1.0500 60.0000 8.0000 500.0000 0 0 0 0 0
6.0000 6.0000 1.0500 50.0000 5.0000 200.0000 0 0 0 0 0
7.0000 7.0000 1.0000 0 0 0 0 0 0 0 0
1.0000 3.0000 0.0230 0.1380 0.2710 0 0 0 0 0 0
2.0000 4.0000 0.0230 0.1380 0.2710 0 0 0 0 0 0
1.0000 2.0000 0.0150 0.0920 0.1810 0 0 0 0 0 0
3.0000 4.0000 0.0150 0.0920 0.1810 0 0 0 0 0 0
7.0000 1.0000 0.0012 0.0150 1.0000 0 0 0 0 0 0
5.0000 2.0000 0.0010 0.0120 1.0000 0 0 0 0 0 0
6.0000 3.0000 0.0020 0.0240 1.0000 0 0 0 0 0 0

8
- strtok(archivo,'.') utiliza el . como delimitador, entonces as se extrae el nombre del
archivo sin la extensin y se le concatena la nueva extensin .dat: [strtok(archivo,'.') .dat].
Solucin de Ecuaciones Algebraicas No-Lineales - Mtodo de Newton-Raphson
c > A
+
A + =
+
A
= A
+
= A
|
.
|

\
|

|
.
|

\
|
A
+ =
A
= A A |
.
|

\
|
~ A
A
= + A
|
|
.
|

\
|
+ A |
.
|

\
|
+
= A +
A
=
+
(k)
(k) (k) 1) (k
) (
(k)
(k)
(k) (k)
) 0 (
(0)
) 0 ( (1)
(0)
(0) (0) (0)
) 0 (
(0)
(0)
2 (0)
) 0 (
2
2
(0)
) 0 (
(0)
(0) (0)
(0) (0)
x Si

x x x


c
x

) x ( c
: Definiendo
Raphson - Newton de algoritmo al identifica nto procedimie este de uso Sucesivo

c
x
: n aproximaci segunda la en resultar inicial estimacin la a x Sumando
residuo. el ) x ( c siendo , x c
: resultando os despreciad ser pueden
alto orden de terminos los pequeo, muy es x error el que Asumiendo
... ) x (
! 2
1
x ) x (
: Taylor de serie en izquierda la de trmino el o Expandiend
) x x (
: tenemos correcta, solucin la de desviacin pequea la es x y inicial, estimacin la es x Si
) (
: por dada es l diemnsiona - uni ecuacin una de solucin La
k
J
f c
dx
df
J
dx
df
x
f c
dx
df
c
dx
f d
dx
df
f
c f
c x f
Interpretacin grfica:
C=0
Ac
(0)

Ax
(0)

Ac
(1)

Ax
(1)

J
(0)

J
(1)

Ejemplo 6.1:

a) Bsqueda de la raz de f(x)=x
3
-6 x
2
+9x-4.

clear
dx=1; % Se inicializa el error con un valor elevado
fun=input('Nombre de la funcin: '); % Nombre de la funcin.m donde estn las expr.
% de f y J.
vx=input('Entre la estimacin inicial y rango de ploteo [xe xi xf] -> ');
x=vx(1);
iter = 0;
k=1;
disp('iter Dc J dx x')% Encabezamiento de resultados
while abs(dx) >= 0.001 & iter < 100 % Test de convergencia
iter = iter + 1; % No. de iteraciones
[f,J]=feval(fun,x); % feval ejecuta la funcin especificada
% en el string fun con el argumento x.
yp(k)=f; % Puntos para graficar las
xp(k)=x; % pendientes.
Dc=0 - f; % Residuo
dx= Dc/J; % Se actualiza el error
x=x+dx; % Soluciones sucesivas
yp(k+1)=0; % Puntos para graficar las
xp(k+1)=x; % pendientes.
k=k+2;
fprintf('%g', iter) % Se muestra iter sin ceros
% no significativos
disp([Dc, J, dx, x]) % Se completa con el resto de las
% variables.
end

x=(vx(2):.1:vx(3)); % Rango de x para ploteo.
f=feval(fun,x); % Se evala f en ese rango
plot(x,f,x,0*x,xp,yp)
axis([vx(2) vx(3) min(f) max(f)]) % Se fijan los ejes para x y f.
function[f,J]=pol3(x)
f=x.^3-6*x.^2+9*x-4;
J=3*x.^2-12*x+9;
te6ej1
Nombre de la funcin: 'pol3'
Entre la estimacin inicial y rango de ploteo [xe xi xf] -> [6 0 6]
iter Dc J dx x
1 -50.0000 45.0000 -1.1111 4.8889

2 -13.4431 22.0370 -0.6100 4.2789

3 -2.9981 12.5797 -0.2383 4.0405

4 -0.3748 9.4914 -0.0395 4.0011

5 -0.0095 9.0126 -0.0011 4.0000

6 -0.0000 9.0000 -0.0000 4.0000
0 1 2 3 4 5 6
0
5
10
15
20
25
30
35
40
45
50
Ejemplo 6.1:

b) Estudio de convergencia de f(x)=atg(x).

function[f,J]=atx(x)
f=atan(x);
J=1./(1+x.*x);
te6ej1
Nombre de la funcin: 'atx'
Entre la estimacin inicial y rango de ploteo [xe xi xf] -> [1.4 -20 20]
-20 -15 -10 -5 0 5 10 15 20
-1.5
-1
-0.5
0
0.5
1
1.5
| | | || | | | . : a denomina se , C
: compacta forma en
.
.
. .
. . . .
. . . .
. .
. .
) (
.
.
) (
) (
: matricial forma la en o
... ) (
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
... ) (
... ) (
: orden mayor de terminos los do desprecian
Taylor, de series en izquierda la de termino el o Expandiend
) ,..., , (
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
) ,..., , (
) ,..., , (
: variables con ecuaciones ahora do Consideran
) 0 ( ) 0 ( (0)
) 0 (
) 0 (
2
) 0 (
1
2 1
2
2
2
1
2
1
2
1
1
1
) 0 (
) 0 (
2 2
) 0 (
1 1
) 0 ( ) 0 (
2
2
) 0 (
1
1
) 0 (
2
) 0 (
2
) 0 (
2
2
2
) 0 (
1
1
2 ) 0 (
2
1
) 0 (
1
) 0 (
2
2
1
) 0 (
1
1
1 ) 0 (
1
) 0 ( ) 0 ( ) 0 (
2
) 0 (
2
) 0 (
1
) 0 (
1
2
) 0 ( ) 0 ( ) 0 (
2
) 0 (
2
) 0 (
1
) 0 (
1 2
1
) 0 ( ) 0 ( ) 0 (
2
) 0 (
2
) 0 (
1
) 0 (
1 1
obiana matriz J ac J X J
x
x
x
x
f
x
f
x
f
x
f
x
f
x
f
x
f
x
f
x
f
f c
f c
f c
c x
x
f
x
x
f
x
x
f
f
c x
x
f
x
x
f
x
x
f
f
c x
x
f
x
x
f
x
x
f
f
c x x x x x x f
c x x x x x x f
c x x x x x x f
n n
n
n
n n n
n
n
n n
n n
n
n n n
n
n
n
n
n
n n n n
n n
n n
A = A
(
(
(
(
(
(
(
(
(
(

A
A
A
(
(
(
(
(
(
(
(
(
(

|
|
.
|

\
|
c
c
|
|
.
|

\
|
c
c
|
|
.
|

\
|
c
c
|
|
.
|

\
|
c
c
|
|
.
|

\
|
c
c
|
|
.
|

\
|
c
c
|
|
.
|

\
|
c
c
|
|
.
|

\
|
c
c
|
|
.
|

\
|
c
c
=
(
(
(
(
(
(
(
(
(
(

= A
|
|
.
|

\
|
c
c
+ + A
|
|
.
|

\
|
c
c
+ A
|
|
.
|

\
|
c
c
+
= A
|
|
.
|

\
|
c
c
+ + A
|
|
.
|

\
|
c
c
+ A
|
|
.
|

\
|
c
c
+
= A
|
|
.
|

\
|
c
c
+ + A
|
|
.
|

\
|
c
c
+ A
|
|
.
|

\
|
c
c
+
= A + A + A +
= A + A + A +
= A + A + A +
Quedando entonces el algoritmo de Newton-Raphson:
) 0 ( ) 0 (
2
) 0 (
1
,..., , iniciales valores los estiman Se
n
x x x
| |
| |
| | | | | |
| | | | | |
c que mayor es X de elemento algn Si

X

X

Jacobiana la calcula Se

) (
.
.
) (
) (
C
(k)
(k) ) ( ) 1 (
) (
1
) ( (k)
) (
) (
) (
2 2
) (
1 1
(k)
A
+
A + =
+
A = A
+
+
(
(
(
(
(
(
(
(
(
(

= A
+

k k
k k
k
k
n n
k
k
X X
C J
J
f c
f c
f c
*
*
El problema se reduce entonces a resolver un sistema de ecuaciones lineares.

En Matlab, la solucin del sistema de ecuaciones es obtenida

usando el operador de divisin de matrices \, o sea \ el cual es

basado en factorizacin triangular y eliminacin Gaussiana, mucho ms eficiente

que invertir


| | | || | X J A = A C
| | | | | | X J A = A X
| | J .
Ejemplo 6.2:

Se usa el mtodo de Newton-Raphson para encontrar la interseccin de las curvas
1
4
2 2
= +
= +
y e
y x
x
La siguiente rutina (te6ej2a) genera las grficas
tita=0:.02:2*pi; % Rango del ngulo de la cfa.
r = 2*ones(1, length(tita)); % Vector radio de la cfa.
x=-3:.02:1.5; % Rango de x para la segunda ec.
y=1- exp(x); % Segunda ec.
plot(x,y),grid
axis([-3 3 -3 3]);
axis('square'); % Relacin de ejes tal que no deformen la cfa.
xlabel('x')
text(1.1,1.8,' x^2+y^2=4')
text(1.2,-2.3,' e^x+y=1')
hold on; % Se "fija" la grfica tal que las sucesivas
% se hagan en la misma figura con los mismos ejes.
polar(tita, r) % Ploteo polar en un sistema cartesiano.
hold off; % Se "libera" la figura
-3 -2 -1 0 1 2 3
-3
-2
-1
0
1
2
3
x
y
x
2
+y
2
=4
e
x
+y=1
Tomando las derivadas parciales, la matriz Jacobiana resulta:
(

=
1
2 2
x
e
y x
J
La siguiente rutina (te6ej2b) aplica Newton-Raphson para el sistema arriba
iter = 0;
x=input('Entre el vector estimacin inicial [x1; x2] -> ');
Dx=[1; 1];
C=[4; 1];
disp('Iter DC Matriz Jacobiana Dx x');
while max(abs(Dx)) >= .0001 & iter < 100
iter=iter+1;
f = [x(1)^2+x(2)^2; exp(x(1))+x(2)];
DC = C - f;
J = [2*x(1) 2*x(2)
exp(x(1)) 1];
Dx=J\DC; % Resolucin del sistema de ecuaciones
x=x+Dx;
fprintf('%g', iter)
disp([DC, J, Dx, x])
end
te6ej2b
Entre el vector estimacin inicial [x1; x2] -> [0.5 -1]'
Iter DC Matriz Jacobiana Dx x
1 2.7500 1.0000 -2.0000 0.8034 1.3034
0.3513 1.6487 1.0000 -0.9733 -1.9733

2 -1.5928 2.6068 -3.9466 -0.2561 1.0473
-0.7085 3.6818 1.0000 0.2344 -1.7389

3 -0.1205 2.0946 -3.4778 -0.0422 1.0051
-0.1111 2.8499 1.0000 0.0092 -1.7296

4 -0.0019 2.0102 -3.4593 -0.0009 1.0042
-0.0025 2.7321 1.0000 0.0000 -1.7296

5 -0.0000 2.0083 -3.4593 -0.0000 1.0042
-0.0000 2.7296 1.0000 -0.0000 -1.7296

También podría gustarte