import%20marimo%0A%0A__generated_with%20%3D%20%220.24.0%22%0Aapp%20%3D%20marimo.App()%0A%0Awith%20app.setup%3A%0A%20%20%20%20from%20pathlib%20import%20Path%0A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20%E6%9C%89%E9%99%90%E8%A6%81%E7%B4%A0%E6%B3%95%E3%81%A8%20KdV%20%E6%96%B9%E7%A8%8B%E5%BC%8F%0A%0A%20%20%20%20%E6%9C%89%E9%99%90%E8%A6%81%E7%B4%A0%E6%B3%95%EF%BC%88FEM%EF%BC%89%E3%82%92%202%20%E9%80%9A%E3%82%8A%E3%81%AE%E3%82%84%E3%82%8A%E6%96%B9%E3%81%A7%E6%89%B1%E3%81%84%E3%81%BE%E3%81%99%0A%20%20%20%20%EF%BC%88%60legacy%2Fsimulation%2FFEM.ipynb%60%20%E3%82%92%20marimo%20%E5%90%91%E3%81%91%E3%81%AB%E6%95%B4%E7%90%86%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE%E3%81%A7%E3%81%99%EF%BC%89%E3%80%82%0A%0A%20%20%20%20%7C%20%E7%AF%80%20%7C%20%E5%86%85%E5%AE%B9%20%7C%20%E4%BD%BF%E3%81%86%E3%82%82%E3%81%AE%20%7C%0A%20%20%20%20%7C%20---%20%7C%20---%20%7C%20---%20%7C%0A%20%20%20%20%7C%201%20%7C%201%20%E6%AC%A1%E5%85%83%20KdV%20%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%82%92%E3%80%81%E8%B3%AA%E9%87%8F%E8%A1%8C%E5%88%97%E3%83%BB%E5%89%9B%E6%80%A7%E8%A1%8C%E5%88%97%E3%82%92%E8%87%AA%E5%88%86%E3%81%A7%E7%B5%84%E3%82%93%E3%81%A7%E8%A7%A3%E3%81%8F%20%7C%20NumPy%20%2F%20SciPy%20%E3%81%AE%E3%81%BF%20%7C%0A%20%20%20%20%7C%202%20%7C%20%E6%AD%A3%E6%96%B9%E9%A0%98%E5%9F%9F%E3%81%AE%E3%83%9D%E3%82%A2%E3%82%BD%E3%83%B3%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%A8%E3%80%81%E9%A2%A8%E3%81%AE%E3%81%82%E3%82%8B%E7%86%B1%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%82%92%E8%A7%A3%E3%81%8F%20%7C%20NGSolve%20%7C%0A%0A%20%20%20%20%E5%89%8D%E5%8D%8A%E3%81%AF%E3%80%8C%E6%9C%89%E9%99%90%E8%A6%81%E7%B4%A0%E6%B3%95%E3%81%A8%E3%81%AF%E4%BD%95%E3%82%92%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%8B%E3%80%8D%E3%82%92%E3%80%81%E8%A1%8C%E5%88%97%E3%82%92%201%20%E3%81%A4%E3%81%9A%E3%81%A4%E7%B5%84%E3%81%BF%E7%AB%8B%E3%81%A6%E3%81%A6%E7%A2%BA%E3%81%8B%E3%82%81%E3%82%8B%0A%20%20%20%20%E3%81%9F%E3%82%81%E3%81%AE%E3%82%82%E3%81%AE%E3%81%A7%E3%81%99%E3%80%82%E7%B7%9A%E5%BD%A2%E3%81%AE%201%20%E6%AC%A1%E8%A6%81%E7%B4%A0%EF%BC%88P1%EF%BC%89%E3%82%92%E5%91%A8%E6%9C%9F%E7%9A%84%E3%81%AA%201%20%E6%AC%A1%E5%85%83%E3%83%A1%E3%83%83%E3%82%B7%E3%83%A5%E4%B8%8A%E3%81%AB%E4%B8%A6%E3%81%B9%E3%80%81%0A%20%20%20%20Zabusky%20%E3%81%A8%20Kruskal%20%E3%81%8C%201965%20%E5%B9%B4%E3%81%AB%E3%82%BD%E3%83%AA%E3%83%88%E3%83%B3%E3%82%92%E7%99%BA%E8%A6%8B%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%A8%E5%90%8C%E3%81%98%E5%88%9D%E6%9C%9F%E5%80%A4%E5%95%8F%E9%A1%8C%E3%82%92%0A%20%20%20%20%E5%86%8D%E7%8F%BE%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%BE%8C%E5%8D%8A%E3%81%AF%E5%AE%9F%E7%94%A8%E7%9A%84%E3%81%AA%20FEM%20%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%20NGSolve%20%E3%81%A7%202%20%E6%AC%A1%E5%85%83%E5%95%8F%E9%A1%8C%E3%82%92%E8%A7%A3%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20NGSolve%20%E3%81%AE%E5%8F%AF%E8%A6%96%E5%8C%96%E3%83%A6%E3%83%BC%E3%83%86%E3%82%A3%E3%83%AA%E3%83%86%E3%82%A3%20%60ngsolve.webgui.Draw%60%20%E3%81%AF%20WebGL%20%E3%81%AE%E3%82%A6%E3%82%A3%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88%E3%82%92%0A%20%20%20%20%E8%BF%94%E3%81%99%E3%81%9F%E3%82%81%E3%80%81%E9%9D%99%E7%9A%84%20HTML%20%E3%81%B8%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%99%E3%81%A8%E7%A9%BA%E6%AC%84%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%97%E3%81%BE%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%20notebook%20%E3%81%A7%E3%81%AF%0A%20%20%20%20%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E6%8F%8F%E7%94%BB%E3%82%92%20matplotlib%20%E3%81%A7%E8%A1%8C%E3%81%84%E3%80%81HTML%20%E3%81%A7%E3%82%82%E5%9B%B3%E3%81%8C%E6%AE%8B%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%81%93%E3%81%AE%20notebook%20%E3%81%AE%E5%85%B1%E9%80%9A%E9%83%A8%E5%93%81%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AF%E3%80%81%E4%BB%A5%E9%99%8D%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%8C%E5%85%B1%E6%9C%89%E3%81%99%E3%82%8B%E5%87%BA%E5%8A%9B%E5%85%88%E3%81%A8%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC%E3%82%92%E7%94%A8%E6%84%8F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%60artifacts_dir%60%3A%20GIF%20%E3%81%AE%E4%BF%9D%E5%AD%98%E5%85%88%20%60notebooks%2Fsimulation%2F_generated%2FFEM%2F%60%E3%80%82%0A%20%20%20%20%20%20Git%20%E3%81%AE%E8%BF%BD%E8%B7%A1%E5%AF%BE%E8%B1%A1%E5%A4%96%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%9F%E3%81%B3%E3%81%AB%E5%86%8D%E7%94%9F%E6%88%90%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20-%20%60gif_image(path%2C%20alt)%60%3A%20GIF%20%E3%82%92%20base64%20%E3%81%AE%20data%20URI%20%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%A6%20%60mo.image%60%20%E3%81%A7%0A%20%20%20%20%20%20%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%E9%9D%99%E7%9A%84%20HTML%20%E3%81%B8%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%E3%82%82%E5%A4%96%E9%83%A8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%8F%82%E7%85%A7%E3%81%9B%E3%81%9A%E3%81%AB%E5%86%8D%E7%94%9F%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20-%20%60save_gif(fig%2C%20update%2C%20frames%2C%20path%2C%20interval)%60%3A%20%60FuncAnimation%60%20%E3%82%92%20GIF%20%E3%81%A8%E3%81%97%E3%81%A6%0A%20%20%20%20%20%20%E4%BF%9D%E5%AD%98%E3%81%97%E3%80%81%E7%94%9F%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B5%E3%82%A4%E3%82%BA%EF%BC%88KiB%EF%BC%89%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%20%20%60interval%60%20%E3%81%AF%201%20%E3%82%B3%E3%83%9E%E3%81%AE%E8%A1%A8%E7%A4%BA%E6%99%82%E9%96%93%EF%BC%88%E3%83%9F%E3%83%AA%E7%A7%92%EF%BC%89%E3%81%A7%E3%81%99%E3%80%82GIF%20%E3%81%AF%E8%A1%A8%E7%A4%BA%E6%99%82%E9%96%93%E3%82%92%201%2F100%20%E7%A7%92%E5%8D%98%E4%BD%8D%E3%81%A7%0A%20%20%20%20%20%20%E3%81%97%E3%81%8B%E4%BF%9D%E6%8C%81%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%E8%A6%81%E6%B1%82%E3%81%97%E3%81%9F%E5%80%A4%E3%81%8C%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E4%BD%BF%E3%82%8F%E3%82%8C%E3%82%8B%E3%81%A8%E3%81%AF%E9%99%90%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%20%20%E4%BF%9D%E5%AD%98%E5%BE%8C%E3%81%AB%20GIF%20%E3%82%92%E8%AA%AD%E3%81%BF%E7%9B%B4%E3%81%97%E3%81%A6%E5%AE%9F%E9%9A%9B%E3%81%AE%E9%96%93%E9%9A%94%E3%81%A8%E5%86%8D%E7%94%9F%E6%99%82%E9%96%93%E3%82%92%E6%B8%AC%E3%82%8A%E3%80%81%E5%A0%B1%E5%91%8A%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20base64%0A%0A%20%20%20%20import%20matplotlib.animation%20as%20animation%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20from%20PIL%20import%20Image%0A%0A%20%20%20%20artifacts_dir%20%3D%20Path(__file__).resolve().parent%20%2F%20%22_generated%22%20%2F%20%22FEM%22%0A%20%20%20%20artifacts_dir.mkdir(parents%3DTrue%2C%20exist_ok%3DTrue)%0A%0A%20%20%20%20def%20gif_image(path%3A%20Path%2C%20alt%3A%20str)%3A%0A%20%20%20%20%20%20%20%20encoded%20%3D%20base64.b64encode(path.read_bytes()).decode()%0A%20%20%20%20%20%20%20%20return%20mo.image(f%22data%3Aimage%2Fgif%3Bbase64%2C%7Bencoded%7D%22%2C%20alt%3Dalt)%0A%0A%20%20%20%20def%20save_gif(fig%2C%20update%2C%20frames%3A%20int%2C%20path%3A%20Path%2C%20interval%3A%20int)%20-%3E%20str%3A%0A%20%20%20%20%20%20%20%20anim%20%3D%20animation.FuncAnimation(fig%2C%20update%2C%20frames%3Dframes%2C%20interval%3Dinterval)%0A%20%20%20%20%20%20%20%20anim.save(path%2C%20writer%3D%22pillow%22)%0A%20%20%20%20%20%20%20%20plt.close(fig)%0A%20%20%20%20%20%20%20%20%23%20GIF%20%E3%81%AF%E9%96%93%E9%9A%94%E3%82%92%201%2F100%20%E7%A7%92%E5%8D%98%E4%BD%8D%E3%81%A7%E3%81%97%E3%81%8B%E4%BF%9D%E6%8C%81%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%80%81%E4%BF%9D%E5%AD%98%E5%BE%8C%E3%81%AB%E5%AE%9F%E6%B8%AC%E3%81%97%E3%81%A6%E5%A0%B1%E5%91%8A%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%20%20%20%20with%20Image.open(path)%20as%20gif%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20durations%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20index%20in%20range(gif.n_frames)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gif.seek(index)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20durations.append(gif.info.get(%22duration%22%2C%200))%0A%20%20%20%20%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22%7Bpath.name%7D%3A%20%7Bframes%7D%20frames%2C%20%7Bdurations%5B0%5D%7D%20ms%2Fframe%2C%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20f%22%7Bsum(durations)%20%2F%201000%3A.1f%7D%20s%2C%20%7Bpath.stat().st_size%20%2F%201024%3A.0f%7D%20KiB%22%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20np.set_printoptions(edgeitems%3D3%2C%20precision%3D3%2C%20suppress%3DTrue)%0A%20%20%20%20return%20artifacts_dir%2C%20gif_image%2C%20np%2C%20plt%2C%20save_gif%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E6%9C%89%E9%99%90%E8%A6%81%E7%B4%A0%E6%B3%95%E3%82%92%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E7%B5%84%E3%82%80%3A%20KdV%20%E6%96%B9%E7%A8%8B%E5%BC%8F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%5BKdV%20%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%82%92%E6%9C%89%E9%99%90%E8%A6%81%E7%B4%A0%E6%B3%95%E3%81%A7%E8%A7%A3%E3%81%8F%5D(http%3A%2F%2Fwww.cas.cmc.osaka-u.ac.jp%2F~paoon%2FLectures%2F2018-7Semester-AppliedMath9%2F14_pde-fem%2F)%0A%20%20%20%20%E3%81%AB%E6%B2%BF%E3%81%A3%E3%81%A6%E3%80%81Zabusky%E2%80%93Kruskal%20%E3%81%AE%E5%88%9D%E6%9C%9F%E5%80%A4%E5%95%8F%E9%A1%8C%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cfrac%7B%E2%88%82u%7D%7B%E2%88%82t%7D%2Bu%5Cfrac%7B%E2%88%82u%7D%7B%E2%88%82x%7D%2B%CE%B4%5E2%5Cfrac%7B%E2%88%82%5E3u%7D%7B%E2%88%82x%5E3%7D%3D0%2C%5Cquad%0A%20%20%20%20u(x%2C0)%3D%5Ccos(%5Cpi%20x)%2C%5Cquad%20%CE%B4%3D0.022%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%82%92%E3%80%81%E5%91%A8%E6%9C%9F%E5%A2%83%E7%95%8C%E6%9D%A1%E4%BB%B6%E3%81%AE%E5%8C%BA%E9%96%93%20%24x%5Cin%5B0%2C2)%24%20%E3%81%A7%E8%A7%A3%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%8C%BA%E9%96%93%E3%82%92%E9%95%B7%E3%81%95%20%24h%24%20%E3%81%AE%E8%A6%81%E7%B4%A0%E3%81%AB%E5%88%86%E5%89%B2%E3%81%97%E3%80%81%E5%90%84%E7%AF%80%E7%82%B9%E3%81%AB%E3%80%8C%E3%81%9D%E3%81%AE%E7%AF%80%E7%82%B9%E3%81%A7%201%E3%80%81%E9%9A%A3%E3%81%AE%E7%AF%80%E7%82%B9%E3%81%A7%200%20%E3%81%AB%E3%81%AA%E3%82%8B%0A%20%20%20%20%E4%B8%89%E8%A7%92%E5%BD%A2%E3%81%AE%E9%96%A2%E6%95%B0%E3%80%8D%24%CF%86_i(x)%24%EF%BC%881%20%E6%AC%A1%E8%A6%81%E7%B4%A0%EF%BC%89%E3%82%92%E7%BD%AE%E3%81%84%E3%81%A6%20%24u(x%2Ct)%5Csimeq%5Csum_iu_i(t)%CF%86_i(x)%24%20%E3%81%A8%0A%20%20%20%20%E5%B1%95%E9%96%8B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%AB%20%24%CF%86_i%24%20%E3%82%92%E6%8E%9B%E3%81%91%E3%81%A6%E7%A9%8D%E5%88%86%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E5%BF%85%E8%A6%81%E3%81%AA%E7%A9%8D%E5%88%86%E3%81%AF%E6%AC%A1%E3%81%AE%203%20%E7%A8%AE%E9%A1%9E%E3%81%A0%E3%81%91%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E8%B3%AA%E9%87%8F%E8%A1%8C%E5%88%97%20%24M_%7Bij%7D%3D%5Cint%20%CF%86_i%CF%86_j%5C%2Cdx%24%3A%20%E9%9A%A3%E3%82%8A%E5%90%88%E3%81%86%203%20%E3%81%A4%E3%81%AE%E7%AF%80%E7%82%B9%E3%81%AB%E3%81%BE%E3%81%9F%E3%81%8C%E3%82%8B%E5%B8%AF%E8%A1%8C%E5%88%97%E3%81%A7%E3%80%81%0A%20%20%20%20%20%20%E6%88%90%E5%88%86%E3%81%AF%20%24h%5Ccdot(1%2F6%2C%5C%2C2%2F3%2C%5C%2C1%2F6)%24%E3%80%82%0A%20%20%20%20-%20%E5%8B%BE%E9%85%8D%E8%A1%8C%E5%88%97%20%24B_%7Bij%7D%3D%5Cint%20%CF%86_j%CF%86_i'%5C%2Cdx%24%3A%20%E6%88%90%E5%88%86%E3%81%AF%20%24(1%2F2%2C%5C%2C0%2C%5C%2C-1%2F2)%24%20%E3%81%A7%20%24h%24%20%E3%81%AB%E4%BE%9D%E3%82%89%E3%81%AA%E3%81%84%E3%80%82%0A%20%20%20%20%20%20%E5%8F%8D%E5%AF%BE%E7%A7%B0%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E9%9B%A2%E6%95%A3%E5%8C%96%E3%81%97%E3%81%A6%E3%82%82%E7%A7%BB%E6%B5%81%E3%81%8C%E3%82%A8%E3%83%8D%E3%83%AB%E3%82%AE%E3%83%BC%E3%82%92%E4%BD%9C%E3%82%8A%E5%87%BA%E3%81%95%E3%81%AA%E3%81%84%E3%80%82%0A%20%20%20%20-%20%E5%89%9B%E6%80%A7%E8%A1%8C%E5%88%97%20%24K_%7Bij%7D%3D%5Cint%20%CF%86_i'%CF%86_j'%5C%2Cdx%24%3A%20%E6%88%90%E5%88%86%E3%81%AF%20%24(1%2Fh)%5Ccdot(-1%2C%5C%2C2%2C%5C%2C-1)%24%E3%80%82%0A%20%20%20%20%20%20%E9%83%A8%E5%88%86%E7%A9%8D%E5%88%86%E3%81%AB%E3%82%88%E3%82%8A%20%24%5Cint%20u_%7Bxx%7D%CF%86_i%5C%2Cdx%3D-(Ku)_i%24%20%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%E3%80%82%0A%0A%20%20%20%203%20%E9%9A%8E%E5%BE%AE%E5%88%86%E3%81%AF%E3%80%81%E3%81%84%E3%81%A3%E3%81%9F%E3%82%93%20%24Mw%3DKu%24%EF%BC%88%E3%81%A4%E3%81%BE%E3%82%8A%20%24w%5Csimeq-u_%7Bxx%7D%24%EF%BC%89%E3%82%92%E8%A7%A3%E3%81%84%E3%81%A6%E3%81%8B%E3%82%89%0A%20%20%20%20%24%5Cint%20u_%7Bxxx%7D%CF%86_i%5C%2Cdx%3D%5Cint%20w%CF%86_i'%5C%2Cdx%3D(Bw)_i%24%20%E3%81%A8%202%20%E6%AE%B5%E9%9A%8E%E3%81%A7%E8%A9%95%E4%BE%A1%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E9%9D%9E%E7%B7%9A%E5%BD%A2%E9%A0%85%E3%81%AF%201%20%E6%AC%A1%E8%A6%81%E7%B4%A0%E3%81%A7%E5%8E%B3%E5%AF%86%E3%81%AB%E7%A9%8D%E5%88%86%E3%81%A7%E3%81%8D%E3%80%81%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cint%20u%5Cfrac%7B%E2%88%82u%7D%7B%E2%88%82x%7D%CF%86_i%5C%2Cdx%3D%5Cfrac%7B(u_%7Bi%2B1%7D%2Bu_i%2Bu_%7Bi-1%7D)(u_%7Bi%2B1%7D-u_%7Bi-1%7D)%7D%7B6%7D%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%A8%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E3%81%BE%E3%81%A8%E3%82%81%E3%82%8B%E3%81%A8%E3%80%81%E8%A7%A3%E3%81%8F%E3%81%B9%E3%81%8D%E5%B8%B8%E5%BE%AE%E5%88%86%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%AF%0A%20%20%20%20%24%24%0A%20%20%20%20M%5Cdot%7Bu%7D%3D-%5Cleft%5BP(u)%2B%CE%B4%5E2BM%5E%7B-1%7DKu%5Cright%5D%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E9%9B%A2%E6%95%A3%E5%8C%96%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%0A%0A%20%20%20%20%7C%20%E8%A8%98%E5%8F%B7%20%7C%20%E5%80%A4%20%7C%20%E6%84%8F%E5%91%B3%20%7C%0A%20%20%20%20%7C%20---%20%7C%20---%20%7C%20---%20%7C%0A%20%20%20%20%7C%20%24L%24%20%7C%202%20%7C%20%E5%91%A8%E6%9C%9F%E5%8C%BA%E9%96%93%E3%81%AE%E9%95%B7%E3%81%95%20%7C%0A%20%20%20%20%7C%20%24h%24%20%7C%200.01%20%7C%20%E8%A6%81%E7%B4%A0%E3%81%AE%E9%95%B7%E3%81%95%EF%BC%88%E7%AF%80%E7%82%B9%20200%20%E5%80%8B%EF%BC%89%20%7C%0A%20%20%20%20%7C%20%24%CE%B4%24%20%7C%200.022%20%7C%20%E5%88%86%E6%95%A3%E3%81%AE%E5%BC%B7%E3%81%95%20%7C%0A%20%20%20%20%7C%20%24%CE%94t%24%20%7C%20%2410%5E%7B-4%7D%24%20%7C%20RK4%20%E3%81%AE%E6%99%82%E9%96%93%E5%88%BB%E3%81%BF%20%7C%0A%20%20%20%20%7C%20%24t_%7B%5Cmax%7D%24%20%7C%2010%20%7C%20%E7%A9%8D%E5%88%86%E3%81%AE%E7%B5%82%E4%BA%86%E6%99%82%E5%88%BB%20%7C%0A%0A%20%20%20%20%E3%82%82%E3%81%A8%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%AF%20%24h%3D0.02%24%E3%80%81%24t_%7B%5Cmax%7D%3D0.4%24%EF%BC%88%E4%BF%9D%E5%AD%98%2011%20%E3%82%B3%E3%83%9E%EF%BC%89%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%24t%3D0.4%24%20%E3%81%AF%0A%20%20%20%20%E6%B3%A2%E3%81%8C%E5%88%87%E3%82%8A%E7%AB%8B%E3%81%A1%E5%A7%8B%E3%82%81%E3%81%9F%E7%9B%B4%E5%BE%8C%E3%81%AB%E3%81%99%E3%81%8E%E3%81%9A%E3%80%81%E3%81%93%E3%81%AE%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%A7%E6%9C%AC%E5%BD%93%E3%81%AB%E8%A6%8B%E3%81%9F%E3%81%84%E3%82%BD%E3%83%AA%E3%83%88%E3%83%B3%E3%81%AE%E7%94%9F%E6%88%90%E3%82%82%0A%20%20%20%20%E5%86%8D%E5%B8%B0%E7%8F%BE%E8%B1%A1%E3%82%82%E5%A7%8B%E3%81%BE%E3%82%8B%E5%89%8D%E3%81%AB%E7%B5%82%E3%82%8F%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%0A%0A%20%20%20%20%E6%99%82%E9%96%93%E3%81%AE%E7%9B%AE%E5%AE%89%E3%81%AF%E7%A0%B4%E6%96%AD%E6%99%82%E5%88%BB%20%24t_B%3D1%2F%5Cpi%5Csimeq0.318%24%20%E3%81%A7%E3%81%99%E3%80%82%E3%82%BD%E3%83%AA%E3%83%88%E3%83%B3%E5%88%97%E3%81%8C%E5%87%BA%E3%81%9D%E3%82%8D%E3%81%86%E3%81%AE%E3%81%8C%0A%20%20%20%20%24t%5Csimeq3.6%5C%2Ct_B%5Csimeq1.15%24%E3%80%81%E5%88%9D%E6%9C%9F%E6%B3%A2%E5%BD%A2%E3%81%B8%E6%88%BB%E3%82%8B%E5%86%8D%E5%B8%B0%E6%99%82%E5%88%BB%E3%81%8C%0A%20%20%20%20%24t_R%5Csimeq30.4%5C%2Ct_B%5Csimeq9.7%24%20%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%24t_%7B%5Cmax%7D%3D10%24%20%E3%81%BE%E3%81%A7%E7%A9%8D%E5%88%86%E3%81%99%E3%82%8C%E3%81%B0%0A%20%20%20%20%E3%80%8C%E5%88%87%E3%82%8A%E7%AB%8B%E3%81%A1%20%E2%86%92%20%E3%82%BD%E3%83%AA%E3%83%88%E3%83%B3%E7%94%9F%E6%88%90%20%E2%86%92%20%E5%86%8D%E5%B8%B0%E3%80%8D%E3%81%8C%201%20%E6%9C%AC%E3%81%AE%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AB%E5%8F%8E%E3%81%BE%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E6%A0%BC%E5%AD%90%E3%82%82%20%24h%3D0.01%24%20%E3%81%B8%E7%B4%B0%E3%81%8B%E3%81%8F%E3%81%97%E3%81%A6%E3%80%81%E5%B9%85%E3%81%8C%20%24%CE%B4%24%20%E7%A8%8B%E5%BA%A6%E3%81%97%E3%81%8B%E3%81%AA%E3%81%84%E3%82%BD%E3%83%AA%E3%83%88%E3%83%B3%E3%82%92%E8%A7%A3%E5%83%8F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20kdv_length%20%3D%202.0%0A%20%20%20%20kdv_dx%20%3D%200.01%0A%20%20%20%20kdv_n%20%3D%20int(kdv_length%20%2F%20kdv_dx)%0A%20%20%20%20kdv_epsilon%20%3D%200.022%0A%0A%20%20%20%20kdv_dt%20%3D%201e-4%0A%20%20%20%20kdv_t_max%20%3D%2010.0%0A%20%20%20%20kdv_frames%20%3D%20161%0A%20%20%20%20kdv_save_every%20%3D%20int(round(kdv_t_max%20%2F%20kdv_dt%20%2F%20(kdv_frames%20-%201)))%0A%0A%20%20%20%20kdv_x%20%3D%20np.arange(kdv_n)%20*%20kdv_dx%0A%0A%20%20%20%20(%0A%20%20%20%20%20%20%20%20f%22%E7%AF%80%E7%82%B9%20%7Bkdv_n%7D%20%E5%80%8B%2C%20%E6%99%82%E9%96%93%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%20%7Bint(kdv_t_max%20%2F%20kdv_dt)%7D%20%E5%9B%9E%22%2C%0A%20%20%20%20%20%20%20%20f%22%7Bkdv_save_every%7D%20%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%94%E3%81%A8%E3%81%AB%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%A6%20%7Bkdv_frames%7D%20%E3%82%B3%E3%83%9E%22%2C%0A%20%20%20%20%20%20%20%20f%22%E7%A0%B4%E6%96%AD%E6%99%82%E5%88%BB%20t_B%20%3D%201%2Fpi%20%3D%20%7B1%20%2F%20np.pi%3A.3f%7D%2C%20%E5%86%8D%E5%B8%B0%E6%99%82%E5%88%BB%2030.4%20t_B%20%3D%20%7B30.4%20%2F%20np.pi%3A.2f%7D%22%2C%0A%20%20%20%20)%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20kdv_dt%2C%0A%20%20%20%20%20%20%20%20kdv_dx%2C%0A%20%20%20%20%20%20%20%20kdv_epsilon%2C%0A%20%20%20%20%20%20%20%20kdv_frames%2C%0A%20%20%20%20%20%20%20%20kdv_length%2C%0A%20%20%20%20%20%20%20%20kdv_n%2C%0A%20%20%20%20%20%20%20%20kdv_save_every%2C%0A%20%20%20%20%20%20%20%20kdv_t_max%2C%0A%20%20%20%20%20%20%20%20kdv_x%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E4%BF%82%E6%95%B0%E8%A1%8C%E5%88%97%E3%81%AE%E5%AE%9A%E7%BE%A9%0A%0A%20%20%20%203%20%E3%81%A4%E3%81%AE%E8%A1%8C%E5%88%97%E3%81%AF%E3%81%84%E3%81%9A%E3%82%8C%E3%82%82%E5%B7%A1%E5%9B%9E%E5%B8%AF%E8%A1%8C%E5%88%97%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%60scipy.sparse.dia_array%60%20%E3%81%AB%E5%AF%BE%E8%A7%92%E6%88%90%E5%88%86%E3%81%A8%0A%20%20%20%20%E3%82%AA%E3%83%95%E3%82%BB%E3%83%83%E3%83%88%E3%82%92%E6%B8%A1%E3%81%97%E3%81%A6%E7%B5%84%E3%81%BF%E7%AB%8B%E3%81%A6%E3%81%BE%E3%81%99%E3%80%82%E3%82%AA%E3%83%95%E3%82%BB%E3%83%83%E3%83%88%20%24%5Cpm(N-1)%24%20%E3%81%AE%E9%A0%85%E3%81%8C%E3%80%81%E5%8F%B3%E7%AB%AF%E3%81%A8%E5%B7%A6%E7%AB%AF%E3%82%92%0A%20%20%20%20%E3%81%A4%E3%81%AA%E3%81%90%E5%91%A8%E6%9C%9F%E5%A2%83%E7%95%8C%E6%9D%A1%E4%BB%B6%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%AE%9F%E9%9A%9B%E3%81%AB%E4%BD%BF%E3%81%86%E3%81%AE%E3%81%AF%20%24200%5Ctimes200%24%20%E3%81%AE%E8%A1%8C%E5%88%97%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E6%A7%8B%E9%80%A0%E3%81%8C%E8%AA%AD%E3%82%81%E3%82%8B%E3%82%88%E3%81%86%0A%20%20%20%20%E3%81%BE%E3%81%9A%20%24N%3D6%24%E3%80%81%24h%3D1%24%20%E3%81%AE%E5%B0%8F%E3%81%95%E3%81%AA%E4%BE%8B%E3%81%A7%203%20%E3%81%A4%E3%82%92%E4%B8%A6%E3%81%B9%E3%81%A6%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20from%20scipy.sparse%20import%20dia_array%0A%0A%20%20%20%20def%20mass_matrix(n%3A%20int%2C%20h%3A%20float)%20-%3E%20dia_array%3A%0A%20%20%20%20%20%20%20%20%22%22%22M_ij%20%3D%20%E2%88%AB%20%CF%86_i%20%CF%86_j%20dx%E3%80%821%20%E6%AC%A1%E8%A6%81%E7%B4%A0%E3%81%AA%E3%82%89%20h%20*%20(1%2F6%2C%202%2F3%2C%201%2F6)%20%E3%81%AE%E5%B8%AF%E8%A1%8C%E5%88%97%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20ones%20%3D%20np.ones(n)%0A%20%20%20%20%20%20%20%20diagonals%20%3D%20np.array(%5Bones%20%2F%206%2C%20ones%20%2F%206%2C%202%20*%20ones%20%2F%203%2C%20ones%20%2F%206%2C%20ones%20%2F%206%5D)%0A%20%20%20%20%20%20%20%20offsets%20%3D%20np.array(%5B-(n%20-%201)%2C%20-1%2C%200%2C%201%2C%20n%20-%201%5D)%0A%20%20%20%20%20%20%20%20return%20dia_array((diagonals%2C%20offsets)%2C%20shape%3D(n%2C%20n))%20*%20h%0A%0A%20%20%20%20def%20gradient_matrix(n%3A%20int)%20-%3E%20dia_array%3A%0A%20%20%20%20%20%20%20%20%22%22%22B_ij%20%3D%20%E2%88%AB%20%CF%86_j%20%CF%86_i'%20dx%E3%80%82%E5%8F%8D%E5%AF%BE%E7%A7%B0%E3%81%A7%20h%20%E3%81%AB%E4%BE%9D%E3%82%89%E3%81%AA%E3%81%84%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20ones%20%3D%20np.ones(n)%0A%20%20%20%20%20%20%20%20diagonals%20%3D%20np.array(%5B-ones%20%2F%202%2C%20ones%20%2F%202%2C%20-ones%20%2F%202%2C%20ones%20%2F%202%5D)%0A%20%20%20%20%20%20%20%20offsets%20%3D%20np.array(%5B-(n%20-%201)%2C%20-1%2C%201%2C%20n%20-%201%5D)%0A%20%20%20%20%20%20%20%20return%20dia_array((diagonals%2C%20offsets)%2C%20shape%3D(n%2C%20n))%0A%0A%20%20%20%20def%20stiffness_matrix(n%3A%20int%2C%20h%3A%20float)%20-%3E%20dia_array%3A%0A%20%20%20%20%20%20%20%20%22%22%22K_ij%20%3D%20%E2%88%AB%20%CF%86_i'%20%CF%86_j'%20dx%E3%80%82(1%2Fh)%20*%20(-1%2C%202%2C%20-1)%20%E3%81%AE%E5%B8%AF%E8%A1%8C%E5%88%97%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20ones%20%3D%20np.ones(n)%0A%20%20%20%20%20%20%20%20diagonals%20%3D%20np.array(%5B-ones%2C%20-ones%2C%202%20*%20ones%2C%20-ones%2C%20-ones%5D)%0A%20%20%20%20%20%20%20%20offsets%20%3D%20np.array(%5B-(n%20-%201)%2C%20-1%2C%200%2C%201%2C%20n%20-%201%5D)%0A%20%20%20%20%20%20%20%20return%20dia_array((diagonals%2C%20offsets)%2C%20shape%3D(n%2C%20n))%20%2F%20h%0A%0A%20%20%20%20(%0A%20%20%20%20%20%20%20%20mass_matrix(6%2C%201.0).toarray()%2C%0A%20%20%20%20%20%20%20%20gradient_matrix(6).toarray()%2C%0A%20%20%20%20%20%20%20%20stiffness_matrix(6%2C%201.0).toarray()%2C%0A%20%20%20%20)%0A%20%20%20%20return%20gradient_matrix%2C%20mass_matrix%2C%20stiffness_matrix%0A%0A%0A%40app.cell%0Adef%20_(gradient_matrix%2C%20kdv_dx%2C%20kdv_n%2C%20mass_matrix%2C%20stiffness_matrix)%3A%0A%20%20%20%20kdv_mass%20%3D%20mass_matrix(kdv_n%2C%20kdv_dx).tocsc()%0A%20%20%20%20kdv_gradient%20%3D%20gradient_matrix(kdv_n).tocsr()%0A%20%20%20%20kdv_stiffness%20%3D%20stiffness_matrix(kdv_n%2C%20kdv_dx).tocsr()%0A%0A%20%20%20%20f%22M%20%7Bkdv_mass.shape%7D%20nnz%3D%7Bkdv_mass.nnz%7D%2C%20B%20nnz%3D%7Bkdv_gradient.nnz%7D%2C%20K%20nnz%3D%7Bkdv_stiffness.nnz%7D%22%0A%20%20%20%20return%20kdv_gradient%2C%20kdv_mass%2C%20kdv_stiffness%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E9%9D%9E%E7%B7%9A%E5%BD%A2%E9%A0%85%0A%0A%20%20%20%20%E9%9D%9E%E7%B7%9A%E5%BD%A2%E9%A0%85%20%24P(u)_i%3D(u_%7Bi%2B1%7D%2Bu_i%2Bu_%7Bi-1%7D)(u_%7Bi%2B1%7D-u_%7Bi-1%7D)%2F6%24%20%E3%81%AF%E3%80%81%0A%20%20%20%20%60np.roll%60%20%E3%81%A7%E9%9A%A3%E3%81%AE%E7%AF%80%E7%82%B9%E3%82%92%E3%81%9A%E3%82%89%E3%81%97%E3%81%A6%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%9B%E3%81%B0%201%20%E8%A1%8C%E3%81%A7%E6%9B%B8%E3%81%91%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%60np.roll%60%20%E3%81%8C%E9%85%8D%E5%88%97%E3%81%AE%E7%AB%AF%E3%82%92%E5%B7%BB%E3%81%8D%E6%88%BB%E3%81%99%E3%81%AE%E3%81%A7%E3%80%81%E3%81%93%E3%82%8C%E3%81%8C%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E5%91%A8%E6%9C%9F%E5%A2%83%E7%95%8C%E6%9D%A1%E4%BB%B6%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E4%B8%8B%E3%81%AE%E4%BE%8B%E3%81%A7%E3%81%AF%20%24u%3D(1%2C2%2C3)%24%20%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E4%B8%AD%E5%A4%AE%E3%81%AE%E6%88%90%E5%88%86%E3%81%8C%0A%20%20%20%20%24(3%2B2%2B1)(3-1)%2F6%3D2%24%20%E3%81%A8%E3%81%AA%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20def%20nonlinear_term(u%3A%20np.ndarray)%20-%3E%20np.ndarray%3A%0A%20%20%20%20%20%20%20%20%22%22%22%E2%88%AB%20u%20u_x%20%CF%86_i%20dx%20%E3%81%AE%201%20%E6%AC%A1%E8%A6%81%E7%B4%A0%E3%81%A7%E3%81%AE%E5%8E%B3%E5%AF%86%E3%81%AA%E5%80%A4%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20u_plus%20%3D%20np.roll(u%2C%20-1)%0A%20%20%20%20%20%20%20%20u_minus%20%3D%20np.roll(u%2C%201)%0A%20%20%20%20%20%20%20%20return%20(u_plus%20%2B%20u%20%2B%20u_minus)%20*%20(u_plus%20-%20u_minus)%20%2F%206%0A%0A%20%20%20%20nonlinear_term(np.array(%5B1.0%2C%202.0%2C%203.0%5D))%0A%20%20%20%20return%20(nonlinear_term%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E5%8F%B3%E8%BE%BA%E3%81%AE%E8%A9%95%E4%BE%A1%0A%0A%20%20%20%20%E5%8F%B3%E8%BE%BA%20%24-M%5E%7B-1%7D%5Cleft%5BP(u)%2B%CE%B4%5E2BM%5E%7B-1%7DKu%5Cright%5D%24%20%E3%81%AE%E8%A9%95%E4%BE%A1%E3%81%AB%E3%81%AF%E3%80%81%E8%B3%AA%E9%87%8F%E8%A1%8C%E5%88%97%E3%82%92%E4%BF%82%E6%95%B0%E3%81%A8%E3%81%99%E3%82%8B%0A%20%20%20%20%E9%80%A3%E7%AB%8B%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%82%92%201%20%E5%9B%9E%E3%81%AE%E8%A9%95%E4%BE%A1%E3%81%82%E3%81%9F%E3%82%8A%202%20%E5%9B%9E%E8%A7%A3%E3%81%8F%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%24M%24%20%E3%81%AF%E6%99%82%E9%96%93%E3%81%AB%E4%BE%9D%E3%82%89%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%80%81%0A%20%20%20%20%E6%AF%8E%E5%9B%9E%E5%8F%8D%E5%BE%A9%E6%B3%95%E3%81%A7%E8%A7%A3%E3%81%8D%E7%9B%B4%E3%81%99%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%AB%20%60splu%60%20%E3%81%A7%E4%B8%80%E5%BA%A6%E3%81%A0%E3%81%91%20LU%20%E5%88%86%E8%A7%A3%E3%81%97%E3%80%81%0A%20%20%20%20%E4%BB%A5%E5%BE%8C%E3%81%AF%E5%89%8D%E9%80%B2%E5%BE%8C%E9%80%80%E4%BB%A3%E5%85%A5%E3%81%A0%E3%81%91%E3%81%A7%E6%B8%88%E3%81%BE%E3%81%9B%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%82%82%E3%81%A8%E3%81%AE%E5%AE%9F%E8%A3%85%E3%81%AF%E8%A8%B1%E5%AE%B9%E8%AA%A4%E5%B7%AE%20%2410%5E%7B-5%7D%24%20%E3%81%AE%20%60bicg%60%20%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E4%BB%8A%E5%9B%9E%E3%81%AF%E6%99%82%E9%96%93%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%8C%0A%20%20%20%2010%20%E4%B8%87%E5%9B%9E%E3%83%BB%E5%8F%B3%E8%BE%BA%E8%A9%95%E4%BE%A1%E3%81%8C%2040%20%E4%B8%87%E5%9B%9E%E3%81%AB%E5%A2%97%E3%81%88%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%A7%E3%81%AF%E5%8F%8D%E5%BE%A9%E6%B3%95%E3%81%AE%E6%89%93%E3%81%A1%E5%88%87%E3%82%8A%E8%AA%A4%E5%B7%AE%E3%81%8C%0A%20%20%20%20%E8%93%84%E7%A9%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82LU%20%E5%88%86%E8%A7%A3%E3%81%AA%E3%82%89%E8%AA%A4%E5%B7%AE%E3%81%AF%E4%B8%B8%E3%82%81%E8%AA%A4%E5%B7%AE%E3%81%AE%E6%B0%B4%E6%BA%96%E3%81%A7%E3%80%81%E3%81%8B%E3%81%A4%E8%A8%88%E6%B8%AC%E3%81%A7%E3%81%AF%E5%90%8C%E3%81%98%E5%95%8F%E9%A1%8C%E3%82%92%E8%A7%A3%E3%81%8F%E3%81%AE%E3%81%AB%0A%20%20%20%20%E8%A6%81%E3%81%99%E3%82%8B%E6%99%82%E9%96%93%E3%81%8C%201%2F20%20%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%AA%E3%81%8A%20%24B%24%20%E3%81%AF%E5%8F%8D%E5%AF%BE%E7%A7%B0%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%24Bw%24%20%E3%81%A8%20%24w%5E%7B%5Cmathsf%7BT%7D%7DB%24%20%E3%81%AF%E7%AC%A6%E5%8F%B7%E3%81%8C%E9%80%86%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%24%5Cint%20u_%7Bxxx%7D%CF%86_i%5C%2Cdx%3D%5Cint%20w%CF%86_i'%5C%2Cdx%3D%5Csum_jw_j%5Cint%20%CF%86_j%CF%86_i'%5C%2Cdx%3D(Bw)_i%24%20%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%0A%20%20%20%20%E4%BD%BF%E3%81%86%E3%81%AE%E3%81%AF%20%60kdv_gradient%20%40%20w%60%20%E3%81%AE%E5%81%B4%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(kdv_epsilon%2C%20kdv_gradient%2C%20kdv_mass%2C%20kdv_stiffness%2C%20nonlinear_term%2C%20np)%3A%0A%20%20%20%20from%20scipy.sparse.linalg%20import%20splu%0A%0A%20%20%20%20_mass_lu%20%3D%20splu(kdv_mass)%0A%0A%20%20%20%20def%20kdv_rhs(u%3A%20np.ndarray)%20-%3E%20np.ndarray%3A%0A%20%20%20%20%20%20%20%20curvature%20%3D%20_mass_lu.solve(kdv_stiffness%20%40%20u)%20%20%23%20w%20%3D%20M%5E-1%20K%20u%20%E2%89%83%20-u_xx%0A%20%20%20%20%20%20%20%20dispersion%20%3D%20kdv_gradient%20%40%20curvature%20%20%23%20(B%20w)_i%20%E2%89%83%20%E2%88%AB%20u_xxx%20%CF%86_i%20dx%0A%20%20%20%20%20%20%20%20return%20-_mass_lu.solve(nonlinear_term(u)%20%2B%20kdv_epsilon**2%20*%20dispersion)%0A%0A%20%20%20%20f%22%E5%88%9D%E6%9C%9F%E6%9D%A1%E4%BB%B6%E3%81%A7%E3%81%AE%20%7Cdu%2Fdt%7C%20%E3%81%AE%E6%9C%80%E5%A4%A7%E5%80%A4%20%3D%20%7Bnp.abs(kdv_rhs(np.cos(np.pi%20*%20np.arange(200)%20*%200.01))).max()%3A.3f%7D%22%0A%20%20%20%20return%20(kdv_rhs%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E5%88%9D%E6%9C%9F%E6%9D%A1%E4%BB%B6%E3%81%A8%E6%99%82%E9%96%93%E7%A9%8D%E5%88%86%0A%0A%20%20%20%20%E5%88%9D%E6%9C%9F%E6%9D%A1%E4%BB%B6%E3%81%AF%E5%91%A8%E6%9C%9F%E5%8C%BA%E9%96%93%20%24%5B0%2C2)%24%20%E4%B8%8A%E3%81%AE%20%24%5Ccos(%5Cpi%20x)%24%20%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E6%99%82%E9%96%93%E7%A9%8D%E5%88%86%E3%81%AF%E5%8F%A4%E5%85%B8%E7%9A%84%E3%81%AA%204%20%E6%AC%A1%E3%81%AE%E3%83%AB%E3%83%B3%E3%82%B2%EF%BC%9D%E3%82%AF%E3%83%83%E3%82%BF%E6%B3%95%EF%BC%88RK4%EF%BC%89%E3%82%92%E5%9B%BA%E5%AE%9A%E5%88%BB%E3%81%BF%20%24%CE%94t%3D10%5E%7B-4%7D%24%20%E3%81%A7%0A%20%20%20%20%E5%9B%9E%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%88%86%E6%95%A3%E9%A0%85%E3%81%AE%E5%9B%BA%E6%9C%89%E5%80%A4%E3%81%AF%E7%B4%94%E8%99%9A%E6%95%B0%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E8%99%9A%E8%BB%B8%E6%96%B9%E5%90%91%E3%81%AB%E5%AE%89%E5%AE%9A%E9%A0%98%E5%9F%9F%E3%82%92%E6%8C%81%E3%81%A4%20RK4%20%E3%81%8C%0A%20%20%20%20%E9%81%A9%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%EF%BC%88%E5%89%8D%E9%80%B2%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E6%B3%95%E3%81%AF%E8%99%9A%E8%BB%B8%E4%B8%8A%E3%81%A7%E5%BF%85%E3%81%9A%E7%99%BA%E6%95%A3%E3%81%97%E3%81%BE%E3%81%99%EF%BC%89%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(kdv_x%2C%20np%2C%20plt)%3A%0A%20%20%20%20kdv_u0%20%3D%20np.cos(np.pi%20*%20kdv_x)%0A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(6.4%2C%202.6)%2C%20dpi%3D100)%0A%20%20%20%20_ax.plot(kdv_x%2C%20kdv_u0)%0A%20%20%20%20_ax.set_xlabel(%22%24x%24%22)%0A%20%20%20%20_ax.set_ylabel(%22%24u(x%2C0)%24%22)%0A%20%20%20%20_ax.set_title(r%22initial%20condition%20%24%5Ccos(%5Cpi%20x)%24%22)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%20(kdv_u0%2C)%0A%0A%0A%40app.cell%0Adef%20_(kdv_rhs%2C%20np)%3A%0A%20%20%20%20def%20rk4_step(u%3A%20np.ndarray%2C%20dt%3A%20float)%20-%3E%20np.ndarray%3A%0A%20%20%20%20%20%20%20%20k1%20%3D%20dt%20*%20kdv_rhs(u)%0A%20%20%20%20%20%20%20%20k2%20%3D%20dt%20*%20kdv_rhs(u%20%2B%20k1%20%2F%202)%0A%20%20%20%20%20%20%20%20k3%20%3D%20dt%20*%20kdv_rhs(u%20%2B%20k2%20%2F%202)%0A%20%20%20%20%20%20%20%20k4%20%3D%20dt%20*%20kdv_rhs(u%20%2B%20k3)%0A%20%20%20%20%20%20%20%20return%20u%20%2B%20(k1%20%2B%202%20*%20k2%20%2B%202%20*%20k3%20%2B%20k4)%20%2F%206%0A%0A%20%20%20%20%23%201%20%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%A7%E5%88%9D%E6%9C%9F%E6%9D%A1%E4%BB%B6%E3%81%8C%E3%81%A9%E3%82%8C%E3%81%A0%E3%81%91%E5%8B%95%E3%81%8F%E3%81%8B%E3%81%AE%E7%A2%BA%E8%AA%8D%E3%80%82%0A%20%20%20%20f%221%20%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E5%BE%8C%E3%81%AE%E6%9C%80%E5%A4%A7%E5%A4%89%E5%8C%96%20%3D%20%7Bnp.abs(rk4_step(np.cos(np.pi%20*%20np.arange(200)%20*%200.01)%2C%201e-4)%20-%20np.cos(np.pi%20*%20np.arange(200)%20*%200.01)).max()%3A.2e%7D%22%0A%20%20%20%20return%20(rk4_step%2C)%0A%0A%0A%40app.cell%0Adef%20_(kdv_dt%2C%20kdv_frames%2C%20kdv_save_every%2C%20kdv_t_max%2C%20kdv_u0%2C%20np%2C%20rk4_step)%3A%0A%20%20%20%20_u%20%3D%20kdv_u0%0A%20%20%20%20_snapshots%20%3D%20%5Bkdv_u0%5D%0A%20%20%20%20_times%20%3D%20%5B0.0%5D%0A%20%20%20%20for%20_index%20in%20range(int(kdv_t_max%20%2F%20kdv_dt))%3A%0A%20%20%20%20%20%20%20%20_u%20%3D%20rk4_step(_u%2C%20kdv_dt)%0A%20%20%20%20%20%20%20%20if%20(_index%20%2B%201)%20%25%20kdv_save_every%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_snapshots.append(_u)%0A%20%20%20%20%20%20%20%20%20%20%20%20_times.append((_index%20%2B%201)%20*%20kdv_dt)%0A%0A%20%20%20%20kdv_u%20%3D%20np.array(_snapshots)%0A%20%20%20%20kdv_t%20%3D%20np.array(_times)%0A%0A%20%20%20%20(%0A%20%20%20%20%20%20%20%20f%22%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%9F%E3%82%B3%E3%83%9E%E6%95%B0%20%7Blen(kdv_t)%7D%20(%E6%83%B3%E5%AE%9A%20%7Bkdv_frames%7D)%22%2C%0A%20%20%20%20%20%20%20%20f%22u%20%E3%81%AE%E7%AF%84%E5%9B%B2%20%5B%7Bkdv_u.min()%3A.3f%7D%2C%20%7Bkdv_u.max()%3A.3f%7D%5D%22%2C%0A%20%20%20%20%20%20%20%20f%22%E8%B3%AA%E9%87%8F%20%E2%88%ABu%20dx%20%E3%81%AE%E5%A4%89%E5%8C%96%20%7Babs(kdv_u%5B-1%5D.sum()%20-%20kdv_u%5B0%5D.sum())%20*%200.01%3A.2e%7D%22%2C%0A%20%20%20%20)%0A%20%20%20%20return%20kdv_t%2C%20kdv_u%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E6%99%82%E7%A9%BA%E9%96%93%E3%83%80%E3%82%A4%E3%82%A2%E3%82%B0%E3%83%A9%E3%83%A0%0A%0A%20%20%20%20%E6%A8%AA%E8%BB%B8%20%24x%24%E3%83%BB%E7%B8%A6%E8%BB%B8%20%24t%24%20%E3%81%A7%20%24u(x%2Ct)%24%20%E3%82%92%E4%B8%80%E6%9E%9A%E3%81%AB%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%24t%5Csimeq0.3%24%20%E3%81%A7%E6%B3%A2%E9%9D%A2%E3%81%8C%E5%88%87%E3%82%8A%E7%AB%8B%E3%81%A1%E3%80%81%0A%20%20%20%20%E3%81%9D%E3%81%93%E3%81%8B%E3%82%89%E7%94%9F%E3%81%BE%E3%82%8C%E3%81%9F%E8%A4%87%E6%95%B0%E3%81%AE%E7%AD%8B%E3%81%8C%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E4%B8%80%E5%AE%9A%E3%81%AE%E5%82%BE%E3%81%8D%E3%81%A7%E9%80%B2%E3%82%93%E3%81%A7%E3%81%84%E3%81%8F%E6%A7%98%E5%AD%90%E3%81%8C%E8%A6%8B%E3%81%88%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E5%82%BE%E3%81%8D%E3%81%AE%E9%80%86%E6%95%B0%E3%81%8C%E4%BC%9D%E6%92%AD%E9%80%9F%E5%BA%A6%E3%81%A7%E3%80%81%E8%89%B2%E3%81%8C%E6%BF%83%E3%81%84%EF%BC%88%E6%8C%AF%E5%B9%85%E3%81%8C%E5%A4%A7%E3%81%8D%E3%81%84%EF%BC%89%E7%AD%8B%E3%81%BB%E3%81%A9%E9%80%9F%E3%81%8F%E9%80%B2%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%81%8C%E3%80%8C%E6%8C%AF%E5%B9%85%E3%81%8C%E5%A4%A7%E3%81%8D%E3%81%84%E3%82%BD%E3%83%AA%E3%83%88%E3%83%B3%E3%81%BB%E3%81%A9%E9%80%9F%E3%81%84%E3%80%8D%E3%81%A8%E3%81%84%E3%81%86%20KdV%20%E3%81%AE%E9%96%A2%E4%BF%82%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(kdv_length%2C%20kdv_t%2C%20kdv_u%2C%20plt)%3A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(5.6%2C%204.4)%2C%20dpi%3D100)%0A%20%20%20%20_im%20%3D%20_ax.imshow(%0A%20%20%20%20%20%20%20%20kdv_u%2C%0A%20%20%20%20%20%20%20%20origin%3D%22lower%22%2C%0A%20%20%20%20%20%20%20%20aspect%3D%22auto%22%2C%0A%20%20%20%20%20%20%20%20cmap%3D%22magma%22%2C%0A%20%20%20%20%20%20%20%20vmin%3D-1%2C%0A%20%20%20%20%20%20%20%20vmax%3D3%2C%0A%20%20%20%20%20%20%20%20extent%3D%5B0%2C%20kdv_length%2C%20kdv_t%5B0%5D%2C%20kdv_t%5B-1%5D%5D%2C%0A%20%20%20%20)%0A%20%20%20%20_ax.set_xlabel(%22%24x%24%22)%0A%20%20%20%20_ax.set_ylabel(%22%24t%24%22)%0A%20%20%20%20_ax.set_title(%22space-time%20diagram%20of%20%24u(x%2Ct)%24%22)%0A%20%20%20%20_fig.colorbar(_im%2C%20ax%3D_ax)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%0A%0A%20%20%20%20161%20%E3%82%B3%E3%83%9E%E3%82%92%201%20%E3%82%B3%E3%83%9E%2050%20ms%20%E3%81%A7%E5%86%8D%E7%94%9F%E3%81%99%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81%E5%86%8D%E7%94%9F%E6%99%82%E9%96%93%E3%81%AF%E7%B4%84%208.1%20%E7%A7%92%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(artifacts_dir%2C%20kdv_length%2C%20kdv_t%2C%20kdv_u%2C%20kdv_x%2C%20plt%2C%20save_gif)%3A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(6.4%2C%203.6)%2C%20dpi%3D100)%0A%20%20%20%20_ax.set_xlim(0%2C%20kdv_length)%0A%20%20%20%20_ax.set_ylim(-1.4%2C%203.2)%0A%20%20%20%20_ax.set_xlabel(%22%24x%24%22)%0A%20%20%20%20_ax.set_ylabel(%22%24u%24%22)%0A%20%20%20%20_ax.axhline(0%2C%20lw%3D0.5%2C%20color%3D%220.7%22)%0A%20%20%20%20_line%2C%20%3D%20_ax.plot(%5B%5D%2C%20%5B%5D%2C%20lw%3D1.4)%0A%20%20%20%20_title%20%3D%20_ax.set_title(%22KdV%20(FEM)%2C%20t%20%3D%200.00%22)%0A%20%20%20%20_fig.tight_layout()%0A%0A%20%20%20%20def%20_update(frame)%3A%0A%20%20%20%20%20%20%20%20_line.set_data(kdv_x%2C%20kdv_u%5Bframe%5D)%0A%20%20%20%20%20%20%20%20_title.set_text(f%22KdV%20(FEM)%2C%20t%20%3D%20%7Bkdv_t%5Bframe%5D%3A.2f%7D%22)%0A%20%20%20%20%20%20%20%20return%20(_line%2C%20_title)%0A%0A%20%20%20%20kdv_gif%20%3D%20artifacts_dir%20%2F%20%22kdv.gif%22%0A%20%20%20%20save_gif(_fig%2C%20_update%2C%20len(kdv_t)%2C%20kdv_gif%2C%20interval%3D50)%0A%20%20%20%20return%20(kdv_gif%2C)%0A%0A%0A%40app.cell%0Adef%20_(gif_image%2C%20kdv_gif)%3A%0A%20%20%20%20gif_image(kdv_gif%2C%20alt%3D%22%E6%9C%89%E9%99%90%E8%A6%81%E7%B4%A0%E6%B3%95%E3%81%AB%E3%82%88%E3%82%8B%20KdV%20%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%AE%E6%99%82%E9%96%93%E7%99%BA%E5%B1%95%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AF%E6%AC%A1%E3%81%AE%204%20%E7%82%B9%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%201.%20%24t%5Clesssim0.3%24%3A%20%E7%A7%BB%E6%B5%81%E9%A0%85%20%24uu_x%24%20%E3%81%A0%E3%81%91%E3%81%8C%E5%8A%B9%E3%81%8D%E3%80%81%E4%BD%99%E5%BC%A6%E6%B3%A2%E3%81%AE%E4%B8%8B%E3%82%8A%E5%9D%82%E3%81%8C%E5%88%87%E3%82%8A%E7%AB%8B%E3%81%A4%E3%80%82%0A%20%20%20%20%20%20%20%E5%88%86%E6%95%A3%E3%81%8C%E7%84%A1%E3%81%91%E3%82%8C%E3%81%B0%E7%A0%B4%E6%96%AD%E6%99%82%E5%88%BB%20%24t_B%3D1%2F%5Cpi%5Csimeq0.318%24%20%E3%81%A7%E5%8B%BE%E9%85%8D%E3%81%8C%E7%84%A1%E9%99%90%E5%A4%A7%E3%81%AB%E3%81%AA%E3%82%8B%E3%80%82%0A%20%20%20%202.%20%24t%5Csimeq0.3%24%E3%80%9C%240.6%24%3A%20%E5%88%87%E3%82%8A%E7%AB%8B%E3%81%A3%E3%81%9F%E9%9D%A2%E3%81%8C%20%24%CE%B4%5E2u_%7Bxxx%7D%24%20%E3%81%AB%E8%80%90%E3%81%88%E3%81%8D%E3%82%8C%E3%81%9A%E3%80%81%0A%20%20%20%20%20%20%20%E5%B9%85%20%24%5Csim%20%CE%B4%24%20%E3%81%AE%E7%B4%B0%E3%81%84%E5%B1%B1%E3%81%8C%E6%AC%A1%E3%80%85%E3%81%AB%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E3%80%82%E6%8C%AF%E5%B9%85%E3%81%AF%E5%88%9D%E6%9C%9F%E5%80%A4%E3%81%AE%202%20%E5%80%8D%E4%BB%A5%E4%B8%8A%E3%81%AB%E9%81%94%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%203.%20%24t%5Csimeq1%24%3A%208%20%E5%80%8B%E5%89%8D%E5%BE%8C%E3%81%AE%E5%B1%B1%E3%81%8C%E6%8C%AF%E5%B9%85%E9%A0%86%E3%81%AB%E6%95%B4%E5%88%97%E3%81%99%E3%82%8B%E3%80%82%E8%83%8C%E3%81%AE%E9%AB%98%E3%81%84%E5%B1%B1%E3%81%BB%E3%81%A9%E9%80%9F%E3%81%8F%E9%80%B2%E3%82%80%E3%81%AE%E3%81%A7%E3%80%81%0A%20%20%20%20%20%20%20%E8%BF%BD%E3%81%84%E8%B6%8A%E3%81%97%E3%81%8C%E8%B5%B7%E3%81%93%E3%82%8B%E3%80%82**%E8%A1%9D%E7%AA%81%E3%81%97%E3%81%A6%E3%82%82%E6%B3%A2%E5%BD%A2%E3%81%8C%E5%B4%A9%E3%82%8C%E3%81%9A%E3%80%81%E4%BD%8D%E7%9B%B8%E3%81%8C%E3%81%9A%E3%82%8C%E3%82%8B%E3%81%A0%E3%81%91**%E3%81%A7%0A%20%20%20%20%20%20%20%E3%81%99%E3%82%8A%E6%8A%9C%E3%81%91%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%80%81%E3%81%93%E3%82%8C%E3%82%89%E3%81%8C%E5%8D%98%E3%81%AA%E3%82%8B%E6%B3%A2%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%82%BD%E3%83%AA%E3%83%88%E3%83%B3%E3%81%A7%E3%81%82%E3%82%8B%E8%A8%BC%E6%8B%A0%E3%80%82%0A%20%20%20%204.%20%24t%5Csimeq9.7%24%3A%20%E4%BD%8D%E7%9B%B8%E3%81%8C%E3%81%BB%E3%81%BC%E6%8F%83%E3%81%84%E3%80%81%E5%88%9D%E6%9C%9F%E3%81%AE%E4%BD%99%E5%BC%A6%E6%B3%A2%E3%81%AB%E8%BF%91%E3%81%84%E5%BD%A2%E3%81%8C%E5%BE%A9%E5%85%83%E3%81%99%E3%82%8B%0A%20%20%20%20%20%20%20%EF%BC%88%E5%86%8D%E5%B8%B0%E7%8F%BE%E8%B1%A1%EF%BC%89%E3%80%82Fermi%E2%80%93Pasta%E2%80%93Ulam%20%E5%95%8F%E9%A1%8C%E3%81%A7%E8%A6%8B%E3%81%A4%E3%81%8B%E3%81%A3%E3%81%9F%E5%86%8D%E5%B8%B0%E3%81%A8%E5%90%8C%E3%81%98%E7%8F%BE%E8%B1%A1%E3%81%A7%E3%80%81%0A%20%20%20%20%20%20%20Zabusky%20%E3%81%A8%20Kruskal%20%E3%81%8C%E3%82%BD%E3%83%AA%E3%83%88%E3%83%B3%E3%81%A8%E3%81%84%E3%81%86%E6%A6%82%E5%BF%B5%E3%81%AB%E5%88%B0%E9%81%94%E3%81%97%E3%81%9F%E3%81%8D%E3%81%A3%E3%81%8B%E3%81%91%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%80%82%0A%0A%20%20%20%20%E6%9C%80%E5%BE%8C%E3%81%AE%E5%87%BA%E5%8A%9B%E3%81%AB%E3%81%82%E3%82%8B%20%24%5Cint%20u%5C%2Cdx%24%20%E3%81%AE%E5%A4%89%E5%8C%96%E3%81%8C%E3%81%BB%E3%81%BC%E3%82%BC%E3%83%AD%E3%81%A7%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AF%E3%80%81%0A%20%20%20%20%E8%B3%AA%E9%87%8F%E3%81%8C%E4%BF%9D%E5%AD%98%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%EF%BC%88%E6%95%B0%E5%80%A4%E6%95%A3%E9%80%B8%E3%81%8C%E7%84%A1%E3%81%84%EF%BC%89%E3%81%93%E3%81%A8%E3%81%AE%E7%B0%A1%E5%8D%98%E3%81%AA%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20NGSolve%20%E3%81%A7%202%20%E6%AC%A1%E5%85%83%E5%95%8F%E9%A1%8C%E3%82%92%E8%A7%A3%E3%81%8F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%5BNGSolve%5D(https%3A%2F%2Fngsolve.org%2F)%20%E3%81%AF%E3%83%A1%E3%83%83%E3%82%B7%E3%83%A5%E7%94%9F%E6%88%90%E5%99%A8%20Netgen%20%E3%81%A8%E7%B5%84%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E6%9C%89%E9%99%90%E8%A6%81%E7%B4%A0%E6%B3%95%E3%81%AE%0A%20%20%20%20%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%A7%E3%80%81%E5%BC%B1%E5%BD%A2%E5%BC%8F%E3%82%92%E6%95%B0%E5%BC%8F%E3%81%AB%E8%BF%91%E3%81%84%E5%BD%A2%E3%81%A7%E6%9B%B8%E3%81%8F%E3%81%A8%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%AB%E3%81%BE%E3%81%A7%E8%87%AA%E5%8B%95%E3%81%A7%E8%A1%8C%E3%81%A3%E3%81%A6%E3%81%8F%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%81%93%E3%81%AE%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%A7%E3%81%AF%20%60specialized%60%20%E4%BE%9D%E5%AD%98%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%0A%20%20%20%20%60uv%20sync%20--all-groups%60%20%E3%81%A7%E5%B0%8E%E5%85%A5%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%EF%BC%88Colab%20%E7%94%A8%E3%81%AE%E5%88%9D%E6%9C%9F%E5%8C%96%E3%82%BB%E3%83%AB%E3%81%AF%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%EF%BC%89%E3%80%82%0A%0A%20%20%20%20NGSolve%20%E3%81%AB%E4%BB%98%E5%B1%9E%E3%81%99%E3%82%8B%20%60Draw%60%20%E3%81%AF%20WebGL%20%E3%81%AE%E3%82%A6%E3%82%A3%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88%E3%82%92%E8%BF%94%E3%81%97%E3%80%81marimo%20%E3%81%AE%E9%9D%99%E7%9A%84%20HTML%20%E3%81%A7%E3%81%AF%0A%20%20%20%20%E6%8F%8F%E7%94%BB%E3%81%95%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E3%81%9D%E3%81%93%E3%81%A7%E3%80%81%E3%83%A1%E3%83%83%E3%82%B7%E3%83%A5%E3%81%AE%E4%B8%89%E8%A7%92%E5%BD%A2%E5%88%86%E5%89%B2%E3%82%92%20matplotlib%20%E3%81%AE%0A%20%20%20%20%60Triangulation%60%20%E3%81%AB%E7%A7%BB%E3%81%97%E6%9B%BF%E3%81%88%E3%82%8B%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC%E3%81%A8%E3%80%81%60CoefficientFunction%60%20%E3%82%84%0A%20%20%20%20%60GridFunction%60%20%E3%82%92%E6%A0%BC%E5%AD%90%E4%B8%8A%E3%81%A7%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC%E3%82%92%E7%94%A8%E6%84%8F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%60triangulation(mesh)%60%3A%20%E7%AF%80%E7%82%B9%E5%BA%A7%E6%A8%99%E3%81%A8%E4%B8%89%E8%A7%92%E5%BD%A2%E3%81%AE%E9%A0%82%E7%82%B9%E7%95%AA%E5%8F%B7%E3%81%8B%E3%82%89%0A%20%20%20%20%20%20%60matplotlib.tri.Triangulation%60%20%E3%82%92%E4%BD%9C%E3%82%8B%E3%80%82%60triplot%60%20%2F%20%60tricontourf%60%20%E3%81%AB%E6%B8%A1%E3%81%9B%E3%82%8B%E3%80%82%0A%20%20%20%20-%20%60sample_scalar(func%2C%20mesh%2C%20xs%2C%20ys)%60%3A%20%E3%82%B9%E3%82%AB%E3%83%A9%E3%83%BC%E5%A0%B4%E3%82%92%E6%A0%BC%E5%AD%90%E4%B8%8A%E3%81%A7%E8%A9%95%E4%BE%A1%E3%81%97%E3%81%A6%0A%20%20%20%20%20%202%20%E6%AC%A1%E5%85%83%E9%85%8D%E5%88%97%EF%BC%88%60imshow%60%20%E7%94%A8%E3%80%81%E8%A1%8C%E3%81%8C%20%24y%24%E3%83%BB%E5%88%97%E3%81%8C%20%24x%24%EF%BC%89%E3%81%AB%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20-%20%60sample_vector(func%2C%20mesh%2C%20xs%2C%20ys)%60%3A%20%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E5%A0%B4%E3%82%92%E6%A0%BC%E5%AD%90%E4%B8%8A%E3%81%A7%E8%A9%95%E4%BE%A1%E3%81%97%E3%81%A6%0A%20%20%20%20%20%202%20%E6%88%90%E5%88%86%E3%81%AE%E9%85%8D%E5%88%97%EF%BC%88%60quiver%60%20%E7%94%A8%EF%BC%89%E3%81%AB%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20import%20ngsolve%0A%20%20%20%20from%20matplotlib.tri%20import%20Triangulation%0A%0A%20%20%20%20def%20triangulation(mesh)%20-%3E%20Triangulation%3A%0A%20%20%20%20%20%20%20%20points%20%3D%20np.array(%5Bvertex.point%20for%20vertex%20in%20mesh.vertices%5D)%0A%20%20%20%20%20%20%20%20triangles%20%3D%20np.array(%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%5Bvertex.nr%20for%20vertex%20in%20element.vertices%5D%20for%20element%20in%20mesh.Elements(ngsolve.VOL)%5D%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20return%20Triangulation(points%5B%3A%2C%200%5D%2C%20points%5B%3A%2C%201%5D%2C%20triangles)%0A%0A%20%20%20%20def%20sample_scalar(func%2C%20mesh%2C%20xs%2C%20ys)%20-%3E%20np.ndarray%3A%0A%20%20%20%20%20%20%20%20return%20np.array(%5B%5Bfunc(mesh(px%2C%20py))%20for%20px%20in%20xs%5D%20for%20py%20in%20ys%5D%2C%20dtype%3Dfloat)%0A%0A%20%20%20%20def%20sample_vector(func%2C%20mesh%2C%20xs%2C%20ys)%20-%3E%20np.ndarray%3A%0A%20%20%20%20%20%20%20%20values%20%3D%20np.array(%5B%5Bfunc(mesh(px%2C%20py))%20for%20px%20in%20xs%5D%20for%20py%20in%20ys%5D%2C%20dtype%3Dfloat)%0A%20%20%20%20%20%20%20%20return%20values%5B%3A%2C%20%3A%2C%200%5D%2C%20values%5B%3A%2C%20%3A%2C%201%5D%0A%0A%20%20%20%20f%22NGSolve%20%7Bngsolve.__version__%7D%22%0A%20%20%20%20return%20ngsolve%2C%20sample_scalar%2C%20sample_vector%2C%20triangulation%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E6%AD%A3%E6%96%B9%E9%A0%98%E5%9F%9F%E3%81%AE%E3%83%9D%E3%82%A2%E3%82%BD%E3%83%B3%E6%96%B9%E7%A8%8B%E5%BC%8F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%5BFirst%20NGSolve%20example%5D(https%3A%2F%2Fdocu.ngsolve.org%2Flatest%2Fi-tutorials%2Funit-1.1-poisson%2Fpoisson.html)%0A%20%20%20%20%E3%81%AB%E6%B2%BF%E3%81%A3%E3%81%A6%E3%80%81%E5%8D%98%E4%BD%8D%E6%AD%A3%E6%96%B9%E5%BD%A2%20%24S%3D%5B0%2C1%5D%5E2%24%20%E4%B8%8A%E3%81%AE%E3%83%9D%E3%82%A2%E3%82%BD%E3%83%B3%E6%96%B9%E7%A8%8B%E5%BC%8F%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cbegin%7Baligned%7D%0A%20%20%20%20%26-%5CDelta%20u%3Df%5Cquad%5Ctext%7B%40%E3%83%90%E3%83%AB%E3%82%AF%E4%B8%AD%7D%2C%5C%5C%0A%20%20%20%20%26u%3D0%5Cquad%5Ctext%7B%40%E4%B8%8B%E8%BE%BA%E3%81%8A%E3%82%88%E3%81%B3%E5%8F%B3%E8%BE%BA%7D%2C%5C%5C%0A%20%20%20%20%26%5Cfrac%7B%E2%88%82u%7D%7B%E2%88%82n%7D%3D0%5Cquad%5Ctext%7B%40%E4%B8%8A%E8%BE%BA%E3%81%8A%E3%82%88%E3%81%B3%E5%B7%A6%E8%BE%BA%7D%0A%20%20%20%20%5Cend%7Baligned%7D%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%82%92%E8%A7%A3%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%E5%8F%B3%E8%BE%BA%E3%81%AF%20%24f(x%2Cy)%3Dx%24%20%E3%81%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%BE%E3%81%9A%E3%83%A1%E3%83%83%E3%82%B7%E3%83%A5%E3%82%92%E7%94%9F%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%60maxh%60%20%E3%81%AF%E8%A6%81%E7%B4%A0%E3%81%AE%E6%9C%80%E5%A4%A7%E8%BE%BA%E9%95%B7%E3%81%A7%E3%80%81%E5%B0%8F%E3%81%95%E3%81%8F%E3%81%99%E3%82%8B%E3%81%BB%E3%81%A9%0A%20%20%20%20%E7%B4%B0%E3%81%8B%E3%81%84%E3%83%A1%E3%83%83%E3%82%B7%E3%83%A5%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E3%82%82%E3%81%A8%E3%81%AE%20%60maxh%3D0.2%60%20%E3%81%8B%E3%82%89%20%60maxh%3D0.12%60%20%E3%81%B8%E7%B4%B0%E3%81%8B%E3%81%8F%E3%81%97%E3%81%A6%E3%80%81%0A%20%20%20%20%E7%AD%89%E9%AB%98%E7%B7%9A%E3%81%8C%E8%A7%92%E5%BC%B5%E3%81%A3%E3%81%A6%E8%A6%8B%E3%81%88%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(ngsolve%2C%20plt%2C%20triangulation)%3A%0A%20%20%20%20poisson_mesh%20%3D%20ngsolve.Mesh(ngsolve.unit_square.GenerateMesh(maxh%3D0.12))%0A%20%20%20%20poisson_tri%20%3D%20triangulation(poisson_mesh)%0A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(4.2%2C%204.0)%2C%20dpi%3D100)%0A%20%20%20%20_ax.triplot(poisson_tri%2C%20lw%3D0.5%2C%20color%3D%220.35%22)%0A%20%20%20%20_ax.set_aspect(%22equal%22)%0A%20%20%20%20_ax.set_title(f%22mesh%3A%20%7Bpoisson_mesh.nv%7D%20vertices%2C%20%7Bpoisson_mesh.ne%7D%20elements%22)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%20poisson_mesh%2C%20poisson_tri%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E6%AC%A1%E3%81%AB%E6%9C%89%E9%99%90%E8%A6%81%E7%B4%A0%E7%A9%BA%E9%96%93%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%60H1%60%20%E3%81%AF%E9%80%A3%E7%B6%9A%E3%81%AA%E5%8C%BA%E5%88%86%E5%A4%9A%E9%A0%85%E5%BC%8F%E3%81%AE%E7%A9%BA%E9%96%93%E3%81%A7%E3%80%81%0A%20%20%20%20%60order%3D2%60%20%E3%81%AF%202%20%E6%AC%A1%E8%A6%81%E7%B4%A0%EF%BC%88%E5%90%84%E8%BE%BA%E3%81%AE%E4%B8%AD%E7%82%B9%E3%81%AB%E3%82%82%E8%87%AA%E7%94%B1%E5%BA%A6%E3%81%8C%E4%BB%98%E3%81%8F%EF%BC%89%E3%82%92%E6%84%8F%E5%91%B3%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E5%A2%83%E7%95%8C%E6%9D%A1%E4%BB%B6%E3%82%82%E3%81%93%E3%81%93%E3%81%A7%E6%8C%87%E5%AE%9A%E3%81%97%E3%80%81%60dirichlet%3D%22bottom%7Cright%22%60%20%E3%81%A8%E3%81%97%E3%81%9F%E8%BE%BA%E3%81%AE%E8%87%AA%E7%94%B1%E5%BA%A6%E3%81%AF%0A%20%20%20%20%E5%BE%8C%E3%81%AE%20%60FreeDofs()%60%20%E3%81%8B%E3%82%89%E9%99%A4%E3%81%8B%E3%82%8C%E3%81%A6%E5%80%A4%E3%81%8C%E5%9B%BA%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E4%B8%8A%E8%BE%BA%E3%83%BB%E5%B7%A6%E8%BE%BA%E3%81%AB%E3%81%AF%0A%20%20%20%20%E4%BD%95%E3%82%82%E3%81%97%E3%81%AA%E3%81%8F%E3%81%A6%E3%82%82%E8%87%AA%E7%84%B6%E5%A2%83%E7%95%8C%E6%9D%A1%E4%BB%B6%EF%BC%88%24%E2%88%82u%2F%E2%88%82n%3D0%24%EF%BC%89%E3%81%8C%E8%AA%B2%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(ngsolve%2C%20poisson_mesh)%3A%0A%20%20%20%20poisson_fes%20%3D%20ngsolve.H1(poisson_mesh%2C%20order%3D2%2C%20dirichlet%3D%22bottom%7Cright%22)%0A%20%20%20%20_free%20%3D%20sum(1%20for%20flag%20in%20poisson_fes.FreeDofs()%20if%20flag)%0A%20%20%20%20f%22%E5%85%A8%E8%87%AA%E7%94%B1%E5%BA%A6%20%7Bpoisson_fes.ndof%7D%2C%20%E3%81%86%E3%81%A1%E8%87%AA%E7%94%B1%E3%81%AA%E8%87%AA%E7%94%B1%E5%BA%A6%20%7B_free%7D%2C%20%E5%9B%BA%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%9F%E8%87%AA%E7%94%B1%E5%BA%A6%20%7Bpoisson_fes.ndof%20-%20_free%7D%22%0A%20%20%20%20return%20(poisson_fes%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E6%9C%89%E9%99%90%E8%A6%81%E7%B4%A0%E6%B3%95%E3%81%A7%E4%BD%BF%E3%81%86%203%20%E7%A8%AE%E9%A1%9E%E3%81%AE%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E7%94%A8%E6%84%8F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%60poisson_trial%60%20(%24u%24)%3A%20%E8%A7%A3%E3%82%92%E5%B1%95%E9%96%8B%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E8%A9%A6%E8%A1%8C%E9%96%A2%E6%95%B0%E3%80%82%E3%81%BE%E3%81%A0%E6%95%B0%E5%80%A4%E3%82%92%E6%8C%81%E3%81%9F%E3%81%AA%E3%81%84%E8%A8%98%E5%8F%B7%E3%80%82%0A%20%20%20%20-%20%60poisson_test%60%20(%24v%24)%3A%20%E5%BC%B1%E5%BD%A2%E5%BC%8F%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E8%A9%A6%E9%A8%93%E9%96%A2%E6%95%B0%EF%BC%88%E9%87%8D%E3%81%BF%E9%96%A2%E6%95%B0%EF%BC%89%E3%80%82%0A%20%20%20%20-%20%60poisson_gfu%60%3A%20%E6%9C%89%E9%99%90%E8%A6%81%E7%B4%A0%E7%A9%BA%E9%96%93%E4%B8%8A%E3%81%AE%E9%96%A2%E6%95%B0%E3%81%9D%E3%81%AE%E3%82%82%E3%81%AE%E3%80%82%E4%BF%82%E6%95%B0%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%20%60.vec%60%20%E3%82%92%E6%8C%81%E3%81%A1%E3%80%81%0A%20%20%20%20%20%20%E9%80%A3%E7%AB%8B%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%82%92%E8%A7%A3%E3%81%84%E3%81%9F%E7%B5%90%E6%9E%9C%E3%81%8C%E3%81%93%E3%81%93%E3%81%B8%E5%85%A5%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(ngsolve%2C%20poisson_fes)%3A%0A%20%20%20%20poisson_trial%20%3D%20poisson_fes.TrialFunction()%0A%20%20%20%20poisson_test%20%3D%20poisson_fes.TestFunction()%0A%20%20%20%20poisson_gfu%20%3D%20ngsolve.GridFunction(poisson_fes)%0A%20%20%20%20(%0A%20%20%20%20%20%20%20%20f%22trial%2Ftest%20%E3%81%AF%E6%95%B0%E5%80%A4%E3%82%92%E6%8C%81%E3%81%9F%E3%81%AA%E3%81%84%E8%A8%98%E5%8F%B7%3A%20%7Btype(poisson_trial).__name__%7D%22%2C%0A%20%20%20%20%20%20%20%20f%22gfu%20%E3%81%AF%E4%BF%82%E6%95%B0%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%92%E6%8C%81%E3%81%A4%E6%9C%89%E9%99%90%E8%A6%81%E7%B4%A0%E7%A9%BA%E9%96%93%E4%B8%8A%E3%81%AE%E9%96%A2%E6%95%B0%3A%20len(gfu.vec)%20%3D%20%7Blen(poisson_gfu.vec)%7D%22%2C%0A%20%20%20%20)%0A%20%20%20%20return%20poisson_gfu%2C%20poisson_test%2C%20poisson_trial%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%83%9D%E3%82%A2%E3%82%BD%E3%83%B3%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%AE%E5%BC%B1%E5%BD%A2%E5%BC%8F%E3%81%AF%E3%80%81%E8%A9%A6%E9%A8%93%E9%96%A2%E6%95%B0%20%24v%5Cin%20H%5E1_0(S)%24%20%E3%82%92%E6%8E%9B%E3%81%91%E3%81%A6%E9%83%A8%E5%88%86%E7%A9%8D%E5%88%86%E3%81%99%E3%82%8B%E3%81%A8%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cbegin%7Baligned%7D%0A%20%20%20%20%26-%CE%94u%3Df%20%5CRightarrow%E2%88%AB(-%CE%94%20u)vdS%3D%E2%88%ABfvdS%20%5C%5C%0A%20%20%20%20%26%5CLeftrightarrow%0A%20%20%20%20%5Coint_%7B%E2%88%82S%7D%5Cleft(-%5Csum_i%E2%88%82_iu%5Ccdot%20v%5Cright)dl%5Ei%2B%E2%88%AB%5Csum_i%E2%88%82_iu%E2%88%82_ivdS%3D%E2%88%ABfvdS.%0A%20%20%20%20%5Cend%7Baligned%7D%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%A8%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E3%83%87%E3%82%A3%E3%83%AA%E3%82%AF%E3%83%AC%E5%A2%83%E7%95%8C%E3%81%A7%E3%81%AF%20%24v%3D0%24%E3%80%81%E3%83%8E%E3%82%A4%E3%83%9E%E3%83%B3%E5%A2%83%E7%95%8C%E3%81%A7%E3%81%AF%20%24%E2%88%82u%2F%E2%88%82n%3D0%24%20%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%0A%20%20%20%201%20%E3%81%A4%E7%9B%AE%E3%81%AE%E8%A1%A8%E9%9D%A2%E9%A0%85%E3%81%AF%E6%B6%88%E3%81%88%E3%81%BE%E3%81%99%E3%80%82%E6%AE%8B%E3%82%8B%E3%81%AE%E3%81%AF%0A%20%20%20%20%24%24%0A%20%20%20%20a(u%2Cv)%3D%5Cint%5Cnabla%20u%5Ccdot%5Cnabla%20v%5C%2CdS%2C%5Cquad%0A%20%20%20%20%5Cell(v)%3D%5Cint%20fv%5C%2CdS%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%A7%E3%80%81%E3%81%93%E3%82%8C%E3%81%8C%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%20%60BilinearForm%60%20%E3%81%A8%20%60LinearForm%60%20%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(poisson_fes%2C%20poisson_test%2C%20poisson_trial)%3A%0A%20%20%20%20from%20ngsolve%20import%20BilinearForm%2C%20LinearForm%2C%20grad%2C%20x%0A%20%20%20%20from%20ngsolve%20import%20dx%20as%20ngs_dx%0A%0A%20%20%20%20poisson_a%20%3D%20BilinearForm(poisson_fes%2C%20symmetric%3DTrue)%0A%20%20%20%20poisson_a%20%2B%3D%20grad(poisson_trial)%20*%20grad(poisson_test)%20*%20ngs_dx%0A%20%20%20%20poisson_a.Assemble()%0A%0A%20%20%20%20poisson_f%20%3D%20LinearForm(poisson_fes)%0A%20%20%20%20poisson_f%20%2B%3D%20x%20*%20poisson_test%20*%20ngs_dx%0A%20%20%20%20poisson_f.Assemble()%0A%0A%20%20%20%20f%22a%3A%20%7Bpoisson_a.mat.height%7Dx%7Bpoisson_a.mat.width%7D%2C%20%E9%9D%9E%E3%82%BC%E3%83%AD%20%7Bpoisson_a.mat.nze%7D%20%E5%80%8B%20%2F%20f%3A%20%E9%95%B7%E3%81%95%20%7Blen(poisson_f.vec)%7D%22%0A%20%20%20%20return%20grad%2C%20poisson_a%2C%20poisson_f%2C%20x%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%5BNumpy%20Interface%5D(https%3A%2F%2Fdocu.ngsolve.org%2Flatest%2Fhow_to%2Fhowto_numpy.html)%20%E3%82%92%E4%BD%BF%E3%81%86%E3%81%A8%E3%80%81%0A%20%20%20%20%E7%B5%84%E3%81%BF%E4%B8%8A%E3%81%8C%E3%81%A3%E3%81%9F%E5%8F%B3%E8%BE%BA%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%A8%E5%B7%A6%E8%BE%BA%E8%A1%8C%E5%88%97%E3%82%92%20NumPy%20%2F%20SciPy%20%E3%81%B8%E5%8F%96%E3%82%8A%E5%87%BA%E3%81%9B%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E5%B7%A6%E8%BE%BA%E3%81%AE%E7%96%8E%E8%A1%8C%E5%88%97%E3%81%AF%E3%80%81%E7%AF%80%E7%82%B9%E3%81%AE%E7%95%AA%E5%8F%B7%E4%BB%98%E3%81%91%E3%82%92%E5%8F%8D%E6%98%A0%E3%81%97%E3%81%9F%E5%AF%BE%E7%A7%B0%E3%81%AA%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(plt%2C%20poisson_a%2C%20poisson_f)%3A%0A%20%20%20%20import%20scipy.sparse%20as%20sp%0A%0A%20%20%20%20_rows%2C%20_cols%2C%20_vals%20%3D%20poisson_a.mat.COO()%0A%20%20%20%20poisson_matrix%20%3D%20sp.csr_matrix((_vals%2C%20(_rows%2C%20_cols)))%0A%0A%20%20%20%20_fig%2C%20_axes%20%3D%20plt.subplots(1%2C%202%2C%20figsize%3D(9.0%2C%203.4)%2C%20dpi%3D100)%0A%20%20%20%20_axes%5B0%5D.plot(poisson_f.vec.FV().NumPy()%2C%20lw%3D0.8)%0A%20%20%20%20_axes%5B0%5D.set_title(%22right-hand%20side%20vector%20%24f%24%22)%0A%20%20%20%20_axes%5B0%5D.set_xlabel(%22degree%20of%20freedom%22)%0A%20%20%20%20_axes%5B1%5D.spy(poisson_matrix%2C%20markersize%3D0.6)%0A%20%20%20%20_axes%5B1%5D.set_title(f%22stiffness%20matrix%2C%20nnz%3D%7Bpoisson_matrix.nnz%7D%22)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%9B%BA%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E8%87%AA%E7%94%B1%E5%BA%A6%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%A0%E3%81%91%E9%80%A3%E7%AB%8B%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%82%92%E8%A7%A3%E3%81%8D%E3%80%81%E7%B5%90%E6%9E%9C%E3%82%92%20%60tricontourf%60%20%E3%81%A7%0A%20%20%20%20%E6%8F%8F%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%E4%B8%8B%E8%BE%BA%E3%81%A8%E5%8F%B3%E8%BE%BA%E3%81%A7%20%24u%3D0%24%20%E3%81%AB%E5%9B%BA%E5%AE%9A%E3%81%95%E3%82%8C%E3%80%81%24f%3Dx%24%20%E3%81%AB%E6%8A%BC%E3%81%97%E4%B8%8A%E3%81%92%E3%82%89%E3%82%8C%E3%81%9F%E5%88%86%E5%B8%83%E3%81%8C%0A%20%20%20%20%E5%B7%A6%E4%B8%8A%E3%81%AB%E5%AF%84%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E6%A7%98%E5%AD%90%E3%81%8C%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20np%2C%0A%20%20%20%20plt%2C%0A%20%20%20%20poisson_a%2C%0A%20%20%20%20poisson_f%2C%0A%20%20%20%20poisson_fes%2C%0A%20%20%20%20poisson_gfu%2C%0A%20%20%20%20poisson_mesh%2C%0A%20%20%20%20poisson_tri%2C%0A)%3A%0A%20%20%20%20poisson_gfu.vec.data%20%3D%20poisson_a.mat.Inverse(freedofs%3Dpoisson_fes.FreeDofs())%20*%20poisson_f.vec%0A%20%20%20%20poisson_values%20%3D%20np.array(%0A%20%20%20%20%20%20%20%20%5Bpoisson_gfu(poisson_mesh(px%2C%20py))%20for%20px%2C%20py%20in%20zip(poisson_tri.x%2C%20poisson_tri.y)%5D%0A%20%20%20%20)%0A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(4.6%2C%204.0)%2C%20dpi%3D100)%0A%20%20%20%20_contour%20%3D%20_ax.tricontourf(poisson_tri%2C%20poisson_values%2C%20levels%3D24%2C%20cmap%3D%22viridis%22)%0A%20%20%20%20_ax.triplot(poisson_tri%2C%20lw%3D0.2%2C%20color%3D%22w%22%2C%20alpha%3D0.5)%0A%20%20%20%20_ax.set_aspect(%22equal%22)%0A%20%20%20%20_ax.set_title(f%22solution%20%24u%24%2C%20max%20%3D%20%7Bpoisson_values.max()%3A.4f%7D%22)%0A%20%20%20%20_fig.colorbar(_contour%2C%20ax%3D_ax)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E9%A2%A8%E3%81%AE%E3%81%82%E3%82%8B%E7%86%B1%E6%96%B9%E7%A8%8B%E5%BC%8F%EF%BC%88%E7%A7%BB%E6%B5%81%E6%8B%A1%E6%95%A3%E6%96%B9%E7%A8%8B%E5%BC%8F%EF%BC%89%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%5BParabolic%20model%20problem%5D(https%3A%2F%2Fdocu.ngsolve.org%2Flatest%2Fi-tutorials%2Funit-3.1-parabolic%2Fparabolic.html)%0A%20%20%20%20%E3%81%AB%E5%BE%93%E3%81%A3%E3%81%A6%E3%80%81%E6%99%82%E9%96%93%E4%BE%9D%E5%AD%98%E3%81%AE%E7%A7%BB%E6%B5%81%E6%8B%A1%E6%95%A3%E6%96%B9%E7%A8%8B%E5%BC%8F%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cfrac%7B%E2%88%82u%7D%7B%E2%88%82t%7D-%CE%B1%5CDelta%20u%2Bb%5Ccdot%5Cnabla%20u%3Df%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%82%92%E6%AD%A3%E6%96%B9%E9%A0%98%E5%9F%9F%20%24%5B-1%2C1%5D%5E2%24%20%E3%81%A7%E8%A7%A3%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%24%CE%B1%3D0.01%24%20%E3%81%AF%E7%86%B1%E3%81%AE%E6%8B%A1%E6%95%A3%E3%81%97%E3%82%84%E3%81%99%E3%81%95%E3%80%81%0A%20%20%20%20%24b%24%20%E3%81%AF%E6%B8%A9%E5%BA%A6%E3%82%92%E9%81%8B%E3%81%B6%E3%80%8C%E9%A2%A8%E3%80%8D%E3%81%A7%E3%81%99%E3%80%82%E5%85%A8%E5%91%A8%E3%82%92%E3%83%87%E3%82%A3%E3%83%AA%E3%82%AF%E3%83%AC%E5%A2%83%E7%95%8C%E3%81%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%BC%B1%E5%BD%A2%E5%BC%8F%E3%82%92%E9%9B%A2%E6%95%A3%E5%8C%96%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E8%B3%AA%E9%87%8F%E8%A1%8C%E5%88%97%20%24M%24%20%E3%81%A8%E4%BD%9C%E7%94%A8%E7%B4%A0%E8%A1%8C%E5%88%97%20%24A%24%20%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%0A%20%20%20%20%24%24%0A%20%20%20%20M%5Cdot%7Bu%7D%2BAu%3Df%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E6%99%82%E9%96%93%E6%96%B9%E5%90%91%E3%81%AF%E6%9A%97%E9%BB%99%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E6%B3%95%0A%20%20%20%20%24%24%0A%20%20%20%20(M%2B%CE%94t%5C%2CA)u%5E%7Bn%2B1%7D%3DMu%5En%2B%CE%94t%5C%2Cf%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%A7%E9%80%B2%E3%82%81%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%E5%BD%A2%E3%81%AE%E5%88%A9%E7%82%B9%E3%81%AF%E3%80%81%E6%8B%A1%E6%95%A3%E9%A0%85%E3%81%AB%E3%82%88%E3%82%8B%E5%BC%B7%E3%81%84%E5%89%9B%E6%80%A7%E3%81%8C%E3%81%82%E3%81%A3%E3%81%A6%E3%82%82%0A%20%20%20%20%E6%99%82%E9%96%93%E5%88%BB%E3%81%BF%E3%82%92%E5%AE%89%E5%AE%9A%E6%80%A7%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E7%B2%BE%E5%BA%A6%E3%81%A0%E3%81%91%E3%81%A7%E9%81%B8%E3%81%B9%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E5%AE%9F%E8%A3%85%E3%81%A7%E3%81%AF%E7%AD%89%E4%BE%A1%E3%81%AA%E5%A2%97%E5%88%86%E5%BD%A2%0A%20%20%20%20%24%24%0A%20%20%20%20u%5E%7Bn%2B1%7D%3Du%5En%2B(M%2B%CE%94t%5C%2CA)%5E%7B-1%7D%5Cleft(%CE%94t%5C%2Cf-%CE%94t%5C%2CAu%5En%5Cright)%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%82%92%E4%BD%BF%E3%81%84%E3%80%81%24(M%2B%CE%94t%5C%2CA)%5E%7B-1%7D%24%20%E3%82%92%E6%9C%80%E5%88%9D%E3%81%AB%201%20%E5%9B%9E%E3%81%A0%E3%81%91%E4%BD%9C%E3%81%A3%E3%81%A6%E4%BD%BF%E3%81%84%E5%9B%9E%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%82%82%E3%81%A8%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%AF%20%60maxh%3D0.25%60%E3%80%81%24%CE%94t%3D10%5E%7B-3%7D%24%E3%80%81%24t_%7B%5Cmax%7D%3D2%24%20%E3%81%A7%E4%BF%9D%E5%AD%98%2011%20%E3%82%B3%E3%83%9E%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%20%60maxh%3D0.15%60%E3%80%81%24%CE%94t%3D5%5Ctimes10%5E%7B-4%7D%24%E3%80%81%24t_%7B%5Cmax%7D%3D4%24%20%E3%81%AE%2081%20%E3%82%B3%E3%83%9E%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E9%A2%A8%E3%81%AE%E8%A7%92%E9%80%9F%E5%BA%A6%E3%81%AF%E9%A0%98%E5%9F%9F%E4%B8%AD%E5%A4%AE%E3%81%A7%E7%B4%84%202%20%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%811%20%E5%9B%9E%E8%BB%A2%E3%81%AB%E8%A6%81%E3%81%99%E3%82%8B%E6%99%82%E9%96%93%E3%81%AF%20%24%5Cpi%5Csimeq3.14%24%20%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%24t_%7B%5Cmax%7D%3D4%24%20%E3%81%BE%E3%81%A7%E9%80%B2%E3%82%81%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%80%811%20%E5%91%A8%E3%82%92%E8%B6%85%E3%81%88%E3%81%A6%E5%88%86%E5%B8%83%E3%81%8C%E5%AE%9A%E5%B8%B8%E7%8A%B6%E6%85%8B%E3%81%B8%E8%90%BD%E3%81%A1%E7%9D%80%E3%81%8F%E3%81%A8%E3%81%93%E3%82%8D%E3%81%BE%E3%81%A7%0A%20%20%20%20%E8%A6%B3%E5%AF%9F%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(ngsolve)%3A%0A%20%20%20%20from%20netgen.occ%20import%20OCCGeometry%2C%20Rectangle%2C%20X%2C%20Y%0A%0A%20%20%20%20_shape%20%3D%20Rectangle(2%2C%202).Face().Move((-1%2C%20-1%2C%200))%0A%20%20%20%20_shape.edges.Min(X).name%20%3D%20%22left%22%0A%20%20%20%20_shape.edges.Max(X).name%20%3D%20%22right%22%0A%20%20%20%20_shape.edges.Min(Y).name%20%3D%20%22bottom%22%0A%20%20%20%20_shape.edges.Max(Y).name%20%3D%20%22top%22%0A%20%20%20%20heat_mesh%20%3D%20ngsolve.Mesh(OCCGeometry(_shape%2C%20dim%3D2).GenerateMesh(maxh%3D0.15))%0A%0A%20%20%20%20f%22mesh%3A%20%7Bheat_mesh.nv%7D%20vertices%2C%20%7Bheat_mesh.ne%7D%20elements%22%0A%20%20%20%20return%20(heat_mesh%2C)%0A%0A%0A%40app.cell%0Adef%20_(heat_mesh%2C%20ngsolve)%3A%0A%20%20%20%20heat_fes%20%3D%20ngsolve.H1(heat_mesh%2C%20order%3D3%2C%20dirichlet%3D%22bottom%7Cright%7Cleft%7Ctop%22)%0A%20%20%20%20heat_trial%2C%20heat_test%20%3D%20heat_fes.TnT()%0A%20%20%20%20heat_dt%20%3D%205e-4%0A%20%20%20%20heat_t_max%20%3D%204.0%0A%20%20%20%20heat_frames%20%3D%2081%0A%0A%20%20%20%20f%22%E8%87%AA%E7%94%B1%E5%BA%A6%20%7Bheat_fes.ndof%7D%2C%20%E6%99%82%E9%96%93%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%20%7Bint(heat_t_max%20%2F%20heat_dt)%7D%20%E5%9B%9E%2C%20%E4%BF%9D%E5%AD%98%20%7Bheat_frames%7D%20%E3%82%B3%E3%83%9E%22%0A%20%20%20%20return%20heat_dt%2C%20heat_fes%2C%20heat_frames%2C%20heat_t_max%2C%20heat_test%2C%20heat_trial%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E9%A2%A8%E3%81%AE%E5%A0%B4%E3%81%AF%0A%20%20%20%20%24%24%0A%20%20%20%20b(x%2Cy)%3D%5Cleft(2y(1-x%5E2)%2C%5C%2C-2x(1-y%5E2)%5Cright)%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%A7%E3%81%99%E3%80%82%E5%A2%83%E7%95%8C%E4%B8%8A%E3%81%A7%E6%B3%95%E7%B7%9A%E6%88%90%E5%88%86%E3%81%8C%E3%82%BC%E3%83%AD%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81%E9%A2%A8%E3%81%AF%E9%A0%98%E5%9F%9F%E3%81%8B%E3%82%89%E5%87%BA%E3%81%A6%E3%81%84%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%E5%8E%9F%E7%82%B9%E3%81%AE%E3%81%BE%E3%82%8F%E3%82%8A%E3%82%92%E6%99%82%E8%A8%88%E5%9B%9E%E3%82%8A%E3%81%AB%E5%9B%9E%E3%82%8B%E6%B8%A6%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%8A%E3%82%8A%E3%80%81%E4%B8%AD%E5%BF%83%E4%BB%98%E8%BF%91%E3%81%A7%E3%81%AF%0A%20%20%20%20%24b%5Csimeq(2y%2C-2x)%24%E3%80%81%E3%81%A4%E3%81%BE%E3%82%8A%E8%A7%92%E9%80%9F%E5%BA%A6%202%20%E3%81%AE%E5%89%9B%E4%BD%93%E5%9B%9E%E8%BB%A2%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(heat_mesh%2C%20ngsolve%2C%20np%2C%20plt%2C%20sample_vector%2C%20x)%3A%0A%20%20%20%20from%20ngsolve%20import%20y%0A%0A%20%20%20%20wind%20%3D%20ngsolve.CoefficientFunction((2%20*%20y%20*%20(1%20-%20x%20*%20x)%2C%20-2%20*%20x%20*%20(1%20-%20y%20*%20y)))%0A%0A%20%20%20%20_grid%20%3D%20np.linspace(-0.95%2C%200.95%2C%2016)%0A%20%20%20%20_bx%2C%20_by%20%3D%20sample_vector(wind%2C%20heat_mesh%2C%20_grid%2C%20_grid)%0A%20%20%20%20_mesh_x%2C%20_mesh_y%20%3D%20np.meshgrid(_grid%2C%20_grid)%0A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(4.4%2C%204.0)%2C%20dpi%3D100)%0A%20%20%20%20_ax.quiver(_mesh_x%2C%20_mesh_y%2C%20_bx%2C%20_by%2C%20np.hypot(_bx%2C%20_by)%2C%20cmap%3D%22viridis%22)%0A%20%20%20%20_ax.set_aspect(%22equal%22)%0A%20%20%20%20_ax.set_xlabel(%22%24x%24%22)%0A%20%20%20%20_ax.set_ylabel(%22%24y%24%22)%0A%20%20%20%20_ax.set_title(%22wind%20field%20%24b%24%22)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%20wind%2C%20y%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%8F%8C%E4%B8%80%E6%AC%A1%E5%BD%A2%E5%BC%8F%20%24a(u%2Cv)%3D%5Cint(%CE%B1%5Cnabla%20u%5Ccdot%5Cnabla%20v%2B(b%5Ccdot%5Cnabla%20u)v)%5C%2CdS%24%20%E3%81%A8%0A%20%20%20%20%E8%B3%AA%E9%87%8F%E5%BD%A2%E5%BC%8F%20%24m(u%2Cv)%3D%5Cint%20uv%5C%2CdS%24%20%E3%82%92%E7%B5%84%E3%81%BF%E7%AB%8B%E3%81%A6%E3%81%BE%E3%81%99%E3%80%82%E7%A7%BB%E6%B5%81%E9%A0%85%E3%81%8C%E3%81%82%E3%82%8B%E3%81%9F%E3%82%81%20%24a%24%20%E3%81%AF%0A%20%20%20%20%E5%AF%BE%E7%A7%B0%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%EF%BC%88%60symmetric%3DFalse%60%EF%BC%89%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(grad%2C%20heat_fes%2C%20heat_test%2C%20heat_trial%2C%20ngsolve%2C%20wind)%3A%0A%20%20%20%20heat_a%20%3D%20ngsolve.BilinearForm(heat_fes%2C%20symmetric%3DFalse)%0A%20%20%20%20heat_a%20%2B%3D%20(%0A%20%20%20%20%20%20%20%200.01%20*%20grad(heat_trial)%20*%20grad(heat_test)%20*%20ngsolve.dx%0A%20%20%20%20%20%20%20%20%2B%20wind%20*%20grad(heat_trial)%20*%20heat_test%20*%20ngsolve.dx%0A%20%20%20%20)%0A%20%20%20%20heat_a.Assemble()%0A%0A%20%20%20%20heat_m%20%3D%20ngsolve.BilinearForm(heat_fes%2C%20symmetric%3DFalse)%0A%20%20%20%20heat_m%20%2B%3D%20heat_trial%20*%20heat_test%20*%20ngsolve.dx%0A%20%20%20%20heat_m.Assemble()%0A%0A%20%20%20%20f%22m.mat.nze%20%3D%20%7Bheat_m.mat.nze%7D%2C%20a.mat.nze%20%3D%20%7Bheat_a.mat.nze%7D%22%0A%20%20%20%20return%20heat_a%2C%20heat_m%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%24M%5E%5Cast%3DM%2B%CE%94t%5C%2CA%24%20%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E9%80%86%E8%A1%8C%E5%88%97%EF%BC%88%E5%AE%9F%E4%BD%93%E3%81%AF%E7%96%8E%E8%A1%8C%E5%88%97%E3%81%AE%E7%9B%B4%E6%8E%A5%E3%82%BD%E3%83%AB%E3%83%90%E3%83%BC%EF%BC%89%E3%82%92%E7%94%A8%E6%84%8F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%60AsVector()%60%20%E3%81%A7%E8%A1%8C%E5%88%97%E3%82%92%201%20%E6%9C%AC%E3%81%AE%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%A8%E3%81%97%E3%81%A6%E6%89%B1%E3%81%88%E3%82%8B%E3%81%AE%E3%81%AF%E3%80%81%24M%24%20%E3%81%A8%20%24A%24%20%E3%81%8C%E5%90%8C%E3%81%98%0A%20%20%20%20%E7%96%8E%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%82%92%E5%85%B1%E6%9C%89%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%9F%E3%82%81%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(heat_a%2C%20heat_dt%2C%20heat_fes%2C%20heat_m)%3A%0A%20%20%20%20heat_mstar%20%3D%20heat_m.mat.CreateMatrix()%0A%20%20%20%20heat_mstar.AsVector().data%20%3D%20heat_m.mat.AsVector()%20%2B%20heat_dt%20*%20heat_a.mat.AsVector()%0A%20%20%20%20_inverse%20%3D%20heat_mstar.Inverse(freedofs%3Dheat_fes.FreeDofs())%0A%0A%20%20%20%20def%20heat_solve(vec)%3A%0A%20%20%20%20%20%20%20%20%22%22%22(M%20%2B%20%CE%94t%20A)%5E-1%20%E3%82%92%E9%81%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%80%82%E9%80%86%E4%BD%9C%E7%94%A8%E7%B4%A0%E3%81%AF%201%20%E5%BA%A6%E3%81%A0%E3%81%91%E4%BD%9C%E3%81%A3%E3%81%A6%E4%BD%BF%E3%81%84%E5%9B%9E%E3%81%99%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20return%20_inverse%20*%20vec%0A%0A%20%20%20%20f%22mstar.nze%20%3D%20%7Bheat_mstar.nze%7D%2C%20len(mstar.AsVector())%20%3D%20%7Blen(heat_mstar.AsVector())%7D%22%0A%20%20%20%20return%20(heat_solve%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%A4%96%E5%8A%9B%20%24f%24%20%E3%81%AF%E3%80%81%24(-0.5%2C0)%24%20%E3%81%AB%E6%AD%A3%E3%83%BB%24(0.5%2C0)%24%20%E3%81%AB%E8%B2%A0%E3%81%AE%E3%82%AC%E3%82%A6%E3%82%B9%E5%88%86%E5%B8%83%E3%82%92%E7%BD%AE%E3%81%84%E3%81%9F%0A%20%20%20%20%E3%80%8C%E7%86%B1%E3%81%AE%E6%B9%A7%E3%81%8D%E5%87%BA%E3%81%97%E3%81%A8%E5%90%B8%E3%81%84%E8%BE%BC%E3%81%BF%E3%80%8D%E3%81%AE%E5%AF%BE%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%20%24f%24%20%E3%81%AF%E6%99%82%E9%96%93%E3%81%AB%E4%BE%9D%E3%82%89%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7%E3%80%81%0A%20%20%20%20%E6%9C%80%E7%B5%82%E7%9A%84%E3%81%AB%E3%81%AF%E9%A2%A8%E3%81%AB%E3%82%88%E3%82%8B%E8%BC%B8%E9%80%81%E3%83%BB%E6%8B%A1%E6%95%A3%E3%83%BB%E6%B9%A7%E3%81%8D%E5%87%BA%E3%81%97%E3%81%8C%E9%87%A3%E3%82%8A%E5%90%88%E3%81%A3%E3%81%9F%E5%AE%9A%E5%B8%B8%E7%8A%B6%E6%85%8B%E3%81%B8%E8%90%BD%E3%81%A1%E7%9D%80%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(heat_fes%2C%20heat_mesh%2C%20heat_test%2C%20ngsolve%2C%20np%2C%20plt%2C%20sample_scalar%2C%20x%2C%20y)%3A%0A%20%20%20%20heat_source_cf%20%3D%20ngsolve.exp(-6%20*%20((x%20%2B%200.5)%20**%202%20%2B%20y%20*%20y))%20-%20ngsolve.exp(%0A%20%20%20%20%20%20%20%20-6%20*%20((x%20-%200.5)%20**%202%20%2B%20y%20*%20y)%0A%20%20%20%20)%0A%20%20%20%20heat_f%20%3D%20ngsolve.LinearForm(heat_fes)%0A%20%20%20%20heat_f%20%2B%3D%20heat_source_cf%20*%20heat_test%20*%20ngsolve.dx%0A%20%20%20%20heat_f.Assemble()%0A%0A%20%20%20%20_grid%20%3D%20np.linspace(-0.999%2C%200.999%2C%2096)%0A%20%20%20%20_values%20%3D%20sample_scalar(heat_source_cf%2C%20heat_mesh%2C%20_grid%2C%20_grid)%0A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(4.6%2C%204.0)%2C%20dpi%3D100)%0A%20%20%20%20_im%20%3D%20_ax.imshow(%0A%20%20%20%20%20%20%20%20_values%2C%20origin%3D%22lower%22%2C%20cmap%3D%22RdBu_r%22%2C%20vmin%3D-1%2C%20vmax%3D1%2C%20extent%3D%5B-1%2C%201%2C%20-1%2C%201%5D%0A%20%20%20%20)%0A%20%20%20%20_ax.set_aspect(%22equal%22)%0A%20%20%20%20_ax.set_title(%22source%20term%20%24f%24%22)%0A%20%20%20%20_fig.colorbar(_im%2C%20ax%3D_ax)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%20(heat_f%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%88%9D%E6%9C%9F%E6%9D%A1%E4%BB%B6%E3%81%AF%20%24u(x%2Cy%2C0)%3D(1-y%5E2)x%24%20%E3%81%A7%E3%81%99%E3%80%82%E5%B7%A6%E5%8D%8A%E5%88%86%E3%81%8C%E5%86%B7%E3%81%9F%E3%81%8F%E5%8F%B3%E5%8D%8A%E5%88%86%E3%81%8C%E6%9A%96%E3%81%8B%E3%81%84%E5%88%86%E5%B8%83%E3%81%A7%E3%80%81%0A%20%20%20%20%E5%A2%83%E7%95%8C%E4%B8%8A%E3%81%AE%E5%80%A4%E3%81%8C%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E3%83%87%E3%82%A3%E3%83%AA%E3%82%AF%E3%83%AC%E5%A2%83%E7%95%8C%E6%9D%A1%E4%BB%B6%E3%81%A8%E3%81%97%E3%81%A6%E4%BF%9D%E6%8C%81%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(heat_fes%2C%20heat_mesh%2C%20ngsolve%2C%20np%2C%20plt%2C%20sample_scalar%2C%20x%2C%20y)%3A%0A%20%20%20%20heat_gfu%20%3D%20ngsolve.GridFunction(heat_fes)%0A%20%20%20%20heat_gfu.Set((1%20-%20y%20*%20y)%20*%20x)%0A%0A%20%20%20%20_grid%20%3D%20np.linspace(-0.999%2C%200.999%2C%2096)%0A%20%20%20%20_values%20%3D%20sample_scalar(heat_gfu%2C%20heat_mesh%2C%20_grid%2C%20_grid)%0A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(4.6%2C%204.0)%2C%20dpi%3D100)%0A%20%20%20%20_im%20%3D%20_ax.imshow(%0A%20%20%20%20%20%20%20%20_values%2C%20origin%3D%22lower%22%2C%20cmap%3D%22RdBu_r%22%2C%20vmin%3D-1%2C%20vmax%3D1%2C%20extent%3D%5B-1%2C%201%2C%20-1%2C%201%5D%0A%20%20%20%20)%0A%20%20%20%20_ax.set_aspect(%22equal%22)%0A%20%20%20%20_ax.set_title(%22initial%20condition%20%24u(x%2Cy%2C0)%24%22)%0A%20%20%20%20_fig.colorbar(_im%2C%20ax%3D_ax)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%20(heat_gfu%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E6%99%82%E9%96%93%E7%99%BA%E5%B1%95%0A%0A%20%20%20%20%E6%9A%97%E9%BB%99%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E6%B3%95%E3%81%A7%20%24t%3D4%24%20%E3%81%BE%E3%81%A7%208000%20%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E9%80%B2%E3%82%81%E3%80%81100%20%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%94%E3%81%A8%E3%81%AB%0A%20%20%20%20%2496%5Ctimes96%24%20%E3%81%AE%E6%A0%BC%E5%AD%90%E3%81%B8%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%97%E3%81%A6%2081%20%E3%82%B3%E3%83%9E%E3%81%B6%E3%82%93%E3%81%AE%E9%85%8D%E5%88%97%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E5%8F%AF%E8%A6%96%E5%8C%96%E7%94%A8%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B0%E3%82%92%E7%A9%8D%E5%88%86%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AE%E4%B8%AD%E3%81%A7%E6%B8%88%E3%81%BE%E3%81%9B%E3%81%A6%E3%81%8A%E3%81%8F%E3%81%A8%E3%80%81%0A%20%20%20%20%E5%A4%A7%E9%87%8F%E3%81%AE%20%60GridFunction%60%20%E3%82%92%E4%BF%9D%E6%8C%81%E3%81%9B%E3%81%9A%E3%81%AB%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%BD%9C%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20heat_a%2C%0A%20%20%20%20heat_dt%2C%0A%20%20%20%20heat_f%2C%0A%20%20%20%20heat_frames%2C%0A%20%20%20%20heat_gfu%2C%0A%20%20%20%20heat_mesh%2C%0A%20%20%20%20heat_solve%2C%0A%20%20%20%20heat_t_max%2C%0A%20%20%20%20np%2C%0A%20%20%20%20sample_scalar%2C%0A)%3A%0A%20%20%20%20def%20time_stepping(gfu%2C%20steps%3A%20int%2C%20sample_every%3A%20int%2C%20xs%2C%20ys)%3A%0A%20%20%20%20%20%20%20%20%22%22%22%E6%9A%97%E9%BB%99%E3%82%AA%E3%82%A4%E3%83%A9%E3%83%BC%E6%B3%95%E3%81%A7%E9%80%B2%E3%82%81%E3%81%AA%E3%81%8C%E3%82%89%E3%80%81%E4%B8%80%E5%AE%9A%E9%96%93%E9%9A%94%E3%81%A7%E6%A0%BC%E5%AD%90%E4%B8%8A%E3%81%AB%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20snapshots%20%3D%20%5Bsample_scalar(gfu%2C%20heat_mesh%2C%20xs%2C%20ys)%5D%0A%20%20%20%20%20%20%20%20times%20%3D%20%5B0.0%5D%0A%20%20%20%20%20%20%20%20for%20index%20in%20range(steps)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20residual%20%3D%20heat_dt%20*%20heat_f.vec%20-%20heat_dt%20*%20heat_a.mat%20*%20gfu.vec%0A%20%20%20%20%20%20%20%20%20%20%20%20gfu.vec.data%20%3D%20gfu.vec.data%20%2B%20heat_solve(residual)%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(index%20%2B%201)%20%25%20sample_every%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20snapshots.append(sample_scalar(gfu%2C%20heat_mesh%2C%20xs%2C%20ys))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20times.append((index%20%2B%201)%20*%20heat_dt)%0A%20%20%20%20%20%20%20%20return%20np.array(snapshots)%2C%20np.array(times)%0A%0A%20%20%20%20heat_grid%20%3D%20np.linspace(-0.999%2C%200.999%2C%2096)%0A%20%20%20%20heat_u%2C%20heat_t%20%3D%20time_stepping(%0A%20%20%20%20%20%20%20%20heat_gfu%2C%0A%20%20%20%20%20%20%20%20int(heat_t_max%20%2F%20heat_dt)%2C%0A%20%20%20%20%20%20%20%20int(heat_t_max%20%2F%20heat_dt%20%2F%20(heat_frames%20-%201))%2C%0A%20%20%20%20%20%20%20%20heat_grid%2C%0A%20%20%20%20%20%20%20%20heat_grid%2C%0A%20%20%20%20)%0A%0A%20%20%20%20f%22%E3%82%B3%E3%83%9E%E6%95%B0%20%7Blen(heat_t)%7D%2C%20u%20%E3%81%AE%E7%AF%84%E5%9B%B2%20%5B%7Bheat_u.min()%3A.3f%7D%2C%20%7Bheat_u.max()%3A.3f%7D%5D%22%0A%20%20%20%20return%20heat_t%2C%20heat_u%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%0A%0A%20%20%20%2081%20%E3%82%B3%E3%83%9E%E3%82%92%201%20%E3%82%B3%E3%83%9E%20100%20ms%20%E3%81%A7%E5%86%8D%E7%94%9F%E3%81%99%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81%E5%86%8D%E7%94%9F%E6%99%82%E9%96%93%E3%81%AF%E7%B4%84%208.1%20%E7%A7%92%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E8%89%B2%E3%81%AF%20%240%24%20%E3%82%92%E7%99%BD%E3%81%A8%E3%81%99%E3%82%8B%E7%99%BA%E6%95%A3%E3%82%AB%E3%83%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%97%E3%81%A7%E3%80%81%E7%AF%84%E5%9B%B2%E3%82%92%E5%85%A8%E3%82%B3%E3%83%9E%20%24%5B-1%2C1%5D%24%20%E3%81%AB%E5%9B%BA%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(artifacts_dir%2C%20heat_t%2C%20heat_u%2C%20plt%2C%20save_gif)%3A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(4.6%2C%204.0)%2C%20dpi%3D100)%0A%20%20%20%20_im%20%3D%20_ax.imshow(%0A%20%20%20%20%20%20%20%20heat_u%5B0%5D%2C%20origin%3D%22lower%22%2C%20cmap%3D%22RdBu_r%22%2C%20vmin%3D-1%2C%20vmax%3D1%2C%20extent%3D%5B-1%2C%201%2C%20-1%2C%201%5D%0A%20%20%20%20)%0A%20%20%20%20_ax.set_aspect(%22equal%22)%0A%20%20%20%20_ax.set_xlabel(%22%24x%24%22)%0A%20%20%20%20_ax.set_ylabel(%22%24y%24%22)%0A%20%20%20%20_title%20%3D%20_ax.set_title(%22convection-diffusion%2C%20t%20%3D%200.00%22)%0A%20%20%20%20_fig.colorbar(_im%2C%20ax%3D_ax)%0A%20%20%20%20_fig.tight_layout()%0A%0A%20%20%20%20def%20_update(frame)%3A%0A%20%20%20%20%20%20%20%20_im.set_data(heat_u%5Bframe%5D)%0A%20%20%20%20%20%20%20%20_title.set_text(f%22convection-diffusion%2C%20t%20%3D%20%7Bheat_t%5Bframe%5D%3A.2f%7D%22)%0A%20%20%20%20%20%20%20%20return%20(_im%2C%20_title)%0A%0A%20%20%20%20ngsolve_heat_gif%20%3D%20artifacts_dir%20%2F%20%22ngsolve_heat.gif%22%0A%20%20%20%20save_gif(_fig%2C%20_update%2C%20len(heat_t)%2C%20ngsolve_heat_gif%2C%20interval%3D100)%0A%20%20%20%20return%20(ngsolve_heat_gif%2C)%0A%0A%0A%40app.cell%0Adef%20_(gif_image%2C%20ngsolve_heat_gif)%3A%0A%20%20%20%20gif_image(ngsolve_heat_gif%2C%20alt%3D%22NGSolve%20%E3%81%AB%E3%82%88%E3%82%8B%E7%A7%BB%E6%B5%81%E6%8B%A1%E6%95%A3%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%AE%E6%99%82%E9%96%93%E7%99%BA%E5%B1%95%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AF%E6%AC%A1%E3%81%AE%203%20%E7%82%B9%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%201.%20%24t%5Clesssim1%24%3A%20%E5%B7%A6%E5%8F%B3%E3%81%AB%E5%88%86%E3%81%8B%E3%82%8C%E3%81%A6%E3%81%84%E3%81%9F%E5%88%9D%E6%9C%9F%E5%88%86%E5%B8%83%E3%81%8C%E9%A2%A8%E3%81%AB%E5%B7%BB%E3%81%8D%E5%8F%96%E3%82%89%E3%82%8C%E3%80%81%0A%20%20%20%20%20%20%20%E5%A2%83%E7%95%8C%E3%81%AB%E6%B2%BF%E3%81%A3%E3%81%A6%E6%B8%A6%E3%82%92%E5%B7%BB%E3%81%8F%20S%20%E5%AD%97%E3%81%AE%E8%85%95%E3%81%AB%E3%81%AA%E3%82%8B%E3%80%82%E3%81%93%E3%81%AE%E6%AE%B5%E9%9A%8E%E3%81%AF%E7%A7%BB%E6%B5%81%E3%81%8C%E6%94%AF%E9%85%8D%E7%9A%84%E3%81%A7%E3%80%81%0A%20%20%20%20%20%20%20%E6%A8%A1%E6%A7%98%E3%81%AF%E3%81%BB%E3%81%A8%E3%82%93%E3%81%A9%E8%96%84%E3%81%BE%E3%82%89%E3%81%AA%E3%81%84%E3%80%82%0A%20%20%20%202.%20%24t%5Csimeq1%24%E3%80%9C%243%24%3A%20%E8%85%95%E3%81%8C%E4%B8%AD%E5%BF%83%E3%81%B8%E5%BC%95%E3%81%8D%E8%BE%BC%E3%81%BE%E3%82%8C%E3%81%A6%E7%B4%B0%E3%81%8F%E3%81%AA%E3%82%8B%E3%80%82%E7%B4%B0%E3%81%8F%E3%81%AA%E3%82%8B%E3%81%BB%E3%81%A9%0A%20%20%20%20%20%20%20%24%5Cnabla%20u%24%20%E3%81%8C%E5%A4%A7%E3%81%8D%E3%81%8F%E3%81%AA%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81%E6%8B%A1%E6%95%A3%E9%A0%85%20%24%CE%B1%5CDelta%20u%24%20%E3%81%8C%E5%8A%B9%E3%81%8D%E5%A7%8B%E3%82%81%E3%81%A6%0A%20%20%20%20%20%20%20%E3%82%B3%E3%83%B3%E3%83%88%E3%83%A9%E3%82%B9%E3%83%88%E3%81%8C%E6%80%A5%E9%80%9F%E3%81%AB%E8%90%BD%E3%81%A1%E3%82%8B%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E7%A7%BB%E6%B5%81%E3%81%8C%E6%8B%A1%E6%95%A3%E3%82%92%E5%8A%A9%E3%81%91%E3%82%8B%E5%85%B8%E5%9E%8B%E7%9A%84%E3%81%AA%E5%8A%B9%E6%9E%9C%E3%80%82%0A%20%20%20%203.%20%24t%5Cgtrsim3%24%3A%20%E6%B9%A7%E3%81%8D%E5%87%BA%E3%81%97%20%24f%24%E3%83%BB%E9%A2%A8%E3%81%AB%E3%82%88%E3%82%8B%E8%BC%B8%E9%80%81%E3%83%BB%E6%8B%A1%E6%95%A3%E3%81%8C%E9%87%A3%E3%82%8A%E5%90%88%E3%81%84%E3%80%81%0A%20%20%20%20%20%20%20%E5%BC%B1%E3%81%84%E5%AE%9A%E5%B8%B8%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%B8%E8%90%BD%E3%81%A1%E7%9D%80%E3%81%8F%E3%80%82%E5%A2%83%E7%95%8C%E3%81%AE%E3%83%87%E3%82%A3%E3%83%AA%E3%82%AF%E3%83%AC%E5%80%A4%E3%81%8C%E5%A4%89%E3%82%8F%E3%82%89%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%0A%20%20%20%20%20%20%20%E5%88%86%E5%B8%83%E3%81%8C%E5%AE%8C%E5%85%A8%E3%81%AB%E3%82%BC%E3%83%AD%E3%81%B8%E5%9D%87%E3%81%95%E3%82%8C%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AF%E3%81%AA%E3%81%84%E3%80%82%0A%0A%20%20%20%20%E3%83%9A%E3%82%AF%E3%83%AC%E6%95%B0%EF%BC%88%E7%A7%BB%E6%B5%81%E3%81%A8%E6%8B%A1%E6%95%A3%E3%81%AE%E6%AF%94%EF%BC%89%E3%81%AF%E3%80%81%E9%A0%98%E5%9F%9F%E5%85%A8%E4%BD%93%E3%81%A7%E3%81%AF%20%24%7Cb%7C%5Cell%2F%CE%B1%5Csimeq2%5Ctimes1%2F0.01%3D200%24%E3%80%81%0A%20%20%20%20%E8%A6%81%E7%B4%A0%201%20%E5%80%8B%E3%81%82%E3%81%9F%E3%82%8A%E3%81%A7%E3%82%82%20%24%7Cb%7Ch%2F(2%CE%B1)%5Csimeq2%5Ctimes0.15%2F0.02%3D15%24%20%E3%81%A8%E7%A7%BB%E6%B5%81%E3%81%8C%E5%84%AA%E5%8B%A2%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E6%A8%99%E6%BA%96%E3%82%AC%E3%83%AC%E3%83%AB%E3%82%AD%E3%83%B3%E6%B3%95%E3%81%AF%E3%81%93%E3%81%AE%E6%9D%A1%E4%BB%B6%E3%81%A7%E6%95%B0%E5%80%A4%E6%8C%AF%E5%8B%95%E3%82%92%E8%B5%B7%E3%81%93%E3%81%97%E3%82%84%E3%81%99%E3%81%84%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8C%E3%80%81%0A%20%20%20%203%20%E6%AC%A1%E8%A6%81%E7%B4%A0%EF%BC%88%60order%3D3%60%EF%BC%89%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%9F%E3%82%81%E5%AE%9F%E5%8A%B9%E7%9A%84%E3%81%AA%E6%A0%BC%E5%AD%90%E3%81%8C%E7%B4%B0%E3%81%8B%E3%81%8F%E3%80%81%0A%20%20%20%20%E5%AE%9F%E9%9A%9B%E3%81%AB%E8%A7%A3%E3%81%AE%E5%80%A4%E3%81%AF%E5%88%9D%E6%9C%9F%E6%9D%A1%E4%BB%B6%E3%81%A8%E5%90%8C%E3%81%98%20%24%5B-1%2C1%5D%24%20%E3%81%AE%E7%AF%84%E5%9B%B2%E3%81%AB%E5%8F%8E%E3%81%BE%E3%82%8A%0A%20%20%20%20%EF%BC%88%E6%9C%80%E7%B5%82%E5%87%BA%E5%8A%9B%E3%81%AE%20%60u%20%E3%81%AE%E7%AF%84%E5%9B%B2%60%20%E3%82%92%E5%8F%82%E7%85%A7%EF%BC%89%E3%80%81%E7%9B%AE%E7%AB%8B%E3%81%A3%E3%81%9F%E6%8C%AF%E5%8B%95%E3%81%AF%E7%94%9F%E3%81%98%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
698f973b8c55d1b900f4bd2bd3a158ea