2013-10-03 3 views
0

У меня есть вектор в MATLAB, который представляет значения функции. Я планирую их, но хочу выделить те, которые находятся в определенном диапазоне. В частности, меня интересуют все точки со значением функции, близким к, но меньше, чем «v». То есть для значения «х», я хочу подчеркнуть этот момент, еслиПолучение подмножества вектора MATLAB

abs(x - v) < epsilon && x < v 

Если я хочу, чтобы выбрать все «х» точек таким образом, что

abs(x - v) < epsilon 

, что я попал на работу (я я не уверен, если это хорошая практика кодирования или нет)

inds = (abs(xs - v) < epsilon) ; 

, а затем построить хз против моих ув в осях с

plot(a, ys(inds), xs(inds), 'ks ') ; 

Этот подход больше не работает, если я пытаюсь сделать

inds = (abs(xs - v) < epsilon && xs < v) ; 

В этом случае я получаю следующее сообщение об ошибке, независимо от того, как я не устраивать скобки:

«операнды к || и & Операторы & должны быть конвертируемыми в логические скалярные значения. '

Я думаю, у меня есть два вопроса

1.) Почему подход не будет работать, если я пытаюсь использовать логический & &? Насколько я могу видеть, я использую выражения, которые могут быть преобразованы в логические скалярные значения.

2.) Является ли это хорошим способом выбрать подмножество точек в MATLAB?

Спасибо, Keeran

+1

К вопросу «почему»: && проводит оценку короткого замыкания (https://en.wikipedia.org/wiki/Short-circuit_evaluation), а & нет. – bdecaf

+0

Это имеет большой смысл. Хорошая информация, спасибо –

ответ

3

Это потому, что && только для скалярных значения. У вас есть векторы, не скаляры, так что вы должны использовать вместо &:

inds = (abs(xs-v) < epsilon & xs < v); 

Кроме этого, да, это правильный способ выбора подмножества точек.

Для справки обратите внимание, что & также работает для скаляров. Причиной наличия && является то, что он потенциально быстрее скаляров (см. doc).

+0

+1 Magic. Работает как шарм. Чувствую себя глупо, я не пробовал это раньше :) –

Смежные вопросы