回答編集履歴
3
コード全体を再掲
    
        answer	
    CHANGED
    
    | @@ -20,4 +20,72 @@ | |
| 20 20 | 
             
                u0 += l
         | 
| 21 21 |  | 
| 22 22 | 
             
                return u0.copy()
         | 
| 23 | 
            +
            ```
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            以上を踏まえてコード全体を再掲
         | 
| 26 | 
            +
            ```python
         | 
| 27 | 
            +
            #各モジュールをインポート
         | 
| 28 | 
            +
            import numpy as np
         | 
| 29 | 
            +
            import matplotlib.pyplot as plt
         | 
| 30 | 
            +
            %matplotlib inline
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            #時間経過を定義
         | 
| 33 | 
            +
            dt_1=0.0001
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            #時間の初期値を入力
         | 
| 36 | 
            +
            t0=0
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            #時間の最大値
         | 
| 39 | 
            +
            t_max=10
         | 
| 40 | 
            +
            #試行回数
         | 
| 41 | 
            +
            trials_1=np.arange(t0,t_max,dt_1)
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            #関数の値を入れるオブジェクトを生成
         | 
| 44 | 
            +
            a_points_1=[]
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            #関数を定義
         | 
| 47 | 
            +
            def u(t,x,x1):
         | 
| 48 | 
            +
                return -4*x
         | 
| 49 | 
            +
            #x'の式
         | 
| 50 | 
            +
            def y(t,x,x1):
         | 
| 51 | 
            +
                return x1
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            #runge-kuttaをtrials回実行
         | 
| 54 | 
            +
            #結果をa_pointsに入れる
         | 
| 55 | 
            +
            def rp():
         | 
| 56 | 
            +
                y0 = np.array(1.0, dtype=np.float)
         | 
| 57 | 
            +
                u0 = np.array(0.0, dtype=np.float)
         | 
| 58 | 
            +
                for t in trials_1:
         | 
| 59 | 
            +
                    x1=RK(y0,u0,dt_1)
         | 
| 60 | 
            +
                    a_points_1.append(x1)
         | 
| 61 | 
            +
                print(a_points_1[:3])
         | 
| 62 | 
            +
             | 
| 63 | 
            +
            #runge-kuttaの実行式
         | 
| 64 | 
            +
            #k:y, l:u
         | 
| 65 | 
            +
            def RK(y0,u0,dt):
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                k1=y0*dt
         | 
| 68 | 
            +
                l1=u0*dt
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                k2=(u0+l1*0.5)*dt
         | 
| 71 | 
            +
                l2=-4*(y0+k1*0.5)*dt
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                k3=(u0+l2*0.5)*dt
         | 
| 74 | 
            +
                l3=-4*(y0+k2*0.5)*dt
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                k4=(u0+l3)*dt
         | 
| 77 | 
            +
                l4=-4*(y0+k3)*dt
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                k=(k1+2*k2+2*k3+k4)/6
         | 
| 80 | 
            +
                l=(l1+2*l2+2*l3+l4)/6
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                y0+=k
         | 
| 83 | 
            +
                u0+=l
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                return u0.copy()  # もしくはfloat(u0)
         | 
| 86 | 
            +
            #このu0の値をfor文で繰り返す際に更新していきたい
         | 
| 87 | 
            +
            #現状では初期値のu0=0が常に代入されて、同じ計算結果が返ってくる
         | 
| 88 | 
            +
             | 
| 89 | 
            +
            #プログラムを実行
         | 
| 90 | 
            +
            rp()
         | 
| 23 91 | 
             
            ```
         | 
2
修正
    
        answer	
    CHANGED
    
    | @@ -14,7 +14,7 @@ | |
| 14 14 |  | 
| 15 15 | 
             
                return u0
         | 
| 16 16 | 
             
            ```
         | 
| 17 | 
            -
            を、次のようにしてください。
         | 
| 17 | 
            +
            を、次のようにしてください(LouiS0616さんのコメントを受けて修正)。
         | 
| 18 18 | 
             
            ```Python
         | 
| 19 19 | 
             
                y0 += k
         | 
| 20 20 | 
             
                u0 += l
         | 
1
修正
    
        answer	
    CHANGED
    
    | @@ -7,7 +7,17 @@ | |
| 7 7 | 
             
            ```
         | 
| 8 8 |  | 
| 9 9 | 
             
            これを```t,y0,u0=0,1,0```の代わりに使ってください。
         | 
| 10 | 
            -
            それから、 | 
| 10 | 
            +
            それから、値を更新する部分:
         | 
| 11 11 | 
             
            ```Python
         | 
| 12 | 
            +
                y0=y0+k
         | 
| 13 | 
            +
                u0=u0+l
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                return u0
         | 
| 16 | 
            +
            ```
         | 
| 17 | 
            +
            を、次のようにしてください。
         | 
| 18 | 
            +
            ```Python
         | 
| 19 | 
            +
                y0 += k
         | 
| 20 | 
            +
                u0 += l
         | 
| 21 | 
            +
             | 
| 12 22 | 
             
                return u0.copy()
         | 
| 13 23 | 
             
            ```
         | 
