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億ドル自社株買い »
「パソコン・インターネット」カテゴリの記事
- RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ) 2025/11/9-2025/11/16(2025.11.16)
- Visual Studio 2026がリリースされたので早速新しいPCにインストール。全面的にGitHub Copilotを使うようになっている。とりあえずC#でMath.NET numericsを使って連立方程式を計算するコードを書いてもらったら一発で動く。他の例として固有値や非線形計算もコードを出してくれた。(2025.11.14)
- 家で使うPCをゲーミングノートPC、ASUS TUF Gaming A16に買い替えた。CPUはAMD Ryzen 9 8940HX、メモリ32GB、GPUはNVIDIA GeForce RTX 5060 Laptop GPU、SSD 1TB。ゲームをしたいわけでなくてNVIDIAの最新GPUで機械学習・数値計算やろうかと。(2025.11.13)
- RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ) 2025/11/3-2025/11/9(2025.11.09)
- RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ) 2025/10/27-2025/11/3(2025.11.04)
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2025年11月17日 Microwave Journalの特集は5G/6G/IoT, Special Focusも5G/6G、IDTechExの低損失材料レポート、6GHz帯の世界政策とWi-Fi 8についてのウェビナー開催、iFixitがPixel BUds 2aを分解、OnePlus15分解動画など(2025.11.17)
- RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ) 2025/11/9-2025/11/16(2025.11.16)
- Visual Studio 2026がリリースされたので早速新しいPCにインストール。全面的にGitHub Copilotを使うようになっている。とりあえずC#でMath.NET numericsを使って連立方程式を計算するコードを書いてもらったら一発で動く。他の例として固有値や非線形計算もコードを出してくれた。(2025.11.14)
- 高周波・RFニュース 2025年11月13日 QorvoがTWTA置き換えの広帯域SSPA発表、iFixitがiPad Pro M5分解、KYOCERA AVXが0.9Vで動く超小型クロック発表、Mini-Circuitsが様々なBALUNやトランス解説、軍用5G解説、imecの110GHz可能な300mm GeSiウェハー(2025.11.13)
- 高周波・RFニュース 2025年11月12日 Qualcommが語る技術の標準化、STMicroelectronicsが語るシリコンフォトニクス、HuaweiがイノベーションとIPフォーラム開催、6G SummitでFCCのコミッショナーが米国が6Gをリードすべしと語る(2025.11.12)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年11月17日 Microwave Journalの特集は5G/6G/IoT, Special Focusも5G/6G、IDTechExの低損失材料レポート、6GHz帯の世界政策とWi-Fi 8についてのウェビナー開催、iFixitがPixel BUds 2aを分解、OnePlus15分解動画など(2025.11.17)
- RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ) 2025/11/9-2025/11/16(2025.11.16)
- Visual Studio 2026がリリースされたので早速新しいPCにインストール。全面的にGitHub Copilotを使うようになっている。とりあえずC#でMath.NET numericsを使って連立方程式を計算するコードを書いてもらったら一発で動く。他の例として固有値や非線形計算もコードを出してくれた。(2025.11.14)
- 高周波・RFニュース 2025年11月13日 QorvoがTWTA置き換えの広帯域SSPA発表、iFixitがiPad Pro M5分解、KYOCERA AVXが0.9Vで動く超小型クロック発表、Mini-Circuitsが様々なBALUNやトランス解説、軍用5G解説、imecの110GHz可能な300mm GeSiウェハー(2025.11.13)
- 高周波・RFニュース 2025年11月12日 Qualcommが語る技術の標準化、STMicroelectronicsが語るシリコンフォトニクス、HuaweiがイノベーションとIPフォーラム開催、6G SummitでFCCのコミッショナーが米国が6Gをリードすべしと語る(2025.11.12)
« 西宮~尼崎の公園の本日(2025/4/8)の桜 | トップページ | 高周波・RFニュース 2025年4月9日 InfineonがMarvellの車載イーサネット事業を買収、u-bloxがデュアルモードセルラー衛星通信事業をTrident IoTに売却、QorvoのUWBの屋内ナビゲーション解説、IEEE WAMICONは4/14-15開催、トランプのCHIPS act改正、Broadcom100億ドル自社株買い »




コメント