[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로 재작성해 보았습니다. 쓰기는 비슷하지만 줄리아가 계산을 향한 제작이라고 생각했습니다. 뭔가 실수가있는 것 같으면 가르쳐 주시면 감사하겠습니다.

좋은 웹페이지 즐겨찾기