Создание массива одного значения - PullRequest
3 голосов
/ 27 августа 2010

Я использую matlab и хочу проверить, равен ли вектор столбца другому с помощью 3dp, чтобы сделать это, я пытаюсь создать массив, полный 0,001, и проверяю, больше или равен он.Есть ли более простой способ, чем цикл for для создания этого массива или нет?

Ответы [ 4 ]

10 голосов
/ 27 августа 2010

Есть ли более простой способ, чем цикл for, для создания этого массива или нет?

Да, используйте

ones(size, 1) * myValue

Например

>> ones(5,1)*123

ans =

   123
   123
   123
   123
   123
4 голосов
/ 27 августа 2010

Итак, дайте мне знать, если это правильно.

У вас есть 2 вектора, a и b, каждый с N элементами.Вы хотите проверить, для каждого i<=N, abs(a(i)-b(i)) <= 0.001.

Если это правильно, вы хотите:

vector_match = all(abs(a-b) <= 0.001);

vector_match - логическое значение.

1 голос
/ 27 августа 2010

Пример:

a = rand(1000,1);
b = rand(1000,1);

idx = ( abs(a-b) < 0.001 );
[a(idx) b(idx)]

» ans =
       0.2377      0.23804
       0.0563     0.056611
      0.01122     0.011637
        0.676       0.6765
      0.61372      0.61274
      0.87062      0.87125
0 голосов
/ 27 августа 2010

Вы можете рассмотреть команду 'find', например:

a = [ 0.005, -0.003 ];
x = find(a > 0.001);

FWIW, сравнение чисел в MATLAB было абсолютным кошмаром, но я также только новичок в этом.Дело в том, что у вас могут возникнуть проблемы сравнения с плавающей точкой, когда вы сравниваете, так что имейте это в виду, когда пытаетесь что-то предпринять (и кто-то, пожалуйста, исправьте меня, если я ошибаюсь в этом или есть прекрасный обходной путь).

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