लॉजिस्टिक मैप का अजीब आकर्षण


21

चुनौती के प्रयोजन के लगभग साजिश है अट्रैक्टर की रसद नक्शा अपने पैरामीटर के एक समारोह के रूप में आर (भी बुलाया विभाजन आरेख ), या इसके बारे में एक उपक्षेत्र। ग्राफ की उपस्थिति निम्नलिखित छवि में विकिपीडिया से देखी जा सकती है:

यहाँ छवि विवरण दर्ज करें

पृष्ठभूमि

रसद नक्शा एक गणितीय समारोह है कि एक इनपुट लेता है एक्स कश्मीर और एक आउटपुट के लिए यह नक्शे एक्स k + 1 के रूप में परिभाषित

             x k + 1 = r x k (1− x k )

जहाँ r मानचित्र का पैरामीटर है, मान लिया गया है कि अंतराल में है [0, 4]।

यह देखते हुए आर [0,4] में, और एक प्रारंभिक मूल्य एक्स 0 अंतराल [0,1] में, यह दिलचस्प है बार-बार लागू एक बड़ी संख्या के लिए समारोह एन दोहराव हैं, उत्पादन के लिए एक अंतिम मूल्य x एन । ध्यान दें कि x N आवश्यक रूप से [0,1] में भी होगा।

एक उदाहरण के रूप में, आर = 3.2, एन = 1000 पर विचार करें। प्रारंभिक मूल्य x 0 = 0.01 x 1000 = 0.5130 देता है । के लिए एक्स 0 = 0.02 परिणाम है एक्स 0 = 0.7995। के लिए किसी भी अन्य प्रारंभिक मान x 0 अंतिम मान x 1000 अत्यंत या तो 0.5130 या 0.7995 के करीब हैं। इसे ग्राफ में क्षैतिज स्थिति r = 3.2 पर दो रेखाओं की ऊंचाई के रूप में देखा जाता है ।

इसका मतलब यह नहीं है कि आर = 3.2 के लिए प्रत्येक अनुक्रम उन दो मूल्यों में से एक में परिवर्तित होता है। वास्तव में, ऊपर दिए गए दो प्रारंभिक मूल्यों के लिए, अनुक्रम हैं (दोलन व्यवहार पर ध्यान दें):

             एक्स 0 = 0.01, ..., x 1000 = 0.5130, x 1001 = 0.7995, x 1002 = 0.5130, ...
             x 0 = 0.02, ..., x 1000 = 0.7995, x 1001 = 0.5130, x 1002 = 0.7995 , ...

क्या है सच है कि पर्याप्त रूप से बड़े के लिए है एन , और लगभग सभी प्रारंभिक मान के लिए एक्स 0 , अवधि x एन सेट {0.5130, 0.7995} के तत्वों में से एक के पास हो जाएगा। इस सेट को इस विशिष्ट आर के लिए आकर्षित करने वाला कहा जाता है ।

पैरामीटर के अन्य मूल्यों के लिए r atractor सेट, या उसके तत्वों का आकार, बदल जाएगा। ग्राफ प्रत्येक आर के लिए एलिमेंट में तत्वों को प्लॉट करता है ।

किसी विशिष्ट r के लिए आकर्षित करने वाले का अनुमान लगाया जा सकता है

  1. प्रारंभिक मानों की एक विस्तृत श्रृंखला का परीक्षण करना x 0 ;
  2. एक बड़ी संख्या के लिए प्रणाली Evolve दे एन दोहराव हैं; तथा
  3. प्राप्त किए गए अंतिम मान x N पर ध्यान देना ।

चुनौती

इनपुट

  • एन : पुनरावृत्तियों की संख्या।

  • आर 1 , आर 2 और एस । ये सेट को परिभाषित आर के मूल्यों के आर , अर्थात् आर = { आर 1 , आर 1 + रों , आर 1 + 2 रों , ..., आर 2 }।

प्रक्रिया

सेट एक्स प्रारंभिक मान की x 0 तय हो गई है: एक्स = {0.01, 0.02, ..., 0,99}। वैकल्पिक रूप से, 0 और 1 को X में भी शामिल किया जा सकता है ।

प्रत्येक के लिए आर में आर और प्रत्येक एक्स 0 में एक्स , पुनरावृति रसद नक्शा एन उपज बार x एन । प्राप्त ट्यूपल्स को रिकॉर्ड करें ( आर , एक्स एन )।

उत्पादन

प्रत्येक ट्यूपल ( r , x N ) को विमान के एक बिंदु के रूप में r के साथ क्षैतिज अक्ष और x N को ऊर्ध्वाधर अक्ष के रूप में प्लॉट करें । आउटपुट ग्राफिक होना चाहिए (एएससीआईआई कला नहीं)।

अतिरिक्त नियम

  • संकेतित प्रक्रिया आवश्यक परिणाम को परिभाषित करती है, लेकिन लागू नहीं होती है। कोई अन्य प्रक्रिया जो ( r , x N ) टुपल्स के समान सेट का उपयोग करती है, का उपयोग किया जा सकता है।
  • इनपुट हमेशा की तरह लचीला है।
  • फ़्लोटिंग पॉइंट त्रुटियाँ उत्तरदाता के विरुद्ध नहीं होंगी।
  • किसी भी स्वीकृत प्रारूप में ग्राफिक आउटपुट की आवश्यकता होती है । विशेष रूप से, आउटपुट स्क्रीन पर प्रदर्शित किया जा सकता है, या एक ग्राफिक्स फ़ाइल का उत्पादन किया जा सकता है, या आरजीबी मूल्यों की एक सरणी आउटपुट हो सकती है। यदि फ़ाइल या एरे को आउटपुट करते हैं, तो कृपया प्रदर्शित होने पर जैसा दिखता है उसका एक उदाहरण पोस्ट करें।
  • ग्राफिक्स वेक्टर या रेखापुंज हो सकते हैं। रेखापुंज ग्राफिक्स के लिए, छवि का आकार कम से कम 400 × 400 पिक्सेल होना चाहिए।
  • प्रत्येक बिंदु को एकल पिक्सेल के रूप में या एक पिक्सेल के क्रम के आकार के साथ एक निशान के रूप में दिखाया जाना चाहिए (अन्यथा ग्राफ जल्दी से अव्यवस्थित हो जाता है)।
  • एक्स एन (ऊर्ध्वाधर अक्ष) के लिए आर (क्षैतिज अक्ष) और [0,1] के लिए एक्सिस रेंज [0,4] होनी चाहिए ; या यह तब तक छोटा हो सकता है जब तक इसमें सभी प्राप्त अंक शामिल होते हैं।
  • धुरी तराजू मनमानी है। विशेष रूप से, दोनों अक्षों के लिए पैमाना समान नहीं होना चाहिए।
  • ग्रिड लाइनें, अक्ष लेबल, रंग और समान तत्व स्वीकार्य हैं, लेकिन आवश्यक नहीं हैं।
  • बाइट्स में सबसे छोटा कोड जीतता है।

परीक्षण के मामलों

उच्च-रिज़ॉल्यूशन संस्करण के लिए प्रत्येक छवि पर क्लिक करें।

N = 1000; r1 = 2.4; r2 = 4; s = 0.001;

यहाँ छवि विवरण दर्ज करें

N = 2000; r1 = 3.4; r2 = 3.8; s = 0.0002;

यहाँ छवि विवरण दर्ज करें

N = 10000; r1 = 3.56; r2 = 3.59; s = 0.00002;

यहाँ छवि विवरण दर्ज करें

अभिस्वीकृति

सैंडबॉक्स में चुनौती के समय उनकी सहायक टिप्पणियों के लिए @FryAmTheEggman और @AndrasDeak का धन्यवाद ।


क्या कोई अजगर समाधान ?!

@ लेम्बिक मैं पाइथन में एक संदर्भ कार्यान्वयन है (और मैटलैब में), लेकिन मैं खुद को जवाब नहीं देना चाहता
लुइस मेंडेन

आपको PPCG पर अपने स्वयं के प्रश्नों का उत्तर देने की अनुमति है (शायद आश्चर्यजनक रूप से)।

@ लेम्बिक मुझे पता है, लेकिन मेरे पास दूसरों के जवाब होंगे
लुइस मेंडेन

जवाबों:


13

MATL, 32 30 28 27 बाइट्स

4 बाइट्स @Luis की बदौलत बच गए

3$:0:.01:1!i:"tU-y*]'.'3$XG

इनपुट प्रारूप है r1, s, r2, औरN

इसे MATL ऑनलाइन पर आज़माएं

यहाँ छवि विवरण दर्ज करें

व्याख्या

        % Implicitly grab the first three inputs
3$:     % Take these three inputs and create the array [r1, r1+s, ...]
0:.01:1 % [0, 0.01, 0.02, ... 1]
!       % Transpose this array
i       % Implicitly grab the input, N
:"      % For each iteration
  tU    % Duplicate and square the X matrix
  -     % Subtract from the X matrix (X - X^2) == x * (1 - x)
  y     % Make a copy of R array
  *     % Multiply the R array by the (X - X^2) matrix to yield the new X matrix
]       % End of for loop
'.'    % Push the string literal '.' to the stack (specifies that we want
        % dots as markers)
3$XG    % Call the 3-input version of PLOT to create the dot plot

8

गणितज्ञ, 65 बाइट्स

Graphics@Table[Point@{r,Nest[r#(1-#)&,x,#]},{x,0,1,.01},{r,##2}]&

उस क्रम में तर्क एन, आर 1, आर 2, लेने वाले शुद्ध कार्य। Nest[r#(1-#)&,x,N]लॉजिस्टिक फ़ंक्शन को शुरू होने वाले r#(1-#)&कुल Nसमय में पुनरावृत्त करता है x; यहां फ़ंक्शन का पहला तर्क ( #) Nप्रश्न में है; कि साजिश करने के लिए खुश हो जाएगा Point@{r,...}पैदा करता है । इन बातों की एक पूरी गुच्छा, साथ बनाता है से चल रहा मूल्य के लिए की वृद्धि के साथ ; में अर्थ है मूल कार्य तर्क दूसरा एक से शुरू के सभी, और इतना फैलता करने के लिए जो सही ढंग से करने के लिए सीमा और वेतन वृद्धि सेट ।PointGraphicsTable[...,{x,0,1,.01},{r,##2}]x01.01##2{r,##2}{r,##2}{r,r1,r2,s}r

दूसरे परीक्षण मामले पर नमूना आउटपुट: इनपुट

Graphics@Table[Point@{r,Nest[r#(1-#)&,x,#]},{x,0,1,.01},{r,##2}]&[2000,3.4,3.8,0.0002]

ग्राफिक्स नीचे देता है।

यहाँ छवि विवरण दर्ज करें


1
59 बाइट्स लिस्टप्लॉट @ टेबल [{r, नेस्ट [r # (1 - #) &, x, #]}, {x, 0,1, .01}, {r, ## 2}] &
J42161217

मैंने चुनौती में स्पष्ट किया है कि संकेतित प्रक्रिया आवश्यक परिणाम को परिभाषित करने के लिए है, लेकिन यह प्रक्रिया स्वयं लागू नहीं है। आप किसी भी अन्य प्रक्रिया का उपयोग कर सकते हैं जो समान परिणाम देता है। खेद है कि अगर पहले स्पष्ट नहीं था
लुइस मेंडू

कोई समस्या नहीं है, हमारे पास कई अच्छे उत्तर हैं!
ग्रेग मार्टिन

1
क्या आप उन -6 बाइट्स का उपयोग नहीं करने जा रहे हैं। क्या आपको लगता है कि सोमथिंग इस समाधान के साथ गलत है?
J42161217

ओह, मुझे लगा कि आपका उत्तर आपकी टिप्पणी से कोड () का एक संस्करण था ....
ग्रेग मार्टिन

5

गणितज्ञ, 65 बाइट्स

मैंने ग्रेग मार्टिन की कुछ ट्रिक्स का उपयोग किया और ग्राफिक्स का उपयोग किए बिना यह मेरा संस्करण है

ListPlot@Table[{r,NestList[#(1-#)r&,.5,#][[-i]]},{i,99},{r,##2}]&

इनपुट

[१०००, २.४, ४, ०.००१]

उत्पादन

यहाँ छवि विवरण दर्ज करें

इनपुट

[2000, 3.4, 3.8, 0.0002]

उत्पादन

यहाँ छवि विवरण दर्ज करें


1
पहला उत्तर जो प्रारंभिक मानों से बचने के लिए चुनता है 0 या 1 (और x = 0 लाइन वे उत्पन्न करते हैं) :-)
लुइस मेंडो

आपको अपने कोड का क्या करना है, इसका स्पष्टीकरण जोड़ना चाहिए, क्योंकि यह वास्तव में निर्दिष्ट प्रक्रिया का पालन नहीं करता है। ओपी यह तय कर सकता है कि सटीक दिखने वाला परिणाम वैकल्पिक विधि को सही ठहराता है या नहीं।
ग्रेग मार्टिन

निर्दिष्ट प्रक्रिया लागू नहीं है। जो कुछ भी समान परिणाम देता है, किसी अन्य माध्यम से, मुझे अनुमति है (मैं स्पष्ट करूँगा कि)। इसके बावजूद, मैं स्पष्टीकरण देखने के लिए उत्सुक हूं
लुइस मेंडो

जिन बिंदुओं पर आपको प्रत्येक आर के लिए प्लॉट करने की आवश्यकता है, वे पहले से ही हर "नेस्ट" में मौजूद हैं। यह मूल कोड है और इस आरेख की साजिश रचने पर यह मेरा पहला दृष्टिकोण (कुछ समय पहले) था।
J42161217

@ लिसन मेन्डो मेरे पास एक भी छोटा संस्करण है (जो गणितज्ञ के लिए एक रिकॉर्ड बनाता है) .58 बाइट्स लेकिन आपको केवल 3 इनपुट दर्ज करना होगा [एन, आर 1, आर 2]। इसमें समय लगता है लेकिन यह काम करता है। पटल [टेबल [नेस्टलिस्ट] (#)। 1 - #) r।, 5, #] [[- i], {i, 99}], {r, ## 2}] &
J42161217

2

टीआई-बेसिक, 85 बाइट्स

Prompt P,Q,S,N
P→Xmin:Q→Xmax
0→Ymin:1→Ymax
For(W,.01,1,.01
For(R,P,Q,S
W→X
For(U,1,N
R*X*(1-X→X
End
Pt-On(R,X
End
End

एक पूरा टीआई-बेसिक प्रोग्राम जो ऑर्डर में इनपुट लेता है r1,r2,s,Nऔर फिर ग्राफ स्क्रीन पर वास्तविक समय में आउटपुट दिखाता है। ध्यान दें कि यह अविश्वसनीय रूप से धीमा हो जाता है

इनपुट के लिए लगभग 2.5 घंटे के बाद उत्पन्न एक अपूर्ण नमूना आउटपुट यहां दिया गया है 3,4,0.01,100:

यहाँ छवि विवरण दर्ज करें


आपको *संकेतों की आवश्यकता नहीं है ।
lirtosiast

1

प्रसंस्करणजैस, 125 123 120 बाइट्स

3 बाइट्स को बचाने के लिए कृतिका लिथोस को धन्यवाद ।

var f(n,q,r,s){size(4e3,1e3);for(i=0;i<1;i+=.01)for(p=q;p<=r;p+=s){x=i;for(j=0;j<n;j++)x*=p-p*x;point(p*1e3,1e3-x*1e3)}}

इसे ऑनलाइन आज़माएं! का उपयोग कर कॉल करेंf(N, r_1, r_2, s);


मुझे लगता है कि आप की जगह ले सकता voidके साथ varहै क्योंकि यह के प्रसंस्करण जे एस
Kritixi lithos

और x*=p*(1-x)बन सकते हैंx*=p-p*x
क्रिक्टी लिथोस

फॉर-लूप को पुनर्व्यवस्थित करने से, मुझे var f(n,q,r,s){size(4e3,1e3);for(i=0;i<1;i+=.01)for(p=q;x=i,p<=r;point(p*1e3,1e3-x*1e3),p+=s)for(j=0;j<n;j++)x*=p-p*x;}119 बाइट्स
क्रिति लिथोस

1

जीईएल , 158 बाइट्स

`(N,r,t,s)=(LinePlotWindow=[r,t,0,1];for i=r to t by s do(p=.;for w=0to 1by 0.01do(x=w;for a=0to N do(x=i*x*(1-x););p=[p;q=[i,x]];);LinePlotDrawPoints(p);););

यह सबसे छोटा नहीं हो सकता है, लेकिन यह वास्तविक समय में आकर्षित करता है, हालांकि यह विशाल आदानों के साथ अविश्वसनीय रूप से धीमा हो सकता है। वैसे भी, यह एक गुमनाम फ़ंक्शन है जो प्रारूप में इनपुट लेता है (N,r1,r2,s)और एक नई विंडो में प्लॉट को आउटपुट करता है। ध्यान दें कि यह जीनियस के GNOME संस्करण के साथ चलना चाहिए

नमूना उत्पादन


1

आर, 159 147 बाइट्स

pryr::f({plot(NA,xlim=c(a,b),ylim=0:1);q=function(r,n,x=1:99/100){for(i in 1:n)x=r*x*(1-x);x};for(i in seq(a,b,s))points(rep(i,99),q(i,n),cex=.1)})

जो फंक्शन को प्रोडक्ट करता है

function (a, b, n, s) 
{
    plot(NA, xlim = c(a, b), ylim = 0:1)
    q = function(r, n, x = 1:99/100) {
        for (i in 1:n) x = r * x * (1 - x)
        x
    }
    for (i in seq(a, b, s)) points(rep(i, 99), q(i, n), cex = 0.1)
}

plot(NA,...)एक खाली कैनवास बनाता है जिसके सही आयाम हैं। qसमारोह है कि पुनरावृत्ति करता है। यह मान लेता है r, और फिर के nबीच 0.01और सभी शुरुआती बिंदुओं के लिए पुनरावृत्तियों करता है 0.99। यह तब परिणामी वेक्टर लौटाता है।

के लिए लूप समारोह लागू होता है qअनुक्रम के aलिए bकदम के साथ s। मूल्यों को वापस करने के बजाय, यह उन्हें प्लॉट के बिंदुओं के रूप में जोड़ता है। यदि आकर्षण बिंदु एक मूल्य है, तो सभी बिंदु बस ओवरलैप होंगे और एक बिंदु के रूप में दिखाई देंगे। cex=.1अंकों को यथासंभव छोटा बनाने के लिए एक आवश्यक अतिरिक्त है।

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.