Matlab - Crear bucle de carga de datos

 
Vista:
sin imagen de perfil

Crear bucle de carga de datos

Publicado por ALBERTO (5 intervenciones) el 10/11/2016 18:39:15
Buenas tardes,

Estoy usando en complemento de Matlab Matpower. Este complemento no calcula opfs a lo largo del tiempo, por lo que necesito crear un algoritmo que introduzca una columna de datos de una matriz len una matriz (la del programa Matpower), ejecute el comando de cálculo, guarde los resultados, borre los datos cargados en la matriz, cargue los nuevos datos, vuelva a calcular, y guarde los resultados en la misma matriz que se guardaron los resultados previamente y así sucesivamente.

Más en detalle. La función para cargar los datos es la siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
function mpc= casomasgrandebucle1
mpc.version = '2';
mpc.baseMVA = 100;
mpc.bus = [
1	3	300	0	0	0	1	0	0	220	1	1.2	0.7
2	2	0	0	0	0	1	0	0	220	1	1.2	0.7
3	2	200	0	0	0	1	0	0	220	1	1.2	0.7
4	2	20	0	0	0	1	0	0	220	1	1.2	0.7
5	2	0	0	0	0	1	0	0	220	1	1.2	0.7
6	2	30	0	0	0	1	0	0	220	1	1.2	0.7
7	1	20	0	0	0	1	0	0	220	1	1.2	0.7
8	1	31	0	0	0	1	0	0	220	1	1.2	0.7
9	1	200	0	0	0	1	0	0	220	1	1.2	0.7
];
mpc.gen = [
1	10	0	200	-200	1	100	1	9.9	2	0	0	0	0	0	0	0	0	0	0	0
2	13	0	200	-200	1	100	1	12.87	2.6	0	0	0	0	0	0	0	0	0	0	0
3	350	0	200	-200	1	100	1	346.5	70	0	0	0	0	0	0	0	0	0	0	0
4	350	0	200	-200	1	100	1	346.5	70	0	0	0	0	0	0	0	0	0	0	0
5	250	0	200	-200	1	100	1	247.5	50	0	0	0	0	0	0	0	0	0	0	0
6	250	0	200	-200	1	100	1	247.5	50	0	0	0	0	0	0	0	0	0	0	0
7	700	0	200	-200	1	100	1	693	5 0	0	0	0	0	0	0	0	0	0	0
];
mpc.branch = [
1	2	0	0.086	0	150	150	150	0	0	1	-360	360
1	3	0	0.081	0	150	150	150	0	0	1	-360	360
1	5	0	0.083	0	150	150	150	0	0	1	-360	360
2	3	0	0.066	0	150	150	150	0	0	1	-360	360
2	4	0	0.083	0	150	150	150	0	0	1	-360	360
3	7	0	0.076	0	150	150	150	0	0	1	-360	360
3	4	0	0.066	0	150	150	150	0	0	1	-360	360
4	5	0	0.083	0	150	150	150	0	0	1	-360	360
4	6	0	0.076	0	150	150	150	0	0	1	-360	360
4	8	0	0.066	0	150	150	150	0	0	1	-360	360
6	9	0	0.083	0	150	150	150	0	0	1	-360	360
7	9	0	0.076	0	150	150	150	0	0	1	-360	360
8	3	0	0.066	0	150	150	150	0	0	1	-360	360
];
mpc.gencost = [
1	0	0	2	0	0	15	9.9
1	0	0	2	0	0	12	12.87
1	0	0	2	0	0	40	346.5
1	0	0	2	0	0	40	346.5
1	0	0	2	0	0	32	24.75
1	0	0	2	0	0	32	29.7
1	0	0	2	0	0	61	693
];

En el comand window se debe poner lo siguiente

1
2
3
4
5
6
mpc=loadcase(casomasgrandebucle1);  %carga la base de datos de la función
n = [300 200 300;0 0 0;200 210 220;20 10 20;0 0 2;30 30 30;20 10 10;31 0 31;200 210 190]
rundcopf(casomasgrandebucle1) ; % resuelve el opf.
define_constants;
resultado=rundcopf('casomasgrandebucle1');
Mult_Lagrange=resultado.bus(:,LAM_P)

LO QUE BUSCO ES QUE EN LA MATRIZ PRIMERA mpc.bus LA TERCERA COLUMNA SEA SUSTITUIDA POR LOS LA SEGUNDA COLUMNA DE LA MATRIZ n (debajo), CALCULE DE NUEVO, Y ALMACENE DE NUEVO LOS RESULTADOS EN UNA NUEVA COLUMNA DE LA MATRIZ DE RESULTASOS Mult_Lagrange, PARA DESPUÉS CARGAR LA TERCERA COLUMNA DE n, Y REPETIR DE NUEVO EL PROCESO.

n = [300 200 300;0 0 0;200 210 220;20 10 20;0 0 2;30 30 30;20 10 10;31 0 31;200 210 190]

No paro de darle vueltas a este tema.

Gracias anticipadas
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Royeth
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Crear bucle de carga de datos

Publicado por Royeth (1818 intervenciones) el 10/11/2016 19:46:14
No tengo el complemento de Matlab , por lo tanto no puedo ver si las columnas de tus variables que vas a intercambiarles filas son iguales , pero para este cambio el reemplazo de columnas lo puedes hacer así :

1
mpc.bus(:,3)=n(:,2);

el resto del procedimiento no lo veo claro

pero para almacenar resultados en una nueva columna puedes usar hozrcat si los resultados tienen más de una columna o puedes usar end+1 si tienes solo una columna , por ejemplo :

1
2
3
a=magic(5); %a es una matriz de 5 columnas y 5 filas , quiero almacenar en la columna 6 varios valores : 
 
a(:,end+1)=[ 1 2 3 4 5]';

espero te sea de ayuda
https://www.facebook.com/royethmatlab/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Crear bucle de carga de datos

Publicado por ALBERTO (5 intervenciones) el 17/11/2016 09:26:24
Buenos días,

En primer lugar, gracias por la respuesta, toda ayuda es siempre bien recibida.

Desafortunadamente no resuelve el problema. Utilizando el comando faciltado mpc.bus(:,3)=n(:,2) sustituye los datos, y lo resuleve, pero si intento hacerlo con un bucle ''for'', para que lo haga automáticamente ahí ya no me funciona. Respecto a la función horzcat, me resuelve parte del problema de los resultados, así que en cuanto tenga la manera de hacer el bucle for, estaría resulto el problema.

Si alguien puede aportar algo respecto al bucle for en una struct de matlab se lo agradecería.

Muchas gracias de antemano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Crear bucle de carga de datos

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 17/11/2016 14:02:30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
function mpc= casomasgrandebucle1
global n
whos n
mpc.version = '2';
mpc.baseMVA = 100;
mpc.bus = [
1	3	300	0	0	0	1	0	0	220	1	1.2	0.7
2	2	0	0	0	0	1	0	0	220	1	1.2	0.7
3	2	200	0	0	0	1	0	0	220	1	1.2	0.7
4	2	20	0	0	0	1	0	0	220	1	1.2	0.7
5	2	0	0	0	0	1	0	0	220	1	1.2	0.7
6	2	30	0	0	0	1	0	0	220	1	1.2	0.7
7	1	20	0	0	0	1	0	0	220	1	1.2	0.7
8	1	31	0	0	0	1	0	0	220	1	1.2	0.7
9	1	200	0	0	0	1	0	0	220	1	1.2	0.7
];
mpc.bus(:,3)=n(:,2);
mpc.gen = [
1	10	0	200	-200	1	100	1	9.9	2	0	0	0	0	0	0	0	0	0	0	0
2	13	0	200	-200	1	100	1	12.87	2.6	0	0	0	0	0	0	0	0	0	0	0
3	350	0	200	-200	1	100	1	346.5	70	0	0	0	0	0	0	0	0	0	0	0
4	350	0	200	-200	1	100	1	346.5	70	0	0	0	0	0	0	0	0	0	0	0
5	250	0	200	-200	1	100	1	247.5	50	0	0	0	0	0	0	0	0	0	0	0
6	250	0	200	-200	1	100	1	247.5	50	0	0	0	0	0	0	0	0	0	0	0
7	700	0	200	-200	1	100	1	693	5 0	0	0	0	0	0	0	0	0	0	0
];
mpc.branch = [
1	2	0	0.086	0	150	150	150	0	0	1	-360	360
1	3	0	0.081	0	150	150	150	0	0	1	-360	360
1	5	0	0.083	0	150	150	150	0	0	1	-360	360
2	3	0	0.066	0	150	150	150	0	0	1	-360	360
2	4	0	0.083	0	150	150	150	0	0	1	-360	360
3	7	0	0.076	0	150	150	150	0	0	1	-360	360
3	4	0	0.066	0	150	150	150	0	0	1	-360	360
4	5	0	0.083	0	150	150	150	0	0	1	-360	360
4	6	0	0.076	0	150	150	150	0	0	1	-360	360
4	8	0	0.066	0	150	150	150	0	0	1	-360	360
6	9	0	0.083	0	150	150	150	0	0	1	-360	360
7	9	0	0.076	0	150	150	150	0	0	1	-360	360
8	3	0	0.066	0	150	150	150	0	0	1	-360	360
];
mpc.gencost = [
1	0	0	2	0	0	15	9.9
1	0	0	2	0	0	12	12.87
1	0	0	2	0	0	40	346.5
1	0	0	2	0	0	40	346.5
1	0	0	2	0	0	32	24.75
1	0	0	2	0	0	32	29.7
1	0	0	2	0	0	61	693
];


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function principal(cantidad)
if nargin<1
cantidad=6;
end
global n
n = [300 200 300;0 0 0;200 210 220;20 10 20;0 0 2;30 30 30;20 10 10;31 0 31;200 210 190];
for i=1:cantidad
mpc=loadcase(casomasgrandebucle1);  %carga la base de datos de la función
rundcopf(casomasgrandebucle1) % resuelve el opf.
define_constants;
resultado=rundcopf('casomasgrandebucle1');
Mult_Lagrange(:,i)=resultado.bus(:,LAM_P);
end
display(Mult_Lagrange)
end



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
%%ejecucion
>> principal(10)
 
MATPOWER Version 6.0b2, 01-Nov-2016 -- DC Optimal Power Flow
The interior-point algorithm uses a built-in starting point;
ignoring user-supplied X0.
Optimization terminated.
 
Converged in 0.04 seconds
Objective Function Value = 2398.95 $/hr
.
.
.
.
Mult_Lagrange =
 
    9.3894    9.3894    9.3894    9.3894    9.3894    9.3894    9.3894    9.3894    9.3894    9.3894
    7.2324    7.2324    7.2324    7.2324    7.2324    7.2324    7.2324    7.2324    7.2324    7.2324
    7.5981    7.5981    7.5981    7.5981    7.5981    7.5981    7.5981    7.5981    7.5981    7.5981
    4.6907    4.6907    4.6907    4.6907    4.6907    4.6907    4.6907    4.6907    4.6907    4.6907
    0.7734    0.7734    0.7734    0.7734    0.7734    0.7734    0.7734    0.7734    0.7734    0.7734
    0.9281    0.9281    0.9281    0.9281    0.9281    0.9281    0.9281    0.9281    0.9281    0.9281
   11.3607   11.3607   11.3607   11.3607   11.3607   11.3607   11.3607   11.3607   11.3607   11.3607
    6.1444    6.1444    6.1444    6.1444    6.1444    6.1444    6.1444    6.1444    6.1444    6.1444
   15.1232   15.1232   15.1232   15.1232   15.1232   15.1232   15.1232   15.1232   15.1232   15.1232

Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Crear bucle de carga de datos

Publicado por ALBERTO (5 intervenciones) el 17/11/2016 15:33:22
Infinitas gracias.

Un gran trabajo esta web.

Gracias por la ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Crear bucle de carga de datos

Publicado por ALBERTO (5 intervenciones) el 17/11/2016 19:16:49
Revisandolo, cierto que crea un bucle, pero no sustituye para cada en cada uno de los casos de principal(10) en la matriz mpc.bus la columna 3 por la columna primera de n, reselve y almacena en la columna primera de Mult_Lagrange, vuelve a sustituir en mpc.bus la columna 3 por la segunda columna de n, resueleve y almacena en la columna segunda de Mult_Lagrange, vuelve a sustituir en mpc.bus la columna 3 por la tercera columna de n, resuelve y almacena en la última columna de Mult_Lagrange.

He hecho las siguientes modificaciones que envío en zip y aun así sigue sin cargar los datos.

Gracias de antemano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Crear bucle de carga de datos

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 17/11/2016 20:28:07
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
function mpc= casomasgrandebucle1;
global n  i
mpc.version = '2';
mpc.baseMVA = 100;
mpc.bus = [
1	3	300	0	0	0	1	0	0	220	1	1.2	0.7
2	2	0	0	0	0	1	0	0	220	1	1.2	0.7
3	2	200	0	0	0	1	0	0	220	1	1.2	0.7
4	2	20	0	0	0	1	0	0	220	1	1.2	0.7
5	2	0	0	0	0	1	0	0	220	1	1.2	0.7
6	2	30	0	0	0	1	0	0	220	1	1.2	0.7
7	1	20	0	0	0	1	0	0	220	1	1.2	0.7
8	1	31	0	0	0	1	0	0	220	1	1.2	0.7
9	1	200	0	0	0	1	0	0	220	1	1.2	0.7
];
mpc.bus(:,3)=n(:,i);
mpc.gen = [
1	10	0	200	-200	1	100	1	9.9	2	0	0	0	0	0	0	0	0	0	0	0
2	13	0	200	-200	1	100	1	12.87	2.6	0	0	0	0	0	0	0	0	0	0	0
3	350	0	200	-200	1	100	1	346.5	70	0	0	0	0	0	0	0	0	0	0	0
4	350	0	200	-200	1	100	1	346.5	70	0	0	0	0	0	0	0	0	0	0	0
5	250	0	200	-200	1	100	1	247.5	50	0	0	0	0	0	0	0	0	0	0	0
6	250	0	200	-200	1	100	1	247.5	50	0	0	0	0	0	0	0	0	0	0	0
7	700	0	200	-200	1	100	1	693	5 0	0	0	0	0	0	0	0	0	0	0
];
mpc.branch = [
1	2	0	0.086	0	150	150	150	0	0	1	-360	360
1	3	0	0.081	0	150	150	150	0	0	1	-360	360
1	5	0	0.083	0	150	150	150	0	0	1	-360	360
2	3	0	0.066	0	150	150	150	0	0	1	-360	360
2	4	0	0.083	0	150	150	150	0	0	1	-360	360
3	7	0	0.076	0	150	150	150	0	0	1	-360	360
3	4	0	0.066	0	150	150	150	0	0	1	-360	360
4	5	0	0.083	0	150	150	150	0	0	1	-360	360
4	6	0	0.076	0	150	150	150	0	0	1	-360	360
4	8	0	0.066	0	150	150	150	0	0	1	-360	360
6	9	0	0.083	0	150	150	150	0	0	1	-360	360
7	9	0	0.076	0	150	150	150	0	0	1	-360	360
8	3	0	0.066	0	150	150	150	0	0	1	-360	360
];
mpc.gencost = [
1	0	0	2	0	0	15	9.9
1	0	0	2	0	0	12	12.87
1	0	0	2	0	0	40	346.5
1	0	0	2	0	0	40	346.5
1	0	0	2	0	0	32	24.75
1	0	0	2	0	0	32	29.7
1	0	0	2	0	0	61	693
];

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function principal(cantidad)
if nargin<1
cantidad=3;
end
global n  i
n = [300 200 300;0 0 0;200 210 220;20 10 20;0 0 2;30 30 30;20 10 10;31 0 31;200 210 190];
for i=1:cantidad
    mpc=loadcase(casomasgrandebucle1);  %carga la base de datos de la función
    rundcopf(casomasgrandebucle1) ;% resuelve el opf.
    define_constants;
    resultado=rundcopf('casomasgrandebucle1');
    Mult_Lagrange(:,i)=resultado.bus(:,LAM_P);
end
display(Mult_Lagrange)
end


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
>> principal(3)
 
MATPOWER Version 6.0b2, 01-Nov-2016 -- DC Optimal Power Flow
The interior-point algorithm uses a built-in starting point;
ignoring user-supplied X0.
Optimization terminated.
 
Converged in 0.05 seconds
Objective Function Value = 3605.34 $/hr
================================================================================
|     System Summary                                                           |
================================================================================
 
How many?                How much?              P (MW)            Q (MVAr)
---------------------    -------------------  -------------  -----------------
Buses              9     Total Gen Capacity    1903.8           0.0 to 0.0
Generators         7     On-line Capacity      1903.8           0.0 to 0.0
Committed Gens     7     Generation (actual)    801.0               0.0
Loads              7     Load                   801.0               0.0
  Fixed            7       Fixed                801.0               0.0
  Dispatchable     0       Dispatchable          -0.0 of -0.0      -0.0
Shunts             0     Shunt (inj)             -0.0               0.0
Branches          13     Losses (I^2 * Z)         0.00              0.00
Transformers       0     Branch Charging (inj)     -                0.0
Inter-ties         0     Total Inter-tie Flow     0.0               0.0
.
.
.
.
================================================================================
|     Branch Flow Constraints                                                  |
================================================================================
Brnch   From     "From" End        Limit       "To" End        To
  #     Bus    Pf  mu     Pf      |Pmax|      Pt      Pt  mu   Bus
-----  -----  -------  --------  --------  --------  -------  -----
   3      1      -     -150.00    150.00    150.00    15.438     5
  11      6    13.863   150.00    150.00   -150.00      -        9
 
Mult_Lagrange =
 
   11.1447    9.3894   11.1447
    8.5301    7.2324    8.5301
    8.6625    7.5981    8.6625
    5.8403    4.6907    5.8403
    0.7734    0.7734    0.7734
    3.1421    0.9281    3.1421
   11.3607   11.3607   11.3607
    7.2514    6.1444    7.2514
   14.0588   15.1232   14.0588

Observacion. Entonces en resumen tu pregunta original no es clara, porque no mencionas lo que acabas mencionar y por lo tanto se hizo un código de acuerdo a tu pregunta original.

Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Crear bucle de carga de datos

Publicado por ALBERTO (5 intervenciones) el 18/11/2016 07:33:00
Disculpa no haberme explicado bien entonces.

Hace un gran trabajo.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar