Matlab - Romper un bucle

 
Vista:

Romper un bucle

Publicado por uriellex (4 intervenciones) el 07/10/2014 10:14:49
Hola, ¿podría alguien ayudarme a romper el bucle for de este código? Es un código sencillo pero mi experiencia con Matlab es nula.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
% condiciones iniciales, suponemos x2=0
y1=input('Razón inicial de soluto en el gas: ');
y2=input('Razón de soluto a la salida en el gas: ');
G=input('Caudal o flujo del gas l.s. : ');
L=input('Caudal o flujo del líquido l.s. : ');
A=input('AEPT: '); % altura de relleno por plato teórico
x1=linsolve(L/G,y1-y2)
re=input('Introduzca polinomio de equilibrio en vector: '); % recta de equilibrio en razones, polinimio como [a b c]
yN=y2;
i=1;
yn=y2;
for i=1:100,
    yN=yn;
    RE=re-[0 0 yN];
    raiz=roots(RE);
    xN=raiz(2:2);
    yn=(L/G)*xN+y2;
    if yn==y1,
        break;
    end;
end;
z=i*A;
fprintf('El número de platos teóricos es de %d, por lo que la columna mide %f', i, z)
Un saludo y gracias.
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

Romper un bucle

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 07/10/2014 14:14:37
Con que valores lo ejecutas?.

Saludos.
JOSE JEREMÍAS CABALLERO
Asesoría online y Presencial en Matlab
programador en matlab
Servicios de programación matlab
[email protected]
Estimado Usuario de Matlab, el correo es para servicios de cursos, asesoría y programación. Toda ayuda gratuita es vía foro.


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 Dave
Val: 497
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Romper un bucle

Publicado por Dave (1094 intervenciones) el 07/10/2014 22:52:26
Hola Uriellex;

En principio, lo que estas haciendo debería funcionar.

El ejemplo más simple es lo siguiente:

1
2
3
4
5
6
7
8
9
for n=1:20
   disp(n)
 
   if n ==10
      break
   end
end
 
disp(['Termino, n= ',num2str(n)])

Resultado

1
2
3
4
5
6
7
8
9
10
11
1
     2
     3
     4
     5
     6
     7
     8
     9
    10
Termino, n= 10

Espero que sea de alguna ayuda.

Saludos
Dave Correa
[email protected]
Servicios de Programación Matlab
http://fismatlab.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
0
Comentar

Romper un bucle

Publicado por uriellex (4 intervenciones) el 08/10/2014 09:39:35
Hola, en mi caso el bucle realiza las cien interacciones, por eso he pensado que a lo mejor no he colocado correctamente el break, o el if.
Gracias y un saludo.
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

Romper un bucle

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 08/10/2014 13:58:06
El if y el break están correctos, es detalle es que yn y y1 no llegan a ser iguales en los iteraciones que haces. Por eso te había preguntado, con que valores lo ejecutas y no me haz llegado a contestar.
Yo ejecuto con estos valores al azar y me da este resultado.
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
>> soluto
Razón inicial de soluto en el gas: 2
Razón de soluto a la salida en el gas: 3
Caudal o flujo del gas l.s. : 4
Caudal o flujo del líquido l.s. : 5
AEPT: 6
Introduzca polinomio de equilibrio en vector: [4 5 6]
i=  1 yn=2.21875000000000 y1=2.00000000
i=  2 yn=2.37382322451287 y1=2.00000000
i=  3 yn=2.41912861225509 y1=2.00000000
i=  4 yn=2.41627278927592 y1=2.00000000
i=  5 yn=2.41403460776414 y1=2.00000000
i=  6 yn=2.41396273221502 y1=2.00000000
i=  7 yn=2.41405494656519 y1=2.00000000
i=  8 yn=2.41406622622462 y1=2.00000000
i=  9 yn=2.41406316047161 y1=2.00000000
i= 10 yn=2.41406239413373 y1=2.00000000
i= 11 yn=2.41406246161073 y1=2.00000000
i= 12 yn=2.41406250128027 y1=2.00000000
i= 13 yn=2.41406250180237 y1=2.00000000
i= 14 yn=2.41406250010231 y1=2.00000000
i= 15 yn=2.41406249992968 y1=2.00000000
i= 16 yn=2.41406249998931 y1=2.00000000
i= 17 yn=2.41406250000215 y1=2.00000000
i= 18 yn=2.41406250000066 y1=2.00000000
i= 19 yn=2.41406249999996 y1=2.00000000
i= 20 yn=2.41406249999997 y1=2.00000000
i= 21 yn=2.41406250000000 y1=2.00000000
i= 22 yn=2.41406250000000 y1=2.00000000
i= 23 yn=2.41406250000000 y1=2.00000000
i= 24 yn=2.41406250000000 y1=2.00000000
i= 25 yn=2.41406250000000 y1=2.00000000
i= 26 yn=2.41406250000000 y1=2.00000000
i= 27 yn=2.41406250000000 y1=2.00000000
i= 28 yn=2.41406250000000 y1=2.00000000
i= 29 yn=2.41406250000000 y1=2.00000000
i= 30 yn=2.41406250000000 y1=2.00000000
i= 31 yn=2.41406250000000 y1=2.00000000
i= 32 yn=2.41406250000000 y1=2.00000000
i= 33 yn=2.41406250000000 y1=2.00000000
i= 34 yn=2.41406250000000 y1=2.00000000
i= 35 yn=2.41406250000000 y1=2.00000000
i= 36 yn=2.41406250000000 y1=2.00000000
i= 37 yn=2.41406250000000 y1=2.00000000
i= 38 yn=2.41406250000000 y1=2.00000000
i= 39 yn=2.41406250000000 y1=2.00000000
i= 40 yn=2.41406250000000 y1=2.00000000
i= 41 yn=2.41406250000000 y1=2.00000000
i= 42 yn=2.41406250000000 y1=2.00000000
i= 43 yn=2.41406250000000 y1=2.00000000
i= 44 yn=2.41406250000000 y1=2.00000000
i= 45 yn=2.41406250000000 y1=2.00000000
i= 46 yn=2.41406250000000 y1=2.00000000
i= 47 yn=2.41406250000000 y1=2.00000000
i= 48 yn=2.41406250000000 y1=2.00000000
i= 49 yn=2.41406250000000 y1=2.00000000
i= 50 yn=2.41406250000000 y1=2.00000000
i= 51 yn=2.41406250000000 y1=2.00000000
i= 52 yn=2.41406250000000 y1=2.00000000
i= 53 yn=2.41406250000000 y1=2.00000000
i= 54 yn=2.41406250000000 y1=2.00000000
i= 55 yn=2.41406250000000 y1=2.00000000
i= 56 yn=2.41406250000000 y1=2.00000000
i= 57 yn=2.41406250000000 y1=2.00000000
i= 58 yn=2.41406250000000 y1=2.00000000
i= 59 yn=2.41406250000000 y1=2.00000000
i= 60 yn=2.41406250000000 y1=2.00000000
i= 61 yn=2.41406250000000 y1=2.00000000
i= 62 yn=2.41406250000000 y1=2.00000000
i= 63 yn=2.41406250000000 y1=2.00000000
i= 64 yn=2.41406250000000 y1=2.00000000
i= 65 yn=2.41406250000000 y1=2.00000000
i= 66 yn=2.41406250000000 y1=2.00000000
i= 67 yn=2.41406250000000 y1=2.00000000
i= 68 yn=2.41406250000000 y1=2.00000000
i= 69 yn=2.41406250000000 y1=2.00000000
i= 70 yn=2.41406250000000 y1=2.00000000
i= 71 yn=2.41406250000000 y1=2.00000000
i= 72 yn=2.41406250000000 y1=2.00000000
i= 73 yn=2.41406250000000 y1=2.00000000
i= 74 yn=2.41406250000000 y1=2.00000000
i= 75 yn=2.41406250000000 y1=2.00000000
i= 76 yn=2.41406250000000 y1=2.00000000
i= 77 yn=2.41406250000000 y1=2.00000000
i= 78 yn=2.41406250000000 y1=2.00000000
i= 79 yn=2.41406250000000 y1=2.00000000
i= 80 yn=2.41406250000000 y1=2.00000000
i= 81 yn=2.41406250000000 y1=2.00000000
i= 82 yn=2.41406250000000 y1=2.00000000
i= 83 yn=2.41406250000000 y1=2.00000000
i= 84 yn=2.41406250000000 y1=2.00000000
i= 85 yn=2.41406250000000 y1=2.00000000
i= 86 yn=2.41406250000000 y1=2.00000000
i= 87 yn=2.41406250000000 y1=2.00000000
i= 88 yn=2.41406250000000 y1=2.00000000
i= 89 yn=2.41406250000000 y1=2.00000000
i= 90 yn=2.41406250000000 y1=2.00000000
i= 91 yn=2.41406250000000 y1=2.00000000
i= 92 yn=2.41406250000000 y1=2.00000000
i= 93 yn=2.41406250000000 y1=2.00000000
i= 94 yn=2.41406250000000 y1=2.00000000
i= 95 yn=2.41406250000000 y1=2.00000000
i= 96 yn=2.41406250000000 y1=2.00000000
i= 97 yn=2.41406250000000 y1=2.00000000
i= 98 yn=2.41406250000000 y1=2.00000000
i= 99 yn=2.41406250000000 y1=2.00000000
i=100 yn=2.41406250000000 y1=2.00000000

En este problema se debería buscar al parecer con un criterio de pare, es decir cuando yn tienda a y1 que muestre ese valor, es decir absoluto(yn-y1) es menor que 10^-4, entonces que salga del bucle. Como te digo, leo las preguntas de los usuarios y si las preguntas no están claras, entonces por lo general hago las preguntas al usuario que pregunto para tener mayor informacion y de esa manera tener una mayor posibilidad de resolver ese pregunta. Pero muchos usuarios que hacen las preguntas no contentas mis preguntas y por lo tanto ese pregunta se queda sin contestar.
Muchos problemas depende mucho del tipo de datos que uno a introducir para llegar a la respuesta que uno desea.


Saludos.
JOSE JEREMÍAS CABALLERO
Asesoría online y Presencial en Matlab
programador en matlab
Servicios de programación matlab
[email protected]
Estimado Usuario de Matlab, el correo es para servicios de cursos, asesoría y programación. Toda ayuda gratuita es vía foro.



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

Romper un bucle

Publicado por uriellex (4 intervenciones) el 08/10/2014 22:11:06
Disculpas por no haberle contestado. Los valores de inicio serían:
1
2
3
4
5
6
Razón inicial de soluto en el gas: 0.111
Razón de soluto a la salida en el gas: 0.0011
Caudal o flujo del gas l.s. : 0.034
Caudal o flujo del líquido l.s. : 0.0361
AEPT: 0.31
Introduzca polinomio de equilibrio en vector: [2.7 0.685 0]
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 Dave
Val: 497
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Romper un bucle

Publicado por Dave (1094 intervenciones) el 09/10/2014 03:51:01
Hola!!!;

El problema de que los valores no sean igual, lo podría solucionar facilmente evaluando la condiciones mayor igual.}

Te dejo el ejemplo:

1
2
3
4
5
6
7
for n=1:20
disp(n)
if n >=10
break
end
end
disp(['Termino, n= ',num2str(n)])

Espero que sea de alguna ayuda.

Saludos
Dave Correa
[email protected]
Servicios de Programación Matlab
http://fismatlab.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
0
Comentar

Romper un bucle

Publicado por uriellex (4 intervenciones) el 09/10/2014 11:37:43
Muchas gracias, me ha servido. He puesto la condición mayor igual y cambiado un par de cositas y ya me funciona.
1
2
3
4
5
6
7
8
9
10
11
12
13
yN=y2;
yn=1;
for i=1:200,
    RE=re-[0 0 yN];
    raiz=roots(RE);
    xN=raiz(2:2);
    yn=(L/G)*xN+y2;
    if yn>=y1,
        break;
    end;
    yN=yn;
end;
z=i*A;
Saludos.
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