[Julia] 룬게 쿠타 방법의 구현 - Python과의 비교 -
전치
이전에 파이썬으로 만든 룬게 쿠타법의 프로그램을 Julia에서도 써 보았습니다. 쓰기는 Python과 비슷하지만 브로드 캐스트 구문은 numpy와 같은 라이브러리가 없어도 간편하고 빠른 행렬 계산을 할 수있는 등 코드가 Python보다 계산을 향하고있는 것 같습니다. 그건 그렇고, Julia는 Version 1.2.0입니다.
룽게쿠타법에 대해서
이전에 정리했으므로, 아래 URL을 참조하십시오.
htps : // 이 m / 흔들림 0010 / ms / b97 에어 313 에 d1 에 c0c 베아 61
Julia의 룬게 - 쿠타 방법 프로그램
프로그램은 다음과 같이 되었습니다. 파이썬과 비교해 보면 거의 같은 방식으로 제작할 수 있다는 것을 알 수 있습니다. 다른 점은 Python에서는 numpy 라이브러리의 zeros()를 사용했지만 Julia에서는 원래 구현된 zeros()를 사용하고 있습니다. 또한 Julia 목록의 첨자는 0이 아닌 1 시작이라는 점에 유의해야합니다.
#時間間隔h、時刻t、その時のyの値、標準形の右辺fを与えることで
#時刻t+1の値y+1のリストを返すルンゲクッタ法のアルゴリズム
function rk2(t,y,h)
k1 = h*f(t,y)
k2 = h*f(t+h/2,y+k1/2)
y = y + k2
return y
end
#初期時刻tini、終了時刻tlast、分割点数interval、初期条件list_yiniを与えると
#時刻のリストlist_t、ルンゲクッタ法の解のリストlist_yを返す
function rungekutta2(tini,tlast,interval,list_yini)
#時間間隔hの計算
h = (tlast-tini)/interval
#初期条件の大きさの確認
size = length(list_yini)
#list_t, list_yの入れ物を作製
list_t = zeros(interval+1)
list_y = zeros(interval+1,size)
#初期条件の格納
list_t[1] = tini
list_y[1,1:size] = list_yini
#ルンゲクッタ法で随時計算し結果をlist_t, list_yに格納
for i in 2:interval+1
list_y[i,1:size] = rk2(list_t[i-1],list_y[i-1,1:size],h)
list_t[i] = list_t[i-1]+h
end
return list_t,list_y
end
룬게 - 쿠타 방법 프로그램 테스트
이쪽도 이전과 같이, 조화 진동자의 운동 방정식을 사용해 확인합니다. 조화 진동자의 운동 방정식을 표준형을 사용하여 프로그램에 떨어뜨리면 다음과 같이 되었습니다. 여기서 Julia의 특징은 "pi"나 "π"라는 문자열이 원주율을 나타내고, 곱 연산자 "*"를 생략하는 것도 가능하다는 것입니까? 그 때문에, 보다 수식에 가까운 코드를 쓸 수도 있을 것 같습니다.
km = 4pi^2
function f(t,y)
freturn = [y[2], -km*y[1]]
end
음, 시간은 0~1, 분할 점수를 100, 초기 위치를 0, 초속을 1로 계산을 실행해 봅니다.
list_t1,list_y1 = rungekutta2(0,1,100,[0,1]);
결과를 그림으로 플롯하면 다음과 같은 그림이 출력되었습니다. 오렌지색이 속도, 청색이 위치를 나타냅니다. 또, 선이 계산에 의한 것으로, 닷은 이론적인 해를 플롯한 것입니다. 계산 결과와 이론적인 해가 잘 일치하는 것을 알 수 있습니다. 또한 실제로 결과를 비교해도 1E-3 정도까지 일치하고 있는 것을 알았습니다. 파이썬에서의 출력과 같은 정도의 정밀도입니다.
요약
Python으로 제작한 룽게 쿠타법의 프로그램을 Julia로 재작성해 보았습니다. 쓰기는 비슷하지만 줄리아가 계산을 향한 제작이라고 생각했습니다. 뭔가 실수가있는 것 같으면 가르쳐 주시면 감사하겠습니다.
Reference
이 문제에 관하여([Julia] 룬게 쿠타 방법의 구현 - Python과의 비교 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/guraragu0010/items/5e202b1e84170d8c1057
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이전에 정리했으므로, 아래 URL을 참조하십시오.
htps : // 이 m / 흔들림 0010 / ms / b97 에어 313 에 d1 에 c0c 베아 61
Julia의 룬게 - 쿠타 방법 프로그램
프로그램은 다음과 같이 되었습니다. 파이썬과 비교해 보면 거의 같은 방식으로 제작할 수 있다는 것을 알 수 있습니다. 다른 점은 Python에서는 numpy 라이브러리의 zeros()를 사용했지만 Julia에서는 원래 구현된 zeros()를 사용하고 있습니다. 또한 Julia 목록의 첨자는 0이 아닌 1 시작이라는 점에 유의해야합니다.
#時間間隔h、時刻t、その時のyの値、標準形の右辺fを与えることで
#時刻t+1の値y+1のリストを返すルンゲクッタ法のアルゴリズム
function rk2(t,y,h)
k1 = h*f(t,y)
k2 = h*f(t+h/2,y+k1/2)
y = y + k2
return y
end
#初期時刻tini、終了時刻tlast、分割点数interval、初期条件list_yiniを与えると
#時刻のリストlist_t、ルンゲクッタ法の解のリストlist_yを返す
function rungekutta2(tini,tlast,interval,list_yini)
#時間間隔hの計算
h = (tlast-tini)/interval
#初期条件の大きさの確認
size = length(list_yini)
#list_t, list_yの入れ物を作製
list_t = zeros(interval+1)
list_y = zeros(interval+1,size)
#初期条件の格納
list_t[1] = tini
list_y[1,1:size] = list_yini
#ルンゲクッタ法で随時計算し結果をlist_t, list_yに格納
for i in 2:interval+1
list_y[i,1:size] = rk2(list_t[i-1],list_y[i-1,1:size],h)
list_t[i] = list_t[i-1]+h
end
return list_t,list_y
end
룬게 - 쿠타 방법 프로그램 테스트
이쪽도 이전과 같이, 조화 진동자의 운동 방정식을 사용해 확인합니다. 조화 진동자의 운동 방정식을 표준형을 사용하여 프로그램에 떨어뜨리면 다음과 같이 되었습니다. 여기서 Julia의 특징은 "pi"나 "π"라는 문자열이 원주율을 나타내고, 곱 연산자 "*"를 생략하는 것도 가능하다는 것입니까? 그 때문에, 보다 수식에 가까운 코드를 쓸 수도 있을 것 같습니다.
km = 4pi^2
function f(t,y)
freturn = [y[2], -km*y[1]]
end
음, 시간은 0~1, 분할 점수를 100, 초기 위치를 0, 초속을 1로 계산을 실행해 봅니다.
list_t1,list_y1 = rungekutta2(0,1,100,[0,1]);
결과를 그림으로 플롯하면 다음과 같은 그림이 출력되었습니다. 오렌지색이 속도, 청색이 위치를 나타냅니다. 또, 선이 계산에 의한 것으로, 닷은 이론적인 해를 플롯한 것입니다. 계산 결과와 이론적인 해가 잘 일치하는 것을 알 수 있습니다. 또한 실제로 결과를 비교해도 1E-3 정도까지 일치하고 있는 것을 알았습니다. 파이썬에서의 출력과 같은 정도의 정밀도입니다.
요약
Python으로 제작한 룽게 쿠타법의 프로그램을 Julia로 재작성해 보았습니다. 쓰기는 비슷하지만 줄리아가 계산을 향한 제작이라고 생각했습니다. 뭔가 실수가있는 것 같으면 가르쳐 주시면 감사하겠습니다.
Reference
이 문제에 관하여([Julia] 룬게 쿠타 방법의 구현 - Python과의 비교 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/guraragu0010/items/5e202b1e84170d8c1057
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#時間間隔h、時刻t、その時のyの値、標準形の右辺fを与えることで
#時刻t+1の値y+1のリストを返すルンゲクッタ法のアルゴリズム
function rk2(t,y,h)
k1 = h*f(t,y)
k2 = h*f(t+h/2,y+k1/2)
y = y + k2
return y
end
#初期時刻tini、終了時刻tlast、分割点数interval、初期条件list_yiniを与えると
#時刻のリストlist_t、ルンゲクッタ法の解のリストlist_yを返す
function rungekutta2(tini,tlast,interval,list_yini)
#時間間隔hの計算
h = (tlast-tini)/interval
#初期条件の大きさの確認
size = length(list_yini)
#list_t, list_yの入れ物を作製
list_t = zeros(interval+1)
list_y = zeros(interval+1,size)
#初期条件の格納
list_t[1] = tini
list_y[1,1:size] = list_yini
#ルンゲクッタ法で随時計算し結果をlist_t, list_yに格納
for i in 2:interval+1
list_y[i,1:size] = rk2(list_t[i-1],list_y[i-1,1:size],h)
list_t[i] = list_t[i-1]+h
end
return list_t,list_y
end
이쪽도 이전과 같이, 조화 진동자의 운동 방정식을 사용해 확인합니다. 조화 진동자의 운동 방정식을 표준형을 사용하여 프로그램에 떨어뜨리면 다음과 같이 되었습니다. 여기서 Julia의 특징은 "pi"나 "π"라는 문자열이 원주율을 나타내고, 곱 연산자 "*"를 생략하는 것도 가능하다는 것입니까? 그 때문에, 보다 수식에 가까운 코드를 쓸 수도 있을 것 같습니다.
km = 4pi^2
function f(t,y)
freturn = [y[2], -km*y[1]]
end
음, 시간은 0~1, 분할 점수를 100, 초기 위치를 0, 초속을 1로 계산을 실행해 봅니다.
list_t1,list_y1 = rungekutta2(0,1,100,[0,1]);
결과를 그림으로 플롯하면 다음과 같은 그림이 출력되었습니다. 오렌지색이 속도, 청색이 위치를 나타냅니다. 또, 선이 계산에 의한 것으로, 닷은 이론적인 해를 플롯한 것입니다. 계산 결과와 이론적인 해가 잘 일치하는 것을 알 수 있습니다. 또한 실제로 결과를 비교해도 1E-3 정도까지 일치하고 있는 것을 알았습니다. 파이썬에서의 출력과 같은 정도의 정밀도입니다.
요약
Python으로 제작한 룽게 쿠타법의 프로그램을 Julia로 재작성해 보았습니다. 쓰기는 비슷하지만 줄리아가 계산을 향한 제작이라고 생각했습니다. 뭔가 실수가있는 것 같으면 가르쳐 주시면 감사하겠습니다.
Reference
이 문제에 관하여([Julia] 룬게 쿠타 방법의 구현 - Python과의 비교 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/guraragu0010/items/5e202b1e84170d8c1057
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여([Julia] 룬게 쿠타 방법의 구현 - Python과의 비교 -), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/guraragu0010/items/5e202b1e84170d8c1057텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)