Saltar al contenido principal
LibreTexts Español

8.12: Bucles y Control

  • Page ID
    82259
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    MATLAB tiene instrucciones de control como las de la mayoría de los lenguajes informáticos. Aquí solo estudiaremos el bucle for. Consulte el manual de MATLAB para obtener detalles sobre las declaraciones if y while.

    Lo que para los bucles hacen es permitir que se repita una sentencia o un grupo de declaraciones. Por ejemplo,

    for i = 1:n,x(i) = 0,end

    asigna el valor 0 a los primeros n elementos de la matriz x. Si n es menor que 1, la instrucción sigue siendo válida pero no se hará nada. Si no se define n, entonces aparecerá el siguiente mensaje:

    ??? Undefined function or variable.
    Symbol in question==>n

    Si n contiene un valor real, se usa la parte entera de n. Si n es un número complejo, se toma la parte entera de la parte real. (Esto, sin embargo, debe evitarse.) Si x no se declara antes o es de menor dimensión que n, entonces se asigna memoria adicional.

    El fin del comando debe seguir el comando para. Si no está presente, MATLAB esperará las sentencias restantes hasta que escriba t he command end, y mientras tanto no se ejecutará nada.

    Se puede incluir más de una declaración en el bucle. La sentencia 1:n es la forma de especificar todos los valores enteros entre 1 y n. Se puede especificar un paso diferente a 1. Por ejemplo, la sentencia para i= 1:2:5, x (i) =1, end es equivalente a x (1) =1, x (5) =1. También se permiten pasos negativos, como en i=n: - 1:1.

    Podemos usar un bucle for para dibujar un círculo de radio 1. Tipo

    ≫ j=sqrt(-1);
    ≫ n=360;
    ≫ for i=1:n,circle(1)=exp(2*j*i*pi/n);end;
    ≫plot(circle)

    Observe lo fácil que es trazar una curva. Pero también tenga en cuenta la lentitud con la que se ejecuta el bucle for. MATLAB no es muy bueno para ejecutar cosas una por una. Prefiere, con mucho, una declaración orientada a vectores. Usando la especificación de rango como en el bucle for, es posible acelerar el proceso reemplazando el bucle for explícito por un bucle for implícito usando los dos puntos, así:

    ≫ circle = exp((2*j*pi/n)*[1:n]);

    Observe cuánto más rápido se ejecuta este comando. En general, para los bucles se deben evitar tanto como sea posible. Por ejemplo, el primer bucle for que escribiste podría haber sido reemplazado por el comando x=ceros (1, n);, que es mucho más eficiente. La función ceros llena la variable con 0's al tamaño especificado. Del mismo modo, la función unos llena la variable con 1's. El tamaño también puede ser determinado por el tamaño del argumento. Si A es una matriz de tamaño m, n, entonces el comando B=ones (a) llena la matriz B con 1's y fuerza la matriz B para tener exactamente el mismo tamaño que la matriz A.

    Evitar para Loops

    Dado que los bucles for son muy ineficientes en MATLAB (se calculan secuencialmente, agregando varios cálculos más para cada bucle), es preferible usar las capacidades de matriz de MATLAB para reemplazar los bucles y acelerar tiempo de procesamiento.

    1. Reemplazar el bucle for ≫ para i = 1:10, ≫ x (i) = i; ≫ fin; con ≫ x = 1:10 para obtener x = [1 2 3 4 5 6 7 8 9 10]
    2. Reemplazar el bucle for ≫ z = algo; ≫ para i = 1:10, ≫ x (i) = z*i; ≫ fin; con ≫ z = algo ≫ x = z* (1:10); para obtener x = [z 2*z 3*z... 10*z]
    3. Reemplazar el bucle for ≫ z = algo; ≫ x (1) = z; ≫ para i = 2:10. ≫ x (i) = z*x (i-1); ≫ fin; con ≫ z = algo; ≫ x = z.^ (1:10); para obtener x = [z z**2 z**3 ... z**10]
    4. Reemplazar el bucle for ≫ para i = 0:2:100, ≫ x (i) = 1.0* exp (j*2*pi*i/100); ≫ end; con ≫ x = 1.0* exp (j*2*pi* (0:2:100) /100); para obtener x = [exp (0) exp (j*4*pi/100)... exp (j*200*pi/100)]

    This page titled 8.12: Bucles y Control is shared under a CC BY 3.0 license and was authored, remixed, and/or curated by Louis Scharf (OpenStax CNX) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.