Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| 프로그래밍:julia [2026/03/24 16:13] – created admin | 프로그래밍:julia [2026/03/24 16:19] (current) – admin | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | =====julia 소개===== | + | ======소개====== |
| julia는 python의 편리함과 c의 속도를 두루 갖춘 언어이다. | julia는 python의 편리함과 c의 속도를 두루 갖춘 언어이다. | ||
| Line 7: | Line 7: | ||
| 대신 python 라이브러리를 그대로 불러와서 사용한다면, | 대신 python 라이브러리를 그대로 불러와서 사용한다면, | ||
| - | =====목차===== | + | ======목차====== |
| - | [[:1. julia 다운로드 및 julia 전용 에디터]] | + | =====설치===== |
| - | [[:2. 패키지 설치와 import 방법]] | + | julia는 https:// |
| - | [[:3. 간단한 선형대수]] | + | 설치시 기본 설치경로는 C:\Users\" |
| + | |||
| + | 1.1.0은 이 글 작성 기준으로 최신버전이며, | ||
| + | |||
| + | 참고 사항으로 AppData는 기본적으로 숨겨져 있는 폴더이므로, | ||
| + | |||
| + | =====전용 에디터===== | ||
| + | julia 코드 작성을 위해서는 atom을 설치하면 된다. | ||
| + | |||
| + | 정확히 얘기하면 julia 전용 에디터는 아니다. 범용으로도 쓸 수 있다. 다만, julia 코드 작성을 위한 툴을 제공하는 것이 현재는 atom 밖에 없을 뿐이다. | ||
| + | |||
| + | atom은 https:// | ||
| + | |||
| + | atom도 julia와 마찬가지로 AppData에 설치된다. 참고사항으로는 설치 시에 next 버튼을 누른다든지, | ||
| + | |||
| + | atom을 깔았다고 끝난 것이 아니다. | ||
| + | |||
| + | atom의 설치가 끝난 후, atom을 실행한 후, Settings 탭에서 Install 패널로 들어간다. | ||
| + | |||
| + | 그 후에, uber-juno 를 검색하여 설치해준다. | ||
| + | |||
| + | 설치가 끝나면 메뉴 항목에 julia가 보일 것이다. | ||
| + | |||
| + | 거기서 start julia를 클릭해주면 밑에 REPL 창에 julia가 실행된 모습이 보인다. | ||
| + | |||
| + | uber-juno의 기능인지 atom의 고유기능인지 모르지만(아마 uber-juno 패키지의 기능일 것이라 예상한다) 한 라인에 대고 shift+enter를 해주면 그 라인의 실행 결과를 편집창에서 즉각적으로 보여준다. | ||
| + | |||
| + | 코드 전체의 실행결과를 알고 싶다면, ctrl+shift+enter를 눌러주면 REPL창에 실행결과가 출력된다. | ||
| + | |||
| + | |||
| + | =====패키지 설치 방법===== | ||
| + | 패키지 설치는 | ||
| + | |||
| + | < | ||
| + | using Pkg | ||
| + | Pkg.add(" | ||
| + | </ | ||
| + | |||
| + | 을 편집창에서 타이핑한 후 실행해주면 된다. | ||
| + | |||
| + | 혹은 julia창에서 직접 | ||
| + | |||
| + | < | ||
| + | using Pkg | ||
| + | </ | ||
| + | < | ||
| + | Pkg.add(" | ||
| + | </ | ||
| + | |||
| + | 이런 식으로 한 줄씩 입력해도 된다. | ||
| + | |||
| + | =====패키지 사용===== | ||
| + | 위의 예에서 이미 예상했을 수도 있지만, 받은 패키지는 using 으로 사용할 수 있다. | ||
| + | |||
| + | < | ||
| + | using 패키지명 | ||
| + | </ | ||
| + | |||
| + | |||
| + | =====예시===== | ||
| + | 수치해석으로 근을 구하는 패키지 중에 NLsolve 라는 패키지가 있다. | ||
| + | |||
| + | 이를 사용하기 위해서는 우선 | ||
| + | |||
| + | <Code: Julia> | ||
| + | using Pkg | ||
| + | Pkg.add(" | ||
| + | </ | ||
| + | 로 패키지를 받아준 후 | ||
| + | |||
| + | <Code: Julia> | ||
| + | using NLsolve | ||
| + | </ | ||
| + | |||
| + | 라고 해주면 된다. | ||
| + | |||
| + | using 대신 import를 써도 무방하지만, | ||
| + | |||
| + | 다만 패키지를 만든 사람이 패키지명 없이 그 함수를 사용할 수 있게끔 만들어야 한다. | ||
| + | |||
| + | 만약 패키지명 없이 사용할 수 없도록 만들어져 있다면, C: | ||
| + | |||
| + | < | ||
| + | using Pkg | ||
| + | Pkg.add(" | ||
| + | </ | ||
| + | |||
| + | 선형대수 | ||
| + | |||
| + | < | ||
| + | using LinearAlgebra | ||
| + | |||
| + | A = [1 2; 3 4]; | ||
| + | lambda, vec = eigen(A); | ||
| + | print(lambda) | ||
| + | print(vec) | ||
| + | </ | ||
| + | $$ | ||
| + | A = \begin{pmatrix} | ||
| + | 1 & 2\\ | ||
| + | 3 & 4\\ | ||
| + | \end{pmatrix} | ||
| + | $$ | ||
| + | 를 만든 후 eigen() 함수로 고유값과 고유벡터를 구하고 각각을 출력하는 코드이다. | ||
| + | |||
| + | < | ||
| + | A = [1 2; 3 4]; | ||
| + | </ | ||
| + | 는 | ||
| + | < | ||
| + | A = [1 2 | ||
| + | 3 4]; | ||
| + | </ | ||
| + | 로 해도 똑같은 결과를 얻는다. | ||
| + | |||
| + | 세미콜론(; | ||
| + | |||
| + | 고유 벡터만을 구하고 싶다면 eigvecs() 함수를, 고유값만을 얻고 싶다면 eigvals() 함수를 사용하면 된다. | ||
| + | 첫번째 고유벡터만을 얻고 싶다면 eigvecs(A)[:, | ||
| + | 왼쪽 고유 벡터를 얻고 싶다면 inv(eigvecs(A))를 하면 된다. | ||
| + | |||
| + | 행렬 곱의 경우 | ||
| + | < | ||
| + | A = [1 2; 3 4]; | ||
| + | B = [2 3; 4 5]; | ||
| + | M = A*B | ||
| + | </ | ||
| + | 하면 | ||
| + | $$\begin{pmatrix} | ||
| + | 1 & 2\\ | ||
| + | 3 & 4 | ||
| + | \end{pmatrix} | ||
| + | \begin{pmatrix} | ||
| + | 2 & 3\\ | ||
| + | 4 & 5 | ||
| + | \end{pmatrix} | ||
| + | = | ||
| + | \begin{pmatrix} | ||
| + | 10 & 13\\ | ||
| + | 22 & 29 | ||
| + | \end{pmatrix} | ||
| + | $$ | ||
| + | 로 일반적인 행렬곱의 결과가 나온다. | ||
| + | |||
| + | 전치(Transpose)는 A' 으로 쓴다. | ||
| + | |||
| + | |||
| + | 무작위 추출의 경우 | ||
| + | < | ||
| + | using Pkg | ||
| + | Pkg.add(" | ||
| + | </ | ||
| + | |||
| + | 로 StatsBase 패키지를 설치한 후 using을 해주어야 한다. | ||
| + | |||
| + | < | ||
| + | using StatsBase | ||
| + | |||
| + | x = 1:10; | ||
| + | sample(x) | ||
| + | </ | ||
| + | |||
| + | 하면 1부터 10까지 공차가 1인 등차수열이 x에 들어가고 | ||
| + | sample(x)를 하면 x의 요소를 균일한 가중치로 무작위 복원 추출을 한다. | ||
| + | |||
| + | 만약 가중 복원 추출을 원하면 | ||
| + | < | ||
| + | using StatsBase | ||
| + | |||
| + | x = 1:10; | ||
| + | weights = rand(10); # [0, 1) 의 범위에서 난수 10개 생성 후 1차원 배열로 만듦 | ||
| + | sample(x, Weights(weights)) | ||
| + | </ | ||
| + | |||
| + | 이렇게 코드를 짜면 된다. | ||
| + | |||
| + | 여러 개의 표본을 균일한 가중치로 뽑고 싶으면 | ||
| + | < | ||
| + | using StatsBase | ||
| + | x = 1:10 | ||
| + | sample(x, | ||
| + | </ | ||
| + | 으로 n에 원하는 숫자를 넣으면 된다. | ||
| + | |||
| + | 비균일 가중치로 여러개를 뽑고 싶다면 | ||
| + | < | ||
| + | using StatsBase | ||
| + | |||
| + | x = 1:10; | ||
| + | weights = rand(10); # [0, 1) 의 범위에서 난수 10개 생성 후 1차원 배열로 만듦 | ||
| + | sample(x, Weights(weights), | ||
| + | </ | ||
| + | |||
| + | 을 하면 된다. | ||
| + | |||
| + | 마지막으로 비복원 추출을 원하면 | ||
| + | < | ||
| + | using StatsBase | ||
| + | |||
| + | x = 1:10; | ||
| + | weights = rand(10); # [0, 1) 의 범위에서 난수 10개 생성 후 1차원 배열로 만듦 | ||
| + | sample(x, replace = false) | ||
| + | </ | ||
| + | 이렇게 replace = false 를 넣어주면 된다. | ||
| + | |||
| + | |||
| + | ======참조====== | ||
| + | * https:// | ||
| - | [[:4. 주어진 배열에서 무작위 추출]] | ||