2009-11-09 10 views
8

मेरे पास एक वेक्टर है जिसमें 2-डी स्पेस में कुछ बिंदु हैं। मैं MATLAB को इन बिंदुओं को प्रत्येक बिंदु से प्रत्येक बिंदु से खींची गई रेखाओं के साथ प्लॉट करना चाहता हूं। असल में, मैं जुड़े सभी शिखर के साथ एक ग्राफ चाहता हूँ। क्या आप साजिश के साथ ऐसा कर सकते हैं और यदि हां, तो कैसे?मैं वेक्टर में सभी बिंदुओं के बीच लाइनों को कैसे प्लॉट करूं?

उत्तर

7

एक समाधान फ़ंक्शन 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 

संपादित करें:

आप देख सकते हैं कि इसके बाद के संस्करण समाधान के लिए एक लाइन साजिश होगा प्रत्येक कनेक्शन, जिसका अर्थ यह है कि यह शून्य लंबाई कनेक्टिंग पॉइंट्स की लाइनों को प्लॉट करेगा और प्रत्येक कनेक्शन के लिए 2 लाइनों को प्लॉट करेगा (यानी बिंदु ए से बिंदु बी और बिंदु बी से बिंदु ए तक)।

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 

ऊपर समाधान के दोनों बनाने के नेत्रहीन समान भूखंडों: यहाँ एक और समाधान (कार्यों HANKEL और FIND का प्रयोग करके) कि निरर्थक या अनावश्यक लाइनों साजिश नहीं होगा

alt text

एक समय पर ध्यान दें ...

जिज्ञासा से, मैंने सोचा कि मैं अपना HANKEL समाधान और तुलना करूँगा यह Amro's बहुत terse NCHOOSEK समाधान के साथ। N = 10 के लिए, कोई सराहनीय अंतर नहीं था।

  • एन = 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. 
    
  • एन = 1000: हालांकि, के रूप में मैं बहुत बड़ा मूल्यों के N वृद्धि हुई मैं NCHOOSEK समाधान शुरू देखने के लिए बहुत धीमी गति से होने लगे

    >> 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 के लिए कोड नहीं देखा (MATLAB कमांड विंडो में type nchoosek टाइप करके)। preallocated (जैसा कि एमेरो ने टिप्पणी में बताया है) के बजाय लूप के अंदर एक चर नहीं उगाया जा रहा है, लेकिन एल्गोरिदम का उपयोग भी रिकर्सिव है, जिसका अर्थ है कि कई फ़ंक्शन कॉल किए जाते हैं। मैंने NCHOOSEK के लिए सहायता टेक्स्ट के अंत में यह लाइन भी देखी:

यह वाक्यविन्यास केवल उन स्थितियों के लिए व्यावहारिक है जहां एन लगभग 15 से कम है।

+0

वास्तव में अच्छी तरह काम किया, धन्यवाद! –

+1

आप परीक्षण भी जोड़ सकते हैं: 'एन = 1000; जोड़े = शून्य (2,499500); कश्मीर = 0; मैं = 1: एन के लिए, जे = i + 1: एन, के = के + 1; जोड़े (:, कश्मीर) = [j; मैं]; अंत, अंत 'गैर-वेक्टरीकृत संस्करण के साथ अंतर दिखाने के लिए (हैंकेल समाधान अभी भी तेज़ है!) – Amro

8

gnovice के उदाहरण पर बिल्डिंग, एक सरल सभी जोड़ों को पैदा करने में अधिक सहज तरीका nchoosek समारोह उपयोग कर रहा है:

%# random points 
N = 10; 
x = rand(1,N); 
y = rand(1,N); 

%# all possible combinations of the elements of [1:N] taken 2 at a time 
pairs = nchoosek(1:N, 2)'; 

%'# plot points and lines 
plot(x(pairs), y(pairs), '-bs', 'MarkerFaceColor','g', 'MarkerSize',10) 

screenshot

+0

+1: बहुत अच्छा! मुझे एहसास का एहसास नहीं हुआ कि इस तरह इस्तेमाल किया जा सकता था। – gnovice

+1

मुझे इस उत्कृष्ट "कॉम्बिनेटोरिक्स के परिचय" ब्लॉग पोस्ट में पढ़ने को याद आया: http://blinkdagger.com/matlab/matlab-a-introduction-to-combinatorics/ – Amro

+0

जिज्ञासा से, मैंने बड़े पैमाने पर हमारे समाधानों का कुछ समय किया 'n'। मैंने इसे अपने जवाब में जोड़ा, और मैं परिणामों से आश्चर्यचकित था। क्या आप एक ही बात देखते हैं? – gnovice

संबंधित मुद्दे