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%E5%8F%8C%E6%9B%B2%E5%9E%8B%E5%81%8F%E5%BE%AE%E5%88%86%E6%96%B9%E7%A8%8B%E5%BC%8F%0A%0A%20%20%20%20%E6%B3%A2%E5%8B%95%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%82%92%201%20%E6%AC%A1%E5%85%83%E3%83%BB2%20%E6%AC%A1%E5%85%83%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%80%81%E6%9C%89%E9%99%90%E5%B7%AE%E5%88%86%E3%81%A7%E7%A9%BA%E9%96%93%E3%82%92%E9%9B%A2%E6%95%A3%E5%8C%96%E3%81%97%0A%20%20%20%20%60scipy.integrate.solve_ivp%60%20%E3%81%A7%E6%99%82%E9%96%93%E7%A9%8D%E5%88%86%E3%81%97%E3%81%BE%E3%81%99%0A%20%20%20%20%EF%BC%88%60legacy%2Fsimulation%2FHyperbolicPDE.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%E5%8F%8C%E6%9B%B2%E5%9E%8B%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%AE%E7%89%B9%E5%BE%B4%E3%81%AF**%E6%83%85%E5%A0%B1%E3%81%8C%E6%9C%89%E9%99%90%E9%80%9F%E5%BA%A6%20%24c%24%20%E3%81%A7%E4%BC%9D%E3%82%8F%E3%82%8A%E3%80%81%E6%B8%9B%E8%A1%B0%E3%81%97%E3%81%AA%E3%81%84**%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%E3%81%93%E3%81%AE%20notebook%20%E3%81%A7%E3%81%AF%E6%AC%A1%E3%81%AE%202%20%E3%81%A4%E3%82%92%E3%80%81%E6%B3%A2%E3%81%8C%E9%A0%98%E5%9F%9F%E3%82%92%E5%BE%80%E5%BE%A9%E3%81%99%E3%82%8B%E3%81%AE%E3%81%AB%E5%8D%81%E5%88%86%E3%81%AA%E6%99%82%E9%96%93%E3%81%BE%E3%81%A7%E7%A9%8D%E5%88%86%E3%81%97%E3%81%A6%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%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%7C%20%E7%AF%80%20%7C%20%E5%AF%BE%E8%B1%A1%20%7C%20%E7%A9%BA%E9%96%93%E5%88%BB%E3%81%BF%20%7C%20%E6%99%82%E9%96%93%E7%AF%84%E5%9B%B2%20%7C%20%E5%A2%83%E7%95%8C%E6%9D%A1%E4%BB%B6%20%7C%0A%20%20%20%20%7C%20---%20%7C%20---%20%7C%20---%20%7C%20---%20%7C%20---%20%7C%0A%20%20%20%20%7C%201%20%E6%AC%A1%E5%85%83%20%7C%20%24u_%7Btt%7D%3Dc%5E2u_%7Bxx%7D%24%20%7C%20%24h%3D0.005%24%EF%BC%88200%20%E7%82%B9%EF%BC%89%20%7C%20%24t%5Cin%5B0%2C2%5D%24%20%7C%20%E3%83%87%E3%82%A3%E3%83%AA%E3%82%AF%E3%83%AC%EF%BC%88%E5%9B%BA%E5%AE%9A%E7%AB%AF%EF%BC%89%20%7C%0A%20%20%20%20%7C%202%20%E6%AC%A1%E5%85%83%20%7C%20%24u_%7Btt%7D%3Dc%5E2%5Cnabla%5E2u%24%20%7C%20%24h%3D0.02%24%EF%BC%8850%C3%9750%20%E7%82%B9%EF%BC%89%20%7C%20%24t%5Cin%5B0%2C1.5%5D%24%20%7C%20%E3%83%8E%E3%82%A4%E3%83%9E%E3%83%B3%EF%BC%88%E8%87%AA%E7%94%B1%E7%AB%AF%EF%BC%89%20%7C%0A%0A%20%20%20%201%20%E6%AC%A1%E5%85%83%E3%81%A7%E3%81%AF%E9%A0%98%E5%9F%9F%E9%95%B7%20%24L%3D1%24%E3%80%81%E4%BC%9D%E6%92%AD%E9%80%9F%E5%BA%A6%20%24c%3D1%24%20%E3%81%AA%E3%81%AE%E3%81%A7%E5%BE%80%E5%BE%A9%E5%91%A8%E6%9C%9F%E3%81%AF%20%242L%2Fc%3D2%24%20%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20%24t%3D2%24%20%E3%81%BE%E3%81%A7%E7%A9%8D%E5%88%86%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%80%8C%E5%88%86%E8%A3%82%20%E2%86%92%20%E5%A3%81%E3%81%A7%E3%81%AE%E5%8F%8D%E8%BB%A2%E5%8F%8D%E5%B0%84%20%E2%86%92%20%E5%88%9D%E6%9C%9F%E6%B3%A2%E5%BD%A2%E3%81%AE%E5%86%8D%E7%8F%BE%E3%80%8D%E3%81%A8%E3%81%84%E3%81%86%0A%20%20%20%201%20%E5%91%A8%E6%9C%9F%E3%81%8C%E3%81%BE%E3%82%8B%E3%81%94%E3%81%A8%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%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%2FHyperbolicPDE%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%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%22HyperbolicPDE%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%20return%20artifacts_dir%2C%20gif_image%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%201%20%E6%AC%A1%E5%85%83%E3%81%AE%E6%B3%A2%E5%8B%95%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%E6%B3%A2%E5%8B%95%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%82%5E2u%7D%7B%E2%88%82t%5E2%7D%3Dc%5E2%5Cfrac%7B%E2%88%82%5E2u%7D%7B%E2%88%82x%5E2%7D%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%82%92%E6%AC%A1%E3%81%AE%E6%9D%A1%E4%BB%B6%E3%81%A7%E8%A7%A3%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%E4%BC%9D%E6%92%AD%E9%80%9F%E5%BA%A6%20%24c%3D1%24%0A%20%20%20%20-%20%E7%A9%BA%E9%96%93%E9%A0%98%E5%9F%9F%20%24x%5Cin%5B0%2C1%5D%24%E3%80%81%E7%A9%BA%E9%96%93%E5%88%BB%E3%81%BF%20%24h%3D0.005%24%EF%BC%88%E6%A0%BC%E5%AD%90%E7%82%B9%20200%20%E5%80%8B%EF%BC%89%0A%20%20%20%20-%20%E6%99%82%E9%96%93%E7%AF%84%E5%9B%B2%20%24t%5Cin%5B0%2C2%5D%24%E3%80%81%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%201%20%E3%82%B3%E3%83%9E%E3%81%82%E3%81%9F%E3%82%8A%20%24%CE%94t_%7B%5Ctext%7Bframe%7D%7D%3D0.0125%24%EF%BC%88161%20%E3%82%B3%E3%83%9E%EF%BC%89%0A%20%20%20%20-%20%E5%A2%83%E7%95%8C%E6%9D%A1%E4%BB%B6%20%24u(0%2Ct)%3Du(1%2Ct)%3D0%24%EF%BC%88%E4%B8%A1%E7%AB%AF%E3%82%92%E5%9B%BA%E5%AE%9A%E3%81%97%E3%81%9F%E5%BC%A6%EF%BC%89%0A%0A%20%20%20%20%E7%A9%BA%E9%96%93%E5%88%BB%E3%81%BF%E3%82%92%20%24h%3D0.02%24%20%E3%81%8B%E3%82%89%20%24h%3D0.005%24%20%E3%81%B8%E7%B4%B0%E3%81%8B%E3%81%8F%E3%81%97%E3%81%9F%E3%81%AE%E3%81%AF%E3%80%81%E5%88%9D%E6%9C%9F%E6%B3%A2%E5%BD%A2%E3%81%AE%201%20%E5%B1%B1%E3%81%8C%0A%20%20%20%20%E6%A0%BC%E5%AD%90%2050%20%E7%82%B9%E3%81%A7%E8%A1%A8%E7%8F%BE%E3%81%95%E3%82%8C%E3%80%81%E5%8F%8D%E5%B0%84%E3%81%AE%E3%81%9F%E3%81%B3%E3%81%AB%E7%8F%BE%E3%82%8C%E3%82%8B%E6%95%B0%E5%80%A4%E5%88%86%E6%95%A3%E3%81%8C%E7%9B%AE%E3%81%AB%E8%A6%8B%E3%81%88%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E6%99%82%E9%96%93%E5%88%BB%E3%81%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AF%E3%80%81%E6%83%85%E5%A0%B1%E3%81%8C%201%20%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%A7%201%20%E6%A0%BC%E5%AD%90%E5%88%86%E3%82%88%E3%82%8A%E9%81%A0%E3%81%8F%E3%81%B8%E4%BC%9D%E3%82%8F%E3%82%89%E3%81%AA%E3%81%84%E3%81%A8%E3%81%84%E3%81%86%0A%20%20%20%20CFL%20%E6%9D%A1%E4%BB%B6%0A%20%20%20%20%24%24%0A%20%20%20%20k%5Cleq%5Cfrac%7Bh%7D%7Bc%7D%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%8C%E5%AE%89%E5%AE%9A%E6%80%A7%E3%81%AE%E7%9B%AE%E5%AE%89%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%E5%9B%BA%E5%AE%9A%E5%88%BB%E3%81%BF%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E9%81%A9%E5%BF%9C%E5%88%BB%E3%81%BF%E3%81%AE%20%60RK45%60%20%E3%82%92%E4%BD%BF%E3%81%86%E3%81%9F%E3%82%81%E3%80%81%0A%20%20%20%20%E5%88%BB%E3%81%BF%E5%B9%85%E3%81%AF%E3%82%BD%E3%83%AB%E3%83%90%E3%83%BC%E3%81%8C%E8%87%AA%E5%8B%95%E7%9A%84%E3%81%AB%20CFL%20%E6%9D%A1%E4%BB%B6%E3%82%92%E6%BA%80%E3%81%9F%E3%81%99%E7%AF%84%E5%9B%B2%E3%81%B8%E7%B8%AE%E3%82%81%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%60max_step%60%20%E3%81%AB%E3%81%AF%E3%82%B3%E3%83%9E%E9%96%93%E9%9A%94%E3%82%92%E6%B8%A1%E3%81%97%E3%80%81%E3%82%B3%E3%83%9E%E3%82%92%E8%B7%A8%E3%81%84%E3%81%A7%E8%A3%9C%E9%96%93%E3%81%95%E3%82%8C%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_()%3A%0A%20%20%20%20import%20numpy%20as%20np%0A%0A%20%20%20%20wave_speed%20%3D%201.0%0A%20%20%20%20dx_1d%20%3D%200.005%0A%20%20%20%20x_1d%20%3D%20np.arange(0%2C%201%2C%20dx_1d)%0A%20%20%20%20n_1d%20%3D%20len(x_1d)%0A%0A%20%20%20%20t_max_1d%20%3D%202.0%0A%20%20%20%20frame_dt_1d%20%3D%200.0125%0A%20%20%20%20t_1d%20%3D%20np.arange(0%2C%20t_max_1d%20%2B%200.5%20*%20frame_dt_1d%2C%20frame_dt_1d)%0A%0A%20%20%20%20f%22%E6%A0%BC%E5%AD%90%E7%82%B9%20%7Bn_1d%7D%20%E5%80%8B%2C%20%E3%82%B3%E3%83%9E%E6%95%B0%20%7Blen(t_1d)%7D%2C%20CFL%20%E4%B8%8A%E9%99%90%20k%20%3C%3D%20%7Bdx_1d%20%2F%20wave_speed%7D%22%0A%20%20%20%20return%20dx_1d%2C%20frame_dt_1d%2C%20n_1d%2C%20np%2C%20t_1d%2C%20t_max_1d%2C%20wave_speed%2C%20x_1d%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%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%E5%88%9D%E6%9C%9F%E6%9D%A1%E4%BB%B6%E3%81%AF%E3%80%81%E9%A0%98%E5%9F%9F%E3%81%AE%E4%B8%AD%E5%A4%AE%20%243%2F8%5Cleq%20x%5Cleq5%2F8%24%20%E3%81%AB%E3%81%A0%E3%81%91%E5%8F%B0%E3%82%92%E6%8C%81%E3%81%A4%201%20%E5%B1%B1%E3%81%AE%E9%9A%86%E8%B5%B7%0A%20%20%20%20%24%24%0A%20%20%20%20u(x%2C0)%3D%0A%20%20%20%20%5Cbegin%7Bcases%7D%0A%20%20%20%20%5Cdfrac%7B1%7D%7B2%7D%5Ccos(8%5Cpi(x-1%2F2))%2B%5Cdfrac%7B1%7D%7B2%7D%5Cquad(3%2F8%5Cleq%20x%5Cleq5%2F8)%2C%20%5C%5C%0A%20%20%20%200%5Cquad(%5Ctext%7Botherwise%7D)%2C%0A%20%20%20%20%5Cend%7Bcases%7D%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%8A%E3%82%88%E3%81%B3%E5%88%9D%E9%80%9F%E5%BA%A6%E3%82%BC%E3%83%AD%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cfrac%7B%E2%88%82u%7D%7B%E2%88%82t%7D(x%2C0)%3D0%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%88%9D%E9%80%9F%E5%BA%A6%E3%81%8C%E3%82%BC%E3%83%AD%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E3%81%93%E3%81%AE%E5%B1%B1%E3%81%AF%E5%B7%A6%E5%8F%B3%E3%81%B8%E6%8C%AF%E5%B9%85%E5%8D%8A%E5%88%86%E3%81%9A%E3%81%A4%E3%81%AB%E5%88%86%E8%A3%82%E3%81%97%E3%81%A6%E9%80%B2%E3%81%BF%E3%81%BE%E3%81%99%0A%20%20%20%20%EF%BC%88%E3%83%80%E3%83%A9%E3%83%B3%E3%83%99%E3%83%BC%E3%83%AB%E3%81%AE%E8%A7%A3%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_(dx_1d%2C%20np%2C%20plt%2C%20x_1d)%3A%0A%20%20%20%20u0_1d%20%3D%200.5%20*%20np.cos(8%20*%20np.pi%20*%20(x_1d%20-%200.5))%20%2B%200.5%0A%20%20%20%20u0_1d%5B%3A%20int(3%20%2F%208%20%2F%20dx_1d)%5D%20%3D%200%0A%20%20%20%20u0_1d%5Bint(5%20%2F%208%20%2F%20dx_1d)%20%3A%5D%20%3D%200%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(x_1d%2C%20u0_1d)%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(%22initial%20displacement%22)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%20(u0_1d%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%E4%BF%82%E6%95%B0%E8%A1%8C%E5%88%97%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%202%20%E9%9A%8E%E3%81%AE%E6%99%82%E9%96%93%E5%BE%AE%E5%88%86%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E6%89%B1%E3%81%86%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%AB%E3%80%81%E9%80%9F%E5%BA%A6%20%24v%24%20%E3%82%92%E7%8B%AC%E7%AB%8B%E5%A4%89%E6%95%B0%E3%81%A8%E3%81%97%E3%81%A6%E5%B0%8E%E5%85%A5%E3%81%97%0A%20%20%20%201%20%E9%9A%8E%E3%81%AE%E9%80%A3%E7%AB%8B%E7%B3%BB%E3%81%B8%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cfrac%7B%E2%88%82u%7D%7B%E2%88%82t%7D(x%2Ct)%E2%89%A1v(x%2Ct)%2C%5Cquad%0A%20%20%20%20%5Cfrac%7B%E2%88%82v%7D%7B%E2%88%82t%7D%3Dc%5E2%5Cfrac%7B%E2%88%82%5E2u%7D%7B%E2%88%82x%5E2%7D%0A%20%20%20%20%24%24%0A%20%20%20%20%E8%A1%8C%E5%88%97%E3%81%A7%E6%9B%B8%E3%81%91%E3%81%B0%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cbegin%7Bpmatrix%7D%0A%20%20%20%20%E2%88%82_tu%20%5C%5C%20%E2%88%82_tv%0A%20%20%20%20%5Cend%7Bpmatrix%7D%0A%20%20%20%20%3D%0A%20%20%20%20%5Cbegin%7Bpmatrix%7D%0A%20%20%20%20O%20%26%20I%20%5C%5C%20c%5E2%E2%88%82_x%5E2%20%26%20O%0A%20%20%20%20%5Cend%7Bpmatrix%7D%0A%20%20%20%20%5Cbegin%7Bpmatrix%7D%0A%20%20%20%20u%20%5C%5C%20v%0A%20%20%20%20%5Cend%7Bpmatrix%7D%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%A7%E3%81%82%E3%82%8A%E3%80%81%E3%81%93%E3%81%AE%20%24%E2%88%82_x%5E2%24%20%E3%82%92%E4%B8%AD%E5%BF%83%E5%B7%AE%E5%88%86%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cfrac%7B%E2%88%82%5E2u%7D%7B%E2%88%82x%5E2%7D(x_i)%5Csimeq%5Cfrac%7Bu_%7Bi%2B1%7D-2u_i%2Bu_%7Bi-1%7D%7D%7Bh%5E2%7D%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%A7%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E3%81%9F%E3%82%82%E3%81%AE%E3%81%8C%E4%BF%82%E6%95%B0%E8%A1%8C%E5%88%97%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AE%20%60second_derivative%60%20%E3%81%AF%E3%80%81%E9%9A%A3%E6%8E%A5%E7%82%B9%E3%82%92%E6%8C%87%E3%81%99%202%20%E6%9C%AC%E3%81%AE%E3%82%B7%E3%83%95%E3%83%88%E8%A1%8C%E5%88%97%0A%20%20%20%20%24S_%7B-%7Du%7C_i%3Du_%7Bi-1%7D%24%E3%80%81%24S_%7B%2B%7Du%7C_i%3Du_%7Bi%2B1%7D%24%20%E3%81%8B%E3%82%89%0A%20%20%20%20%24(S_%7B%2B%7D-2I%2BS_%7B-%7D)%2Fh%5E2%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%E4%B8%A1%E7%AB%AF%E3%81%A7%E3%81%AF%E9%A0%98%E5%9F%9F%E5%A4%96%E3%81%AE%20%24u_%7B-1%7D%24%E3%80%81%24u_%7BN%7D%24%20%E3%82%92%0A%20%20%20%20%E5%8F%82%E7%85%A7%E3%81%99%E3%82%8B%E6%88%90%E5%88%86%E3%81%8C%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%E3%81%9D%E3%82%8C%E3%82%89%E3%81%AF%E8%87%AA%E5%8B%95%E7%9A%84%E3%81%AB%20%240%24%20%E6%89%B1%E3%81%84%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%81%8C%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E5%9B%BA%E5%AE%9A%E7%AB%AF%E3%81%AE%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%20%24u%3D0%24%20%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%E8%A1%8C%E5%88%97%E3%81%AF%20%24200%5Ctimes200%24%20%E3%81%A7%E6%95%B0%E5%AD%97%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A7%E3%82%82%E5%88%86%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%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%E6%A7%8B%E9%80%A0%E3%82%92%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%20import%20scipy.sparse%20as%20sparse%0A%0A%20%20%20%20def%20second_derivative(n%3A%20int%2C%20h%3A%20float)%20-%3E%20sparse.csr_matrix%3A%0A%20%20%20%20%20%20%20%20%22%22%22%E5%9B%BA%E5%AE%9A%E7%AB%AF%EF%BC%88%E4%B8%A1%E7%AB%AF%E3%81%A7%20u%3D0%EF%BC%89%E3%81%AE%202%20%E9%9A%8E%E4%B8%AD%E5%BF%83%E5%B7%AE%E5%88%86%E8%A1%8C%E5%88%97%E3%82%92%E8%BF%94%E3%81%99%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20shift_back%20%3D%20sparse.dia_array((np.ones(n)%2C%20%5B-1%5D)%2C%20shape%3D(n%2C%20n))%0A%20%20%20%20%20%20%20%20shift_forward%20%3D%20sparse.dia_array((np.ones(n)%2C%20%5B1%5D)%2C%20shape%3D(n%2C%20n))%0A%20%20%20%20%20%20%20%20identity%20%3D%20sparse.identity(n)%0A%20%20%20%20%20%20%20%20return%20((shift_forward%20-%202%20*%20identity%20%2B%20shift_back)%20%2F%20h**2).tocsr()%0A%0A%20%20%20%20np.set_printoptions(edgeitems%3D3%2C%20precision%3D3%2C%20suppress%3DTrue)%0A%20%20%20%20second_derivative(6%2C%201.0).toarray()%0A%20%20%20%20return%20second_derivative%2C%20sparse%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%93%E3%81%AE%20%246%5Ctimes6%24%20%E3%81%AE%E4%BE%8B%E3%81%A7%E3%80%811%20%E8%A1%8C%E7%9B%AE%E3%81%AB%20%24u_%7B-1%7D%24%20%E3%81%AE%E5%AF%84%E4%B8%8E%E3%81%8C%E7%84%A1%E3%81%8F%202%20%E8%A1%8C%E7%9B%AE%E4%BB%A5%E9%99%8D%E3%81%A8%E5%BD%A2%E3%81%8C%E9%81%95%E3%81%86%E3%81%93%E3%81%A8%E3%81%8C%0A%20%20%20%20%E5%9B%BA%E5%AE%9A%E7%AB%AF%E3%81%AE%E5%8A%B9%E6%9E%9C%E3%81%A7%E3%81%99%E3%80%82%E5%AE%9F%E9%9A%9B%E3%81%AE%E8%A8%88%E7%AE%97%E3%81%A7%E3%81%AF%20%24n%3D200%24%E3%80%81%24h%3D0.005%24%20%E3%82%92%E4%BD%BF%E3%81%86%E3%81%AE%E3%81%A7%E3%80%81%E5%AF%BE%E8%A7%92%E6%88%90%E5%88%86%E3%81%AF%0A%20%20%20%20%24-2%2Fh%5E2%3D-8%5Ctimes10%5E4%24%20%E3%81%A8%E3%81%84%E3%81%86%E5%A4%A7%E3%81%8D%E3%81%AA%E5%80%A4%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%E3%80%81%E3%81%93%E3%81%AE%202%20%E9%9A%8E%E5%BE%AE%E5%88%86%E8%A1%8C%E5%88%97%E3%82%92%E5%B7%A6%E4%B8%8B%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%AB%E5%9F%8B%E3%82%81%E8%BE%BC%E3%82%93%E3%81%A0%20%242n%5Ctimes2n%24%20%E3%81%AE%0A%20%20%20%20%E4%BF%82%E6%95%B0%E8%A1%8C%E5%88%97%20%24A%24%20%E3%82%92%E4%BD%9C%E3%82%8A%E3%80%81%E9%9D%9E%E3%82%BC%E3%83%AD%E6%88%90%E5%88%86%E3%81%AE%E9%85%8D%E7%BD%AE%E3%82%92%20%60spy%60%20%E3%81%A7%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E5%8F%B3%E4%B8%8A%E3%81%AE%E5%8D%98%E4%BD%8D%E8%A1%8C%E5%88%97%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8C%20%24%E2%88%82_tu%3Dv%24%20%E3%82%92%E3%80%81%E5%B7%A6%E4%B8%8B%E3%81%AE%E4%B8%89%E9%87%8D%E5%AF%BE%E8%A7%92%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8C%0A%20%20%20%20%24%E2%88%82_tv%3Dc%5E2%E2%88%82_x%5E2u%24%20%E3%82%92%E8%A1%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%0Adef%20_(dx_1d%2C%20n_1d%2C%20plt%2C%20second_derivative%2C%20sparse%2C%20wave_speed)%3A%0A%20%20%20%20laplacian_1d%20%3D%20second_derivative(n_1d%2C%20dx_1d)%0A%20%20%20%20coeff_1d%20%3D%20sparse.bmat(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%5BNone%2C%20sparse.identity(n_1d)%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5Bwave_speed**2%20*%20laplacian_1d%2C%20None%5D%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20format%3D%22csr%22%2C%0A%20%20%20%20)%0A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(4.2%2C%204.2)%2C%20dpi%3D100)%0A%20%20%20%20_ax.spy(coeff_1d%2C%20markersize%3D0.4)%0A%20%20%20%20_ax.set_title(f%22coefficient%20matrix%20%7Bcoeff_1d.shape%7D%2C%20nnz%3D%7Bcoeff_1d.nnz%7D%22)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%20(coeff_1d%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%A9%8D%E5%88%86%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%E7%8A%B6%E6%85%8B%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%92%20%24%5Bu%2C%20v%5D%24%20%E3%81%A8%E7%B8%A6%E3%81%AB%E4%B8%A6%E3%81%B9%E3%80%81%60solve_ivp%60%20%E3%81%AE%20%60RK45%60%EF%BC%88%E9%99%BD%E7%9A%84%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%89%E3%81%A7%0A%20%20%20%20%24t%3D2%24%20%E3%81%BE%E3%81%A7%E7%A9%8D%E5%88%86%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%60t_eval%60%20%E3%81%AB%E3%82%B3%E3%83%9E%E3%81%AE%E6%99%82%E5%88%BB%E3%82%92%E6%B8%A1%E3%81%97%E3%80%81%E5%BF%85%E8%A6%81%E3%81%AA%E6%99%82%E5%88%BB%E3%81%AE%E5%80%A4%E3%81%A0%E3%81%91%E3%82%92%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%20%20%E5%AF%86%E3%81%AA%E8%A3%9C%E9%96%93%E5%99%A8%EF%BC%88%60dense_output%60%EF%BC%89%E3%82%92%E4%BD%9C%E3%82%89%E3%81%AA%E3%81%84%E3%81%B6%E3%82%93%E3%83%A1%E3%83%A2%E3%83%AA%E3%82%92%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20-%20%60max_step%3Dframe_dt_1d%60%20%E3%81%A7%E3%82%B3%E3%83%9E%E9%96%93%E9%9A%94%E3%82%88%E3%82%8A%E5%A4%A7%E3%81%8D%E3%81%AA%E5%88%BB%E3%81%BF%E3%82%92%E7%A6%81%E6%AD%A2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20-%20%60sol.success%60%20%E3%82%92%E5%BF%85%E3%81%9A%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E5%88%BB%E3%81%BF%E5%B9%85%E3%81%8C%E4%B8%8B%E9%99%90%E3%81%AB%E9%81%94%E3%81%97%E3%81%A6%E7%A9%8D%E5%88%86%E3%81%8C%E9%80%94%E4%B8%AD%E3%81%A7%E6%89%93%E3%81%A1%E5%88%87%E3%82%89%E3%82%8C%E3%81%A6%E3%82%82%0A%20%20%20%20%20%20%60solve_ivp%60%20%E3%81%AF%E4%BE%8B%E5%A4%96%E3%82%92%E6%8A%95%E3%81%92%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%E7%A2%BA%E8%AA%8D%E3%82%92%E7%9C%81%E3%81%8F%E3%81%A8%E7%99%BA%E6%95%A3%E3%81%97%E3%81%9F%E7%B5%90%E6%9E%9C%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%0A%20%20%20%20%20%20%E5%8F%AF%E8%A6%96%E5%8C%96%E3%81%97%E3%81%A6%E3%81%97%E3%81%BE%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_(coeff_1d%2C%20frame_dt_1d%2C%20n_1d%2C%20np%2C%20t_1d%2C%20t_max_1d%2C%20u0_1d)%3A%0A%20%20%20%20from%20scipy.integrate%20import%20solve_ivp%0A%0A%20%20%20%20def%20_rhs(_t%2C%20state)%3A%0A%20%20%20%20%20%20%20%20return%20coeff_1d%20%40%20state%0A%0A%20%20%20%20_sol_1d%20%3D%20solve_ivp(%0A%20%20%20%20%20%20%20%20_rhs%2C%0A%20%20%20%20%20%20%20%20t_span%3D(0%2C%20t_max_1d)%2C%0A%20%20%20%20%20%20%20%20y0%3Dnp.hstack(%5Bu0_1d%2C%20np.zeros(n_1d)%5D)%2C%0A%20%20%20%20%20%20%20%20method%3D%22RK45%22%2C%0A%20%20%20%20%20%20%20%20t_eval%3Dt_1d%2C%0A%20%20%20%20%20%20%20%20max_step%3Dframe_dt_1d%2C%0A%20%20%20%20%20%20%20%20rtol%3D1e-8%2C%0A%20%20%20%20%20%20%20%20atol%3D1e-10%2C%0A%20%20%20%20)%0A%20%20%20%20if%20not%20_sol_1d.success%3A%0A%20%20%20%20%20%20%20%20raise%20RuntimeError(_sol_1d.message)%0A%20%20%20%20u_1d%20%3D%20_sol_1d.y.T%5B%3A%2C%20%3An_1d%5D%0A%0A%20%20%20%20f%22success%3D%7B_sol_1d.success%7D%2C%20%E5%8F%B3%E8%BE%BA%E8%A9%95%E4%BE%A1%20%7B_sol_1d.nfev%7D%20%E5%9B%9E%2C%20u%20%E3%81%AE%E7%AF%84%E5%9B%B2%20%5B%7Bu_1d.min()%3A.3f%7D%2C%20%7Bu_1d.max()%3A.3f%7D%5D%22%0A%20%20%20%20return%20solve_ivp%2C%20u_1d%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%24u%24%20%E3%81%AE%E6%9C%80%E5%B0%8F%E5%80%A4%E3%81%8C%20%24-1%24%20%E8%BF%91%E3%81%8F%E3%81%BE%E3%81%A7%E5%B1%8A%E3%81%84%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AB%E6%B3%A8%E6%84%8F%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%E5%9B%BA%E5%AE%9A%E7%AB%AF%E3%81%A7%E3%81%AE%E5%8F%8D%E5%B0%84%E3%81%AF%0A%20%20%20%20%E6%B3%A2%E5%BD%A2%E3%82%92%E4%B8%8A%E4%B8%8B%E5%8F%8D%E8%BB%A2%E3%81%95%E3%81%9B%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E7%B8%A6%E8%BB%B8%E3%81%AE%E7%AF%84%E5%9B%B2%E3%81%AF%20%24%5B0%2C1%5D%24%20%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%20%24%5B-1.15%2C1.15%5D%24%20%E3%82%92%E5%8F%96%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%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%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%89%8D%E3%81%AB%E3%80%81%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%AE%E7%94%BB%E5%83%8F%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E5%82%BE%E3%81%8D%20%24%5Cpm1%2Fc%24%20%E3%81%AE%E7%9B%B4%E7%B7%9A%EF%BC%88%E7%89%B9%E6%80%A7%E6%9B%B2%E7%B7%9A%EF%BC%89%E3%81%AB%E6%B2%BF%E3%81%A3%E3%81%A6%E5%B1%B1%E3%81%8C%E9%80%B2%E3%81%BF%E3%80%81%E5%A3%81%E3%81%AB%E5%BD%93%E3%81%9F%E3%82%8B%E3%81%9F%E3%81%B3%E3%81%AB%E6%8A%98%E3%82%8A%E8%BF%94%E3%81%97%E3%81%AA%E3%81%8C%E3%82%89%0A%20%20%20%20%E7%AC%A6%E5%8F%B7%E3%81%8C%E5%8F%8D%E8%BB%A2%E3%81%99%E3%82%8B%E6%A7%98%E5%AD%90%E3%81%8C%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%24t%3D2%24%20%E3%81%A7%E5%88%9D%E6%9C%9F%E6%B3%A2%E5%BD%A2%E3%81%B8%E6%88%BB%E3%82%8B%E5%91%A8%E6%9C%9F%E6%80%A7%E3%82%82%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_(plt%2C%20t_1d%2C%20u_1d%2C%20x_1d)%3A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(5.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%20u_1d%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%22RdBu_r%22%2C%0A%20%20%20%20%20%20%20%20vmin%3D-1%2C%0A%20%20%20%20%20%20%20%20vmax%3D1%2C%0A%20%20%20%20%20%20%20%20extent%3D%5Bx_1d%5B0%5D%2C%20x_1d%5B-1%5D%2C%20t_1d%5B0%5D%2C%20t_1d%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%20plt%2C%20save_gif%2C%20t_1d%2C%20u_1d%2C%20x_1d)%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%201)%0A%20%20%20%20_ax.set_ylim(-1.15%2C%201.15)%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.6)%0A%20%20%20%20_title%20%3D%20_ax.set_title(%221D%20wave%2C%20t%20%3D%200.000%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(x_1d%2C%20u_1d%5Bframe%5D)%0A%20%20%20%20%20%20%20%20_title.set_text(f%221D%20wave%2C%20t%20%3D%20%7Bt_1d%5Bframe%5D%3A.3f%7D%22)%0A%20%20%20%20%20%20%20%20return%20(_line%2C%20_title)%0A%0A%20%20%20%20wave_1d_gif%20%3D%20artifacts_dir%20%2F%20%22wave_1d.gif%22%0A%20%20%20%20save_gif(_fig%2C%20_update%2C%20len(t_1d)%2C%20wave_1d_gif%2C%20interval%3D50)%0A%20%20%20%20return%20(wave_1d_gif%2C)%0A%0A%0A%40app.cell%0Adef%20_(gif_image%2C%20wave_1d_gif)%3A%0A%20%20%20%20gif_image(wave_1d_gif%2C%20alt%3D%221%E6%AC%A1%E5%85%83%E6%B3%A2%E5%8B%95%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%5Clesssim0.12%24%3A%20%E5%88%9D%E6%9C%9F%E3%81%AE%201%20%E5%B1%B1%E3%81%8C%E6%8C%AF%E5%B9%85%20%241%2F2%24%20%E3%81%AE%202%20%E3%81%A4%E3%81%AE%E5%B1%B1%E3%81%B8%E5%88%86%E8%A3%82%E3%81%97%E3%80%81%E5%B7%A6%E5%8F%B3%E3%81%B8%E9%80%9F%E5%BA%A6%20%24c%3D1%24%20%E3%81%A7%E9%80%B2%E3%82%80%E3%80%82%0A%20%20%20%202.%20%24t%5Csimeq0.4%24%E3%80%9C%240.6%24%3A%20%E5%9B%BA%E5%AE%9A%E7%AB%AF%E3%81%AB%E5%88%B0%E9%81%94%E3%81%97%E3%81%9F%E5%B1%B1%E3%81%8C**%E4%B8%8A%E4%B8%8B%E5%8F%8D%E8%BB%A2%E3%81%97%E3%81%A6**%E8%B7%B3%E3%81%AD%E8%BF%94%E3%82%8B%E3%80%82%0A%20%20%20%20%20%20%20%E5%9B%BA%E5%AE%9A%E7%AB%AF%E3%81%A7%E3%81%AF%E5%B8%B8%E3%81%AB%20%24u%3D0%24%20%E3%81%A7%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%E3%81%AA%E3%82%89%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%E5%85%A5%E5%B0%84%E6%B3%A2%E3%82%92%E6%89%93%E3%81%A1%E6%B6%88%E3%81%99%E5%8F%8D%E8%BB%A2%E6%B3%A2%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AB%E3%81%AA%E3%82%8B%E3%80%82%0A%20%20%20%203.%20%24t%3D2%24%3A%20%E5%B7%A6%E5%8F%B3%E3%81%AE%E6%B3%A2%E3%81%8C%E4%B8%AD%E5%A4%AE%E3%81%A7%E5%86%8D%E3%81%B3%E9%87%8D%E3%81%AA%E3%82%8A%E3%80%81%E5%88%9D%E6%9C%9F%E6%B3%A2%E5%BD%A2%E3%81%8C%E5%BE%A9%E5%85%83%E3%81%99%E3%82%8B%EF%BC%88%E5%91%A8%E6%9C%9F%20%242L%2Fc%3D2%24%EF%BC%89%E3%80%82%0A%0A%20%20%20%20%E6%8C%AF%E5%B9%85%E3%81%8C%E3%81%BB%E3%81%A8%E3%82%93%E3%81%A9%E6%B8%9B%E8%A1%B0%E3%81%97%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8%E3%81%8C%E3%80%81%E5%8F%8C%E6%9B%B2%E5%9E%8B%E3%81%A8%E6%94%BE%E7%89%A9%E5%9E%8B%EF%BC%88%E6%8B%A1%E6%95%A3%E6%96%B9%E7%A8%8B%E5%BC%8F%EF%BC%89%E3%81%AE%E6%B1%BA%E5%AE%9A%E7%9A%84%E3%81%AA%E9%81%95%E3%81%84%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%202%20%E6%AC%A1%E5%85%83%E3%81%AE%E6%B3%A2%E5%8B%95%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%202%20%E6%AC%A1%E5%85%83%E3%81%A7%E3%81%AF%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cfrac%7B%E2%88%82%5E2u%7D%7B%E2%88%82t%5E2%7D%3Dc%5E2%5Cleft(%5Cfrac%7B%E2%88%82%5E2u%7D%7B%E2%88%82x%5E2%7D%2B%5Cfrac%7B%E2%88%82%5E2u%7D%7B%E2%88%82y%5E2%7D%5Cright)%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%5B0%2C1%5D%5E2%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-%20%E7%A9%BA%E9%96%93%E5%88%BB%E3%81%BF%20%24h%3D0.02%24%EF%BC%88%2450%5Ctimes50%3D2500%24%20%E6%A0%BC%E5%AD%90%E7%82%B9%E3%80%81%E6%9C%AA%E7%9F%A5%E6%95%B0%E3%81%AF%20%24u%24%20%E3%81%A8%20%24v%24%20%E3%81%A7%205000%EF%BC%89%0A%20%20%20%20-%20%E6%99%82%E9%96%93%E7%AF%84%E5%9B%B2%20%24t%5Cin%5B0%2C1.5%5D%24%E3%80%811%20%E3%82%B3%E3%83%9E%20%24%CE%94t_%7B%5Ctext%7Bframe%7D%7D%3D0.015%24%EF%BC%88101%20%E3%82%B3%E3%83%9E%EF%BC%89%0A%20%20%20%20-%20%E5%A2%83%E7%95%8C%E6%9D%A1%E4%BB%B6%E3%81%AF%E3%83%8E%E3%82%A4%E3%83%9E%E3%83%B3%E6%9D%A1%E4%BB%B6%EF%BC%88%E6%B3%95%E7%B7%9A%E6%96%B9%E5%90%91%E3%81%AE%E5%8B%BE%E9%85%8D%E3%82%BC%E3%83%AD%E3%80%81%E8%87%AA%E7%94%B1%E7%AB%AF%EF%BC%89%0A%0A%20%20%20%20%E3%82%82%E3%81%A8%E3%81%AE%E8%A8%AD%E5%AE%9A%EF%BC%88%24h%3D0.05%24%20%E3%81%AE%20%2420%5Ctimes20%24%20%E6%A0%BC%E5%AD%90%E3%80%81%24t%5Cleq0.8%24%EF%BC%89%E3%81%A7%E3%81%AF%E6%A0%BC%E5%AD%90%E3%81%8C%E7%B2%97%E3%81%8F%E3%80%81%0A%20%20%20%20%E5%86%86%E5%BD%A2%E3%81%AE%E6%B3%A2%E9%9D%A2%E3%81%8C%E9%9A%8E%E6%AE%B5%E7%8A%B6%E3%81%AB%E8%A6%8B%E3%81%88%E3%81%A6%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E6%A0%BC%E5%AD%90%E3%82%92%20%2450%5Ctimes50%24%20%E3%81%B8%E3%80%81%0A%20%20%20%20%E6%99%82%E9%96%93%E3%82%92%E5%A3%81%E3%81%A7%E3%81%AE%E5%8F%8D%E5%B0%84%E3%81%8C%202%20%E5%9B%9E%E8%B5%B7%E3%81%8D%E3%82%8B%20%24t%3D1.5%24%20%E3%81%BE%E3%81%A7%E5%BB%B6%E3%81%B0%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%20dx_2d%20%3D%200.02%0A%20%20%20%20x_2d%20%3D%20np.arange(0%2C%201%2C%20dx_2d)%0A%20%20%20%20y_2d%20%3D%20np.arange(0%2C%201%2C%20dx_2d)%0A%20%20%20%20nx_2d%2C%20ny_2d%20%3D%20len(x_2d)%2C%20len(y_2d)%0A%20%20%20%20n_2d%20%3D%20nx_2d%20*%20ny_2d%0A%0A%20%20%20%20t_max_2d%20%3D%201.5%0A%20%20%20%20frame_dt_2d%20%3D%200.015%0A%20%20%20%20t_2d%20%3D%20np.arange(0%2C%20t_max_2d%20%2B%200.5%20*%20frame_dt_2d%2C%20frame_dt_2d)%0A%0A%20%20%20%20f%22%E6%A0%BC%E5%AD%90%20%7Bnx_2d%7Dx%7Bny_2d%7D%3D%7Bn_2d%7D%20%E7%82%B9%2C%20%E6%9C%AA%E7%9F%A5%E6%95%B0%20%7B2%20*%20n_2d%7D%2C%20%E3%82%B3%E3%83%9E%E6%95%B0%20%7Blen(t_2d)%7D%22%0A%20%20%20%20return%20dx_2d%2C%20frame_dt_2d%2C%20n_2d%2C%20nx_2d%2C%20ny_2d%2C%20t_2d%2C%20t_max_2d%2C%20x_2d%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%0A%0A%20%20%20%201%20%E6%AC%A1%E5%85%83%E3%81%A8%E5%90%8C%E3%81%98%E5%88%87%E3%82%8A%E5%87%BA%E3%81%97%E3%81%9F%E4%BD%99%E5%BC%A6%E3%81%AE%E5%B1%B1%E3%82%92%202%20%E6%96%B9%E5%90%91%E3%81%AE%E3%83%86%E3%83%B3%E3%82%BD%E3%83%AB%E7%A9%8D%E3%81%AB%E3%81%97%E3%81%A6%202%20%E6%AC%A1%E5%85%83%E3%81%AE%E9%9A%86%E8%B5%B7%E3%82%92%E4%BD%9C%E3%82%8A%E3%80%81%0A%20%20%20%20%24(x%2Cy)%5Csimeq(0.25%2C0.25)%24%20%E3%81%A8%20%24(0.75%2C0.75)%24%20%E3%81%AE%202%20%E3%81%8B%E6%89%80%E3%81%AB%E7%BD%AE%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E6%B3%A2%E6%BA%90%E3%82%92%202%20%E3%81%A4%E3%81%AB%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E3%80%81%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E3%81%8B%E3%82%89%E5%BA%83%E3%81%8C%E3%82%8B%E5%86%86%E5%BD%A2%E6%B3%A2%E3%81%8C%E5%B9%B2%E6%B8%89%E3%81%99%E3%82%8B%E6%A7%98%E5%AD%90%E3%81%8C%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_(dx_2d%2C%20np%2C%20plt%2C%20x_2d)%3A%0A%20%20%20%20_cosine%20%3D%200.5%20*%20np.cos(8%20*%20np.pi%20*%20(x_2d%20-%200.5))%20%2B%200.5%0A%0A%20%20%20%20_first%20%3D%20_cosine.copy()%0A%20%20%20%20_first%5B%3A%20int(1%20%2F%208%20%2F%20dx_2d)%5D%20%3D%200%0A%20%20%20%20_first%5Bint(3%20%2F%208%20%2F%20dx_2d)%20%3A%5D%20%3D%200%0A%0A%20%20%20%20_second%20%3D%20_cosine.copy()%0A%20%20%20%20_second%5B%3A%20int(5%20%2F%208%20%2F%20dx_2d)%5D%20%3D%200%0A%20%20%20%20_second%5Bint(7%20%2F%208%20%2F%20dx_2d)%20%3A%5D%20%3D%200%0A%0A%20%20%20%20u0_2d%20%3D%20np.tensordot(_first%2C%20_first%2C%20axes%3D0)%20%2B%20np.tensordot(_second%2C%20_second%2C%20axes%3D0)%0A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(4.4%2C%203.8)%2C%20dpi%3D100)%0A%20%20%20%20_im%20%3D%20_ax.imshow(u0_2d%2C%20origin%3D%22lower%22%2C%20cmap%3D%22RdBu_r%22%2C%20vmin%3D-1%2C%20vmax%3D1%2C%20extent%3D%5B0%2C%201%2C%200%2C%201%5D)%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(%22initial%20displacement%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(u0_2d%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%E4%BF%82%E6%95%B0%E8%A1%8C%E5%88%97%0A%0A%20%20%20%202%20%E6%AC%A1%E5%85%83%E3%81%AE%E6%A0%BC%E5%AD%90%E7%82%B9%20%24(i%2Cj)%24%20%E3%82%92%20%60index%20%3D%20i%20*%20ny%20%2B%20j%60%20%E3%81%AE%201%20%E6%9C%AC%E3%81%AE%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%B8%E4%B8%A6%E3%81%B9%E6%9B%BF%E3%81%88%E3%82%8B%E3%81%A8%E3%80%81%0A%20%20%20%20%E9%9A%A3%E6%8E%A5%E7%82%B9%E3%81%AE%E5%8F%82%E7%85%A7%E3%81%AF%204%20%E6%9C%AC%E3%81%AE%E3%82%B7%E3%83%95%E3%83%88%E8%A1%8C%E5%88%97%E3%81%A7%E6%9B%B8%E3%81%91%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%60shift_ym%60%20%2F%20%60shift_yp%60%3A%20%24j%5Cmp1%24%20%E3%82%92%E6%8C%87%E3%81%99%E3%80%82%E5%AF%BE%E8%A7%92%E3%81%8B%E3%82%89%20%24%5Cmp1%24%20%E3%81%9A%E3%82%8C%E3%81%9F%E6%88%90%E5%88%86%E3%80%82%0A%20%20%20%20-%20%60shift_xm%60%20%2F%20%60shift_xp%60%3A%20%24i%5Cmp1%24%20%E3%82%92%E6%8C%87%E3%81%99%E3%80%82%E5%AF%BE%E8%A7%92%E3%81%8B%E3%82%89%20%24%5Cmp%20n_y%24%20%E3%81%9A%E3%82%8C%E3%81%9F%E6%88%90%E5%88%86%E3%80%82%0A%0A%20%20%20%20%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%A0%E3%81%A8%20%24j%3D0%24%20%E3%81%AE%E8%A1%8C%E3%81%8C%E5%89%8D%E3%81%AE%20%24x%24%20%E5%88%97%E3%81%AE%20%24j%3Dn_y-1%24%20%E3%82%92%E5%8F%82%E7%85%A7%E3%81%97%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86%E3%81%9F%E3%82%81%E3%80%81%0A%20%20%20%20%E5%A2%83%E7%95%8C%E3%81%AB%E5%BD%93%E3%81%9F%E3%82%8B%E8%A1%8C%E3%82%92%E4%B8%80%E5%BA%A6%E3%82%BC%E3%83%AD%E3%81%AB%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89**%E5%AF%BE%E8%A7%92%E6%88%90%E5%88%86%E3%81%AB%201%20%E3%82%92%E5%85%A5%E3%82%8C%E7%9B%B4%E3%81%97%E3%81%BE%E3%81%99**%E3%80%82%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%81%AF%E9%A0%98%E5%9F%9F%E5%A4%96%E3%81%AE%E7%82%B9%E3%81%AE%E5%80%A4%E3%82%92%E8%87%AA%E5%88%86%E8%87%AA%E8%BA%AB%E3%81%AE%E5%80%A4%E3%81%A7%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AB%E7%9B%B8%E5%BD%93%E3%81%97%E3%80%81%0A%20%20%20%20%E6%B3%95%E7%B7%9A%E6%96%B9%E5%90%91%E3%81%AE%E5%B7%AE%E5%88%86%E3%81%8C%E3%82%BC%E3%83%AD%E3%80%81%E3%81%99%E3%81%AA%E3%82%8F%E3%81%A1%E3%83%8E%E3%82%A4%E3%83%9E%E3%83%B3%E5%A2%83%E7%95%8C%E6%9D%A1%E4%BB%B6%EF%BC%88%E8%87%AA%E7%94%B1%E7%AB%AF%EF%BC%89%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%201%20%E6%AC%A1%E5%85%83%E3%81%A7%E4%BD%BF%E3%81%A3%E3%81%9F%E5%9B%BA%E5%AE%9A%E7%AB%AF%E3%81%A8%E9%81%95%E3%81%84%E3%80%81%E5%8F%8D%E5%B0%84%E3%81%AE%E3%81%A8%E3%81%8D%E3%81%AB%E6%B3%A2%E5%BD%A2%E3%81%8C%E5%8F%8D%E8%BB%A2%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%0A%20%20%20%20%E3%83%A9%E3%83%97%E3%83%A9%E3%82%B7%E3%82%A2%E3%83%B3%E3%81%AF%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cnabla%5E2u%7C_%7Bi%2Cj%7D%5Csimeq%5Cfrac%7Bu_%7Bi%2B1%2Cj%7D%2Bu_%7Bi-1%2Cj%7D%2Bu_%7Bi%2Cj%2B1%7D%2Bu_%7Bi%2Cj-1%7D-4u_%7Bi%2Cj%7D%7D%7Bh%5E2%7D%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%0Adef%20_(sparse)%3A%0A%20%20%20%20def%20neighbor_matrix(n%3A%20int%2C%20offset%3A%20int%2C%20blocked%3A%20slice%20%7C%20range)%20-%3E%20sparse.csr_matrix%3A%0A%20%20%20%20%20%20%20%20%22%22%22offset%20%E3%81%A0%E3%81%91%E3%81%9A%E3%82%8C%E3%81%9F%E9%9A%A3%E6%8E%A5%E7%82%B9%E3%82%92%E6%8C%87%E3%81%99%E8%A1%8C%E5%88%97%E3%80%82%E5%A2%83%E7%95%8C%E8%A1%8C%E3%81%AF%E8%87%AA%E5%88%86%E8%87%AA%E8%BA%AB%E3%82%92%E6%8C%87%E3%81%99%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20matrix%20%3D%20sparse.lil_matrix(sparse.eye(n%2C%20k%3Doffset))%0A%20%20%20%20%20%20%20%20for%20index%20in%20blocked%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20matrix%5Bindex%2C%20%3A%5D%20%3D%200%0A%20%20%20%20%20%20%20%20%20%20%20%20matrix%5Bindex%2C%20index%5D%20%3D%201%0A%20%20%20%20%20%20%20%20return%20sparse.csr_matrix(matrix)%0A%0A%20%20%20%20return%20(neighbor_matrix%2C)%0A%0A%0A%40app.cell%0Adef%20_(dx_2d%2C%20n_2d%2C%20neighbor_matrix%2C%20nx_2d%2C%20ny_2d%2C%20sparse)%3A%0A%20%20%20%20_shift_ym%20%3D%20neighbor_matrix(n_2d%2C%20-1%2C%20range(0%2C%20n_2d%2C%20ny_2d))%0A%20%20%20%20_shift_yp%20%3D%20neighbor_matrix(n_2d%2C%201%2C%20range(ny_2d%20-%201%2C%20n_2d%2C%20ny_2d))%0A%20%20%20%20_shift_xm%20%3D%20neighbor_matrix(n_2d%2C%20-ny_2d%2C%20range(ny_2d))%0A%20%20%20%20_shift_xp%20%3D%20neighbor_matrix(n_2d%2C%20ny_2d%2C%20range((nx_2d%20-%201)%20*%20ny_2d%2C%20n_2d))%0A%0A%20%20%20%20laplacian_2d%20%3D%20(%0A%20%20%20%20%20%20%20%20_shift_ym%20%2B%20_shift_yp%20%2B%20_shift_xm%20%2B%20_shift_xp%20-%204%20*%20sparse.identity(n_2d)%0A%20%20%20%20)%20%2F%20dx_2d**2%0A%20%20%20%20coeff_2d%20%3D%20sparse.bmat(%0A%20%20%20%20%20%20%20%20%5B%5BNone%2C%20sparse.identity(n_2d)%5D%2C%20%5Blaplacian_2d%2C%20None%5D%5D%2C%0A%20%20%20%20%20%20%20%20format%3D%22csr%22%2C%0A%20%20%20%20)%0A%0A%20%20%20%20f%22laplacian%20%7Blaplacian_2d.shape%7D%20nnz%3D%7Blaplacian_2d.nnz%7D%2C%20coeff%20%7Bcoeff_2d.shape%7D%20nnz%3D%7Bcoeff_2d.nnz%7D%22%0A%20%20%20%20return%20coeff_2d%2C%20laplacian_2d%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%245000%5Ctimes5000%24%20%E3%81%AE%E8%A1%8C%E5%88%97%E3%82%92%20%60toarray()%60%20%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%81%A8%20200%20MB%20%E3%81%AE%E5%AF%86%E8%A1%8C%E5%88%97%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86%E3%81%AE%E3%81%A7%E3%80%81%0A%20%20%20%20%E6%A7%8B%E9%80%A0%E3%81%AF%20%60spy%60%20%E3%81%A7%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E5%B7%A6%E3%81%AF%E4%BF%82%E6%95%B0%E8%A1%8C%E5%88%97%20%24A%24%20%E5%85%A8%E4%BD%93%E3%81%A7%E3%80%81%E5%8F%B3%E4%B8%8A%E3%81%AE%E5%AF%BE%E8%A7%92%E7%B7%9A%E3%81%8C%20%24%E2%88%82_tu%3Dv%24%20%E3%82%92%E8%A1%A8%E3%81%99%E5%8D%98%E4%BD%8D%E8%A1%8C%E5%88%97%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%80%81%0A%20%20%20%20%E5%B7%A6%E4%B8%8B%E3%81%AE%E5%B8%AF%E3%81%8C%E3%83%A9%E3%83%97%E3%83%A9%E3%82%B7%E3%82%A2%E3%83%B3%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%A7%E3%81%99%E3%80%82%E5%8F%B3%E3%81%AF%E3%81%9D%E3%81%AE%E3%83%A9%E3%83%97%E3%83%A9%E3%82%B7%E3%82%A2%E3%83%B3%E3%81%AE%E5%B7%A6%E4%B8%8A%0A%20%20%20%20%24200%5Ctimes200%24%20%E3%82%92%E6%8B%A1%E5%A4%A7%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE%E3%81%A7%E3%80%81%E9%9D%9E%E3%82%BC%E3%83%AD%E3%81%AF%205%20%E6%9C%AC%E3%81%AE%E5%AF%BE%E8%A7%92%E7%B7%9A%E3%81%AB%E4%B8%A6%E3%81%B3%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E4%B8%AD%E5%A4%AE%E3%81%AE%E5%A4%AA%E3%81%84%E5%B8%AF%E3%81%8C%E8%87%AA%E5%88%86%E8%87%AA%E8%BA%AB%E3%81%A8%20%24y%24%20%E6%96%B9%E5%90%91%E3%81%AE%E9%9A%A3%EF%BC%88%E5%AF%BE%E8%A7%92%E3%81%8B%E3%82%89%20%24%5Cpm1%24%EF%BC%89%E3%80%81%E3%81%9D%E3%81%AE%E5%A4%96%E5%81%B4%E3%81%AE%202%20%E6%9C%AC%E3%81%8C%0A%20%20%20%20%24x%24%20%E6%96%B9%E5%90%91%E3%81%AE%E9%9A%A3%EF%BC%88%E5%AF%BE%E8%A7%92%E3%81%8B%E3%82%89%20%24%5Cpm%20n_y%3D%5Cpm50%24%EF%BC%89%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_(coeff_2d%2C%20laplacian_2d%2C%20plt)%3A%0A%20%20%20%20_fig%2C%20_axes%20%3D%20plt.subplots(1%2C%202%2C%20figsize%3D(8.4%2C%204.2)%2C%20dpi%3D100)%0A%20%20%20%20_axes%5B0%5D.spy(coeff_2d%2C%20markersize%3D0.15)%0A%20%20%20%20_axes%5B0%5D.set_title(f%22coefficient%20matrix%20%7Bcoeff_2d.shape%7D%22)%0A%20%20%20%20_axes%5B1%5D.spy(laplacian_2d%5B%3A200%2C%20%3A200%5D%2C%20markersize%3D1.2)%0A%20%20%20%20_axes%5B1%5D.set_title(%22laplacian%20block%20(top-left%20200x200)%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%23%23%23%20%E6%99%82%E9%96%93%E7%A9%8D%E5%88%86%0A%0A%20%20%20%201%20%E6%AC%A1%E5%85%83%E3%81%A8%E5%90%8C%E3%81%98%E3%81%8F%20%60RK45%60%20%E3%81%A7%E7%A9%8D%E5%88%86%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%9C%AA%E7%9F%A5%E6%95%B0%E3%81%8C%205000%20%E5%80%8B%E3%81%82%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E5%8F%B3%E8%BE%BA%E8%A9%95%E4%BE%A1%E3%81%AF%0A%20%20%20%20%E6%95%B0%E5%8D%83%E5%9B%9E%E3%81%AB%E9%81%94%E3%81%97%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E4%BF%82%E6%95%B0%E8%A1%8C%E5%88%97%E3%81%AF%201%20%E8%A1%8C%E3%81%82%E3%81%9F%E3%82%8A%E9%9D%9E%E3%82%BC%E3%83%AD%E3%81%8C%E9%AB%98%E3%80%85%205%20%E5%80%8B%E3%81%AE%E7%96%8E%E8%A1%8C%E5%88%97%E3%81%AA%E3%81%AE%E3%81%A7%0A%20%20%20%20%E6%95%B0%E7%A7%92%E3%81%A7%E7%B5%82%E3%82%8F%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_(coeff_2d%2C%20frame_dt_2d%2C%20n_2d%2C%20np%2C%20solve_ivp%2C%20t_2d%2C%20t_max_2d%2C%20u0_2d)%3A%0A%20%20%20%20def%20_rhs(_t%2C%20state)%3A%0A%20%20%20%20%20%20%20%20return%20coeff_2d%20%40%20state%0A%0A%20%20%20%20_sol_2d%20%3D%20solve_ivp(%0A%20%20%20%20%20%20%20%20_rhs%2C%0A%20%20%20%20%20%20%20%20t_span%3D(0%2C%20t_max_2d)%2C%0A%20%20%20%20%20%20%20%20y0%3Dnp.hstack(%5Bu0_2d.reshape(-1)%2C%20np.zeros(n_2d)%5D)%2C%0A%20%20%20%20%20%20%20%20method%3D%22RK45%22%2C%0A%20%20%20%20%20%20%20%20t_eval%3Dt_2d%2C%0A%20%20%20%20%20%20%20%20max_step%3Dframe_dt_2d%2C%0A%20%20%20%20%20%20%20%20rtol%3D1e-6%2C%0A%20%20%20%20%20%20%20%20atol%3D1e-9%2C%0A%20%20%20%20)%0A%20%20%20%20if%20not%20_sol_2d.success%3A%0A%20%20%20%20%20%20%20%20raise%20RuntimeError(_sol_2d.message)%0A%20%20%20%20u_2d%20%3D%20_sol_2d.y.T%5B%3A%2C%20%3An_2d%5D%0A%0A%20%20%20%20f%22success%3D%7B_sol_2d.success%7D%2C%20%E5%8F%B3%E8%BE%BA%E8%A9%95%E4%BE%A1%20%7B_sol_2d.nfev%7D%20%E5%9B%9E%2C%20u%20%E3%81%AE%E7%AF%84%E5%9B%B2%20%5B%7Bu_2d.min()%3A.3f%7D%2C%20%7Bu_2d.max()%3A.3f%7D%5D%22%0A%20%20%20%20return%20(u_2d%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%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%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%20%60RdBu_r%60%20%E3%82%92%E4%BD%BF%E3%81%84%E3%80%81%E8%89%B2%E3%81%AE%E7%AF%84%E5%9B%B2%E3%82%92%E5%85%A8%E3%82%B3%E3%83%9E%E3%81%A7%0A%20%20%20%20%24%5B-0.4%2C0.4%5D%24%20%E3%81%AB%E5%9B%BA%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%82%B3%E3%83%9E%E3%81%94%E3%81%A8%E3%81%AB%E8%89%B2%E3%81%AE%E7%AF%84%E5%9B%B2%E3%82%92%E8%87%AA%E5%8B%95%E8%AA%BF%E6%95%B4%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E6%8C%AF%E5%B9%85%E3%81%8C%E5%B0%8F%E3%81%95%E3%81%8F%0A%20%20%20%20%E3%81%AA%E3%81%A3%E3%81%9F%E6%99%82%E5%88%BB%E3%81%A7%E3%82%82%E5%90%8C%E3%81%98%E6%BF%83%E3%81%95%E3%81%A7%E6%8F%8F%E3%81%8B%E3%82%8C%E3%81%A6%E3%81%97%E3%81%BE%E3%81%84%E3%80%81%E6%B8%9B%E8%A1%B0%E3%82%84%E9%9B%86%E4%B8%AD%E3%81%AE%E6%A7%98%E5%AD%90%E3%81%8C%E8%AA%AD%E3%82%81%E3%81%AA%E3%81%8F%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E7%AF%84%E5%9B%B2%E3%82%92%E5%88%9D%E6%9C%9F%E6%8C%AF%E5%B9%85%E3%81%AE%20%241%24%20%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%20%240.4%24%20%E3%81%AB%E5%8F%96%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%AF%E3%80%812%20%E6%AC%A1%E5%85%83%E3%81%A7%E3%81%AF%E5%86%86%E5%BD%A2%E3%81%AB%E5%BA%83%E3%81%8C%E3%82%8B%0A%20%20%20%20%E6%B3%A2%E3%81%AE%E6%8C%AF%E5%B9%85%E3%81%8C%E8%B7%9D%E9%9B%A2%E3%81%AE%E3%81%8A%E3%82%88%E3%81%9D%20%241%2F%5Csqrt%7Br%7D%24%20%E3%81%A7%E4%B8%8B%E3%81%8C%E3%82%8A%E3%80%81%24t%5Cgtrsim0.2%24%20%E4%BB%A5%E9%99%8D%E3%81%AE%E6%8C%AF%E5%B9%85%E3%81%8C%0A%20%20%20%20%240.3%24%20%E7%A8%8B%E5%BA%A6%E3%81%AB%E8%90%BD%E3%81%A1%E7%9D%80%E3%81%8F%E3%81%9F%E3%82%81%E3%81%A7%E3%81%99%E3%80%82%E6%9C%80%E5%88%9D%E3%81%AE%E6%95%B0%E3%82%B3%E3%83%9E%E3%81%A7%E3%81%AF%202%20%E3%81%A4%E3%81%AE%E9%9A%86%E8%B5%B7%E3%81%8C%E9%A3%BD%E5%92%8C%E3%81%97%E3%81%A6%0A%20%20%20%20%E7%9C%9F%E3%81%A3%E8%B5%A4%E3%81%AB%E6%8F%8F%E3%81%8B%E3%82%8C%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E3%81%9D%E3%81%AE%E3%81%B6%E3%82%93%E4%BB%A5%E9%99%8D%E3%81%AE%E6%B3%A2%E9%9D%A2%E3%81%A8%E5%B9%B2%E6%B8%89%E6%A8%A1%E6%A7%98%E3%81%8C%E3%81%AF%E3%81%A3%E3%81%8D%E3%82%8A%E8%A6%8B%E3%81%88%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20101%20%E3%82%B3%E3%83%9E%E3%82%92%201%20%E3%82%B3%E3%83%9E%2080%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%20nx_2d%2C%20ny_2d%2C%20plt%2C%20save_gif%2C%20t_2d%2C%20u_2d)%3A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(4.3%2C%203.8)%2C%20dpi%3D100)%0A%20%20%20%20_im%20%3D%20_ax.imshow(%0A%20%20%20%20%20%20%20%20u_2d%5B0%5D.reshape(nx_2d%2C%20ny_2d)%2C%0A%20%20%20%20%20%20%20%20origin%3D%22lower%22%2C%0A%20%20%20%20%20%20%20%20cmap%3D%22RdBu_r%22%2C%0A%20%20%20%20%20%20%20%20vmin%3D-0.4%2C%0A%20%20%20%20%20%20%20%20vmax%3D0.4%2C%0A%20%20%20%20%20%20%20%20extent%3D%5B0%2C%201%2C%200%2C%201%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%24y%24%22)%0A%20%20%20%20_title%20%3D%20_ax.set_title(%222D%20wave%2C%20t%20%3D%200.000%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(u_2d%5Bframe%5D.reshape(nx_2d%2C%20ny_2d))%0A%20%20%20%20%20%20%20%20_title.set_text(f%222D%20wave%2C%20t%20%3D%20%7Bt_2d%5Bframe%5D%3A.3f%7D%22)%0A%20%20%20%20%20%20%20%20return%20(_im%2C%20_title)%0A%0A%20%20%20%20wave_2d_gif%20%3D%20artifacts_dir%20%2F%20%22wave_2d.gif%22%0A%20%20%20%20save_gif(_fig%2C%20_update%2C%20len(t_2d)%2C%20wave_2d_gif%2C%20interval%3D80)%0A%20%20%20%20return%20(wave_2d_gif%2C)%0A%0A%0A%40app.cell%0Adef%20_(gif_image%2C%20wave_2d_gif)%3A%0A%20%20%20%20gif_image(wave_2d_gif%2C%20alt%3D%222%E6%AC%A1%E5%85%83%E6%B3%A2%E5%8B%95%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.15%24%3A%202%20%E3%81%A4%E3%81%AE%E6%B3%A2%E6%BA%90%E3%81%8B%E3%82%89%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E5%90%8C%E5%BF%83%E5%86%86%E7%8A%B6%E3%81%AE%E6%B3%A2%E9%9D%A2%E3%81%8C%E5%BA%83%E3%81%8C%E3%82%8B%E3%80%82%0A%20%20%20%20%20%20%20%E5%BA%83%E3%81%8C%E3%81%A3%E3%81%9F%E5%86%86%E3%81%AE%E4%B8%AD%E5%BF%83%E3%81%AB%E3%81%AF%E3%80%81%E9%80%B2%E8%A1%8C%E6%B3%A2%E3%81%AE%E8%A3%8F%E8%BF%94%E3%81%97%E3%81%A7%E3%81%82%E3%82%8B%E7%AA%AA%E3%81%BF%EF%BC%88%E9%9D%92%EF%BC%89%E3%81%8C%E6%AE%8B%E3%82%8B%E3%80%82%0A%20%20%20%202.%20%24t%5Csimeq0.2%24%E3%80%9C%240.3%24%3A%202%20%E3%81%A4%E3%81%AE%E5%86%86%E3%81%8C%E4%B8%AD%E9%96%93%E3%81%AE%E5%AF%BE%E8%A7%92%E7%B7%9A%E4%B8%8A%E3%81%A7%E5%87%BA%E4%BC%9A%E3%81%84%E3%80%81%E5%B1%B1%E3%81%A8%E5%B1%B1%E3%81%8C%E9%87%8D%E3%81%AA%E3%81%A3%E3%81%A6%0A%20%20%20%20%20%20%20%E6%8C%AF%E5%B9%85%E3%81%8C%E8%B6%B3%E3%81%97%E5%90%88%E3%82%8F%E3%81%95%E3%82%8C%E3%82%8B%EF%BC%88%E7%B7%9A%E5%BD%A2%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%AA%E3%81%AE%E3%81%A7%E9%87%8D%E3%81%AD%E5%90%88%E3%82%8F%E3%81%9B%E3%81%8C%E5%8E%B3%E5%AF%86%E3%81%AB%E6%88%90%E3%82%8A%E7%AB%8B%E3%81%A4%EF%BC%89%E3%80%82%0A%20%20%20%20%20%20%20%E5%90%8C%E3%81%98%E3%81%93%E3%82%8D%E3%80%81%E6%B3%A2%E6%BA%90%E3%81%AB%E8%BF%91%E3%81%84%E5%A3%81%E3%81%B8%E3%81%AE%E5%88%B0%E9%81%94%E3%82%82%E5%A7%8B%E3%81%BE%E3%82%8B%E3%80%82%0A%20%20%20%203.%20%E5%A3%81%E3%81%A7%E3%81%AE%E5%8F%8D%E5%B0%84%3A%20%E8%87%AA%E7%94%B1%E7%AB%AF%EF%BC%88%E3%83%8E%E3%82%A4%E3%83%9E%E3%83%B3%E5%A2%83%E7%95%8C%EF%BC%89%E3%81%AA%E3%81%AE%E3%81%A7**%E7%AC%A6%E5%8F%B7%E3%82%92%E4%BF%9D%E3%81%A3%E3%81%9F%E3%81%BE%E3%81%BE**%E8%B7%B3%E3%81%AD%E8%BF%94%E3%82%8B%E3%80%82%0A%20%20%20%20%20%20%201%20%E6%AC%A1%E5%85%83%E3%81%AE%E5%9B%BA%E5%AE%9A%E7%AB%AF%E3%81%A7%E6%B3%A2%E5%BD%A2%E3%81%8C%E5%8F%8D%E8%BB%A2%E3%81%97%E3%81%9F%E3%81%AE%E3%81%A8%E5%AF%BE%E7%85%A7%E7%9A%84%E3%81%A7%E3%80%81%E5%A3%81%E3%81%AE%E3%81%99%E3%81%90%E5%86%85%E5%81%B4%E3%81%A7%E3%81%AF%0A%20%20%20%20%20%20%20%E5%85%A5%E5%B0%84%E6%B3%A2%E3%81%A8%E5%8F%8D%E5%B0%84%E6%B3%A2%E3%81%8C%E5%BC%B7%E3%82%81%E5%90%88%E3%81%86%E3%80%82%0A%20%20%20%204.%20%24t%5Cgtrsim0.5%24%3A%20%E5%8F%8D%E5%B0%84%E6%B3%A2%E3%81%A9%E3%81%86%E3%81%97%E3%81%8C%E4%BD%95%E5%BA%A6%E3%82%82%E4%BA%A4%E5%B7%AE%E3%81%97%E3%80%81%E6%AD%A3%E6%96%B9%E5%BD%A2%E3%81%AE%E5%AF%BE%E7%A7%B0%E6%80%A7%E3%82%92%E5%8F%8D%E6%98%A0%E3%81%97%E3%81%9F%0A%20%20%20%20%20%20%20%E6%A0%BC%E5%AD%90%E7%8A%B6%E3%81%AE%E5%B9%B2%E6%B8%89%E6%A8%A1%E6%A7%98%E3%81%8C%E6%AE%8B%E3%82%8B%E3%80%82%E3%82%A8%E3%83%8D%E3%83%AB%E3%82%AE%E3%83%BC%E3%81%AF%E5%A2%83%E7%95%8C%E3%81%8B%E3%82%89%E9%80%83%E3%81%92%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%0A%20%20%20%20%20%20%20%E5%80%8B%E3%80%85%E3%81%AE%E6%B3%A2%E9%9D%A2%E3%81%AE%E6%8C%AF%E5%B9%85%E3%81%8C%E4%B8%8B%E3%81%8C%E3%81%A3%E3%81%A6%E3%82%82%E5%A0%B4%E5%85%A8%E4%BD%93%E3%81%8B%E3%82%89%E3%81%AF%E6%B6%88%E3%81%88%E3%81%AA%E3%81%84%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
3f039da59d2a3439294c9086a386107c