前提・実現したいこと
現在,Pythonで拡散方程式の数値解析をルンゲ・クッタ法で行うコードを作っています。
解こうとしている計算式がこちらになります。
コードの参考にしているサイトがこちらになります 。
https://math-fun.net/20191212/4034/
この式を解く過程で時間発展f(x,t+Δt)の行がうまく行きません。
この関数fのコード内での定義方法だとjを関数に組み込めず関数として機能しないためにjのループが上手くいかないのだと思いますが,どのように定義すればいいかがわからない状態です。何卒アドバイスをいただければ幸いです。
発生している問題・エラーメッセージ
いくつかためした中ででたエラーメッセージとしては以下になります can't assign to function call 'function' object does not support item assignment object does not support item assignment. など
該当のソースコード
途中までですが製作中のコードです
python
1import math 2import numpy as np 3import matplotlib.pyplot as plt 4 5 6# t = Tmax まで計算 7Tmax = 2.0 8# 時間ステップ 9dt = 0.5 10# ステップ数 11nt = int(Tmax / dt) 12# 領域幅 13L = 1.5 14# x方向のメッシュ幅 15dx = 0.5 16# x方向の分点数 17nx = int(L / dx) 18# x座標 19x = np.arange(0, L, dx) 20# 拡散係数 21nu = 1 22# グラフの格納場所 23ims = [] 24 25 26def f(i,j): 27 return np.cos(i*dx) 28 29def g(i,j): 30 return nu*(f(i+1,j)-2*f(i,j)+f(i-1,j)) 31 32 33 34for j in range(nt): 35 for i in range(nx): 36 k_1 = g(i,j) 37 k_2 = g(i,j) + k_1/2 38 k_3 = g(i,j) + k_2/2 39 k_4 = g(i,j) + k_3 40 41 f(i,j+1) = f(i,j) + 1/6*(k_1+2*k_2+2*k_3+k_4)*dt
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。