如何在if语句中使用for循环

时间:2018-09-20 17:49:24

标签: matlab for-loop if-statement

我是编程的新手,对此有疑问:

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。我的目的是让它计算p_i的100倍小于1的次数。我有两个问题: 我该如何解决这个问题?但是更重要的是MATLAB如何读取我的代码?

3 个答案:

答案 0 :(得分:3)

这取决于您的确切意图。

rand(10)产生矩阵10x10,其矩阵的随机数均匀分布在01之间。因此p_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

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

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为真,矩阵的每个值都必须满足条件。

答案 1 :(得分:3)

您的for循环正在运行100次。每次循环遇到p_i <= 1时,它会将语句评估为False,而不是进入if语句内部。该语句为False,因为p_i包含大于1的值,因此,整个矩阵不能被评估为小于1。

为更好地了解代码的运行方式,可以在运行脚本之前在p_i <= 1行创建一个断点。然后,一旦命中断点并暂停了代码,就可以逐步执行每一行代码。

答案 2 :(得分:2)

您必须选择p_i矩阵的第k_th个值。像这样:

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(k) <= 1
    n = n + 1;
  end
end
n