首页 > 解决方案 > 如何使用带有 if 语句的 for 循环

问题描述

我是编程新手,在解决这个问题时遇到了问题:

clear all
close all
clc
x = [2 * rand(10)-1];
y = [2 * rand(10)-1];
p_i = sqrt(x.^2 + y.^2)
n = 0;
for k = 1:100
  if p_i <= 1
    n = n + 1
  end
end
n

它给了我答案n = 0。我的目的是计算 100 次中有多少次p_i小于 1。我有两个问题:如何解决这个问题?但更重要的是,MATLAB 是如何读取我的代码的?

标签: matlabfor-loopif-statement

解决方案


这取决于你的确切意图是什么。

rand(10)产生一个10x10随机数均匀分布在0和之间的矩阵1p_i矩阵也是如此10x10,当您进行比较时,p_i<=1您会得到另一个具有逻辑值的矩阵,您可以对其进行总结。

x = 2*rand(10)-1;
y = 2*rand(10)-1;
p_i = sqrt(x.^2 + y.^2);
n = sum(sum(p_i<=1))
n = sum(p_i(:)<=1) % from @XiangruiLi
n = sum(p_i<=1,'all') % from @CrisLuengo, requires MATLAB 2018b

或者,您可以使用向量而不是矩阵编写 is;

samples = 100;
x = 2*rand(samples,1)-1;
y = 2*rand(samples,1)-1;
p_i = sqrt(x.^2 + y.^2);
n = sum(p_i<=1)

第二个问题

for循环不起作用,因为您需要指定要查看的索引:

for k = 1:100
    if p_i(k) <= 1
        n = n + 1
    end
end

要使陈述p_i <= 1成立,矩阵的每个值都必须满足条件。


推荐阅读