본문바로가기
[코딩수학] 코딩으로 '프랙털' 정복하기
수학동아 2019.07.03 17:13

 

코딩 수학 7번째 시간입니다. 다들 코딩을 이용해 수학 문제를 효율적으로 풀고 계신가요? 간단한 수학 문제는 손으로도 풀고 코딩으로도 풀 수 있지만, 실생활 문제나 어렵고 복잡한 함수가 포함된 수학 문제는 손으로 풀기 어려운 경우가 많아요. 코딩을 활용하면 쉽게 해결할 수 있으니 열심히 익히고 활용해 보자고요! 

코딩 명령어를 익힌 뒤엔 해당 코딩 명령어로 풀 수 있는 수학 문제를 찾아 댓글로 달고 친구들과 토론해 보세요.

 

 

 

 

난수와 조건문으로 만드는 프랙털

 

 

이번에 코딩으로 정복해 볼 수학 개념은 ‘프랙털’이에요. 프랙털은 고사리 잎처럼 전체와 부분이 닮은 모양으로, 단순한 구조가 되풀이해 나타나면서 복잡한 전체 구조를 만들어요. 수학에서는 이렇게 일부분의 모양이나 특징이 전체와 비슷할 때 ‘자기유사성’이 있다고 해요.

 

프랙털이라는 말을 처음 만든 사람은 수학, 정보이론, 경제학, 유체역학 등을 연구한 프랑스 수학자 브누아 만델브로예요. 만델브로는 해안선의 길이에 관해 연구하던 중 프랙털을 발견했어요. 해안선의 길이를 큰 자로 뭉뚱그려 잴 때와 작은 자로 세세하게 쟀을 때 그 길이는 다르지만, 자의 자취를 이어보면 모양이 비슷했던 거지요. 1967년 과학 학술지 ‘사이언스’에 프랙털을 소개하면서 프랙털 기하학이라는 새로운 수학 분야가 탄생했지요.

 

 

브누아 만델브로(1924~2010)와 고사리 잎

 

 

나무 뿌리와 고사리 잎 그리고 번개가 뻗어나가는 모습 등 프랙털은 우리 주변에서 흔히 찾을 수 있고, 다양한 분야에서 활용합니다. 수학을 비롯해 경제학, 컴퓨터과학, 인공지능 분야뿐 아니라 음악, 디자인 같은 예술 분야에서도 프랙털이 만드는 묘한 기하학적 무늬를 사용합니다. 영화 앤트맨과 닥터 스트레인지에 등장한 시공간의 모습도 프랙털을 이용해 만든 거예요.

 

손으로 그리거나 모양을 이어붙이면 쉽게 프랙털을 만들 수 있지만, 프랙털을 수식으로 나타내려면 보통 아핀 변환이라는 복잡한 과정을 거쳐야 해요. 그렇다고 방법이 없는 건 아닙니다. 카오스 이론_불규칙적으로 보이지만, 질서와 규칙성을 지니고 있는 현상을 설명하는 이론에 따르면 초기 조건에 민감하지만, 결과값이 수렴성을 보이는 수식은 그래프가 복잡해보여도 그 속에 규칙성(프랙털)이 숨어있거든요. 

 

이번 시간에는 난수를 만드는 코딩 명령어와 조건문을 이용해 대표적인 프랙털 모양인 고사리 잎을 그려보도록 해요!

 

 

 

.

.

.

 

.

 

코 딩 타 임

 

 

프랙털을 그리는 코딩 명령어는 다음과 같다. 코딩창에 아래 명령어를 입력해 고사리 잎(프랙털)을 그려보자.

 

 

 

 

0단계 기초 익히기

 

난수 만들기

RR.random_element (시작 수, 마지막 수)은 시작 수와 마지막 수 사이에 있는 정수 중 하나를 무작위로 출력한다. Evaluate 버튼을 누를 때마다 다른 값이 나온다.

r=RR.random_element (시작 수, 마지막 수)을 입력해 r을 시작 수와 마지막 수 사이에 있는 정수를 나타내는 변수로 지정하자.

 

 

조건문 만들기

if  조건1:명령1은 조건1을 만족하면 명령1을 실행한다. 예를 들어 r이 10보다 작을 때 r2을 출력하려면 if r < 10:r^2을 입력한다.

 

다음 줄에 elif 조건2:명령2를 입력하면 조건1에 해당하지 않고 조건2에 해당하면 명령2를 실행한다.

 

❸ 다음 줄에 else:명령3은 앞에 나온 조건에 모두 해당하지 않을 때 명령3을 실행한다.

 

 

그래프 그리기

초기값.append(변수)는 조건문으로 만든 값을 모아 하나의 자료로 만드는 명령어다. 2개 이상의 값을 만드는 경우 초기값1.append(변수1);초기값2.append(변수2)처럼 ;으로 연결해 입력한다. 

 

scatter_plot([(자료1, 자료2)],edgecolor='색1',facecolor='색2', marker = '.')는 ❶에서 만든 자료를 좌표평면에 순서쌍으로 표시해 그래프를 그리는 명령어다. edgecolor는 점의 테두리 색, facecolor는 점 안을 채우는 색이다. marker는 점의 모양으로 + 또는 *를 입력해도 된다.    

 

 

 

 

 

1단계 난수 만들기

 

r을 0과 100 사이의 수 중 하나를 출력하는 변수로 지정한다. 

 

 

 

 

 

2단계 조건문 입력하기 & 그래프 그리기

 

① X, Y의 초기값을 모두 0으로 지정하고, for n in range(10000):를 입력해 좌표평면에 찍을 점의 수를 입력한다. r의 범위에 따라 아래처럼 조건문과 실행문을 입력한다. 

 

② 조건문으로 만든 값을 자료로 만들고, 이 자료를 이용해 그래프를 그린다.

 

 

 

 

도전 문제 위 고사리 잎을 나타내는 수식은 영국 수학자 마이클 반즐리가 발견했다. 조건의 수식과 그래프의 색을 바꿔 새로운 프랙털 그림을 찾아보자.

 

 

 

-끝-

 

 

 

 

  •  
    이용현 Lv.1 2019.07.04 21:38

    프랙탈 이론을 쉽게 풀어서 쓴 예시와 코딩을 통해 설명해주셔서 잘 이해가 된 것 같습니다.
    또한 난수생성이나 조건문 설명을 잘 해주신 것 같습니다.

    댓글 작성하기 좋아요0 댓글수0
  •  
    MMCCM Lv.1 2019.07.04 21:54

    코딩이 조금 어렵긴 하지만, 잘 설명되어있어서 많이 이해했습니다. ㅎㅎ

    댓글 작성하기 좋아요0 댓글수0
  •  
    je Lv.1 2019.07.05 02:26

    프랙털이라는 개념을 알기쉽게 설명해주셔서 참 재미있게 읽었습니다^^

    댓글 작성하기 좋아요0 댓글수0
  •  
    집돌이 페렐만 Lv.1 2019.07.12 21:33

    위에 0단계 기초익히기부분에 난수 만들기에서 2번 문법 '.'이 안들어갔네요.

    RR.random_element 

    댓글 작성하기 좋아요0 댓글수1
    •  
      킬러퀸 Lv.4 2019.07.13 14:25

      헉~. 미안해요. 오타 수정했습니다.

      매의 눈!yesyesyes

       

       

      좋아요0
  •  
    세일미뷔 Lv.3 2019.09.18 15:38
    확인요청중

    이건 댓글이다

    댓글 작성하기 좋아요0 댓글수0
  •  
    세일미뷔 Lv.3 2019.09.18 15:38 비밀댓글
    확인요청중
    비밀 댓글이 등록 되었습니다.
    댓글 작성하기 댓글수3
    •  
      세일미뷔 Lv.3 2019.09.18 15:38

      이건 대댓이자 정답확인요청이다

      좋아요0
    •  
      세일미뷔 Lv.3 2019.09.18 15:39 비밀댓글
      비밀 댓글이 등록 되었습니다!
    •  
      세일미뷔 Lv.3 2019.09.18 15:46

      정답확인

      좋아요0
  • 폴리매스 문제는 2019년도 정부의 재원으로 한국과학창의재단의 지원을 받아 수행된 성과물입니다.

  • ☎문의 02-6749-3911