Matlab - Problema Matriz Matlab

 
Vista:
Imágen de perfil de Diego

Problema Matriz Matlab

Publicado por Diego (19 intervenciones) el 25/07/2013 06:19:14
Hola como están, de nuevo ando por aca con otro problemita del famoso Matlab.

El asunto es que tengo el siguiente código en una gui que estoy creando:

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
A=handles.edit1;
tm=1000000*(A/1024/1024);
set(handles.pr,'String',tm);
 
t1=poissrnd(tm,1,A);
b=length(t1);
media=mean(t1);
varian=var(t1);
 
set(handles.text5,'String',media);
set(handles.text6,'String',varian);
 
handles.m1=media;
guidata(hObject,handles);
handles.m11=varian;
guidata(hObject,handles);
 
s=0;
v=[1:b];
w=((v)');
for i=1: b
    s = s+ t1(i);
    x(i)=s;
end
q=((x)');
 
B=handles.edit2;
z=zeros(1,b);
z1=B+z;
z2=((z1)');
set(handles.uitable1,'Data',[w q z2])







Con esto creo una tabla de 3 columnas, la primera me da numeros consecutivos, la segunda, tiempo en microsegundos y la tercera una constante, la tabla más o menos queda así:

1 90 100
2 15 100
3 40 100
4 45 100
5 26 100
6 85 100
7 12 100
......

que son los valores que me dan: w, q y z2 respectivamente.

Bueno el gran problema es que necesito sumar la columna del medio hasta que me de 1s (ya que esta en micro segundos) y cuando llegue a 1 crear la primera fila de la nueva matriz, suponiendo que al sumar tres valores obtengo el 1, la primera fila quedaría

3 1 300
2 1 200
5 1 500
9 1 900
3 1 300
4 1 400
....

lo que esta matriz me dice es que en el primer sgundo llegaron 3paquetes y 300bytes, en el segundo segundo dos paquetes y 200 bytes, en el tercer segundo 5 paquetes y 500 bytes y asi sucesivamente.

es decir el primer elemento es el conteo de los valores, el segundo es la suma y el tecero tambien la suma (aunque al ser constante se puede hacer otra cosa. Y repito el proceso desde donde me quedé..... y así armo la segunda matriz.

se supone que estamos simulando un trafico de datos, asi que lo que necesito es dibujar una diagrama bar() donde en el eje de las x estén los paquetes (la primera columna de la segunda matriz) y en el ejede lasy los bytes totales (la tercer columna de la tabla).

Espero haberme explicado, por favor que alguien me heche una mano para saber como hago eso.

Realmente el problema esta en la columna central ya que no se como crear un vector a partir de las sumas, ya que será obligadamente mas pequeño que el original.

Un saludo y gracias de antemano¨.
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Problema Matriz Matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 25/07/2013 14:08:58
1
2
3
4
5
6
7
8
3 1 300
 2 1 200
 5 1 500
 9 1 900
 3 1 300
 4 1 400
 ....
.

" lo que esta matriz me dice es que en el primer segundo llegaron 3paquetes y 300bytes, en el segundo segundo dos paquetes y 200 bytes, en el tercer segundo 5 paquetes y 500 bytes y asi sucesivamente"

Esta explicación no es clara, mirando este cuadro que sigue.
1
2
3
4
5
6
7
1 90 100
 2 15 100
 3 40 100
 4 45 100
 5 26 100
 6 85 100
 7 12 100


pues en un segundo vas a tener varias paquetes de distintos valores, entonces no puedes decir que
1
primer segundo llegaron 3paquetes y 300bytes
,

Deberías poner un ejemplo muy concreto de lo quieres hacer y con valores reales que cumpla con lo que mencionas.
Por lo que veo, tienes que hacer una sumatoria de los microsegundos y cuando este sumando de microsegundos sea igual a un segundo, entonces generas la primera fila de matriz filaxcolumna(n,3).
luego nuevamente vuelves a sumar y cuando este sumando de microsegundos sea igual a un segundo, entonces generas la segunda fila de matriz filaxcolumna(n,3).

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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 Diego

Problema Matriz Matlab

Publicado por Diego (19 intervenciones) el 25/07/2013 15:26:17
Hola Jose Muchas gracias por responder, efectivamente es como tu comentas, si tengo;

1 90 100
2 15 100
3 40 100
4 45 100
5 26 100
6 85 100
7 12 100
......

Recuerda que la columna central esta en micro segundos y la de la izquierda es el numero de paquetes, paquete 1 paquete 2 paquete 3..... entonces lo que necesito es contarlos "simplemente" hasta que la columan del centro sume 1 y vuelvo a empezar pero donde me quede, por ejemplo si tengo:

1 0.90 100
2 0.15 100
3 0.40 100
4 0.45 100
5 0.20 100
6 0.80 100
7 0.12 100
......

como al sumar las dos primera filas ya (la columna del centro) ya nos pasamos de 1, entonces tengo;

1 0.90 100

un paquete en el primer segundo o antes, luego sigo, como las siguientes 3 suman uno, tengo:

3 1 300

luego las siguientes 2:

2 1 200

Y así ir armando la matriz.

Muchas gracias por tu 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
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

Problema Matriz Matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 25/07/2013 15:39:39
Trata de ser bien especifico en tu pregunta. Resuelve como si fueras resolviendo en detalle para un examen, sin dejar nada vacío.
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 Diego

Problema Matriz Matlab

Publicado por Diego (19 intervenciones) el 25/07/2013 18:13:11
Hola José, mira por ejemplo supongamos que tengo la siguiente matriz

1. 0.1. 100
2. 0.6. 100
3. 0.3. 100
4. 0.8. 100
5. 0.1. 100
6. 0.2. 100
7. 0.7. 100
8. 0.4. 100
9. 0.1. 100
10. 0.3. 100
11. 0.1. 100
12. 06. 100

Donde la columna del medio son valores aleatorios. entonces creo una nueva matriz sumando los valores de la columna del centro hasta obtener 1 o casi 1 nopuedo pasarme de 1.

entonces la matriz de resultado sería


1. 0.1. 100
2. 0.6. 100
3. 0.3. 100
____________ 3. 1. 300
4. 0.8. 100
5. 0.1. 100
____________ 2. 0.9. 200
6. 0.2. 100
7. 0.7. 100
___________ 2. 0.9. 200
8. 0.4. 100
9. 0.1. 100
10. 0.3. 100
11. 0.1. 100
______________ 4. 0.9. 400
12. 06. 100
______________ 1 0.6. 100

asíquedaría

3. 1. 300
2. 0.9. 200
2. 0.9. 200
4. 0.9. 400
1. 0.6. 100

Como te decía la columna del centro manda, cuando está se pasada de 1 paramos la cuenta y volvemos a empezar en este punto donde quedamos.

muchasgracias de nuevo por tu 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
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

Problema Matriz Matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 25/07/2013 19:01:03
Si hubieras hecho como tu ultima repregunta, tu pregunta original. La respuesta hubiera sido mas rápida. Pero es común denominador que veo en el foro, que las personas que hacen sus preguntas la mayoría de las veces es en forma imprecisa y muchas veces por eso es que no se le contesta sus preguntas. Pues al tratar de descifrar que es lo pregunta el usuario hay veces uno pierde mas tiempo en eso, que en hacer el programa.

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
clear all
A=[1. 0.1 100
 2. 0.6 100
 3. 0.3 100
 4. 0.8 100
 5. 0.1 100
 6. 0.2 100
 7. 0.7 100
 8. 0.4 100
 9. 0.1 100
 10. 0.3 100
 11. 0.1 100
 12. 0.6 100]
n=1;
i=1;
c=0;
s=0;
S=0;
global B
while i<=size(A,1)-1
       c=c+1;
        s=s+A(i,2);
        S=S+A(i,3);
        if   s<=1  && s+A(i+1,2)>1
            B(n,:)=[c s S];
            n=n+1;
            c=0;
            s=0;
            S=0;
 
        end
        i=i+1;
end
 
if  sum(B(:,1))<size(A,1)
 B(n,:)=[1 A(end,2) A(end,3)];
end
display(B)


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
>> matriz1
 
A =
 
    1.0000    0.1000  100.0000
    2.0000    0.6000  100.0000
    3.0000    0.3000  100.0000
    4.0000    0.8000  100.0000
    5.0000    0.1000  100.0000
    6.0000    0.2000  100.0000
    7.0000    0.7000  100.0000
    8.0000    0.4000  100.0000
    9.0000    0.1000  100.0000
   10.0000    0.3000  100.0000
   11.0000    0.1000  100.0000
   12.0000    0.6000  100.0000
 
 
B =
 
    3.0000    1.0000  300.0000
    2.0000    0.9000  200.0000
    2.0000    0.9000  200.0000
    4.0000    0.9000  400.0000
    1.0000    0.6000  100.0000



Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]


http://matlabcaballero.blogspot.com


http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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 diego

Problema Matriz Matlab

Publicado por diego (19 intervenciones) el 25/07/2013 20:34:37
Jose loco muchas gracias una vez más.

A ver si la próxima soy más explícito en lo que necesito.

Un abrazo y gracis de verdad.
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 Diego

Problema Matriz Matlab

Publicado por Diego (19 intervenciones) el 26/07/2013 04:57:47
Hola Jose disculpa otra pregunta,

tengo que trabajar con el codigo para diferentes escalas, pero solamente la columa de las sumas es decir dividir esos valores para multiplos de 10, pero cuando muestro la matriz se han dividido también las otras dos columnas, yo necesito que la columna 1 y 3 se queden igual ( matematicamente quedan igual porque muestra la multiplicación por e^n, pero no me sirve asi) pero la central poderla dividir para multiplos de 10. Gracias por tu 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