Как использовать цикл for с оператором if - PullRequest
0 голосов
/ 20 сентября 2018

Я новичок в программировании и у меня проблема с выяснением этого:

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 читает мой код?

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Вы должны выбрать значение k_th матрицы p_i.Примерно так:

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
0 голосов
/ 20 сентября 2018

Ваш цикл for работает 100 раз.Каждый раз, когда цикл встречает p_i <= 1, он оценивает оператор как False и не входит в оператор if.Это утверждение False, потому что p_i содержит значения больше 1, и, следовательно, матрица в целом не может быть оценена как значение меньше 1.

Чтобы лучше понять, как работает ваш код,Вы можете создать точку останова в строке p_i <= 1 перед запуском скрипта.Затем, когда ваша точка останова достигнута и ваш код приостановлен, вы можете пошагово проходить каждую строку кода.

0 голосов
/ 20 сентября 2018

Это зависит от ваших точных намерений.

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

В качестве альтернативы вы можете написать с векторомвместо матрицы;

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 было истинным, каждое из значений матрицы должно удовлетворять условию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...