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_eig.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%23%20%E5%9B%BA%E6%9C%89%E5%80%A4%E8%A8%88%E7%AE%97%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%A2%E3%83%BC%E3%83%99%E3%83%AB%E3%83%BB%E3%83%AB%E3%83%95%E3%82%A3%E3%83%8B%E3%81%AE%E5%AE%9A%E7%90%86%E3%82%88%E3%82%8A5%E6%AC%A1%E4%BB%A5%E4%B8%8A%E3%81%AE%E4%BB%A3%E6%95%B0%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%AB%E3%81%AF%E5%85%AC%E5%BC%8F%E3%81%8C%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%AA%E3%81%84%E3%80%82%E3%82%88%E3%81%A3%E3%81%A65x5%E8%A1%8C%E5%88%97%E3%81%AE%E7%89%B9%E6%80%A7%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%81%AF%E7%9B%B4%E6%8E%A5%E7%9A%84%E3%81%AB%E8%A7%A3%E3%81%91%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%E5%8F%8D%E5%BE%A9%E6%B3%95%E3%82%92%E4%BD%BF%E7%94%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(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%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%A7%E3%81%AF%E3%80%81%E6%95%B0%E5%80%A4%E8%A8%88%E7%AE%97%E3%81%AE%E6%B5%81%E3%82%8C%E3%82%92%E8%BF%BD%E3%81%84%E3%82%84%E3%81%99%E3%81%8F%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%20**4x4%20%2F%204x5%20%E3%81%AE%E4%BB%A3%E8%A1%A8%E4%BE%8B**%20%E3%81%A8%0A%20%20%20%20**%E5%B0%8F%E3%81%95%E3%82%81%E3%81%AE%E5%8F%8D%E5%BE%A9%E4%B8%8A%E9%99%90**%20%E3%82%92%E4%BD%BF%E3%81%86%E3%80%82%E7%89%B9%E3%81%AB%E5%BE%8C%E5%8D%8A%E3%81%AE%E3%83%8F%E3%82%A6%E3%82%B9%E3%83%9B%E3%83%AB%E3%83%80%E3%83%BC%E5%A4%89%E6%8F%9B%20%2B%20%E3%82%AE%E3%83%96%E3%83%B3%E3%82%B9%E5%9B%9E%E8%BB%A2%E3%81%AE%E7%AF%80%E3%81%A7%E3%81%AF%E3%80%81%0A%20%20%20%20%E5%90%84%E3%82%A2%E3%82%AF%E3%83%86%E3%82%A3%E3%83%96%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%AE%20QR%20%E5%8F%8D%E5%BE%A9%E5%9B%9E%E6%95%B0%E3%82%92%E4%B8%8A%E9%99%90%E4%BB%98%E3%81%8D%E3%81%AB%E3%81%97%E3%81%A6%E3%80%81HTML%20%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E3%81%A7%E3%82%82%0A%20%20%20%20%E5%AE%9F%E8%A1%8C%E6%99%82%E9%96%93%E3%81%8C%E7%99%BA%E6%95%A3%E3%81%97%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%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%23%23%23%20%E3%81%B9%E3%81%8D%E4%B9%97%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%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E8%A1%8C%E5%88%97%E3%82%92%E4%BD%9C%E6%88%90%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%0A%20%20%20%20%23%20A%20%3D%20np.random.rand(N%2C%20N)%0A%20%20%20%20%23%20A%20%3D%20A.T%20%40%20A%0A%20%20%20%20A%20%3D%20np.array(%5B%0A%20%20%20%20%20%20%20%20%5B16.%2C%20-1.%2C%201.%2C%202.%5D%2C%0A%20%20%20%20%20%20%20%20%5B2.%2C%2012.%2C%201.%2C%20-1.%5D%2C%0A%20%20%20%20%20%20%20%20%5B1.%2C%203.%2C%20-24.%2C%202.%5D%2C%0A%20%20%20%20%20%20%20%20%5B4.%2C%20-2.%2C%201.%2C%2020.%5D%0A%20%20%20%20%5D)%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%E3%81%B9%E3%81%8D%E4%B9%97%E6%B3%95%E3%81%A7%E3%81%AF%E5%AF%BE%E8%B1%A1%E3%81%AE%E8%A1%8C%E5%88%97%24A%24%E3%81%AE%E3%81%B9%E3%81%8D%E4%B9%97%E3%81%A7%E6%9C%80%E5%A4%A7%E5%9B%BA%E6%9C%89%E5%80%A4%E3%81%A8%E3%81%9D%E3%81%AE%E5%9B%BA%E6%9C%89%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%92%E6%B1%82%E3%82%81%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%24A(A%5E%7B%5Cinfty%7D%5Cvec%7Bx%7D)%3D%5Clambda(A%5E%7B%5Cinfty%7D%5Cvec%7Bx%7D)%24%E3%81%A8%E3%81%AA%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E5%88%A9%E7%94%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%20N%2C%20np)%3A%0A%20%20%20%20def%20power_iteration(A_%2C%20eps%3D1e-6%2C%20max_iter%3D100)%3A%0A%20%20%20%20%20%20A%20%3D%20A_.copy()%0A%20%20%20%20%20%20x%20%3D%20(_%20%3A%3D%20np.random.rand(N))%20%2F%20np.linalg.norm(_)%0A%20%20%20%20%20%20lambda_%20%3D%200%0A%20%20%20%20%20%20for%20i%20in%20range(max_iter)%3A%0A%20%20%20%20%20%20%20%20%23%20%E3%81%B9%E3%81%8D%E4%B9%97%EF%BC%9A%E5%8F%8D%E5%BE%A9%E6%AF%8E%E3%81%AB%E6%9C%80%E5%A4%A7%E5%9B%BA%E6%9C%89%E5%80%A4%E3%81%AE%E5%9B%BA%E6%9C%89%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E6%88%90%E5%88%86%E3%81%8C%E5%A4%A7%E3%81%8D%E3%81%8F%0A%20%20%20%20%20%20%20%20v%20%3D%20A%20%40%20x%0A%20%20%20%20%20%20%20%20%23%20%E6%9C%80%E7%B5%82%E7%9A%84%E3%81%AB(x%2CAx)%3D(x%2C%CE%BBx)%3D%CE%BB%E3%81%A8%E3%81%AA%E3%82%8B%E3%81%AF%E3%81%9A%0A%20%20%20%20%20%20%20%20lambda_%20%3D%20np.dot(x%2C%20v)%0A%20%20%20%20%20%20%20%20x%20%3D%20v%20%2F%20np.linalg.norm(v)%0A%20%20%20%20%20%20%20%20if%20np.dot(v%2C%20v)%20-%20lambda_%20**%202%20%3C%20eps%3A%0A%20%20%20%20%20%20%20%20%20%20print(f%22early%20stop%3A%20%7Bi%3D%7D%22)%0A%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20return%20lambda_%2C%20x%0A%0A%20%20%20%20lambda_%2C%20x%20%3D%20power_iteration(A)%0A%0A%20%20%20%20print(f%22%7Blambda_%3D%3A.3%7D%22)%0A%20%20%20%20print(f%22%7Bx%3D%7D%22)%0A%20%20%20%20print(f%22%7BA%40x-lambda_*x%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%23%23%23%20QR%20%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%E6%9C%80%E3%82%82%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%20QR%20%E5%88%86%E8%A7%A3%E3%81%AF%E3%82%B0%E3%83%A9%E3%83%A0%E3%83%BB%E3%82%B7%E3%83%A5%E3%83%9F%E3%83%83%E3%83%88%E3%81%AE%E7%9B%B4%E4%BA%A4%E5%8C%96%E3%82%92%E5%88%A9%E7%94%A8%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%20gram_schmidt(vec_in_)%3A%0A%20%20%20%20%20%20%20%20vec_in%20%3D%20vec_in_.copy()%0A%20%20%20%20%20%20%20%20vec_out%20%3D%20np.zeros_like(vec_in)%0A%20%20%20%20%20%20%20%20for%20k%20in%20range(vec_in.shape%5B1%5D)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20u%20%3D%20vec_in%5B%3A%2C%20k%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20j%20in%20range(k)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20u%20%3D%20u%20-%20np.dot(vec_in%5B%3A%2C%20k%5D%2C%20vec_out%5B%3A%2C%20j%5D)%20*%20vec_out%5B%3A%2C%20j%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20vec_out%5B%3A%2C%20k%5D%20%3D%20u%20%2F%20np.linalg.norm(u)%0A%20%20%20%20%20%20%20%20return%20vec_out%0A%20%20%20%20_Q%20%3D%20gram_schmidt(A)%0A%20%20%20%20print('Q%20%40%20Q.T%3D')%0A%20%20%20%20sns.heatmap(_Q%20%40%20_Q.T%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20return%20(gram_schmidt%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%E6%AD%A3%E5%89%87%E8%A1%8C%E5%88%97%24A%24%E3%81%AE%E5%90%84%E5%88%97%E3%82%92%E4%B8%80%E6%AC%A1%E7%8B%AC%E7%AB%8B%E3%81%AA%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%A8%E3%81%BF%E3%81%AA%E3%81%97%E3%81%A6%E3%80%81%E3%82%B0%E3%83%A9%E3%83%A0%E3%83%BB%E3%82%B7%E3%83%A5%E3%83%9F%E3%83%83%E3%83%88%E3%81%A7%E7%9B%B4%E4%BA%A4%E5%8C%96%E3%80%82%0A%0A%20%20%20%20%E7%9B%B4%E4%BA%A4%E5%8C%96%E3%81%97%E3%81%9F%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%92%E4%B8%A6%E3%81%B9%E3%81%9F%E3%82%82%E3%81%AE%E3%82%92%E8%A1%8C%E5%88%97%24Q%24%E3%81%A8%E3%81%97%E3%81%A6%E3%80%81%24A%3DQR%24%E3%81%A8%E3%81%AA%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E8%A1%8C%E5%88%97%24R%24%E3%82%92%E6%A7%8B%E6%88%90%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%20gram_schmidt%2C%20np%2C%20plt%2C%20sns)%3A%0A%20%20%20%20def%20QR_decomp(A_)%3A%0A%20%20%20%20%20%20%20%20A%20%3D%20A_.copy()%0A%20%20%20%20%20%20%20%20_Q%20%3D%20gram_schmidt(A)%0A%20%20%20%20%20%20%20%20_R%20%3D%20np.zeros_like(A)%0A%20%20%20%20%20%20%20%20for%20j%20in%20range(len(A))%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20k%20in%20range(j%2C%20len(A))%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20j%20%3D%3D%20k%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20a_k%20%3D%20A%5B%3A%2C%20k%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20col_idx%20in%20range(j)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20a_k%20%3D%20a_k%20-%20np.dot(A%5B%3A%2C%20k%5D%2C%20_Q%5B%3A%2C%20col_idx%5D)%20*%20_Q%5B%3A%2C%20col_idx%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_R%5Bj%2C%20k%5D%20%3D%20np.linalg.norm(a_k)%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%20_R%5Bj%2C%20k%5D%20%3D%20np.dot(A%5B%3A%2C%20k%5D%2C%20_Q%5B%3A%2C%20j%5D)%0A%20%20%20%20%20%20%20%20return%20(_Q%2C%20_R)%0A%20%20%20%20_Q%2C%20_R%20%3D%20QR_decomp(A)%0A%20%20%20%20print('Q%3D')%0A%20%20%20%20sns.heatmap(_Q%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print('R%3D')%0A%20%20%20%20sns.heatmap(_R%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print('A-QR%3D')%0A%20%20%20%20sns.heatmap(A%20-%20_Q%20%40%20_R%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20return%20(QR_decomp%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%20QR%20%E6%B3%95%E3%81%AF%20QR%20%E5%88%86%E8%A7%A3%E3%82%92%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97%E3%81%A6%E5%9B%BA%E6%9C%89%E5%80%A4%E3%82%92%E5%AF%BE%E8%A7%92%E6%88%90%E5%88%86%E3%81%AB%E6%8C%81%E3%81%A4%E8%A1%8C%E5%88%97%E3%82%92%E4%BD%9C%E6%88%90%E3%80%82%0A%0A%20%20%20%20%24A_k%3DQ_kR_k%2C%20A_%7Bk%2B1%7D%3DR_kQ_k%3DQ_k%5E%7B-1%7DAQ_k%3DQ_k%5ETAQ_k%24%E3%82%92%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%97%E3%81%A6%E3%80%81%E7%9B%B4%E4%BA%A4%E5%A4%89%E6%8F%9B%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%20QR_decomp%2C%20np%2C%20plt%2C%20sns)%3A%0A%20%20%20%20def%20QR_iteration(A_%2C%20eps%3D1e-06%2C%20max_iter%3D100)%3A%0A%20%20%20%20%20%20%20%20A%20%3D%20A_.copy()%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(max_iter)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_Q%2C%20_R%20%3D%20QR_decomp(A)%0A%20%20%20%20%20%20%20%20%20%20%20%20A%20%3D%20_R%20%40%20_Q%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20np.tril(np.abs(A)%2C%20-1).max()%20%3C%20eps%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20print(f'early%20stop%3A%20i%3D%7Bi!r%7D')%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20return%20A%0A%20%20%20%20diag_A%20%3D%20QR_iteration(A)%0A%20%20%20%20print('diag_A%3D')%0A%20%20%20%20sns.heatmap(diag_A%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20return%20QR_iteration%2C%20diag_A%0A%0A%0A%40app.cell%0Adef%20_(A%2C%20diag_A%2C%20np)%3A%0A%20%20%20%20def%20ordered_eigh(A)%3A%0A%20%20%20%20%20%20%20%20evalues%2C%20evectors%20%3D%20np.linalg.eigh(A)%0A%20%20%20%20%20%20%20%20idx%20%3D%20np.abs(evalues).argsort()%5B%3A%3A-1%5D%20%20%23%20%E5%9B%BA%E6%9C%89%E5%80%A4%E3%81%AE%E7%B5%B6%E5%AF%BE%E5%80%A4%E3%81%8C%E5%A4%A7%E3%81%8D%E3%81%84%E9%A0%86%E3%81%AB%E4%B8%A6%E3%81%B9%E3%82%8B%0A%20%20%20%20%20%20%20%20evalues%20%3D%20evalues%5Bidx%5D%0A%20%20%20%20%20%20%20%20evectors%20%3D%20evectors%5B%3A%2C%20idx%5D%0A%20%20%20%20%20%20%20%20return%20(evalues%2C%20evectors)%0A%20%20%20%20evalues_np%2C%20_evectors_np%20%3D%20ordered_eigh(A)%0A%20%20%20%20print(f'np.diag(diag_A)%3D%7Bnp.diag(diag_A)!r%7D')%0A%20%20%20%20print(f'evalues_np%3D%7Bevalues_np!r%7D')%0A%20%20%20%20print(f'residuals%3D%7Bnp.diag(diag_A)%20-%20evalues_np%7D')%0A%20%20%20%20return%20evalues_np%2C%20ordered_eigh%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%8E%9F%E7%82%B9%E3%82%B7%E3%83%95%E3%83%88%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%20QR%20%E6%B3%95%E3%81%AE%E5%8F%8E%E6%9D%9F%E9%80%9F%E5%BA%A6%E3%81%AF%E8%BF%91%E4%BC%BC%E5%9B%BA%E6%9C%89%E5%80%A4%E3%81%A8%E6%9C%80%E5%B0%8F%E5%9B%BA%E6%9C%89%E5%80%A4%E3%81%AE%E6%AF%94%E3%81%A7%E6%B1%BA%E5%AE%9A%E3%81%95%E3%82%8C%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%0A%20%20%20%20%E6%9C%80%E5%B0%8F%E5%9B%BA%E6%9C%89%E5%80%A4%E3%82%92%E5%B0%8F%E3%81%95%E3%81%8F%E3%81%99%E3%82%8B%E3%81%A8%E5%8F%8E%E6%9D%9F%E3%81%8C%E6%97%A9%E3%81%8F%E3%81%AA%E3%82%8B%E3%80%82%0A%20%20%20%20%E3%81%9D%E3%81%93%E3%81%A7%E6%9C%80%E5%B0%8F%E5%9B%BA%E6%9C%89%E5%80%A4%EF%BC%88%E3%81%AE%E8%BF%91%E4%BC%BC%E5%80%A4%EF%BC%89%E3%82%92%24%5Cmu_k%24%E3%81%A8%E3%81%97%E3%81%A6%0A%20%20%20%20%24%24%0A%20%20%20%20A_k-%5Cmu_k%20I%3DQ_kR_k%2C%5Cquad%0A%20%20%20%20A_%7Bk%2B1%7D%3DR_kQ_k%2B%5Cmu_kI%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%A8%E5%8F%8D%E5%BE%A9%E3%81%99%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%E3%82%A6%E3%82%A3%E3%83%AB%E3%82%AD%E3%83%B3%E3%82%BD%E3%83%B3%E3%81%AE%E7%A7%BB%E5%8B%95%E6%B3%95%E3%81%AF%24A_k%24%E5%8F%B3%E4%B8%8B%E9%9A%85%E3%81%AE2x2%E5%B0%8F%E8%A1%8C%E5%88%97%E3%81%AE%E5%9B%BA%E6%9C%89%E5%80%A4%E3%81%AE%E3%81%86%E3%81%A1%E3%80%81%0A%20%20%20%20%24A_k%24%E3%81%AE%E5%8F%B3%E4%B8%8B%E9%9A%85%E3%81%AE%E5%80%A4%E3%81%AB%E8%BF%91%E3%81%84%E3%81%BB%E3%81%86%E3%82%92%24%5Cmu_k%24%E3%81%A8%E3%81%97%E3%81%A6%E5%88%A9%E7%94%A8%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)%3A%0A%20%20%20%20def%20minimal_eigh(A)%3A%0A%20%20%20%20%20%20if%20A.shape%20!%3D%20(2%2C%202)%3A%0A%20%20%20%20%20%20%20%20raise%20ValueError(%22A%20must%20be%202x2%20matrix%22)%0A%20%20%20%20%20%20b%20%3D%20np.trace(A)%0A%20%20%20%20%20%20c%20%3D%20np.linalg.det(A)%0A%20%20%20%20%20%20D%20%3D%20b**2-4*c%0A%20%20%20%20%20%20return%20np.array(%5B(b%2Bnp.sqrt(D))%2F2%2C%20(b-np.sqrt(D))%2F2%5D)%0A%0A%20%20%20%20def%20wilkinson_shift(A)%3A%0A%20%20%20%20%20%20evalues%20%3D%20minimal_eigh(A%5B-2%3A%2C%20-2%3A%5D)%0A%20%20%20%20%20%20idx%20%3D%20np.argmin(np.abs(evalues-A%5B-1%2C-1%5D))%0A%20%20%20%20%20%20return%20evalues%5Bidx%5D%0A%0A%20%20%20%20print(f%22%7Bwilkinson_shift(A)%3D%3A.2f%7D%22)%0A%20%20%20%20return%20(wilkinson_shift%2C)%0A%0A%0A%40app.cell%0Adef%20_(A%2C%20QR_decomp%2C%20evalues_np%2C%20np%2C%20plt%2C%20sns%2C%20wilkinson_shift)%3A%0A%20%20%20%20def%20shifted_QR_iteration(A_%2C%20eps%3D1e-06%2C%20max_iter%3D100)%3A%0A%20%20%20%20%20%20%20%20A%20%3D%20A_.copy()%0A%20%20%20%20%20%20%20%20N%20%3D%20A.shape%5B0%5D%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(max_iter)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20mu%20%3D%20wilkinson_shift(A)%0A%20%20%20%20%20%20%20%20%20%20%20%20_Q%2C%20_R%20%3D%20QR_decomp(A%20-%20mu%20*%20np.eye(N))%0A%20%20%20%20%20%20%20%20%20%20%20%20A%20%3D%20_R%20%40%20_Q%20%2B%20mu%20*%20np.eye(N)%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20np.tril(np.abs(A)%2C%20-1).max()%20%3C%20eps%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20print(f'early%20stop%3A%20i%3D%7Bi!r%7D')%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20return%20A%0A%20%20%20%20diag_A_1%20%3D%20shifted_QR_iteration(A)%0A%20%20%20%20print('diag_A%3D')%0A%20%20%20%20sns.heatmap(diag_A_1%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print(f'residuals%3D%7Bnp.diag(diag_A_1)%20-%20evalues_np%7D')%0A%20%20%20%20return%20(diag_A_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%23%23%23%20%E9%80%86%E5%8F%8D%E5%BE%A9%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%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E5%A4%89%E6%95%B0%E3%82%92%E6%95%B4%E7%90%86%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(A%2C%20diag_A_1%2C%20np%2C%20plt%2C%20sns)%3A%0A%20%20%20%20print('A%3D')%0A%20%20%20%20sns.heatmap(A%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20evalues%20%3D%20np.diag(diag_A_1)%0A%20%20%20%20print(f'evalues%3D%7Bevalues!r%7D')%0A%20%20%20%20return%20(evalues%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%E9%80%86%E5%8F%8D%E5%BE%A9%E6%B3%95%E3%81%AF%E8%BF%91%E4%BC%BC%E5%9B%BA%E6%9C%89%E5%80%A4%24%5Clambda'%24%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%24((A-%5Clambda'E)%5E%7B-1%7D)%5E%5Cinfty%24%E3%82%92%E5%9B%BA%E6%9C%89%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%A8%E3%81%97%E3%81%A6%E8%A8%88%E7%AE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%80%82%0A%0A%20%20%20%20%E8%A8%88%E7%AE%97%E3%81%AE%E9%81%8E%E7%A8%8B%E3%81%A7%E3%83%AC%E3%82%A4%E3%83%AA%E3%83%BC%E5%95%86%E3%81%AB%E3%82%88%E3%82%8B%E8%A8%88%E7%AE%97%0A%20%20%20%20%24%24%0A%20%20%20%20R(%5Cvec%7Bx%7D%5E%7B(k)%7D)%3D%5Cfrac%7B(%5Cvec%7Bx%7D%5E%7B(k)%7D%2C(A-%5Clambda'E)%5E%7B-1%7D%5Cvec%7Bx%7D%5E%7B(k)%7D)%7D%7B(%5Cvec%7Bx%7D%5E%7B(k)%7D%2C%5Cvec%7Bx%7D%5E%7B(k)%7D)%7D%0A%20%20%20%20%3D%5Cfrac%7B1%7D%7B%5Clambda-%5Clambda'%7D%5Cequiv%5Cmu%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%A7%E5%9B%BA%E6%9C%89%E5%80%A4%E3%81%AE%E9%AB%98%E7%B2%BE%E5%BA%A6%E5%8C%96%E3%81%8C%E5%9B%B3%E3%82%8C%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%20evalues%2C%20np%2C%20plt%2C%20sns)%3A%0A%20%20%20%20def%20inverse_iteration(A%2C%20evalues_%2C%20eps%3D1e-06%2C%20max_iter%3D100)%3A%0A%20%20%20%20%20%20%20%20evalues%20%3D%20evalues_.copy()%0A%20%20%20%20%20%20%20%20N%20%3D%20A.shape%5B0%5D%0A%20%20%20%20%20%20%20%20evectors%20%3D%20np.eye(N)%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(N)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20_%20in%20range(max_iter)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20v%20%3D%20np.linalg.solve(A%20-%20evalues%5Bi%5D%20*%20np.eye(N)%2C%20evectors%5B%3A%2C%20i%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20evectors%5B%3A%2C%20i%5D%20%3D%20v%20%2F%20np.linalg.norm(v)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mu%20%3D%20np.dot(evectors%5B%3A%2C%20i%5D%2C%20v)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20evalues%5Bi%5D%20%3D%20evalues%5Bi%5D%20%2B%201%20%2F%20mu%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20np.linalg.norm(v)%20-%20mu%20**%202%20%3C%20eps%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20return%20(evalues%2C%20evectors)%0A%20%20%20%20evalues_1%2C%20evectors%20%3D%20inverse_iteration(A%2C%20evalues)%0A%20%20%20%20lambda_mat%20%3D%20np.diag(evalues_1)%0A%20%20%20%20_residuals%20%3D%20A%20%40%20evectors%20-%20evectors%20%40%20lambda_mat%0A%20%20%20%20print('residuals%3D')%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%20evalues_1%2C%20evectors%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%A8%88%E7%AE%97%E7%B5%90%E6%9E%9C%E3%82%92%20numpy%20%E3%81%AB%E3%82%88%E3%82%8B%E7%B5%90%E6%9E%9C%E3%81%A8%E6%AF%94%E8%BC%83%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(A%2C%20evalues_1%2C%20evectors%2C%20ordered_eigh%2C%20plt%2C%20sns)%3A%0A%20%20%20%20evalues_np_1%2C%20_evectors_np%20%3D%20ordered_eigh(A)%0A%20%20%20%20for%20idx%20in%20range(_evectors_np.shape%5B1%5D)%3A%0A%20%20%20%20%20%20%20%20if%20_evectors_np%5B0%2C%20idx%5D%20*%20evectors%5B0%2C%20idx%5D%20%3C%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_evectors_np%5B%3A%2C%20idx%5D%20%3D%20_evectors_np%5B%3A%2C%20idx%5D%20*%20-1%0A%20%20%20%20print(f'evalues%3D%7Bevalues_1!r%7D')%0A%20%20%20%20print(f'evalues_np%3D%7Bevalues_np_1!r%7D')%0A%20%20%20%20print(f'evectors%3D%7Bevectors!r%7D')%0A%20%20%20%20print(f'evectors_np%3D%7B_evectors_np!r%7D')%0A%20%20%20%20print(f'evalues-evalues_np%3D%7Bevalues_1%20-%20evalues_np_1!r%7D')%0A%20%20%20%20print('residuals%3D')%0A%20%20%20%20sns.heatmap(evectors%20-%20_evectors_np%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%23%23%20%E5%9B%BA%E6%9C%89%E5%80%A4%E8%A8%88%E7%AE%97%E3%81%AE%E9%AB%98%E9%80%9F%E5%8C%96%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%E3%83%8F%E3%82%A6%E3%82%B9%E3%83%9B%E3%83%AB%E3%83%80%E3%83%BC%E5%A4%89%E6%8F%9B%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%AF%BE%E8%A7%92%E6%88%90%E5%88%86%E3%82%88%E3%82%8A2%E4%BB%A5%E4%B8%8A%E5%B7%A6%E3%81%AE%E6%88%90%E5%88%86%E3%81%8C0%E3%81%A8%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E8%A1%8C%E5%88%97%E3%82%92%E3%83%98%E3%83%83%E3%82%BB%E3%83%B3%E3%83%99%E3%83%AB%E3%82%B0%E8%A1%8C%E5%88%97%E3%81%A8%E3%81%84%E3%81%86%E3%80%82%0A%20%20%20%20QR%20%E5%88%86%E8%A7%A3%E3%81%AE%E5%89%8D%E5%87%A6%E7%90%86%E3%81%A8%E3%81%97%E3%81%A6%E3%83%8F%E3%82%A6%E3%82%B9%E3%83%9B%E3%83%AB%E3%83%80%E3%83%BC%E5%A4%89%E6%8F%9B%E3%81%A8%E5%91%BC%E3%81%B0%E3%82%8C%E3%82%8B%E7%9B%B4%E4%BA%A4%E3%83%BB%E9%8F%A1%E6%98%A0%E5%A4%89%E6%8F%9B%E3%81%A7%E3%80%81%0A%20%20%20%20%E5%AF%BE%E8%B1%A1%E8%A1%8C%E5%88%97%E3%82%92%E3%83%98%E3%83%83%E3%82%BB%E3%83%B3%E3%83%99%E3%83%AB%E3%82%B0%E8%A1%8C%E5%88%97%E3%81%B8%E5%A4%89%E6%8F%9B%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%20N%2C%20np%2C%20plt%2C%20sns)%3A%0A%20%20%20%20def%20householder(b)%3A%0A%20%20%20%20%20%20%20%20e%20%3D%20np.zeros_like(b)%0A%20%20%20%20%20%20%20%20e%5B0%5D%20%3D%201%0A%20%20%20%20%20%20%20%20s%20%3D%20-np.sign(b%5B0%5D)%20*%20np.linalg.norm(b)%20%20%23%20%E6%A1%81%E8%90%BD%E3%81%A1%E5%AF%BE%E7%AD%96%E3%81%A7%E7%95%B0%E7%AC%A6%E5%8F%B7%E3%81%AB%0A%20%20%20%20%20%20%20%20u%20%3D%20(_%20%3A%3D%20(b%20-%20s%20*%20e))%20%2F%20np.linalg.norm(_)%0A%20%20%20%20%20%20%20%20_P%20%3D%20np.eye(len(b))%20-%202%20*%20np.outer(u%2C%20u)%0A%20%20%20%20%20%20%20%20return%20_P%0A%0A%20%20%20%20def%20hessenberg(A)%3A%0A%20%20%20%20%20%20%20%20_H%20%3D%20A.copy()%0A%20%20%20%20%20%20%20%20_P%20%3D%20np.eye(N)%0A%20%20%20%20%20%20%20%20for%20k%20in%20range(N%20-%202)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20x%20%3D%20_H%5Bk%20%2B%201%3A%2C%20k%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20Pk%20%3D%20np.eye(N)%0A%20%20%20%20%20%20%20%20%20%20%20%20Pk%5Bk%20%2B%201%3A%2C%20k%20%2B%201%3A%5D%20%3D%20householder(x)%20%20%23%20%E3%83%8F%E3%82%A6%E3%82%B9%E3%83%9B%E3%83%AB%E3%83%80%E3%83%BC%E5%A4%89%E6%8F%9B%0A%20%20%20%20%20%20%20%20%20%20%20%20_H%20%3D%20Pk%20%40%20_H%20%40%20Pk%0A%20%20%20%20%20%20%20%20%20%20%20%20_P%20%3D%20_P%20%40%20Pk%0A%20%20%20%20%20%20%20%20return%20(_H%2C%20_P)%0A%20%20%20%20_H%2C%20_P%20%3D%20hessenberg(A)%0A%20%20%20%20print('P.T%20%40%20P%3D')%0A%20%20%20%20sns.heatmap(_P.T%20%40%20_P%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print('H%3D')%0A%20%20%20%20sns.heatmap(_H%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print('P.T%40A%40P-H%3D')%0A%20%20%20%20sns.heatmap(_P.T%20%40%20A%20%40%20_P%20-%20_H%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20return%20(hessenberg%2C)%0A%0A%0A%40app.cell%0Adef%20_(A%2C%20QR_iteration%2C%20np%2C%20ordered_eigh%2C%20plt%2C%20sns)%3A%0A%20%20%20%20A_%20%3D%20QR_iteration(A)%0A%20%20%20%20evalues_np_2%2C%20evectors_1%20%3D%20ordered_eigh(A_)%0A%20%20%20%20print('A_%3D')%0A%20%20%20%20sns.heatmap(A_%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print(f'residuals%3D%7Bnp.diag(A_)%20-%20evalues_np_2%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%E3%82%AE%E3%83%96%E3%83%B3%E3%82%B9%E5%9B%9E%E8%BB%A2%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(A%2C%20hessenberg%2C%20np%2C%20plt%2C%20sns)%3A%0A%20%20%20%20def%20gibbens_rotation(A%2C%20j%2C%20eps%3D1e-06)%3A%0A%20%20%20%20%20%20%20%20_P%20%3D%20np.eye(A.shape%5B0%5D)%0A%20%20%20%20%20%20%20%20sin%2C%20cos%20%3D%20(0%2C%200)%0A%20%20%20%20%20%20%20%20norm%20%3D%20np.linalg.norm(A%5Bj%3Aj%20%2B%202%2C%20j%5D)%0A%20%20%20%20%20%20%20%20if%20norm%20%3E%20eps%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20sin%2C%20cos%20%3D%20(A%5Bj%20%2B%201%2C%20j%5D%20%2F%20norm%2C%20A%5Bj%2C%20j%5D%20%2F%20norm)%0A%20%20%20%20%20%20%20%20_P%5Bj%3Aj%20%2B%202%2C%20j%3Aj%20%2B%202%5D%20%3D%20np.array(%5B%5Bcos%2C%20sin%5D%2C%20%5B-sin%2C%20cos%5D%5D)%0A%20%20%20%20%20%20%20%20return%20_P%0A%0A%20%20%20%20def%20gibbens_QR(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%20_R%2C%20_P%20%3D%20(A.copy()%2C%20np.eye(N))%0A%20%20%20%20%20%20%20%20for%20j%20in%20range(N%20-%201)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20P_%20%3D%20gibbens_rotation(_R%2C%20j)%0A%20%20%20%20%20%20%20%20%20%20%20%20_R%20%3D%20P_%20%40%20_R%0A%20%20%20%20%20%20%20%20%20%20%20%20_P%20%3D%20P_%20%40%20_P%0A%20%20%20%20%20%20%20%20return%20(_P.T%2C%20_R)%0A%20%20%20%20_H%2C%20_P%20%3D%20hessenberg(A)%0A%20%20%20%20_Q%2C%20_R%20%3D%20gibbens_QR(_H)%0A%20%20%20%20print('Q.T%20%40%20Q%3D')%0A%20%20%20%20sns.heatmap(_Q.T%20%40%20_Q%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print('R%3D')%0A%20%20%20%20sns.heatmap(_R%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20print('P.T%40A%40P-QR%3D')%0A%20%20%20%20sns.heatmap(_P.T%20%40%20A%20%40%20_P%20-%20_Q%20%40%20_R%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20return%20(gibbens_QR%2C)%0A%0A%0A%40app.cell%0Adef%20_(A%2C%20gibbens_QR%2C%20hessenberg%2C%20np%2C%20plt%2C%20sns)%3A%0A%20%20%20%20def%20householder_QR_iteration(A_%2C%20eps%3D1e-06%2C%20max_block_iter%3D40)%3A%0A%20%20%20%20%20%20%20%20_H%2C%20_ph%20%3D%20hessenberg(A_)%0A%20%20%20%20%20%20%20%20m%20%3D%20_H.shape%5B0%5D%20-%201%0A%20%20%20%20%20%20%20%20while%20m%20%3E%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20np.abs(_H%5Bm%2C%20m%20-%201%5D)%20%3C%20eps%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_H%5Bm%2C%20m%20-%201%5D%20%3D%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20m%20%3D%20m%20-%201%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20active_dim%20%3D%20m%20%2B%201%0A%20%20%20%20%20%20%20%20%20%20%20%20converged%20%3D%20False%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20_iter%20in%20range(max_block_iter)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20s%20%3D%20_H%5Bm%2C%20m%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_Q%2C%20_R%20%3D%20gibbens_QR(_H%5B%3Aactive_dim%2C%20%3Aactive_dim%5D%20-%20s%20*%20np.eye(active_dim))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_H%5B%3Aactive_dim%2C%20%3Aactive_dim%5D%20%3D%20_R%20%40%20_Q%20%2B%20s%20*%20np.eye(active_dim)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20np.abs(_H%5Bm%2C%20m%20-%201%5D)%20%3C%20eps%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_H%5Bm%2C%20m%20-%201%5D%20%3D%200%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20converged%20%3D%20True%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20not%20converged%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20print(f'bounded%20stop%3A%20active_dim%3D%7Bactive_dim%7D%2C%20iterations%3D%7Bmax_block_iter%7D')%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20return%20_H%0A%20%20%20%20_H%20%3D%20householder_QR_iteration(A)%0A%20%20%20%20print('H%3D')%0A%20%20%20%20sns.heatmap(_H%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%23%23%20%E7%89%B9%E7%95%B0%E5%80%A4%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%23%23%23%20%E5%8F%B3%E7%89%B9%E7%95%B0%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%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%A1%8C%E5%88%97%20%24A%24%20%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E8%A1%8C%E5%88%97%20%24A%5ETA%24%20%E3%82%92%E8%80%83%E3%81%88%E3%82%8B%E3%80%82%0A%20%20%20%20%E6%98%8E%E3%82%89%E3%81%8B%E3%81%AB%20%24(A%5ETA)%5ET%3DA%5ETA%24%20%E3%81%AA%E3%81%AE%E3%81%A7%E5%AF%BE%E7%A7%B0%E8%A1%8C%E5%88%97%E3%80%82%0A%20%20%20%20%5B%E3%82%B9%E3%83%9A%E3%82%AF%E3%83%88%E3%83%AB%E5%AE%9A%E7%90%86%5D(https%3A%2F%2Fja.wikipedia.org%2Fwiki%2F%25E3%2582%25B9%25E3%2583%259A%25E3%2582%25AF%25E3%2583%2588%25E3%2583%25AB%25E5%25AE%259A%25E7%2590%2586)%E3%82%88%E3%82%8A%E5%9B%BA%E6%9C%89%E5%80%A4%E3%81%AF%E5%B8%B8%E3%81%AB%E5%AE%9F%E6%95%B0%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%E3%81%BE%E3%81%9F%E8%A1%8C%E5%88%97%20%24A%24%20%E3%81%AE%E9%9D%9E%E8%B2%A0%E5%AE%9A%E5%80%A4%E3%81%AE%E6%9D%A1%E4%BB%B6%E3%81%AF%E4%BB%BB%E6%84%8F%E3%81%AE%20%24%5Cvec%7Bx%7D%5Cneq%5Cvec%7B0%7D%24%20%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%20%24%5Cvec%7Bx%7D%5ETA%5Cvec%7Bx%7D%5Cgeq0%24%E3%80%82%0A%20%20%20%20%E3%82%88%E3%81%A3%E3%81%A6%E4%BB%BB%E6%84%8F%E3%81%AE%20%24A%2C%20%5Cvec%7Bx%7D%5Cneq%5Cvec%7B0%7D%24%20%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%20%24%5Cvec%7Bx%7D%5ET(A%5ETA)%5Cvec%7Bx%7D%3D%7C%7CA%5Cvec%7Bx%7D%7C%7C%5E2%5Cgeq0%24%E3%80%82%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%82%88%E3%82%8A%E5%9B%BA%E6%9C%89%E5%80%A4%E3%81%AF%E5%B8%B8%E3%81%AB%E9%9D%9E%E8%B2%A0%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%E3%81%9D%E3%81%AE%E3%81%9F%E3%82%81%E5%9B%BA%E6%9C%89%E5%80%A4%E3%81%AE%E5%B9%B3%E6%96%B9%E6%A0%B9%E3%82%82%E5%B8%B8%E3%81%AB%E5%AE%9F%E6%95%B0%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%81%AF%20%24AA%5ET%24%20%E3%81%A7%E3%82%82%E5%90%8C%E6%A7%98%E3%81%AB%E6%88%90%E7%AB%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%E5%AE%9F%E9%9A%9B%E3%81%AB%E7%A2%BA%E3%81%8B%E3%82%81%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E4%B9%B1%E6%95%B0%E7%94%9F%E6%88%90%E3%81%AE%E8%A1%8C%E5%88%97%E3%81%A7%E3%81%93%E3%82%8C%E3%82%92%E8%A8%88%E7%AE%97%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%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%20N_1%2C%20M%20%3D%20(4%2C%205)%0A%20%20%20%20A_1%20%3D%20np.random.rand(N_1%2C%20M)%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%20sns.heatmap(A_1%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20return%20(A_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%24A%5ETA%24%20%E3%81%AF%E5%AF%BE%E7%A7%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%0Adef%20_(A_1%2C%20sns)%3A%0A%20%20%20%20ATA%20%3D%20A_1.T%20%40%20A_1%0A%20%20%20%20sns.heatmap(ATA%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20return%20(ATA%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%9B%BA%E6%9C%89%E5%80%A4%E3%81%AF%E3%81%99%E3%81%B9%E3%81%A6%E5%AE%9F%E6%95%B0%E3%81%A7%E9%9D%9E%E8%B2%A0%EF%BC%88%E6%95%B0%E5%80%A4%E8%AA%A4%E5%B7%AE%E3%81%AB%E6%B3%A8%E6%84%8F%EF%BC%89%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(ATA%2C%20sns)%3A%0A%20%20%20%20import%20numpy.linalg%20as%20la%0A%0A%20%20%20%20w_right%2C%20V%20%3D%20la.eigh(ATA)%0A%20%20%20%20%23%20%E5%9B%BA%E6%9C%89%E5%80%A4%E3%81%8C%E5%A4%A7%E3%81%8D%E3%81%84%E9%A0%86%0A%20%20%20%20w_right%2C%20V%20%3D%20w_right%5B%3A%3A-1%5D%2C%20V%5B%3A%2C%20%3A%3A-1%5D%0A%20%20%20%20print(f%22%7Bw_right%3D%7D%22)%0A%20%20%20%20sns.heatmap(V%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20return%20V%2C%20la%2C%20w_right%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%9B%BA%E6%9C%89%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%AF%24V%24%E3%81%AE%E5%90%84%E5%88%97%E3%81%8C%E5%AF%BE%E5%BF%9C%E3%80%82%0A%20%20%20%20%E6%A4%9C%E7%AE%97%E3%81%A7%20%24%5Cvec%7Bv%7D%5ET(A%5ETA)%5Cvec%7Bv%7D-w%24%20%E3%82%92%E8%A8%88%E7%AE%97%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(ATA%2C%20V%2C%20np%2C%20sns%2C%20w_right)%3A%0A%20%20%20%20_residuals%20%3D%20V.T%20%40%20ATA%20%40%20V%20-%20np.diag(w_right)%0A%20%20%20%20sns.heatmap(_residuals%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%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%24V%24%20%E8%A1%8C%E5%88%97%E3%81%AF%E7%9B%B4%E4%BA%A4%E8%A1%8C%E5%88%97(%E3%83%A6%E3%83%8B%E3%82%BF%E3%83%AA%E3%83%BC%E8%A1%8C%E5%88%97)%E3%81%A7%5B%E5%8F%B3%E7%89%B9%E7%95%B0%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%5D(https%3A%2F%2Fmanabitimes.jp%2Fmath%2F1280%235)%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(V%2C%20sns)%3A%0A%20%20%20%20%23%20%E6%A4%9C%E7%AE%97%E3%80%82%E3%83%A6%E3%83%8B%E3%82%BF%E3%83%AA%E3%81%AA%E3%82%89%E5%8D%98%E4%BD%8D%E8%A1%8C%E5%88%97%E3%81%AB%E8%BF%91%E3%81%8F%E3%81%AA%E3%82%8B%E3%80%82%0A%20%20%20%20sns.heatmap(V.T%20%40%20V%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%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%B7%A6%E7%89%B9%E7%95%B0%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%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%90%8C%E6%A7%98%E3%81%AB%20%24AA%5ET%24%20%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%A8%88%E7%AE%97%E3%81%97%E5%B7%A6%E7%89%B9%E7%95%B0%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%24U%24%E3%82%92%E6%B1%82%E3%82%81%E3%82%8B%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(A_1%2C%20la%2C%20sns)%3A%0A%20%20%20%20AAT%20%3D%20A_1%20%40%20A_1.T%0A%20%20%20%20w_left%2C%20U%20%3D%20la.eigh(AAT)%0A%20%20%20%20%23%20%E5%9B%BA%E6%9C%89%E5%80%A4%E3%81%8C%E5%A4%A7%E3%81%8D%E3%81%84%E9%A0%86%0A%20%20%20%20w_left%2C%20U%20%3D%20(w_left%5B%3A%3A-1%5D%2C%20U%5B%3A%2C%20%3A%3A-1%5D)%0A%20%20%20%20print(f'w_left%3D%7Bw_left!r%7D')%0A%20%20%20%20sns.heatmap(U%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20return%20U%2C%20w_left%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%B7%A6%E7%89%B9%E7%95%B0%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%82%92%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_(ATA%2C%20V%2C%20np%2C%20sns%2C%20w_right)%3A%0A%20%20%20%20_residuals%20%3D%20V.T%20%40%20ATA%20%40%20V%20-%20np.diag(w_right)%0A%20%20%20%20sns.heatmap(_residuals%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(U%2C%20sns)%3A%0A%20%20%20%20sns.heatmap(U.T%20%40%20U%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%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%E7%89%B9%E7%95%B0%E5%80%A4%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%E6%95%B0%E5%80%A4%E8%AA%A4%E5%B7%AE%E3%81%AE%E5%AF%BE%E7%AD%96%E3%80%82%E3%81%BB%E3%81%BC0%E3%81%AF0%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_(np%2C%20w_left%2C%20w_right)%3A%0A%20%20%20%20w_right_1%20%3D%20np.array(%5Bw%20if%20abs(w)%20%3E%201e-10%20else%200%20for%20w%20in%20w_right%5D)%0A%20%20%20%20w_left_1%20%3D%20np.array(%5Bw%20if%20abs(w)%20%3E%201e-10%20else%200%20for%20w%20in%20w_left%5D)%0A%20%20%20%20print(f'w_right%3D%7Bw_right_1!r%7D')%0A%20%20%20%20print(f'w_left%3D%7Bw_left_1!r%7D')%0A%20%20%20%20return%20w_left_1%2C%20w_right_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%24A%5ETA%2C%20AA%5ET%24%20%E3%81%AE%E5%9B%BA%E6%9C%89%E5%80%A4%E3%81%AE%E5%B9%B3%E6%96%B9%E6%A0%B9%E3%81%AF%E7%89%B9%E7%95%B0%E5%80%A4%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20w_left_1%2C%20w_right_1)%3A%0A%20%20%20%20sigma_right%20%3D%20np.sqrt(w_right_1)%0A%20%20%20%20sigma_left%20%3D%20np.sqrt(w_left_1)%0A%20%20%20%20print(f'sigma_right%3D%7Bsigma_right!r%7D')%0A%20%20%20%20print(f'sigma_left%3D%7Bsigma_left!r%7D')%0A%20%20%20%20return%20sigma_left%2C%20sigma_right%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%89%B9%E7%95%B0%E5%80%A4%E3%81%AB%E3%82%88%E3%82%8B%E8%A1%8C%E5%88%97%20%24%5CSigma%24%20%E3%82%92%E4%BD%9C%E6%88%90%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%20sigma_left%2C%20sigma_right)%3A%0A%20%20%20%20Sigma%20%3D%20np.zeros_like(A_1)%0A%20%20%20%20sigma%20%3D%20sigma_right%20if%20len(sigma_right)%20%3C%20len(sigma_left)%20else%20sigma_left%0A%20%20%20%20Sigma%5B%3Alen(sigma)%2C%20%3Alen(sigma)%5D%20%3D%20np.diag(sigma)%0A%20%20%20%20print(f'Sigma%3D%7BSigma!r%7D')%0A%20%20%20%20return%20Sigma%2C%20sigma%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%9B%BA%E6%9C%89%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%AB%E3%81%AF%E7%AC%A6%E5%8F%B7%E3%81%AE%E4%B8%8D%E5%AE%9A%E6%80%A7%E3%81%8C%E3%81%82%E3%82%8B%E3%81%9F%E3%82%81%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%A7%E3%81%AF%24A%3DU%5CSigma%20V%5ET%24%E3%82%92%E6%BA%80%E3%81%9F%E3%81%99%E3%81%A8%E3%81%AF%E9%99%90%E3%82%89%E3%81%AA%E3%81%84%E3%80%82%0A%0A%20%20%20%20%24%5CSigma%24%E3%81%AE%E6%88%90%E5%88%86%E3%81%AF%E9%9D%9E%E8%B2%A0%E3%81%AA%E3%81%AE%E3%81%A7%24(AV)_i%3D%5Clambda_iU_i%2C%20%5Clambda_i%5Cgeq0%24%E3%80%82%0A%20%20%20%20%E3%81%9D%E3%81%93%E3%81%A7%E3%81%93%E3%81%AE%5B%E6%9D%A1%E4%BB%B6%E3%82%92%E6%BA%80%E3%81%9F%E3%81%99%E3%82%88%E3%81%86%E3%81%AB%E7%AC%A6%E5%8F%B7%E3%81%AE%E5%8F%8D%E8%BB%A2%E3%82%92%E3%81%99%E3%82%8B%5D(%0A%20%20%20%20https%3A%2F%2Fmath.stackexchange.com%2Fquestions%2F4844816%2Fdiscrepancies-in-custom-svd-implementation-compared-to-np-linalg-svd-sign-issu)%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%20U%2C%20V%2C%20np%2C%20sns)%3A%0A%20%20%20%20U_1%20%3D%20np.array(%5Bnp.sign(np.dot(A_1%20%40%20V%5B%3A%2C%20idx%5D%2C%20U%5B%3A%2C%20idx%5D))%20*%20U%5B%3A%2C%20idx%5D%20for%20idx%20in%20range(U.shape%5B1%5D)%5D).T%0A%20%20%20%20sns.heatmap(U_1%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20return%20(U_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%5B%E7%89%B9%E7%95%B0%E5%80%A4%E5%88%86%E8%A7%A3%5D(https%3A%2F%2Fmanabitimes.jp%2Fmath%2F1280%235)%20%24A%3DU%5CSigma%20V%5ET%24%20%E3%81%AE%E6%A4%9C%E7%AE%97%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%20Sigma%2C%20U_1%2C%20V%2C%20sns)%3A%0A%20%20%20%20_residuals%20%3D%20A_1%20-%20U_1%20%40%20Sigma%20%40%20V.T%0A%20%20%20%20sns.heatmap(_residuals%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%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%20numpy%20%E3%81%AE%E6%A8%99%E6%BA%96%E6%A9%9F%E8%83%BD%E3%81%A7%E3%82%82%E7%89%B9%E7%95%B0%E5%80%A4%E5%88%86%E8%A7%A3%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%20la)%3A%0A%20%20%20%20U2%2C%20sigma2%2C%20V2h%20%3D%20la.svd(A_1)%0A%20%20%20%20print(sigma2)%0A%20%20%20%20return%20U2%2C%20V2h%2C%20sigma2%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%89%B9%E7%95%B0%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E3%81%AF%E7%AC%A6%E5%8F%B7%E3%81%AE%E4%B8%8D%E5%AE%9A%E6%80%A7%E3%81%8C%E3%81%82%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E5%AF%BE%E8%A7%92%E5%8C%96%E3%81%8B%E3%82%89%E6%B1%82%E3%82%81%E3%81%9F%E7%B5%90%E6%9E%9C%E3%81%A8%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8B%E3%81%A8%E3%81%AF%E9%99%90%E3%82%89%E3%81%AA%E3%81%84%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(U2%2C%20U_1%2C%20V%2C%20V2h%2C%20plt%2C%20sigma%2C%20sigma2%2C%20sns)%3A%0A%20%20%20%20print(f'sigma2-sigma%3D%7Bsigma2%20-%20sigma!r%7D')%0A%20%20%20%20sns.heatmap(U_1%20-%20U2%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%0A%20%20%20%20plt.show()%0A%20%20%20%20sns.heatmap(V.T%20-%20V2h%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%E7%89%B9%E7%95%B0%E5%88%86%E8%A7%A3%24A%3DU%5CSigma%20V%5ET%24%E3%81%AF%E3%81%8D%E3%81%A1%E3%82%93%E3%81%A8%E6%BA%80%E3%81%9F%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_(A_1%2C%20U2%2C%20V2h%2C%20np%2C%20sigma_left%2C%20sigma_right%2C%20sns)%3A%0A%20%20%20%20Sigma2%20%3D%20np.zeros_like(A_1)%0A%20%20%20%20sigma2_1%20%3D%20sigma_right%20if%20len(sigma_right)%20%3C%20len(sigma_left)%20else%20sigma_left%0A%20%20%20%20Sigma2%5B%3Alen(sigma2_1)%2C%20%3Alen(sigma2_1)%5D%20%3D%20np.diag(sigma2_1)%0A%20%20%20%20_residuals%20%3D%20A_1%20-%20U2%20%40%20Sigma2%20%40%20V2h%0A%20%20%20%20sns.heatmap(_residuals%2C%20annot%3DTrue%2C%20cmap%3D'coolwarm')%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
9965ad854e37c0884d5f5e2cfd4d5072