물류지도의 이상한 매력


21

과제의 목적은 거의 플롯이다 트랙터물류 맵 의 파라미터의 함수로서 , R (또한 분기도 ), 또는 그것의 하위 영역. 그래프의 모양은 Wikipedia의 다음 이미지에서 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오

배경

물류지도 입력 취하는 수학적 함수 의 X (k)를 와 출력에 매핑 X K + 1 로 정의

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

여기서 r 은 맵 의 매개 변수 이며 [0, 4] 간격에 있다고 가정합니다.

주어 R [0,4], 그리고 초기 값 X 0 구간 [0,1]에서, 흥미 롭다 반복 적용 다수의 기능을위한 N 최종 값 생성의 반복 X N을 . 참고 X N은 반드시도 [0,1]에 존재할 것이다.

예를 들어, r = 3.2, N = 1000을 고려하십시오 . 초기 값 x 0 = 0.01은 x 1000 = 0.5130입니다. 들면 X 0 = 0.02 결과는 X 0 = 0.7995. 들면 어떤 다른 초기 값 X 0 최종 값 X (1000)가 매우 근접 0.5130 또는 0.7995 어느한다. 이것은 수평 위치 r = 3.2 에서 두 선의 높이로 그래프에 표시됩니다 .

이는 r = 3.2의 경우 각 시퀀스가 ​​두 값 중 하나로 수렴 한다는 것을 의미 하지는 않습니다 . 실제로 위에서 고려한 두 가지 초기 값의 경우 순서는 다음과 같습니다 (진동 동작에 유의).

             x 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 ...

무엇 사실은 충분히 큰위한이다 N 거의 모든 초기 값 X 0 , 용어 X N은 집합 {0.5130, 0.7995}의 요소들 중 하나에 근접 할 것이다. 이 세트 를이 특정 r유인 자라고 합니다 .

매개 변수 r 의 다른 값의 경우 , 트랙터 세트 또는 그 요소의 크기가 변경됩니다. 그래프는 각 r에 대한 유 인기의 요소를 표시합니다 .

특정에 대한 유인 (R)은 할 수 추정 에 의해

  1. 광범위한 초기 값 테스트 x 0 ;
  2. 시스템을 다수의 N 반복으로 진화시키는 것 ; 과
  3. 얻은 최종 값 x N을 기록 합니다.

도전

입력

  • N : 반복 횟수.

  • r 1 , r 2 s . 이들은 r 값의집합 R , 즉 R = { r 1 , r 1 + s , r 1 + 2 s , ..., r 2 }를 정의합니다.

순서

초기 값 x 0 의 세트 X 는 고정되어 있습니다 : X = {0.01, 0.02, ..., 0,99}. 선택적으로 0과 1이 X에 포함될 수도 있습니다 .

RR 과 각 X 0 에서 X 반복, 물류지도 N의 생산에 시간 X N을 . 얻은 튜플을 기록합니다 ( r , x N ).

산출

(각 튜플 플롯 R , X N A의 평면에서의 포인트와 같은) R 수평축과 같은 X N 세로축을 등. 출력은 그래픽이어야합니다 (ASCII 아트 아님).

추가 규칙

  • 표시된 절차는 필요한 결과를 정의하지만 시행되지는 않습니다. 동일한 ( r , x N ) 튜플 세트를 처리하는 다른 절차를 사용할 수 있습니다.
  • 평소처럼 입력이 유연합니다.
  • 부동 소수점 오류는 응답자에 대해 유지되지 않습니다.
  • 허용되는 형식으로 그래픽 출력이 필요합니다 . 특히 출력이 화면에 표시되거나 그래픽 파일이 생성되거나 RGB 값의 배열이 출력 될 수 있습니다. 파일이나 배열을 출력하는 경우 표시 될 때의 모습을 게시하십시오.
  • 그래픽은 벡터 또는 래스터 일 수 있습니다. 래스터 그래픽의 경우 이미지 크기는 400x400 픽셀 이상이어야합니다.
  • 각 점은 단일 픽셀로 표시되거나 한 픽셀의 크기를 가진 마크로 표시되어야합니다 (그렇지 않으면 그래프가 빨리 복잡해집니다).
  • 축 범위는 r (수평 축)의 경우 [0,4] 이고 x N (수직 축)의 경우 [0,1] 이어야합니다 . 또는 획득 된 모든 포인트를 포함하는 한 더 작을 수 있습니다.
  • 축 스케일은 임의적입니다. 특히, 스케일은 두 축에 대해 동일 할 필요는 없습니다.
  • 격자 선, 축 레이블, 색상 및 유사한 요소는 허용되지만 필수는 아닙니다.
  • 바이트 단위의 최단 코드가 이깁니다.

테스트 사례

고해상도 버전을 보려면 각 이미지를 클릭하십시오.

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 에게 유용한 의견을 보내 주셔서 감사합니다 .


파이썬 솔루션은 무엇입니까?!

@Lembik 저는 파이썬 (및 Matlab)에서 참조 구현을 가지고 있지만, 스스로 대답하고 싶지 않습니다
Luis Mendo

PPCG에 대한 자신의 질문에 대답 할 수 있습니다 (아마 놀랍게도).

@Lembik 알고 있지만 다른 사람들의 답변을 원합니다
Luis Mendo

답변:


13

MATL, 32 30 28 27 바이트

@Luis 덕분에 4 바이트 절약

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

입력 형식이고 r1, s, r2, 및N

MATL Online 에서 사용해보십시오

여기에 이미지 설명을 입력하십시오

설명

        % 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

Mathematica, 65 바이트

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

인수 N, r1, r2, s를 순서대로 취하는 순수 함수. Nest[r#(1-#)&,x,N]로지스틱 함수 반복 처리 r#(1-#)&의 합계 N시간부터 다음 x; 여기서 함수 ( #) 의 첫 번째 인수 N는 문제입니다. Point@{r,...}생산 PointGraphics플롯을 드릴 것입니다. Table[...,{x,0,1,.01},{r,##2}]이러한 점의 전체 무리 작성 x에서 실행 값 01단위로는 .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 바이트 ListPlot @ Table [{r, Nest [r # (1-#) &, x, #]}, {x, 0,1, .01}, {r, ## 2}] &
J42161217

표시된 절차가 필요한 결과를 정의하기위한 것이지만 절차 자체는 시행되지 않는다는 문제를 분명히했습니다. 동일한 결과를 제공하는 다른 절차를 사용할 수 있습니다. 죄송이 처음에는 분명하지 않다 경우
루이스 Mendo

문제 없습니다. 좋은 답변이 몇 가지 있습니다!
Greg Martin

1
그 -6 바이트를 사용하지 않을 것입니다. 이 솔루션에서 솜씨가 잘못되었다고 생각하십니까?
J42161217

오 당신의 답변은 귀하의 의견에 코드를 게시 한 것으로 생각합니다 ....
Greg Martin

5

Mathematica, 65 바이트

그렉 마틴의 트릭을 사용했는데 그래픽을 사용하지 않는 버전입니다

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

입력

[1000, 2.4, 4, 0.001]

산출

여기에 이미지 설명을 입력하십시오

입력

[2000, 3.4, 3.8, 0.0002]

산출

여기에 이미지 설명을 입력하십시오


1
초기 값 0 또는 1 (및 x = 0 행이 생성됨) 을 피하도록 선택하는 첫 번째 답변 :-)
Luis Mendo

코드가 실제로 지정된 절차를 따르지 않기 때문에 코드의 기능에 대한 설명을 추가해야합니다. OP는 정확한 결과가 대체 방법을 정당화할지 여부를 결정할 수 있습니다.
Greg Martin

지정된 절차가 시행되지 않습니다. 다른 방법으로도 동일한 결과를 제공하는 것은 허용됩니다 (명백합니다). 에 관계없이이의, 나는 설명 궁금 해요
루이스 Mendo

모든 r에 대해 플롯해야하는 점은 이미 모든 "Nest"에 있습니다. 이것은 원래 코드 이며이 다이어그램을 작성하는 데 대한 첫 번째 접근 방식이었습니다.
J42161217

@Luis Mendo 더 짧은 버전 (mathematica에 대한 레코드를 만듭니다)을 가지고 있습니다 .58 바이트이지만 입력은 3 개만 입력해야합니다 [N, r1, r2]. 시간이 걸리지 만 작동합니다 .Plot [Table [NestList [# ( 1-#) r & ,. 5, #] [[-i]], {i, 99}], {r, ## 2}] &
J42161217

2

TI 기본, 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

완전한 TI-Basic 프로그램으로 순서대로 입력 r1,r2,s,N한 다음 그래프 화면에 실시간으로 출력을 보여줍니다. 이것은 엄청나게 느린 경향이 있습니다 .

다음은 입력에 대해 약 2.5 시간 후에 생성 된 불완전한 샘플 출력입니다 3,4,0.01,100.

여기에 이미지 설명을 입력하십시오


당신은 *표지판이 필요하지 않습니다 .
lirtosiast

1

ProcessingJS, 125 (123) 120 바이트

3 바이트를 절약 한 Kritixi Lithos 에게 감사 합니다.

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하기 때문에 그것의 처리 JS
Kritixi LITHOS

그리고 x*=p*(1-x)이 될 수 있습니다x*=p-p*x
Kritixi LITHOS에게

에 대한 루프를 재 배열하여, 나는 수 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 바이트에서
Kritixi LITHOS

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)을 받고 새로운 창에 플롯을 출력 하는 익명 함수입니다 . 이 버전은 그놈 버전의 Genius에서 실행 해야합니다 .

샘플 출력


1

R, 159147 바이트

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.010.99

for-loop는 step과 함께 q시퀀스 a에 기능 을 적용합니다 . 값을 반환하는 대신 플롯에 점으로 추가합니다. 어트랙션 포인트가 하나의 값이면 모든 포인트가 겹쳐 져서 하나의 포인트로 표시됩니다. 포인트를 가능한 작게 만드는 데 필요한 추가입니다.bscex=.1

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.