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%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%A2%83%E7%95%8C%E5%80%A4%E5%95%8F%E9%A1%8C%E3%81%A8%E5%9B%BA%E6%9C%89%E5%80%A4%E5%95%8F%E9%A1%8C%0A%20%20%20%20legacy%2Fsimulation%2FPDE_BVP.ipynb%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%80%811%20%E6%AC%A1%E5%85%83%E3%82%B7%E3%83%A5%E3%83%AC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%AC%E3%83%BC%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%A8%202%20%E6%AC%A1%E5%85%83%E3%83%9D%E3%82%A2%E3%82%BD%E3%83%B3%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%82%92%E5%B7%AE%E5%88%86%E6%B3%95%E3%81%A7%E6%89%B1%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%E5%89%8D%E6%BA%96%E5%82%99%20(%E5%8F%AF%E8%A6%96%E5%8C%96%E7%AD%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%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E9%96%A2%E6%95%B0%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%20time%0A%20%20%20%20from%20contextlib%20import%20contextmanager%0A%0A%20%20%20%20%40contextmanager%0A%20%20%20%20def%20timer(name)%3A%0A%20%20%20%20%20%20%20%20t0%20%3D%20time.time()%0A%20%20%20%20%20%20%20%20yield%0A%20%20%20%20%20%20%20%20print(f'%5B%7Bname%7D%5D%20done%20in%20%7Btime.time()%20-%20t0%3A.0f%7D%20s')%0A%0A%20%20%20%20return%20(timer%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%201%E6%AC%A1%E5%85%83%EF%BC%9A%E3%82%B7%E3%83%A5%E3%83%AC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%AC%E3%83%BC%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%AE%E5%AE%9A%E5%B8%B8%E8%A7%A3%0A%0A%20%20%20%20-%20%E5%A2%83%E7%95%8C%E5%80%A4%E5%95%8F%E9%A1%8C%E3%81%A8%E3%81%97%E3%81%A6%E8%A7%A3%E3%81%8F%20(%E5%AE%9A%E5%B8%B8%E7%8A%B6%E6%85%8B)%0A%20%20%20%20-%20%E5%A2%83%E7%95%8C%E6%9D%A1%E4%BB%B6%E3%81%AF%E5%9B%BA%E5%AE%9A%E7%AB%AF%E6%9D%A1%E4%BB%B6%20(%E7%84%A1%E9%99%90%E4%BA%95%E6%88%B8%E5%9E%8B%E3%83%9D%E3%83%86%E3%83%B3%E3%82%B7%E3%83%A3%E3%83%AB)%0A%20%20%20%20-%20%E8%A7%A3%E3%81%8F%E3%81%AE%E3%81%AF%E5%9B%BA%E6%9C%89%E5%80%A4%E5%95%8F%E9%A1%8C%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%82%B7%E3%83%A5%E3%83%AC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%AC%E3%83%BC%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%AF%0A%20%20%20%20%24%24%0A%20%20%20%20%20%20%5Cleft(-%5Cfrac%7B%5Chbar%5E2%7D%7B2m%7D%5Cnabla%5E2%2BU(x)%5Cright)%20%5Cpsi(x)%20%3D%20E%20%5Cpsi(x)%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%20%20%20%201%E6%AC%A1%E5%85%83%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AB%E9%81%A9%E5%88%87%E3%81%AB%E7%84%A1%E6%AC%A1%E5%85%83%E5%8C%96%E3%81%99%E3%82%8B%E3%81%A8%0A%20%20%20%20%24%24%0A%20%20%20%20%20%20%5Cleft(-%5Cfrac%7Bd%5E2%7D%7Bdx%5E2%7D%2BU(x)%5Cright)%5Cpsi(x)%3DE%5Cpsi%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%A8%E3%81%AA%E3%82%8B%E3%80%82%0A%20%20%20%20%E3%83%8F%E3%83%9F%E3%83%AB%E3%83%88%E3%83%8B%E3%82%A2%E3%83%B3%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B2%E9%9A%8E%E5%BE%AE%E5%88%86%E3%81%AE%E5%8D%98%E7%B4%94%E3%81%AA%E5%B7%AE%E5%88%86%E8%A1%A8%E7%A4%BA%E3%81%AF%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cbegin%7Baligned%7D%0A%20%20%20%20%20%20%26%5Cleft.%5Cfrac%7Bd%5E2%7D%7Bdx%5E2%7D%5Cpsi(x)%5Cright%7C_%7Bx%3Dx_i%7D%0A%20%20%20%20%20%20%5Csim%5Cleft.%5Cfrac%7Bd%7D%7Bdx%7D%5Cfrac%7B%5Cpsi(x%2Ba%2F2)-%5Cpsi(x-a%2F2)%7D%7Ba%7D%5Cright%7C_%7Bx%3Dx_i%7D%20%5C%5C%0A%20%20%20%20%20%20%26%5Csim%5Cleft.%5Cfrac%7Bd%7D%7Bdx%7D%5Cfrac%7B%5Cpsi(x%2Ba%2F2)-%5Cpsi(x-a%2F2)%7D%7Ba%7D%5Cright%7C_%7Bx%3Dx_i%7D%20%5C%5C%0A%20%20%20%20%20%20%26%5Csim%5Cfrac%7B%5Cpsi(x_i%2Ba)-2%5Cpsi(x_i)%2B%5Cpsi(x_i-a)%7D%7Ba%5E2%7D%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%8B%E3%80%82%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%81%AF%E3%81%84%E3%82%8F%E3%82%86%E3%82%8B%E3%83%8F%E3%83%9F%E3%83%AB%E3%83%88%E3%83%8B%E3%82%A2%E3%83%B3%E3%81%AE%E8%A1%8C%E5%88%97%E8%A1%A8%E7%A4%BA%E3%81%A7%E3%81%82%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_()%3A%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20from%20scipy%20import%20sparse%0A%20%20%20%20_grid_step%20%3D%200.02%0A%20%20%20%20N%20%3D%20400%0A%20%20%20%20hamiltonian%20%3D%20(%0A%20%20%20%20%20%20%20%20-sparse.eye(N%2C%20k%3D1)%20%2B%202%20*%20sparse.identity(N)%20-%20sparse.eye(N%2C%20k%3D-1)%0A%20%20%20%20)%20%2F%20_grid_step**2%0A%20%20%20%20plt.spy(hamiltonian%2C%20markersize%3D1)%0A%20%20%20%20return%20hamiltonian%2C%20plt%2C%20sparse%0A%0A%0A%40app.cell%0Adef%20_(hamiltonian%2C%20plt)%3A%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20from%20scipy.sparse%20import%20linalg%0A%0A%20%20%20%20sn%20%3D%2040%0A%20%20%20%20eigenvalues%2C%20eigenvectors%20%3D%20linalg.eigsh(hamiltonian%2C%20k%3Dsn%2C%20which%3D%22SM%22)%0A%20%20%20%20eigenvectors%20%3D%20np.transpose(eigenvectors)%0A%0A%20%20%20%20level%20%3D%20np.arange(sn)%0A%20%20%20%20print()%0A%20%20%20%20plt.plot(level%2C%20eigenvalues%5Blevel%5D)%0A%20%20%20%20return%20eigenvectors%2C%20linalg%2C%20np%0A%0A%0A%40app.cell%0Adef%20_(eigenvectors%2C%20plt)%3A%0A%20%20%20%20for%20i%20in%20range(5)%3A%0A%20%20%20%20%20%20%20%20plt.plot(eigenvectors%5Bi%5D%2C%20label%3D'level%3D%25d'%20%25i)%0A%20%20%20%20plt.legend()%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%E6%AC%A1%E5%85%83%EF%BC%9A%E3%83%9D%E3%82%A2%E3%82%BD%E3%83%B3%E6%96%B9%E7%A8%8B%E5%BC%8F%0A%0A%20%20%20%20-%20%E5%A2%83%E7%95%8C%E5%80%A4%E5%95%8F%E9%A1%8C%E3%81%A8%E3%81%97%E3%81%A6%E8%A7%A3%E3%81%8F%0A%20%20%20%20-%202%E6%AC%A1%E5%85%83%E7%A9%BA%E9%96%93%0A%20%20%20%20-%20%E5%A2%83%E7%95%8C%E6%9D%A1%E4%BB%B6%E3%81%AF%E5%9B%BA%E5%AE%9A%E7%AB%AF%E6%9D%A1%E4%BB%B6%20(%E7%AB%AF%E3%81%A70)%0A%20%20%20%20-%20%E8%A7%A3%E3%81%8F%E3%81%AE%E3%81%AF%E9%80%A3%E7%AB%8B1%E6%AC%A1%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%E7%8A%B6%E6%B3%81%E3%81%AF%5B%E3%81%93%E3%81%A1%E3%82%89%5D(https%3A%2F%2Ftakun-physics.net%2F10186%2F)%E3%81%A8%E5%90%8C%E3%81%98%E3%80%82%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cleft(%5Cfrac%7B%5Cpartial%5E2%7D%7B%5Cpartial%20x%5E2%7D%2B%5Cfrac%7B%5Cpartial%5E2%7D%7B%5Cpartial%20y%5E2%7D%5Cright)%0A%20%20%20%20p(x%2Cy)%3Db(x%2Cy)%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%82%92%E8%A7%A3%E3%81%8F%E3%80%82%0A%0A%20%20%20%20%E3%82%B0%E3%83%AA%E3%83%83%E3%83%89%E3%81%AF%24N_x%C3%97N_y%24%E3%81%AB%E3%81%A8%E3%81%A3%E3%81%A6%0A%20%20%20%20%24%24%0A%20%20%20%20p(x_0%2Bi%5CDelta%20x%2C%20y_0%2Bj%5CDelta%20y)%E2%89%A1p(x_i%2Cy_j)%E2%89%A1p_%7Bij%7D%5Cequiv%20p_%7Bi%2Bj%C3%97N_x%7D%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%A8%E5%B7%AE%E5%88%86%E5%8C%96%E3%81%97%E3%81%9F%E6%9C%AA%E7%9F%A5%E5%A4%89%E6%95%B0%E3%82%92%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E5%BD%A2%E5%BC%8F%E3%81%AB%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%E3%82%B7%E3%83%A5%E3%83%AC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%AC%E3%83%BC%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%A8%E5%90%8C%E6%A7%98%E3%81%AB%E5%B7%AE%E5%88%86%E3%82%92%E5%AE%9F%E6%96%BD%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_(plt%2C%20sparse)%3A%0A%20%20%20%20N_1%20%3D%2060%0A%20%20%20%20_grid_step_2d%20%3D%201.0%20%2F%20(N_1%20%2B%201)%0A%20%20%20%20axis_operator%20%3D%20sparse.diags(%0A%20%20%20%20%20%20%20%20diagonals%3D%5B1.0%2C%20-2.0%2C%201.0%5D%2C%0A%20%20%20%20%20%20%20%20offsets%3D%5B-1%2C%200%2C%201%5D%2C%0A%20%20%20%20%20%20%20%20shape%3D(N_1%2C%20N_1)%2C%0A%20%20%20%20%20%20%20%20format%3D%22csr%22%2C%0A%20%20%20%20)%20%2F%20_grid_step_2d**2%0A%20%20%20%20operator%20%3D%20sparse.kronsum(axis_operator%2C%20axis_operator%2C%20format%3D%22csr%22)%0A%20%20%20%20plt.spy(operator%2C%20markersize%3D1)%0A%20%20%20%20return%20N_1%2C%20operator%0A%0A%0A%40app.cell%0Adef%20_(N_1%2C%20linalg%2C%20np%2C%20operator%2C%20timer)%3A%0A%20%20%20%20source%20%3D%20np.zeros(N_1%20*%20N_1)%0A%20%20%20%20source%5Bint(N_1%20%2F%204%20%2B%20N_1%20*%20N_1%20%2F%204)%5D%20%3D%20100%0A%20%20%20%20source%5Bint(3%20%2F%204%20*%20N_1%20%2B%20N_1%20*%203%20%2F%204%20*%20N_1)%5D%20%3D%20-100%0A%20%20%20%20with%20timer('CG%20method')%3A%0A%20%20%20%20%20%20%20%20x%2C%20_%20%3D%20linalg.cg(-operator%2C%20-source%2C%20maxiter%3D500)%0A%20%20%20%20return%20(x%2C)%0A%0A%0A%40app.cell%0Adef%20_(N_1%2C%20np%2C%20plt%2C%20x)%3A%0A%20%20%20%20solution_mat%20%3D%20np.array(%5B%5Bx%5Brow_idx%20%2B%20col_idx%20*%20N_1%5D%20for%20row_idx%20in%20range(N_1)%5D%20for%20col_idx%20in%20range(N_1)%5D)%0A%20%20%20%20plt.imshow(solution_mat%2C%20origin%3D%22lower%22)%0A%20%20%20%20plt.show()%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
7dcc494b5552623f53904d3192502425