Google ColabのJulia言語で搭載されているGeminiを使って一行もコードを書かずに2次元拡散方程式を差分法で計算してGIFアニメにする。次に同じように2次元波動方程式もやってもらう。
今回は生成AI、Geminiを使ってみよう。
最初の指示は「Julia言語で2次元拡散方程式を差分法で計算するコードを書いてください。」
とした。最初からまあまあいい感じだが境界条件がない。
ノイマン型で値は0として、とするとちゃんと付け加えた。
今度は解が不安定でNaNになる。ここも指摘すると、
dt = dx^2 * dy^2 / (2 * D * (dx^2 + dy^2)) * 0.5 # 安定性条件を満たすようにdtを計算、0.5倍することで余裕を持たせる
という安定性条件をちゃんと出してきた。
最終的なコードは
using Plots
using Printf
# パラメータ設定
nx = 100 # x方向の格子点数
ny = 100 # y方向の格子点数
dx = 1.0 / nx # x方向の格子間隔
dy = 1.0 / ny # y方向の格子間隔
# 安定性条件を満たすようにdtを計算
D = 1.0 # 拡散係数
dt = dx^2 * dy^2 / (2 * D * (dx^2 + dy^2)) * 0.5 # 0.5倍することで余裕を持たせる
nsteps = 5000 # 計算ステップ数
# 初期条件設定
u = zeros(nx, ny)
for i in 1:nx
for j in 1:ny
if (i - nx / 2)^2 + (j - ny / 2)^2 < (nx / 4)^2
u[i, j] = 1.0
end
end
end
# 結果を格納する配列
results = []
# 時間発展計算
for t in 1:nsteps
u_new = copy(u)
for i in 2:nx-1
for j in 2:ny-1
u_new[i, j] = u[i, j] + D * dt * (
(u[i+1, j] - 2u[i, j] + u[i-1, j]) / dx^2 +
(u[i, j+1] - 2u[i, j] + u[i, j-1]) / dy^2
)
end
end
# ノイマン境界条件を適用
u_new[1, :] = u_new[2, :] # x = 0
u_new[nx, :] = u_new[nx-1, :] # x = 1
u_new[:, 1] = u_new[:, 2] # y = 0
u_new[:, ny] = u_new[:, ny-1] # y = 1
u = u_new
# 100ステップごとに結果を配列に格納
if t % 100 == 0
push!(results, copy(u))
end
end
# 計算結果をアニメーションで表示、heatmapのスケールを0から1に固定
anim = @animate for i in 1:length(results)
heatmap(results[i], title="t = $(@sprintf("%.3f", i * 100 * dt))", clim=(0, 1))
end
gif(anim, "diffusion_neumann.gif", fps = 10)
|
実行結果はこちら。ちゃんと意図したようなグラフができた。
次は波動方程式。
using Plots
using Printf
# パラメータ設定
nx = 200 # x方向の格子点数
ny = 200 # y方向の格子点数
dx = 1.0 / nx # x方向の格子間隔
dy = 1.0 / ny # y方向の格子間隔
c = 1.0 # 波の速度
dt = minimum([dx, dy]) / c * 0.5 # 安定性条件を満たすようにdtを計算 (0.5倍することで余裕を持たせる)
nsteps = 500 # 計算ステップ数
# 初期条件設定
u = zeros(nx, ny)
u_old = zeros(nx, ny)
for i in 1:nx
for j in 1:ny
if (i - nx / 2)^2 + (j - ny / 2)^2 < (nx / 16)^2
u[i, j] = 1.0
u_old[i, j] = 1.0
end
end
end
# 結果を格納する配列
results = []
# 時間発展計算
for t in 1:nsteps
u_new = zeros(nx, ny)
for i in 2:nx-1
for j in 2:ny-1
u_new[i, j] = 2u[i, j] - u_old[i, j] + c^2 * dt^2 * (
(u[i+1, j] - 2u[i, j] + u[i-1, j]) / dx^2 +
(u[i, j+1] - 2u[i, j] + u[i, j-1]) / dy^2
)
end
end
# ノイマン境界条件を適用 (値0)
u_new[1, :] = u_new[2, :] # x = 0
u_new[nx, :] = u_new[nx-1, :] # x = 1
u_new[:, 1] = u_new[:, 2] # y = 0
u_new[:, ny] = u_new[:, ny-1] # y = 1
u_old = u
u = u_new
# 10ステップごとに結果を配列に格納
if t % 10 == 0
push!(results, copy(u))
end
end
# 計算結果をアニメーションで表示、heatmapのスケールを-1から1に固定
anim = @animate for i in 1:length(results)
heatmap(results[i], title="t = $(@sprintf("%.3f", i *10 * dt))", clim=(-1, 1))
end
gif(anim, "wave2d_neumann.gif", fps = 10)
|
これも予期した動きをしている。
« 西宮~尼崎の公園の本日(2025/4/8)の桜 | トップページ | 高周波・RFニュース 2025年4月9日 InfineonがMarvellの車載イーサネット事業を買収、u-bloxがデュアルモードセルラー衛星通信事業をTrident IoTに売却、QorvoのUWBの屋内ナビゲーション解説、IEEE WAMICONは4/14-15開催、トランプのCHIPS act改正、Broadcom100億ドル自社株買い »
「パソコン・インターネット」カテゴリの記事
- Interface2025年8月号Pythonで体験!はじめての暗号を買った。上杉暗号からRSA、AES、DHなど、特に楕円曲線暗号についてはコードも実際に動かすところまで詳しくかかれていた。耐量子暗号や聞いたことなかったY-00暗号や関数型暗号も記載。(2025.07.10)
- Gemini CLIが使えるようになっていたので早速VSCodeのターミナルから使って、JavaScriptで連立一次方程式を計算するコードを書いてもらった。普通にガウスの消去法で計算するhtmlを作ってくれた。(2025.06.27)
- Google ColabのJulia言語で1次元のGray-Scottモデル(∂u/∂t=u²v-(F+k)u+Du∂²u/∂x²,∂v/∂t=-u²v+F(1-v)+Dv∂²v/∂x²)を計算してパルスが次々分裂する様子を見る。空間6次の差分、時間8次のルンゲクッタ法で計算。(2025.07.08)
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2025年7月13日 Pythonの高周波ライブラリscikit-rfがv1.8.0に、SamsungがGalaxy Z Fold7など発表→QualcommがSnapdragon 8 Eliteが使われていると発表、NGMNが基地局アンテナの推奨事項をまとめる、STMicroとMetalenzがメタサーフェス光学のライセンス締結(2025.07.14)
- Interface2025年8月号Pythonで体験!はじめての暗号を買った。上杉暗号からRSA、AES、DHなど、特に楕円曲線暗号についてはコードも実際に動かすところまで詳しくかかれていた。耐量子暗号や聞いたことなかったY-00暗号や関数型暗号も記載。(2025.07.10)
- 高周波・RFニュース 2025年7月8日 NordicとSercommのセルラーIoTモジュール、iFixitがFairphone 6を分解、スコアは10/10、RCR wireless newsのウェビナー2件(6GとIndustry4.0)、SEMCOが高耐圧C0G MLCCを車載急速充電に提案(2025.07.09)
- 高周波・RFニュース 2025年7月2日 5G Americasが6Gに向けセンシングと通信ホワイトペーパー発行、KYOCERA AVXが3dBハイブリッドカプラ発表、TDKが車載薄膜インダクタ発表、Nordicが1次電池向けPMIC発表、ローデ・シュワルツの6GとAI/ML解説記事(2025.07.02)
- 高周波・RFニュース 2025年6月30日 QualcommがAIを用いた6Rxアンテナ解説、Next G Allianceと日本のXGMFが5G,6Gで協力、5G Americasが25Q1で5G加入者増加と発表、TechInsigtsがHuawei Pura 80 Pro+分解、Qorvoが5-7GHzのWi-Fi 7 FEM発表(2025.06.30)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年7月13日 Pythonの高周波ライブラリscikit-rfがv1.8.0に、SamsungがGalaxy Z Fold7など発表→QualcommがSnapdragon 8 Eliteが使われていると発表、NGMNが基地局アンテナの推奨事項をまとめる、STMicroとMetalenzがメタサーフェス光学のライセンス締結(2025.07.14)
- 高周波・RFニュース 2025年7月8日 NordicとSercommのセルラーIoTモジュール、iFixitがFairphone 6を分解、スコアは10/10、RCR wireless newsのウェビナー2件(6GとIndustry4.0)、SEMCOが高耐圧C0G MLCCを車載急速充電に提案(2025.07.09)
- 高周波・RFニュース 2025年7月2日 5G Americasが6Gに向けセンシングと通信ホワイトペーパー発行、KYOCERA AVXが3dBハイブリッドカプラ発表、TDKが車載薄膜インダクタ発表、Nordicが1次電池向けPMIC発表、ローデ・シュワルツの6GとAI/ML解説記事(2025.07.02)
- 高周波・RFニュース 2025年6月30日 QualcommがAIを用いた6Rxアンテナ解説、Next G Allianceと日本のXGMFが5G,6Gで協力、5G Americasが25Q1で5G加入者増加と発表、TechInsigtsがHuawei Pura 80 Pro+分解、Qorvoが5-7GHzのWi-Fi 7 FEM発表(2025.06.30)
- 高周波・RFニュース 2025年6月27日 Qualcommが6Gに向けての3GPPリリース20解説、TDKが100V1608サイズ1μFのMLCCを発表、Skyworksが低ジッタのクロックファミリーを発表、Elisa,Ericsson,MediaTekが5G SAで8Gbpsを達成(2025.06.27)
« 西宮~尼崎の公園の本日(2025/4/8)の桜 | トップページ | 高周波・RFニュース 2025年4月9日 InfineonがMarvellの車載イーサネット事業を買収、u-bloxがデュアルモードセルラー衛星通信事業をTrident IoTに売却、QorvoのUWBの屋内ナビゲーション解説、IEEE WAMICONは4/14-15開催、トランプのCHIPS act改正、Broadcom100億ドル自社株買い »
コメント