matlab - 如何使用带有 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 是如何读取我的代码的?
解决方案
这取决于你的确切意图是什么。
rand(10)
产生一个10x10
随机数均匀分布在0
和之间的矩阵1
。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
或者,您可以使用向量而不是矩阵编写 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
成立,矩阵的每个值都必须满足条件。
推荐阅读
- django - 使用外键查询 Django 模型并获取登录用户
- terminal - 该程序不能从终端运行,但可以在 zerobrane 运行
- java - 将一个数组从函数指向另一个数组
- c - 从字符串中删除所有具有来自另一个字符串的字母的单词(1 个单词)
- python - 数据框列翻译
- video - 流式视频格式与内存视频格式之间的区别
- powerbi - DAX - ALLEXCEPT 与 ALL+VALUES
- pandas - 调用 pandas to_sql() 时抑制 SQL 语句的输出
- php - 如何在 MongoDB/PHP 中以最佳方式进行分组
- javascript - 从日期字符串以 UTC 正确计算日期时间