Одним из решений является создание набора индексов для каждой комбинации точек с использованием функции MESHGRID . Затем вы можете построить каждую линию с помощью функции LINE (которая отображает одну строку на столбец данных, которые ей даны):
N = 10; %# Number of points
x = rand(1,N); %# A set of random x values
y = rand(1,N); %# A set of random y values
[I,J] = meshgrid(1:N); %# Create all the combinations of indices
index = [I(:) J(:)].'; %'# Reshape the indices
line(x(index),y(index),'Color','k'); %# Plot the lines
hold on
plot(x,y,'r*'); %# Plot the points
EDIT:
Вы можете заметить, что вышеприведенное решение построит линию для каждого соединения, что означает, что оно построит линии нулевой длины, соединяющих точки с собой, и построит 2 линии для каждого соединения (то есть из точки A в точку B и из точки B в точку A). Вот еще одно решение (с использованием функций HANKEL и FIND ), которое не будет отображать лишние или ненужные линии:
N = 10; %# Number of points
x = rand(1,N); %# A set of random x values
y = rand(1,N); %# A set of random y values
[r,c,v] = find(hankel(2:N)); %# Create unique combinations of indices
index = [v c].'; %'# Reshape the indices
line(x(index),y(index),'Color','k'); %# Plot the lines
hold on
plot(x,y,'r*'); %# Plot the points
Оба вышеуказанных решения создают визуально идентичные графики:
![alt text](https://i37.photobucket.com/albums/e77/kpeaton/example_network.jpg)
Примечание о времени ...
Из любопытства я подумал, что я выберу время для своего HANKEL решения и сравню его с Amro очень кратким NCHOOSEK . Для N = 10
заметной разницы не было. Однако, когда я увеличил N
до гораздо больших значений, я начал видеть, что решение NCHOOSEK начинает становиться очень медленным:
N = 200
>> tic; [r,c,v] = find(hankel(2:N)); index = [v c].'; toc; %'
Elapsed time is 0.009747 seconds.
>> tic; pairs = nchoosek(1:N,2).'; toc; %'
Elapsed time is 0.063982 seconds.
N = 1000
>> tic; [r,c,v] = find(hankel(2:N)); index = [v c].'; toc; %'
Elapsed time is 0.175601 seconds.
>> tic; pairs = nchoosek(1:N,2).'; toc; %'
Elapsed time is 12.523955 seconds.
Я был немного удивлен, пока не посмотрел код для NCHOOSEK (набрав type nchoosek
в командном окне MATLAB). Мало того, что переменная растет внутри цикла вместо того, чтобы быть предварительно выделенной (как отметил Амро в комментарии), но используемый алгоритм также рекурсивный , что означает, что многие вызовы функций сделал. Я также заметил эту строку в конце текста справки для NCHOOSEK:
Этот синтаксис полезен только для ситуаций, когда N меньше, чем 15.