import%20marimo%0A%0A__generated_with%20%3D%20%220.24.0%22%0Aapp%20%3D%20marimo.App()%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%3Ca%20href%3D%22https%3A%2F%2Fcolab.research.google.com%2Fgithub%2Fapplejxd%2Fcolaboratory%2Fblob%2Fmaster%2Falgorithm%2Flinalg_inv.ipynb%22%20target%3D%22_parent%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcolab.research.google.com%2Fassets%2Fcolab-badge.svg%22%20alt%3D%22Open%20In%20Colab%22%2F%3E%3C%2Fa%3E%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20%E7%B7%9A%E5%BD%A2%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%AE%E6%B1%82%E8%A7%A3%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E7%9B%B4%E6%8E%A5%E6%B3%95%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20LU%E5%88%86%E8%A7%A3%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20LU%E5%88%86%E8%A7%A3%24PA%3DLU%24%E3%82%92%E6%B1%82%E3%82%81%E3%82%8B%E3%80%82%0A%20%20%20%20%24P%24%E3%81%AF%E7%BD%AE%E6%8F%9B%E8%A1%8C%E5%88%97%24PP%5ET%3DI%24%E3%80%81%24L%24%E3%81%AF%E5%AF%BE%E8%A7%92%E6%88%90%E5%88%861%E3%81%AE%E4%B8%8B%E4%B8%89%E8%A7%92%E8%A1%8C%E5%88%97%E3%80%81%24U%24%E3%81%AF%E4%B8%8A%E4%B8%89%E8%A7%92%E8%A1%8C%E5%88%97%E3%80%82%0A%0A%20%20%20%20LU%E5%88%86%E8%A7%A3%E3%82%92%E6%B1%82%E3%82%81%E3%82%8B%E9%81%8E%E7%A8%8B%E3%81%AB%E3%81%AF%E9%83%A8%E5%88%86%E3%83%94%E3%83%9C%E3%83%83%E3%83%88%E9%81%B8%E6%8A%9E%E4%BB%98%E3%81%8D%E3%82%AC%E3%82%A6%E3%82%B9%E3%81%AE%E6%B6%88%E5%8E%BB%E6%B3%95%E3%81%8B%E3%82%89%E6%B1%82%E3%82%81%E3%82%8B%E5%A4%96%E7%A9%8D%E5%BD%A2%E5%BC%8F%E3%82%AC%E3%82%A6%E3%82%B9%E6%B3%95%E3%82%84%E3%80%81%24PA%3DLU%24%E3%81%8B%E3%82%89%E7%9B%B4%E6%8E%A5%E6%88%90%E5%88%86%E3%82%92%E6%AF%94%E8%BC%83%E3%81%97%E3%81%A6%E6%B1%82%E3%82%81%E3%82%8B%E5%86%85%E7%A9%8D%E5%BD%A2%E5%BC%8F%E3%82%AC%E3%82%A6%E3%82%B9%E6%B3%95%E3%81%8C%E5%AD%98%E5%9C%A8%E3%80%82%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%5B%E5%A4%96%E7%A9%8D%E5%BD%A2%E5%BC%8F%E3%82%AC%E3%82%A6%E3%82%B9%E6%B3%95%5D(https%3A%2F%2Fcedddnav.org%2Fraspi4a%2F)%E3%82%92%E4%BD%BF%E7%94%A8%E3%80%82%0A%20%20%20%20%E3%81%93%E3%81%AE%E6%96%B9%E6%B3%95%E3%81%AF%E9%83%A8%E5%88%86%E3%83%94%E3%83%9C%E3%83%83%E3%83%88%E9%81%B8%E6%8A%9E%E4%BB%98%E3%81%8D%E3%82%AC%E3%82%A6%E3%82%B9%E3%81%AE%E6%B6%88%E5%8E%BB%E6%B3%95%E3%82%92%24L%5E%7B-1%7DPA%3DU%24%E3%81%A8%E6%AF%94%E8%BC%83%E3%81%97%E3%81%A6%24P%2CL%2CU%24%E3%82%92%E6%B1%82%E3%82%81%E3%82%8B%E3%80%82%24P%24%E3%81%AF%E6%9C%80%E7%B5%82%E7%9A%84%E3%81%AA%E9%83%A8%E5%88%86%E3%83%94%E3%83%9C%E3%83%83%E3%83%88%E9%81%B8%E6%8A%9E%E5%85%A8%E4%BD%93%E3%80%82%24L%24%E3%81%AF%E8%A1%8C%E5%9F%BA%E6%9C%AC%E5%A4%89%E5%BD%A2%E3%81%AE%E7%A9%8D%E3%81%AE%E9%80%86%E8%A1%8C%E5%88%97%E3%81%A7%E3%81%82%E3%82%8A%E3%80%81%E5%90%84%E8%A1%8C%E5%9F%BA%E6%9C%AC%E5%A4%89%E5%BD%A2%E3%81%AE%E9%80%86%E8%A1%8C%E5%88%97%E3%81%8C%E9%9D%9E%E5%AF%BE%E8%A7%92%E6%88%90%E5%88%86%E3%81%AE%E7%AC%A6%E5%8F%B7%E3%82%92%E5%8F%8D%E8%BB%A2%E3%81%95%E3%81%9B%E3%81%9F%E3%82%82%E3%81%AE%E3%81%A7%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E5%88%A9%E7%94%A8%E3%80%82%0A%0A%20%20%20%20%24PA%5Cvec%7Bx%7D%3DLU%5Cvec%7Bx%7D%3D%5Cvec%7Bb%7D%E2%87%94LU%5Cvec%7Bx%7D%3DP%5ET%5Cvec%7Bb%7D%24%E3%81%A7%E3%81%82%E3%82%8B%E3%81%AE%E3%81%A7%0A%20%20%20%20%E3%80%81%24L%5Cvec%7By%7D%3DP%5ET%5Cvec%7Bb%7D%2C%20U%5Cvec%7Bx%7D%3D%5Cvec%7By%7D%24%E3%81%A8%E3%81%97%E3%81%A6%E4%BB%A3%E5%85%A5%E6%93%8D%E4%BD%9C%E3%81%A7%E8%A7%A3%E3%81%91%E3%81%B0%E3%80%81%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%81%AF%E5%89%8D%E9%80%B2%E3%83%BB%E5%BE%8C%E9%80%80%E4%BB%A3%E5%85%A5%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%80%82%0A%0A%20%20%20%20%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%81%AB%E7%94%9F%E6%88%90%E3%81%97%E3%81%9F%E6%AD%A3%E6%96%B9%E8%A1%8C%E5%88%97%E3%81%A7%E6%A4%9C%E8%A8%BC%E3%80%82numpy%20%E3%81%AE%20LU%20%E5%88%86%E8%A7%A3%E3%81%AE%E6%A9%9F%E8%83%BD%E3%82%92%E4%BD%BF%E3%81%86%E3%80%82%0A%20%20%20%20%EF%BC%88%E9%9D%9E%E6%AD%A3%E6%96%B9%E8%A1%8C%E5%88%97%E3%81%AF%5B%E7%96%91%E4%BC%BC%E9%80%86%E8%A1%8C%E5%88%97%E3%81%AE%E8%A8%88%E7%AE%97%E6%B3%95%5D(https%3A%2F%2Fwww.momoyama-usagi.com%2Fentry%2Fmath-linear-algebra-ap08)%E3%82%92%E9%81%A9%E7%94%A8%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE%E3%81%A8%E3%81%99%E3%82%8B%E3%80%82%EF%BC%89%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%20import%20numpy%20as%20np%0A%20%20%20%20import%20seaborn%20as%20sns%0A%0A%20%20%20%20%23%20%E8%A1%A8%E7%A4%BA%E3%81%AE%E7%B2%BE%E5%BA%A6%E3%82%92%E8%A8%AD%E5%AE%9A%0A%20%20%20%20np.set_printoptions(precision%3D3%2C%20suppress%3DFalse)%0A%20%20%20%20plt.rcParams%5B'figure.figsize'%5D%20%3D%20(5%2C%202)%0A%20%20%20%20np.random.seed(42)%0A%0A%20%20%20%20N%20%3D%204%0A%20%20%20%20A%20%3D%20np.random.rand(N%2C%20N)%0A%0A%20%20%20%20print(%22A%3D%22)%0A%20%20%20%20sns.heatmap(A%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20return%20A%2C%20N%2C%20np%2C%20plt%2C%20sns%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E9%83%A8%E5%88%86%E3%83%94%E3%83%9C%E3%83%83%E3%83%88%E9%81%B8%E6%8A%9E%E4%BB%98%E3%81%8D%E3%82%AC%E3%82%A6%E3%82%B9%E3%81%AE%E6%B6%88%E5%8E%BB%E6%B3%95%E3%81%A7%20LU%20%E5%88%86%E8%A7%A3%E3%82%92%E5%AE%9F%E8%A3%85%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(A%2C%20np%2C%20plt%2C%20sns)%3A%0A%20%20%20%20def%20LU_decomposition(A)%3A%0A%20%20%20%20%20%20%20%20N%20%3D%20A.shape%5B0%5D%0A%20%20%20%20%20%20%20%20P%2C%20L%2C%20U%20%3D%20(np.eye(N)%2C%20np.eye(N)%2C%20A.copy())%0A%20%20%20%20%20%20%20%20for%20k%20in%20range(N%20-%201)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20p%20%3D%20np.argmax(abs(U%5Bk%3A%2C%20k%5D))%20%2B%20k%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20np.isclose(U%5Bp%2C%20k%5D%2C%200)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20raise%20ValueError('Singular%20matrix')%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20p%20!%3D%20k%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20P%5B%5Bk%2C%20p%5D%2C%20%3A%5D%20%3D%20P%5B%5Bp%2C%20k%5D%2C%20%3A%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20U%5B%5Bk%2C%20p%5D%2C%20%3A%5D%20%3D%20U%5B%5Bp%2C%20k%5D%2C%20%3A%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20k%20%3E%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20L%5B%5Bk%2C%20p%5D%2C%20%3Ak%5D%20%3D%20L%5B%5Bp%2C%20k%5D%2C%20%3Ak%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20_i%20in%20range(k%20%2B%201%2C%20N)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20L%5B_i%2C%20k%5D%20%3D%20U%5B_i%2C%20k%5D%20%2F%20U%5Bk%2C%20k%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20U%5B_i%2C%20%3A%5D%20%3D%20U%5B_i%2C%20%3A%5D%20-%20L%5B_i%2C%20k%5D%20*%20U%5Bk%2C%20%3A%5D%0A%20%20%20%20%20%20%20%20return%20(P%2C%20L%2C%20U)%0A%20%20%20%20P%2C%20L%2C%20U%20%3D%20LU_decomposition(A)%0A%20%20%20%20print('P%3D')%0A%20%20%20%20sns.heatmap(P%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print('L%3D')%0A%20%20%20%20sns.heatmap(L%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print('U%3D')%0A%20%20%20%20sns.heatmap(U%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20return%20L%2C%20P%2C%20U%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%88%86%E8%A7%A3%E3%81%8C%E6%AD%A3%E3%81%97%E3%81%84%E3%81%8B%E6%A4%9C%E7%AE%97%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(A%2C%20L%2C%20P%2C%20U%2C%20plt%2C%20sns)%3A%0A%20%20%20%20residuals%20%3D%20P%20%40%20A%20-%20L%20%40%20U%0A%0A%20%20%20%20print(%22PA-LU%3D%22)%0A%20%20%20%20sns.heatmap(residuals%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20scipy%20%E3%81%A7%E6%A4%9C%E7%AE%97%E3%80%82%E7%BD%AE%E6%8F%9B%E8%A1%8C%E5%88%97%24P%24%E3%81%AF%E4%B8%80%E8%87%B4%E3%81%97%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%8C%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_(A%2C%20L%2C%20P%2C%20U%2C%20plt%2C%20sns)%3A%0A%20%20%20%20import%20scipy.linalg%20as%20linalg%0A%20%20%20%20P2%2C%20L2%2C%20U2%20%3D%20linalg.lu(A)%0A%0A%20%20%20%20print(%22%CE%B4P%3D%22)%0A%20%20%20%20sns.heatmap(P-P2%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%0A%20%20%20%20print(%22%CE%B4L%3D%22)%0A%20%20%20%20sns.heatmap(L-L2%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%0A%20%20%20%20print(%22%CE%B4U%3D%22)%0A%20%20%20%20sns.heatmap(U-U2%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%8B%E3%82%89%24A%5Cvec%7Bx%7D%3D%5Cvec%7Bb%7D%24%E3%82%92%E8%A7%A3%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AB%24%5Cvec%7Bb%7D%24%E3%82%92%E7%94%9F%E6%88%90%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(N%2C%20np)%3A%0A%20%20%20%20b%20%3D%20np.random.rand(N)%0A%20%20%20%20print(f%22%7Bb%3D%7D%22)%0A%20%20%20%20return%20(b%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%24L%5Cvec%7By%7D%3DP%5ET%5Cvec%7Bb%7D%24%20%E3%82%92%E8%A7%A3%E3%81%8F%E3%80%82%0A%20%20%20%20%E5%89%8D%E9%80%B2%E4%BB%A3%E5%85%A5%E3%81%AF%24y_i%3Db'_i-%5Csum_%7Bj%3D0%7D%5E%7Bi-1%7Dl_%7Bij%7Dy_j%24%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(L%2C%20P%2C%20b%2C%20np)%3A%0A%20%20%20%20def%20forward_substitute(P%2C%20L%2C%20b)%3A%0A%20%20%20%20%20%20%20%20N%20%3D%20len(b)%0A%20%20%20%20%20%20%20%20y%20%3D%20np.zeros(N)%0A%20%20%20%20%20%20%20%20for%20_i%20in%20range(N)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20y%5B_i%5D%20%3D%20(P.T%20%40%20b)%5B_i%5D%20-%20L%5B_i%2C%20%3A_i%5D%20%40%20y%5B%3A_i%5D%0A%20%20%20%20%20%20%20%20return%20y%0A%20%20%20%20y%20%3D%20forward_substitute(P%2C%20L%2C%20b)%0A%20%20%20%20print(f'y%3D%7By!r%7D')%0A%20%20%20%20return%20forward_substitute%2C%20y%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%24U%5Cvec%7Bx%7D%3D%5Cvec%7By%7D%24%20%E3%82%92%E8%A7%A3%E3%81%8F%E3%80%82%0A%20%20%20%20%E5%BE%8C%E9%80%80%E4%BB%A3%E5%85%A5%E3%81%AF%24x_i%3D(y_i-%5Csum_%7Bj%3Di%2B1%7D%5Enu_%7Bij%7Dx_j)%2Fu_%7Bii%7D%24%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(U%2C%20np%2C%20y)%3A%0A%20%20%20%20def%20backward_substitute(U%2C%20y)%3A%0A%20%20%20%20%20%20%20%20N%20%3D%20len(y)%0A%20%20%20%20%20%20%20%20x%20%3D%20np.zeros(N)%0A%20%20%20%20%20%20%20%20for%20_i%20in%20range(N%20-%201%2C%20-1%2C%20-1)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20x%5B_i%5D%20%3D%20(y%5B_i%5D%20-%20U%5B_i%2C%20_i%20%2B%201%3A%5D%20%40%20x%5B_i%20%2B%201%3A%5D)%20%2F%20U%5B_i%2C%20_i%5D%0A%20%20%20%20%20%20%20%20return%20x%0A%20%20%20%20x%20%3D%20backward_substitute(U%2C%20y)%0A%20%20%20%20print(f'x%3D%7Bx!r%7D')%0A%20%20%20%20return%20backward_substitute%2C%20x%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E8%A7%A3%E3%81%AE%E6%A4%9C%E7%AE%97%E3%82%92%E5%AE%9F%E6%96%BD%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(A%2C%20b%2C%20x)%3A%0A%20%20%20%20print(f%22%7BA%40x-b%3D%7D%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E9%80%86%E8%A1%8C%E5%88%97%E3%82%82LU%E5%88%86%E8%A7%A3%E3%81%8B%E3%82%89%E6%B1%82%E3%81%BE%E3%82%8B%E3%80%82%24AA%5E%7B-1%7D%3DI%24%E3%81%AA%E3%81%AE%E3%81%A7%24A%5Cvec%7Bx%7D_i%3D%5Cvec%7Be%7D_i%24%E3%82%92%E8%A7%A3%E3%81%91%E3%81%B0%E3%81%84%E3%81%84%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E4%BB%96%E3%81%AE%E6%89%8B%E6%B3%95%E3%81%A7%E3%82%82%E5%90%8C%E3%81%98%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(A%2C%20L%2C%20N%2C%20P%2C%20U%2C%20backward_substitute%2C%20forward_substitute%2C%20np%2C%20plt%2C%20sns)%3A%0A%20%20%20%20A_inv%20%3D%20np.zeros((N%2C%20N))%0A%20%20%20%20for%20_i%20in%20range(N)%3A%0A%20%20%20%20%20%20%20%20e_i%20%3D%20np.zeros(N)%0A%20%20%20%20%20%20%20%20e_i%5B_i%5D%20%3D%201%0A%20%20%20%20%20%20%20%20y_i%20%3D%20forward_substitute(P%2C%20L%2C%20e_i)%0A%20%20%20%20%20%20%20%20x_i%20%3D%20backward_substitute(U%2C%20y_i)%0A%20%20%20%20%20%20%20%20A_inv%5B%3A%2C%20_i%5D%20%3D%20x_i%0A%20%20%20%20print('A_inv%3D')%0A%20%20%20%20sns.heatmap(A_inv%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print('AA_inv%3D')%0A%20%20%20%20sns.heatmap(A%20%40%20A_inv%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20%23%20%E6%A4%9C%E7%AE%97%0A%20%20%20%20plt.show()%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E3%82%B3%E3%83%AC%E3%82%B9%E3%82%AD%E3%83%BC%E5%88%86%E8%A7%A3%E6%B3%95%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E8%A7%A3%E3%81%8F%E3%81%B9%E3%81%8D%E9%80%A3%E7%AB%8B%E4%B8%80%E6%AC%A1%E6%96%B9%E7%A8%8B%E5%BC%8F%24A%5Cvec%7Bx%7D%3D%5Cvec%7Bb%7D%24%E3%81%AE%E4%BF%82%E6%95%B0%E8%A1%8C%E5%88%97%24A%24%E3%81%8C%E9%9D%9E%E8%B2%A0%E5%AE%9A%E5%80%A4%E5%AF%BE%E7%A7%B0%E8%A1%8C%E5%88%97%E3%81%AA%E3%82%89%E3%82%B3%E3%83%AC%E3%82%B9%E3%82%AD%E3%83%BC%E5%88%86%E8%A7%A3%24A%3DLL%5ET%24%E3%81%8C%E5%8F%AF%E8%83%BD%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E3%81%93%E3%82%8C%E3%82%92%E5%88%A9%E7%94%A8%E3%80%82%0A%20%20%20%20%E5%85%AC%E5%BC%8F%E3%81%AF%E6%88%90%E5%88%86%E6%AF%94%E8%BC%83%E3%81%A7%E6%B1%82%E3%82%81%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%E5%AF%BE%E7%A7%B0%E6%80%A7%E3%81%AF%24A%24%E3%81%A8%E6%AF%94%E8%BC%83%E3%81%97%E3%81%A6%24L%24%E3%81%AE%E6%88%90%E5%88%86%E3%81%8C%E5%8D%8A%E5%88%86%E3%81%A7%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8B%E3%82%89%E5%BF%85%E8%A6%81%E3%80%82%0A%20%20%20%20%E9%9D%9E%E4%B8%8D%E5%AE%9A%E5%80%A4%E3%81%AF%E5%B9%B3%E6%96%B9%E6%A0%B9%E3%81%AE%E8%A8%88%E7%AE%97%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AB%E5%BF%85%E8%A6%81%E3%80%82%0A%0A%20%20%20%20%E4%B8%8D%E5%AE%9A%E5%80%A4%E3%81%AA%E3%82%89%24(A%5ETA)%5Cvec%7Bx%7D%3DA%5ET%5Cvec%7Bb%7D%24%E3%82%92%E8%A7%A3%E3%81%8F%E3%80%82%24A%5ETA%24%E3%81%AF%E5%BF%85%E3%81%9A%E5%AF%BE%E7%A7%B0%E3%81%A7%E9%9D%9E%E8%B2%A0%E5%AE%9A%E5%80%A4(%E7%89%B9%E7%95%B0%E5%80%A4%E5%88%86%E8%A7%A3%E3%81%AE%E9%83%A8%E5%88%86%E3%82%92%E5%8F%82%E7%85%A7)%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_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%82%B3%E3%83%AC%E3%82%B9%E3%82%AD%E3%83%BC%E5%88%86%E8%A7%A3%E3%81%AF%E5%AF%BE%E7%A7%B0%E6%AD%A3%E5%AE%9A%E5%80%A4%E8%A1%8C%E5%88%97%24A%24%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E8%88%8C%E4%B8%89%E8%A7%92%E8%A1%8C%E5%88%97%24L%24%E3%81%A7%24A%3DLL%5ET%24%E3%81%A8%E5%88%86%E8%A7%A3%E3%81%97%E3%81%A6%E3%80%81%E5%89%8D%E9%80%B2%E3%83%BB%E5%BE%8C%E9%80%80%E4%BB%A3%E5%85%A5%E3%81%A7%24A%5Cvec%7Bx%7D%3D%5Cvec%7Bb%7D%24%E3%82%92%E8%A7%A3%E3%81%8F%E3%80%82%0A%20%20%20%20%E3%81%82%E3%82%8B%E3%81%84%E3%81%AF%24(AA%5ET)%5Cvec%7Bx%7D%3D(LL%5ET)%5Cvec%7Bx%7D%3DA%5ET%5Cvec%7Bb%7D%24%E3%81%A8%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_(A%2C%20np%2C%20plt%2C%20sns)%3A%0A%20%20%20%20def%20cholesky_decomposition(A)%3A%0A%20%20%20%20%20%20%20%20L%20%3D%20np.zeros_like(A)%0A%20%20%20%20%20%20%20%20N%20%3D%20A.shape%5B0%5D%0A%20%20%20%20%20%20%20%20for%20_i%20in%20range(N)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20j%20in%20range(_i%20%2B%201)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20_i%20%3D%3D%20j%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20L%5B_i%2C%20j%5D%20%3D%20np.sqrt(A%5B_i%2C%20_i%5D%20-%20np.sum(L%5B_i%2C%20%3Aj%5D%20**%202))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20L%5B_i%2C%20j%5D%20%3D%20(A%5B_i%2C%20j%5D%20-%20np.sum(L%5B_i%2C%20%3Aj%5D%20*%20L%5Bj%2C%20%3Aj%5D))%20%2F%20L%5Bj%2C%20j%5D%0A%20%20%20%20%20%20%20%20return%20L%0A%20%20%20%20L_1%20%3D%20cholesky_decomposition(A.T%20%40%20A)%0A%20%20%20%20print('L%3D')%0A%20%20%20%20sns.heatmap(L_1%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print('LL%5ET-A%5ETA%3D')%0A%20%20%20%20sns.heatmap(L_1%20%40%20L_1.T%20-%20A.T%20%40%20A%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20return%20(L_1%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E7%B7%9A%E5%BD%A2%E6%96%B9%E7%A8%8B%E5%BC%8F%24A%5Cvec%7Bx%7D%3D%5Cvec%7Bb%7D%24%E3%81%AE%E8%A7%A3%E6%B3%95%E3%81%AFLU%E5%88%86%E8%A7%A3%E3%81%A8%E5%90%8C%E6%A7%98%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(A%2C%20L_1%2C%20b%2C%20np)%3A%0A%20%20%20%20def%20forward_substitute_1(L%2C%20b)%3A%0A%20%20%20%20%20%20%20%20N%20%3D%20len(b)%0A%20%20%20%20%20%20%20%20y%20%3D%20np.zeros(N)%0A%20%20%20%20%20%20%20%20for%20_i%20in%20range(N)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20y%5B_i%5D%20%3D%20(b%5B_i%5D%20-%20L%5B_i%2C%20%3A_i%5D%20%40%20y%5B%3A_i%5D)%20%2F%20L%5B_i%2C%20_i%5D%0A%20%20%20%20%20%20%20%20return%20y%0A%0A%20%20%20%20def%20backward_substitute_1(LT%2C%20y)%3A%0A%20%20%20%20%20%20%20%20N%20%3D%20len(y)%0A%20%20%20%20%20%20%20%20x%20%3D%20np.zeros(N)%0A%20%20%20%20%20%20%20%20for%20_i%20in%20range(N%20-%201%2C%20-1%2C%20-1)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20x%5B_i%5D%20%3D%20(y%5B_i%5D%20-%20LT%5B_i%2C%20_i%20%2B%201%3A%5D%20%40%20x%5B_i%20%2B%201%3A%5D)%20%2F%20LT%5B_i%2C%20_i%5D%0A%20%20%20%20%20%20%20%20return%20x%0A%20%20%20%20y_1%20%3D%20forward_substitute_1(L_1%2C%20A.T%20%40%20b)%0A%20%20%20%20x_1%20%3D%20backward_substitute_1(L_1.T%2C%20y_1)%0A%20%20%20%20print(f'A%40x-b%3D%7BA%20%40%20x_1%20-%20b!r%7D')%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E4%BF%AE%E6%AD%A3%E3%82%B3%E3%83%AC%E3%82%B9%E3%82%AD%E3%83%BC%E5%88%86%E8%A7%A3%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%B9%B3%E6%96%B9%E6%A0%B9%E3%81%AE%E8%A8%88%E7%AE%97%E3%82%92%E9%81%BF%E3%81%91%E3%82%8B%E4%BF%AE%E6%AD%A3%E3%82%B3%E3%83%AC%E3%82%B9%E3%82%AD%E3%83%BC%E5%88%86%E8%A7%A3%E3%81%A7%E3%81%AF%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB%E8%A1%8C%E5%88%97%24D'%24%E3%82%92%E6%8A%9C%E3%81%8D%E5%87%BA%E3%81%97%E3%81%A6%24A%3DLL%5ET%E2%89%A1(L'D')(L'D')%5ET%3DL'D'D'%5ETL'%5ET%5Cequiv%20L'DL'%5ET%24%E3%81%A8%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%24L'%24%E3%81%AE%E5%AF%BE%E8%A7%92%E6%88%90%E5%88%86%E3%81%AF%E3%81%99%E3%81%B9%E3%81%A61%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%E6%88%90%E5%88%86%E6%AF%94%E8%BC%83%E3%81%8B%E3%82%89%E5%88%86%E8%A7%A3%E3%81%AE%E5%85%AC%E5%BC%8F%E3%82%92%E6%B1%82%E3%82%81%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_(A%2C%20np%2C%20plt%2C%20sns)%3A%0A%20%20%20%20def%20modified_cholesky_decomposition(A)%3A%0A%20%20%20%20%20%20%20%20L%2C%20D%20%3D%20(np.zeros_like(A)%2C%20np.zeros_like(A))%0A%20%20%20%20%20%20%20%20N%20%3D%20A.shape%5B0%5D%0A%20%20%20%20%20%20%20%20for%20_i%20in%20range(N)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20j%20in%20range(_i%20%2B%201)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20_i%20%3D%3D%20j%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20L%5B_i%2C%20_i%5D%20%3D%201%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20D%5B_i%2C%20_i%5D%20%3D%20A%5B_i%2C%20_i%5D%20-%20np.sum(L%5B_i%2C%20%3A_i%5D%20**%202%20*%20D%5B%3A_i%2C%20%3A_i%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20L%5B_i%2C%20j%5D%20%3D%20(A%5B_i%2C%20j%5D%20-%20np.sum(L%5B_i%2C%20%3Aj%5D%20*%20L%5Bj%2C%20%3Aj%5D%20*%20D%5B%3Aj%2C%20%3Aj%5D))%20%2F%20D%5Bj%2C%20j%5D%0A%20%20%20%20%20%20%20%20return%20(L%2C%20D)%0A%20%20%20%20L_2%2C%20D%20%3D%20modified_cholesky_decomposition(A.T%20%40%20A)%0A%20%20%20%20print('L%3D')%0A%20%20%20%20sns.heatmap(L_2%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print('D%3D')%0A%20%20%20%20sns.heatmap(D%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print('L%20D%20L%5ET%20-%20A%5ET%20A%3D')%0A%20%20%20%20sns.heatmap(L_2%20%40%20D%20%40%20L_2.T%20-%20A.T%20%40%20A%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20return%20D%2C%20L_2%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E7%B7%9A%E5%BD%A2%E6%96%B9%E7%A8%8B%E5%BC%8F%24A%5Cvec%7Bx%7D%3D%5Cvec%7Bb%7D%24%E3%81%AE%E8%A7%A3%E6%B3%95%E3%81%AF%E3%82%B3%E3%83%AC%E3%82%B9%E3%82%AD%E3%83%BC%E5%88%86%E8%A7%A3%E3%81%A8%E5%90%8C%E6%A7%98%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(A%2C%20D%2C%20L_2%2C%20b%2C%20np)%3A%0A%20%20%20%20def%20forward_substitute_2(L%2C%20b)%3A%0A%20%20%20%20%20%20%20%20N%20%3D%20len(b)%0A%20%20%20%20%20%20%20%20y%20%3D%20np.zeros(N)%0A%20%20%20%20%20%20%20%20for%20_i%20in%20range(N)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20y%5B_i%5D%20%3D%20(b%5B_i%5D%20-%20L%5B_i%2C%20%3A_i%5D%20%40%20y%5B%3A_i%5D)%20%2F%20L%5B_i%2C%20_i%5D%0A%20%20%20%20%20%20%20%20return%20y%0A%0A%20%20%20%20def%20backward_substitute_2(LT%2C%20y)%3A%0A%20%20%20%20%20%20%20%20N%20%3D%20len(y)%0A%20%20%20%20%20%20%20%20x%20%3D%20np.zeros(N)%0A%20%20%20%20%20%20%20%20for%20_i%20in%20range(N%20-%201%2C%20-1%2C%20-1)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20x%5B_i%5D%20%3D%20(y%5B_i%5D%20-%20LT%5B_i%2C%20_i%20%2B%201%3A%5D%20%40%20x%5B_i%20%2B%201%3A%5D)%20%2F%20LT%5B_i%2C%20_i%5D%0A%20%20%20%20%20%20%20%20return%20x%0A%20%20%20%20y_2%20%3D%20forward_substitute_2(L_2%20%40%20D%2C%20A.T%20%40%20b)%0A%20%20%20%20x_2%20%3D%20backward_substitute_2(L_2.T%2C%20y_2)%0A%20%20%20%20print(f'A%40x-b%3D%7BA%20%40%20x_2%20-%20b!r%7D')%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E9%96%93%E6%8E%A5%E6%B3%95%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E9%96%93%E6%8E%A5%E6%B3%95%E3%81%AF%E5%8F%8D%E5%BE%A9%E6%9B%B4%E6%96%B0%E3%81%A7%E8%A7%A3%E3%81%AB%E5%8F%8E%E6%9D%9F%E3%81%95%E3%81%9B%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E8%A7%A3%E3%81%8F%E3%80%82%0A%20%20%20%20%5B%E5%A4%A7%E3%81%8D%E3%81%8F%E5%AE%9A%E5%B8%B8%E6%B3%95%E3%81%A8%E9%9D%9E%E5%AE%9A%E5%B8%B8%E6%B3%95%E3%81%AB%E5%88%86%E3%81%91%E3%82%89%E3%82%8C%E3%82%8B%5D(http%3A%2F%2Fnkl.cc.u-tokyo.ac.jp%2F13n%2FSolverIterative.pdf)%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_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E5%AE%9A%E5%B8%B8%E6%B3%95%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%AE%9A%E5%B8%B8%E6%B3%95%E3%81%AE%E5%8F%8E%E6%9D%9F%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%E5%8D%81%E5%88%86%E6%9D%A1%E4%BB%B6%E3%81%AF%E7%8B%AD%E7%BE%A9%E8%A1%8C%E3%83%BB%E5%88%97%E5%AF%BE%E8%A7%92%E5%84%AA%E4%BD%8D%E6%80%A7%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E7%94%9F%E6%88%90%E3%81%97%E3%81%9F%E8%A1%8C%E5%88%97%24A%24%E3%81%A7%E3%81%AF%E5%8F%8E%E6%9D%9F%E3%81%97%E3%81%AA%E3%81%84%E5%8F%AF%E8%83%BD%E6%80%A7%E3%81%8C%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AB%E6%B0%97%E3%82%92%E4%BB%98%E3%81%91%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%E3%81%93%E3%81%AE%E3%81%9F%E3%82%81%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%A7%E3%81%AF%E6%89%8B%E5%8B%95%E3%81%A7%E7%8B%AD%E7%BE%A9%E5%AF%BE%E8%A7%92%E5%84%AA%E4%BD%8D%E3%81%AA%E8%A1%8C%E5%88%97%E3%82%92%E8%A8%AD%E5%AE%9A%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%2C%20plt%2C%20sns)%3A%0A%20%20%20%20N_1%20%3D%205%0A%20%20%20%20A_1%20%3D%20np.zeros((N_1%2C%20N_1))%0A%20%20%20%20np.fill_diagonal(A_1%2C%205)%0A%20%20%20%20for%20_i%20in%20range(N_1%20-%201)%3A%0A%20%20%20%20%20%20%20%20A_1%5B_i%2C%20_i%20%2B%201%5D%20%3D%202%0A%20%20%20%20%20%20%20%20A_1%5B_i%20%2B%201%2C%20_i%5D%20%3D%202%0A%20%20%20%20print('A%3D')%0A%20%20%20%20sns.heatmap(A_1%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20return%20A_1%2C%20N_1%0A%0A%0A%40app.cell%0Adef%20_(N_1%2C%20np)%3A%0A%20%20%20%20b_1%20%3D%20np.random.rand(N_1)%0A%20%20%20%20print(f'b%3D%7Bb_1!r%7D')%0A%20%20%20%20return%20(b_1%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%AF%BE%E8%B1%A1%E3%81%AE%E8%A1%8C%E5%88%97%24A%24%E3%82%92%E4%B8%8B%E4%B8%89%E8%A7%92%24L%24%E3%83%BB%E5%AF%BE%E8%A7%92%24D%24%E3%83%BB%E4%B8%8A%E4%B8%89%E8%A7%92%24U%24%E3%81%AB%E5%88%86%E8%A7%A3%E3%80%82%E3%81%A4%E3%81%BE%E3%82%8A%24A%3DD%2BL%2BU%24%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(A_1%2C%20np%2C%20plt%2C%20sns)%3A%0A%20%20%20%20L_3%20%3D%20np.tril(A_1%2C%20-1)%0A%20%20%20%20D_1%20%3D%20np.diag(np.diag(A_1))%0A%20%20%20%20U_1%20%3D%20np.triu(A_1%2C%201)%0A%20%20%20%20print('L%3D')%0A%20%20%20%20sns.heatmap(L_3%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print('D%3D')%0A%20%20%20%20sns.heatmap(D_1%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print('U%3D')%0A%20%20%20%20sns.heatmap(U_1%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20return%20D_1%2C%20L_3%2C%20U_1%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20%E3%83%A4%E3%82%B3%E3%83%93%E6%B3%95%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%8F%8D%E5%BE%A9%E3%81%AE%E6%BC%B8%E5%8C%96%E5%BC%8F%E3%81%AF%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cvec%7Bx%7D%5E%7B(k%2B1)%7D%3DD%5E%7B-1%7D(%5Cvec%7Bb%7D-(L%2BU)%5Cvec%7Bx%7D%5E%7B(k)%7D)%0A%20%20%20%20%24%24%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%20jacobi_step(L%2C%20D%2C%20U%2C%20x%2C%20b)%3A%0A%20%20%20%20%20%20Dinv%20%3D%20np.diag(1%2Fnp.diag(D))%0A%20%20%20%20%20%20return%20Dinv%20%40%20(b%20-%20(L%20%2B%20U)%20%40%20x)%0A%0A%20%20%20%20return%20(jacobi_step%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%81%AE%E5%8F%8D%E5%BE%A9%E3%81%A7%24A%5Cvec%7Bx%7D%3D%5Cvec%7Bb%7D%24%E3%82%92%E6%BA%80%E3%81%9F%E3%81%99%24%5Cvec%7Bx%7D%24%E3%82%92%E6%B1%82%E3%82%81%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_(A_1%2C%20D_1%2C%20L_3%2C%20U_1%2C%20b_1%2C%20jacobi_step%2C%20np)%3A%0A%20%20%20%20_max_step%20%3D%20100%0A%20%20%20%20_eps%20%3D%201e-06%0A%20%20%20%20x_3%20%3D%20np.ones(A_1.shape%5B0%5D)%0A%20%20%20%20for%20_idx%2C%20_step%20in%20enumerate(range(_max_step))%3A%0A%20%20%20%20%20%20%20%20_x_new%20%3D%20jacobi_step(L_3%2C%20D_1%2C%20U_1%2C%20x_3%2C%20b_1)%0A%20%20%20%20%20%20%20%20if%20np.linalg.norm(_x_new%20-%20x_3)%20%3C%20_eps%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20x_3%20%3D%20_x_new%0A%20%20%20%20print(f'idx%3D%7B_idx!r%7D')%0A%20%20%20%20print(f'x%3D%7Bx_3!r%7D')%0A%20%20%20%20print(f'A%40x-b%3D%7BA_1%20%40%20x_3%20-%20b_1!r%7D')%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20%E3%82%AC%E3%82%A6%E3%82%B9%E3%83%BB%E3%82%B6%E3%82%A4%E3%83%87%E3%83%AB%E6%B3%95%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%8F%8D%E5%BE%A9%E3%81%AE%E6%BC%B8%E5%8C%96%E5%BC%8F%E3%81%AF%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cvec%7Bx%7D%5E%7B(k%2B1)%7D%3DD%5E%7B-1%7D(%5Cvec%7Bb%7D-L%5Cvec%7Bx%7D%5E%7B(k%2B1)%7D-U%5Cvec%7Bx%7D%5E%7B(k)%7D).%0A%20%20%20%20%24%24%0A%20%20%20%20%24L%24%E3%81%AF%E4%B8%8B%E4%B8%89%E8%A7%92%E3%81%AA%E3%81%AE%E3%81%A7%24x_i%5E%7B(k%2B1)%7D%24%E3%81%AE%E8%A8%88%E7%AE%97%E3%81%A7%24x_%7B0%2C...%2Ci-1%7D%5E%7B(k%2B1)%7D%24%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AB%E3%81%AA%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%20def%20gauss_seidel_step(L%2C%20D%2C%20U%2C%20x%2C%20b)%3A%0A%20%20%20%20%20%20%20%20Dinv%20%3D%20np.diag(1%20%2F%20np.diag(D))%0A%20%20%20%20%20%20%20%20_x_new%20%3D%20np.zeros_like(x)%0A%20%20%20%20%20%20%20%20for%20_i%20in%20range(len(x))%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_x_new%5B_i%5D%20%3D%20Dinv%5B_i%2C%20_i%5D%20*%20(b%5B_i%5D%20-%20L%5B_i%2C%20%3A_i%5D%20%40%20_x_new%5B%3A_i%5D%20-%20U%5B_i%2C%20_i%3A%5D%20%40%20x%5B_i%3A%5D)%0A%20%20%20%20%20%20%20%20return%20_x_new%0A%0A%20%20%20%20return%20(gauss_seidel_step%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%81%AE%E5%8F%8D%E5%BE%A9%E3%81%A7%24A%5Cvec%7Bx%7D%3D%5Cvec%7Bb%7D%24%E3%82%92%E6%BA%80%E3%81%9F%E3%81%99%24%5Cvec%7Bx%7D%24%E3%82%92%E6%B1%82%E3%82%81%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_(A_1%2C%20D_1%2C%20L_3%2C%20U_1%2C%20b_1%2C%20gauss_seidel_step%2C%20np)%3A%0A%20%20%20%20_max_step%20%3D%20100%0A%20%20%20%20_eps%20%3D%201e-06%0A%20%20%20%20x_4%20%3D%20np.ones(A_1.shape%5B0%5D)%0A%20%20%20%20for%20_idx%2C%20_step%20in%20enumerate(range(_max_step))%3A%0A%20%20%20%20%20%20%20%20_x_new%20%3D%20gauss_seidel_step(L_3%2C%20D_1%2C%20U_1%2C%20x_4%2C%20b_1)%0A%20%20%20%20%20%20%20%20if%20np.linalg.norm(_x_new%20-%20x_4)%20%3C%20_eps%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20x_4%20%3D%20_x_new%0A%20%20%20%20print(f'idx%3D%7B_idx!r%7D')%0A%20%20%20%20print(f'x%3D%7Bx_4!r%7D')%0A%20%20%20%20print(f'A%40x-b%3D%7BA_1%20%40%20x_4%20-%20b_1!r%7D')%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20SOR%20%E6%B3%95%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%8F%8D%E5%BE%A9%E3%81%AE%E6%BC%B8%E5%8C%96%E5%BC%8F%E3%81%AF%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cvec%7Bx%7D%5E%7B(k%2B1)%7D%3D(1-%5Comega)%5Cvec%7Bx%7D%5E%7B(k)%7D%2B%5Comega%20D%5E%7B-1%7D(%5Cvec%7Bb%7D-L%5Cvec%7Bx%7D%5E%7B(k%2B1)%7D-U%5Cvec%7Bx%7D%5E%7B(k)%7D).%0A%20%20%20%20%24%24%0A%20%20%20%20%24L%24%E3%81%AF%E4%B8%8B%E4%B8%89%E8%A7%92%E3%81%AA%E3%81%AE%E3%81%A7%24x_i%5E%7B(k%2B1)%7D%24%E3%81%AE%E8%A8%88%E7%AE%97%E3%81%A7%24x_%7B0%2C...%2Ci-1%7D%5E%7B(k%2B1)%7D%24%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AB%E3%81%AA%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%24%5Comega%3D1%24%E3%81%A7%E3%82%AC%E3%82%A6%E3%82%B9%E3%83%BB%E3%82%B6%E3%82%A4%E3%83%87%E3%83%AB%E6%B3%95%E3%81%A8%E4%B8%80%E8%87%B4%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%20def%20sor_step(L%2C%20D%2C%20U%2C%20x%2C%20b%2C%20omega)%3A%0A%20%20%20%20%20%20%20%20Dinv%20%3D%20np.diag(1%20%2F%20np.diag(D))%0A%20%20%20%20%20%20%20%20_x_new%20%3D%20np.zeros_like(x)%0A%20%20%20%20%20%20%20%20for%20_i%20in%20range(len(x))%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20xi%20%3D%20Dinv%5B_i%2C%20_i%5D%20*%20(b%5B_i%5D%20-%20L%5B_i%2C%20%3A_i%5D%20%40%20_x_new%5B%3A_i%5D%20-%20U%5B_i%2C%20_i%3A%5D%20%40%20x%5B_i%3A%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20_x_new%5B_i%5D%20%3D%20(1%20-%20omega)%20*%20x%5B_i%5D%20%2B%20omega%20*%20xi%0A%20%20%20%20%20%20%20%20return%20_x_new%0A%0A%20%20%20%20return%20(sor_step%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%93%E3%81%AE%E5%8F%8D%E5%BE%A9%E3%81%A7%24A%5Cvec%7Bx%7D%3D%5Cvec%7Bb%7D%24%E3%82%92%E6%BA%80%E3%81%9F%E3%81%99%24%5Cvec%7Bx%7D%24%E3%82%92%E6%B1%82%E3%82%81%E3%82%8B%E3%80%82%0A%20%20%20%20%E3%81%9F%E3%81%A0%E3%81%97%E5%8F%8E%E6%9D%9F%E3%81%AE%E5%BF%85%E8%A6%81%E6%9D%A1%E4%BB%B6%E3%81%AA%E3%81%A9%E3%81%8B%E3%82%89%241%3C%5Comega%3C2%24%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(A_1%2C%20D_1%2C%20L_3%2C%20U_1%2C%20b_1%2C%20np%2C%20sor_step)%3A%0A%20%20%20%20_max_step%20%3D%20100%0A%20%20%20%20_eps%20%3D%201e-06%0A%20%20%20%20omega%20%3D%201.22%0A%20%20%20%20x_5%20%3D%20np.ones(A_1.shape%5B0%5D)%0A%20%20%20%20for%20_idx%2C%20_step%20in%20enumerate(range(_max_step))%3A%0A%20%20%20%20%20%20%20%20_x_new%20%3D%20sor_step(L_3%2C%20D_1%2C%20U_1%2C%20x_5%2C%20b_1%2C%20omega)%0A%20%20%20%20%20%20%20%20if%20np.linalg.norm(_x_new%20-%20x_5)%20%3C%20_eps%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20x_5%20%3D%20_x_new%0A%20%20%20%20print(f'idx%3D%7B_idx!r%7D')%0A%20%20%20%20print(f'x%3D%7Bx_5!r%7D')%0A%20%20%20%20print(f'A%40x-b%3D%7BA_1%20%40%20x_5%20-%20b_1!r%7D')%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E9%9D%9E%E5%AE%9A%E5%B8%B8%E6%B3%95%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20%E5%85%B1%E5%BD%B9%E5%8B%BE%E9%85%8D%E6%B3%95%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E3%81%BE%E3%81%9A%E3%81%AF%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E8%A1%8C%E5%88%97%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20plt%2C%20sns)%3A%0A%20%20%20%20N_2%20%3D%204%0A%20%20%20%20A_2%20%3D%20np.random.rand(N_2%2C%20N_2)%0A%20%20%20%20b_2%20%3D%20np.random.rand(N_2)%0A%20%20%20%20print('A%3D')%0A%20%20%20%20sns.heatmap(A_2%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print(f'b%3D%7Bb_2!r%7D')%0A%20%20%20%20return%20A_2%2C%20b_2%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%85%B1%E5%BD%B9%E5%8B%BE%E9%85%8D%E6%B3%95%E3%81%AF%E5%AF%BE%E7%A7%B0%E6%AD%A3%E5%AE%9A%E5%80%A4%E8%A1%8C%E5%88%97%24A%24%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A62%E6%AC%A1%E5%BD%A2%E5%BC%8F%E3%81%AE%E6%9C%80%E9%81%A9%E5%8C%96%E5%95%8F%E9%A1%8C%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cmin_%7B%5Cvec%7Bx%7D%7Df(%5Cvec%7Bx%7D)%0A%20%20%20%20%5Cequiv%0A%20%20%20%20%5Cmin_%7B%5Cvec%7Bx%7D%7D%5Cleft(%5Cfrac%7B1%7D%7B2%7D(%5Cvec%7Bx%7D%2CA%5Cvec%7Bx%7D)-(%5Cvec%7Bx%7D%2C%5Cvec%7Bb%7D)%5Cright)%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%AB%E5%A4%89%E5%BD%A2%E3%81%97%E3%81%A6%E9%81%A9%E7%94%A8%E3%80%82%0A%0A%20%20%20%20A%20%E3%81%8C%E5%AF%BE%E7%A7%B0%E6%AD%A3%E5%AE%9A%E5%80%A4%E3%81%A7%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%20%24A%5ETA%24%20%E3%82%92%20%24A%24%20%E3%81%A8%E3%81%97%E3%81%A6%E5%87%A6%E7%90%86%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(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E6%9A%AB%E5%AE%9A%E8%A7%A3%24%5Cvec%7Bx%7D_k%24%E3%81%AB%E5%AF%BE%E3%81%97%E6%8E%A2%E7%B4%A2%E6%96%B9%E5%90%91%24%5Cvec%7Bp%7D_k%24%E3%81%A7%24f(%5Cvec%7Bx%7D)%24%E3%81%8C%E6%9C%80%E5%B0%8F%E3%81%AB%E3%81%AA%E3%82%8B%E7%82%B9%E3%81%AF%24%5Cvec%7Br%7D_k%5Cequiv%5Cvec%7Bb%7D-A%5Cvec%7Bx%7D_k%24%E3%81%A8%E3%81%97%E3%81%A6%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cvec%7Bx%7D_%7Bk%2B1%7D%3D%5Cvec%7Bx%7D_k%2B%5Cfrac%7B(%5Cvec%7Bp%7D_k%2C%5Cvec%7Br%7D_k)%7D%7B(%5Cvec%7Bp%7D_k%2CA%5Cvec%7Bp%7D_k)%7D%5Cvec%7Bp%7D_k.%0A%20%20%20%20%24%24%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%8B%BE%E9%85%8D%E6%96%B9%E5%90%91%24%5Cvec%7Bp%7D%24%E3%81%AF%E5%85%B1%E5%BD%B9%E3%81%AE%E6%9D%A1%E4%BB%B6%24(%5Cvec%7Bp%7D_%7Bk%2B1%7D%2CA%5Cvec%7Bp%7D_k)%3D0%24%E3%81%8B%E3%82%89%E6%B1%BA%E5%AE%9A%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_(A_2%2C%20b_2%2C%20np)%3A%0A%20%20%20%20_max_step%20%3D%20100%0A%20%20%20%20_eps%20%3D%201e-06%0A%20%20%20%20ATA%20%3D%20A_2.T%20%40%20A_2%0A%20%20%20%20x_6%20%3D%20np.ones(ATA.shape%5B0%5D)%0A%20%20%20%20p%20%3D%20A_2.T%20%40%20b_2%20-%20ATA%20%40%20x_6%0A%20%20%20%20r%20%3D%20A_2.T%20%40%20b_2%20-%20ATA%20%40%20x_6%0A%20%20%20%20for%20_idx%2C%20_step%20in%20enumerate(range(_max_step))%3A%0A%20%20%20%20%20%20%20%20alpha%20%3D%20np.dot(p%2C%20r)%20%2F%20np.dot(p%2C%20ATA%20%40%20p)%0A%20%20%20%20%20%20%20%20x_6%20%3D%20x_6%20%2B%20alpha%20*%20p%0A%20%20%20%20%20%20%20%20r%20%3D%20r%20-%20alpha%20*%20ATA%20%40%20p%0A%20%20%20%20%20%20%20%20if%20np.linalg.norm(r)%20%3C%20_eps%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20beta%20%3D%20-np.dot(r%2C%20ATA%20%40%20p)%20%2F%20np.dot(p%2C%20ATA%20%40%20p)%0A%20%20%20%20%20%20%20%20%20%20%20%20p%20%3D%20r%20%2B%20beta%20*%20p%0A%20%20%20%20print(f'idx%3D%7B_idx!r%7D')%0A%20%20%20%20print(f'x%3D%7Bx_6!r%7D')%0A%20%20%20%20print(f'ATA%40x-A.T%40b%3D%7BATA%20%40%20x_6%20-%20A_2.T%20%40%20b_2!r%7D')%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%E5%85%B1%E5%BD%B9%E5%8B%BE%E9%85%8D%E6%B3%95%E3%81%AF%24%5Cdim%5Cvec%7Bb%7D%24%E5%9B%9E%E3%81%AE%E5%8F%8D%E5%BE%A9%E3%81%A7%24A%5Cvec%7Bx%7D%3D%5Cvec%7Bb%7D%24%E3%81%AE%E8%A7%A3%E3%81%8C%E5%BE%97%E3%82%89%E3%82%8C%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E4%BF%9D%E8%A8%BC%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%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
0a5efc0e0f6d23e9a249fc3c76afaf4b