MATLAB 循环

  • 循环

    循环在某些情况下,您需要多次执行一个代码块。通常,语句是按顺序执行的。首先执行函数中的第一条语句,然后执行第二条,依此类推。编程语言提供了各种控制结构,允许更复杂的执行路径。循环语句允许我们多次执行一个语句或一组语句,以下是大多数编程语言中循环语句的一般形式-
    c loop_architecture
    MATLAB提供了以下类型的循环来处理循环需求。
  • while 循环

    while 循环重复执行条件为true的语句。
    语法-
    
    while <expression>
       <statements>
    end
    
    创建一个脚本文件并输入以下代码-
    
    a = 10;
    % while loop execution 
    while( a < 20 )
       fprintf('value of a: %d\n', a);
       a = a + 1;
    end
    
    尝试一下
    运行文件时,它将产生以下结果-
    
    value of a: 10
    value of a: 11
    value of a: 12
    value of a: 13
    value of a: 14
    value of a: 15
    value of a: 16
    value of a: 17
    value of a: 18
    value of a: 19
    
  • for 循环

    语法-
    
    for index = values
       <program statements>
                ...
    end
    
    values 具有以下格式 −
    • initval:endval - 将索引变量从initval到endval递增1,并重复执行程序语句,直到index大于endval。
    • initval:step:endval - 每次迭代将索引值增加step的值,如果step为负,则将索引的值减小。
    • valArray - 在每次迭代时从数组valArray的后续列创建列向量索引。 例如,在第一次迭代中,index = valArray(:,1)。 该循环最多执行n次,其中n是valel的列数,由numel(valArray,1,:)给出。 输入valArray可以是任何MATLAB数据类型,包括字符串,单元格数组或结构。
    创建一个脚本文件并输入以下代码-
    
    for a = 10:20 
       fprintf('value of a: %d\n', a);
    end
    
    尝试一下
    运行文件时,它将产生以下结果-
    
    value of a: 10
    value of a: 11
    value of a: 12
    value of a: 13
    value of a: 14
    value of a: 15
    value of a: 16
    value of a: 17
    value of a: 18
    value of a: 19
    value of a: 20
    
    示例2-
    
    for a = 1.0: -0.1: 0.0
       disp(a)
    end
    
    尝试一下
    运行文件时,它将产生以下结果-
    
    1
    0.90000
    0.80000
    0.70000
    0.60000
    0.50000
    0.40000
    0.30000
    0.20000
    0.10000
    0
    
    示例3-
    
    for a = [24,18,17,23,28]
       disp(a)
    end
    
    尝试一下
    运行文件时,它将产生以下结果-
    
    24
    
    18
    
    17
    
    23
    
    28
    
  • 嵌套循环

    MATLAB允许在另一个循环中使用一个循环。以下部分显示了一些示例来说明这一概念。
    MATLAB中嵌套的for循环语句的语法如下-语法
    
    for m = 1:j
       for n = 1:k
          <statements>;
       end
    end
    
    MATLAB中嵌套while循环语句的语法如下-语法
    
    while <expression1>
       while <expression2>
          <statements>
       end
    end
    
    让我们使用嵌套的for循环显示从1到100的所有质数。创建一个脚本文件并键入以下代码-
    
    for i = 2:100
       for j = 2:100
          if(~mod(i,j)) 
             break; % if factor found, not prime
          end 
       end
       if(j > (i/j))
          fprintf('%d is prime\n', i);
       end
    end
    
    尝试一下
    运行文件时,它将产生以下结果-
    
    2 is prime
    3 is prime
    5 is prime
    7 is prime
    11 is prime
    13 is prime
    17 is prime
    19 is prime
    23 is prime
    29 is prime
    31 is prime
    37 is prime
    41 is prime
    43 is prime
    47 is prime
    53 is prime
    59 is prime
    61 is prime
    67 is prime
    71 is prime
    73 is prime
    79 is prime
    83 is prime
    89 is prime
    97 is prime
    
  • 循环控制语句

    循环控制语句从其正常顺序更改执行。当执行离开作用域时,在该作用域中创建的所有自动对象都将被销毁。MATLAB支持以下控制语句。
  • break 声明

    break语句终止for或while循环的执行。在break语句之后出现的循环中的语句不会执行。在嵌套循环中,中断仅从发生中断的循环退出。控制在该循环结束后传递给该语句。
    创建一个脚本文件并输入以下代码-
    
    a = 10;
    % while loop execution 
    while (a < 20 )
       fprintf('value of a: %d\n', a);
       a = a + 1;
          if( a > 15)
             % terminate the loop using break statement 
             break;
          end 
    end
    
    尝试一下
    运行文件时,它将产生以下结果-
    
    value of a: 10
    value of a: 11
    value of a: 12
    value of a: 13
    value of a: 14
    value of a: 15
    
  • continue 声明

    continue语句用于将控制传递给for或while循环的下一个迭代。MATLAB中的continue语句的工作方式与break语句类似。但是,“continue”不是强制终止,而是强制执行循环的下一次迭代,从而跳过两者之间的任何代码。
    创建一个脚本文件并输入以下代码-
    
    a = 9;
    %while loop execution 
    while a < 20
       a = a + 1; 
       if a == 15
          % skip the iteration 
          continue;
       end 
    fprintf('value of a: %d\n', a);
    end
    
    尝试一下
    运行文件时,它将产生以下结果-
    
    value of a: 10
    value of a: 11
    value of a: 12
    value of a: 13
    value of a: 14
    value of a: 16
    value of a: 17
    value of a: 18
    value of a: 19
    value of a: 20