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%23%20%E6%9C%80%E6%80%A5%E9%99%8D%E4%B8%8B%E6%B3%95%0A%0A%20%20%20%20%E5%86%86%E7%8A%B6%E3%81%AB%E5%88%86%E5%B8%83%E3%81%99%E3%82%8B%E7%82%B9%E7%BE%A4%E3%81%B8%E5%86%86%E3%82%92%E5%BD%93%E3%81%A6%E3%81%AF%E3%82%81%E3%82%8B%E5%95%8F%E9%A1%8C%E3%82%92%E9%A1%8C%E6%9D%90%E3%81%AB%E3%80%81%E6%9C%80%E6%80%A5%E9%99%8D%E4%B8%8B%E6%B3%95%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20%E5%8B%BE%E9%85%8D%E3%81%AF%E8%A7%A3%E6%9E%90%E7%9A%84%E3%81%AB%E5%B0%8E%E3%81%84%E3%81%A6%E6%95%B0%E5%80%A4%E5%BE%AE%E5%88%86%E3%81%A7%E6%A4%9C%E7%AE%97%E3%81%97%E3%80%811%20%E6%AD%A9%E3%81%AE%E5%A4%A7%E3%81%8D%E3%81%95%E3%81%AF%E3%83%90%E3%83%83%E3%82%AF%E3%83%88%E3%83%A9%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%0A%20%20%20%20%E7%9B%B4%E7%B7%9A%E6%8E%A2%E7%B4%A2%E3%81%A7%E6%B1%BA%E3%82%81%E3%82%8B%E3%80%82%E5%8F%8E%E6%9D%9F%E3%81%AE%E6%A7%98%E5%AD%90%E3%81%A8%E5%BD%93%E3%81%A6%E3%81%AF%E3%82%81%E7%B5%90%E6%9E%9C%E3%82%92%E5%9B%B3%E3%81%A7%E7%A2%BA%E8%AA%8D%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%E5%8E%9F%E7%82%B9%E3%81%8B%E3%82%89%E3%81%9A%E3%82%8C%E3%81%9F%E7%82%B9%E3%82%92%E4%B8%AD%E5%BF%83%E3%81%AB%2C%E3%80%81%E8%BF%91%E4%BC%BC%E7%9A%84%E3%81%AB%E5%86%86%E7%8A%B6%E3%81%AB%E5%88%86%E5%B8%83%E3%81%99%E3%82%8B%E7%82%B9%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%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%20from%20typing%20import%20List%0A%0A%20%20%20%20import%20numpy%20as%20np%0A%0A%20%20%20%20%23%20%E5%86%8D%E7%8F%BE%E6%80%A7%E3%81%AE%E3%81%9F%E3%82%81%E3%82%B7%E3%83%BC%E3%83%89%E3%81%AF%E5%9B%BA%E5%AE%9A%0A%20%20%20%20np.random.seed(42)%0A%0A%20%20%20%20def%20get_point()%20-%3E%20List%5Bfloat%5D%3A%0A%20%20%20%20%20%20%20%20r%20%3D%2010.%20%2B%20np.random.normal(0%2C0.5)%0A%20%20%20%20%20%20%20%20center%20%3D%20%5B0.1%2C%20-0.2%5D%0A%0A%20%20%20%20%20%20%20%20theta%20%3D%20np.random.uniform(0%2C%202*np.pi)%0A%20%20%20%20%20%20%20%20return%20%5Br*np.cos(theta)%2Bcenter%5B0%5D%2C%20r*np.sin(theta)%2Bcenter%5B1%5D%5D%0A%20%20%20%20get_point()%0A%20%20%20%20return%20get_point%2C%20np%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%87%E3%83%BC%E3%82%BF%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_(get_point%2C%20np)%3A%0A%20%20%20%20data_list%20%3D%20%5B%5D%0A%20%20%20%20for%20k%20in%20range(50)%3A%0A%20%20%20%20%20%20%20%20data_list.append(get_point())%0A%0A%20%20%20%20data%20%3D%20np.array(data_list)%0A%20%20%20%20data%0A%20%20%20%20return%20(data%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%83%97%E3%83%AD%E3%83%83%E3%83%88%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(data)%3A%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%0A%20%20%20%20_fig%2C%20_ax%20%3D%20plt.subplots(figsize%3D(4.4%2C%204.0)%2C%20dpi%3D100)%0A%20%20%20%20_ax.scatter(data%5B%3A%2C%200%5D%2C%20data%5B%3A%2C%201%5D%2C%20s%3D12)%0A%20%20%20%20_ax.set_aspect(%22equal%22)%0A%20%20%20%20_ax.set_xlabel(%22%24x%24%22)%0A%20%20%20%20_ax.set_ylabel(%22%24y%24%22)%0A%20%20%20%20_ax.set_title(%22generated%20points%22)%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%0A%20%20%20%20return%20(plt%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%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E4%B8%AD%E5%BF%83%E3%83%BB%E5%8D%8A%E5%BE%84%E3%81%8C%E6%9C%AA%E7%9F%A5%E3%81%AE%E5%86%86%E3%81%A8%E3%81%97%E3%81%A6%E9%9D%9E%E7%B7%9A%E5%BD%A2%E3%83%95%E3%82%A3%E3%83%83%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%80%82%0A%20%20%20%20MSS%E3%81%AF%0A%20%20%20%20%24%24%0A%20%20%20%20%20%20f(x_0%2Cy_0%2Cr)%20%3D%20%5Cfrac%7B1%7D%7BN%7D%5Csum_%7Bk%3D1%7D%5EN%0A%20%20%20%20%20%20%20%20%5Cleft%5B%5Cfrac%7B(x_i-x_0)%5E2%2B(y_i-y_0)%5E2%7D%7Br%5E2%7D%20-%201%5Cright%5D%5E2%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%9F%E3%81%A0%E3%81%97%E8%A8%88%E7%AE%97%E3%81%AE%E9%83%BD%E5%90%88%E4%B8%8A%E3%80%81%E7%84%A1%E6%AC%A1%E5%85%83%E3%81%A7%E5%B9%B3%E6%96%B9%E6%A0%B9%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%AA%E3%81%84%E5%BD%A2%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82%0A%20%20%20%20%E3%81%93%E3%81%AE%E9%96%A2%E6%95%B0%E3%81%AE%E6%9C%80%E9%81%A9%E5%8C%96%E3%82%92%E6%9C%80%E6%80%A5%E9%99%8D%E4%B8%8B%E6%B3%95%E3%81%A7%E8%A1%8C%E3%81%86%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(data)%3A%0A%20%20%20%20def%20residue(x0%3A%20float%2C%20y0%3A%20float%2C%20r%3A%20float)%20-%3E%20float%3A%0A%20%20%20%20%20%20%20%20gap%20%3D%20((data%5B%3A%2C%200%5D%20-%20x0)%20**%202%20%2B%20(data%5B%3A%2C%201%5D%20-%20y0)%20**%202)%20%2F%20r**2%20-%201%0A%20%20%20%20%20%20%20%20return%20float((gap**2).mean())%0A%0A%20%20%20%20residue(0.1%2C%20-0.2%2C%2010.0)%0A%20%20%20%20return%20(residue%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%E6%9C%80%E6%80%A5%E9%99%8D%E4%B8%8B%E6%B3%95%E3%81%AF%E5%8B%BE%E9%85%8D%20%24%5Cnabla%20f%24%20%E3%81%AE%E9%80%86%E5%90%91%E3%81%8D%E3%81%B8%E9%80%B2%E3%82%80%E3%80%82%E4%B8%8A%E3%81%AE%20%24f%24%20%E3%81%AF%E5%90%84%E9%A0%85%E3%81%8C%E7%B0%A1%E5%8D%98%E3%81%AA%E3%81%AE%E3%81%A7%E3%80%81%0A%20%20%20%20%E5%8B%BE%E9%85%8D%E3%81%AF%E6%89%8B%E3%81%A7%E6%9B%B8%E3%81%8D%E4%B8%8B%E3%81%9B%E3%82%8B%E3%80%82%24g_i%5Cequiv%5Cdfrac%7B(x_i-x_0)%5E2%2B(y_i-y_0)%5E2%7D%7Br%5E2%7D-1%24%20%E3%81%A8%E7%BD%AE%E3%81%8F%E3%81%A8%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cfrac%7B%E2%88%82f%7D%7B%E2%88%82x_0%7D%3D%5Cfrac%7B1%7D%7BN%7D%5Csum_i2g_i%5Ccdot%5Cfrac%7B-2(x_i-x_0)%7D%7Br%5E2%7D%2C%5Cquad%0A%20%20%20%20%5Cfrac%7B%E2%88%82f%7D%7B%E2%88%82y_0%7D%3D%5Cfrac%7B1%7D%7BN%7D%5Csum_i2g_i%5Ccdot%5Cfrac%7B-2(y_i-y_0)%7D%7Br%5E2%7D%2C%0A%20%20%20%20%24%24%0A%20%20%20%20%24%24%0A%20%20%20%20%5Cfrac%7B%E2%88%82f%7D%7B%E2%88%82r%7D%3D%5Cfrac%7B1%7D%7BN%7D%5Csum_i2g_i%5Ccdot%5Cfrac%7B-2%5Cleft%5B(x_i-x_0)%5E2%2B(y_i-y_0)%5E2%5Cright%5D%7D%7Br%5E3%7D%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%E6%89%8B%E3%81%A7%E5%B0%8E%E3%81%84%E3%81%9F%E5%BC%8F%E3%81%AF%E5%86%99%E3%81%97%E9%96%93%E9%81%95%E3%81%88%E3%82%84%E3%81%99%E3%81%84%E3%81%AE%E3%81%A7%E3%80%81%E4%B8%AD%E5%BF%83%E5%B7%AE%E5%88%86%E3%81%AB%E3%82%88%E3%82%8B%E6%95%B0%E5%80%A4%E5%BE%AE%E5%88%86%E3%81%A8%0A%20%20%20%20%E7%AA%81%E3%81%8D%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A6%E7%A2%BA%E8%AA%8D%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_(data%2C%20np%2C%20residue)%3A%0A%20%20%20%20def%20gradient(x0%3A%20float%2C%20y0%3A%20float%2C%20r%3A%20float)%20-%3E%20np.ndarray%3A%0A%20%20%20%20%20%20%20%20dx%20%3D%20data%5B%3A%2C%200%5D%20-%20x0%0A%20%20%20%20%20%20%20%20dy%20%3D%20data%5B%3A%2C%201%5D%20-%20y0%0A%20%20%20%20%20%20%20%20squared%20%3D%20dx**2%20%2B%20dy**2%0A%20%20%20%20%20%20%20%20gap%20%3D%20squared%20%2F%20r**2%20-%201%0A%20%20%20%20%20%20%20%20return%20np.array(%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(2%20*%20gap%20*%20(-2%20*%20dx%20%2F%20r**2)).mean()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(2%20*%20gap%20*%20(-2%20*%20dy%20%2F%20r**2)).mean()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(2%20*%20gap%20*%20(-2%20*%20squared%20%2F%20r**3)).mean()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20_params%20%3D%20np.array(%5B0.5%2C%20-0.6%2C%209.0%5D)%0A%20%20%20%20_numeric%20%3D%20np.zeros(3)%0A%20%20%20%20_h%20%3D%201e-6%0A%20%20%20%20for%20_index%20in%20range(3)%3A%0A%20%20%20%20%20%20%20%20_plus%2C%20_minus%20%3D%20_params.copy()%2C%20_params.copy()%0A%20%20%20%20%20%20%20%20_plus%5B_index%5D%20%2B%3D%20_h%0A%20%20%20%20%20%20%20%20_minus%5B_index%5D%20-%3D%20_h%0A%20%20%20%20%20%20%20%20_numeric%5B_index%5D%20%3D%20(residue(*_plus)%20-%20residue(*_minus))%20%2F%20(2%20*%20_h)%0A%0A%20%20%20%20f%22%E8%A7%A3%E6%9E%90%E5%8B%BE%E9%85%8D%E3%81%A8%E6%95%B0%E5%80%A4%E5%BE%AE%E5%88%86%E3%81%AE%E6%9C%80%E5%A4%A7%E5%B7%AE%20%3D%20%7Bnp.abs(gradient(*_params)%20-%20_numeric).max()%3A.2e%7D%22%0A%20%20%20%20return%20(gradient%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%E6%AE%8B%E3%82%8B%E5%95%8F%E9%A1%8C%E3%81%AF%201%20%E6%AD%A9%E3%81%AE%E5%A4%A7%E3%81%8D%E3%81%95%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%E5%9B%BA%E5%AE%9A%E3%81%AE%E5%AD%A6%E7%BF%92%E7%8E%87%E3%81%A0%E3%81%A8%E3%80%81%E5%A4%A7%E3%81%8D%E3%81%99%E3%81%8E%E3%82%8C%E3%81%B0%E7%99%BA%E6%95%A3%E3%81%97%E3%80%81%0A%20%20%20%20%E5%B0%8F%E3%81%95%E3%81%99%E3%81%8E%E3%82%8C%E3%81%B0%E9%80%B2%E3%81%BE%E3%81%AA%E3%81%84%E3%80%82%E3%81%93%E3%81%93%E3%81%A7%E3%81%AF%E3%83%90%E3%83%83%E3%82%AF%E3%83%88%E3%83%A9%E3%83%83%E3%82%AD%E3%83%B3%E3%82%B0%E7%9B%B4%E7%B7%9A%E6%8E%A2%E7%B4%A2%E3%82%92%E4%BD%BF%E3%81%84%E3%80%81%0A%20%20%20%20Armijo%20%E6%9D%A1%E4%BB%B6%0A%20%20%20%20%24%24%0A%20%20%20%20f(%5Cvec%7Bp%7D-s%5Cnabla%20f)%5Cleq%20f(%5Cvec%7Bp%7D)-%5Calpha%20s%5ClVert%5Cnabla%20f%5CrVert%5E2%0A%20%20%20%20%24%24%0A%20%20%20%20%E3%82%92%E6%BA%80%E3%81%9F%E3%81%99%E3%81%BE%E3%81%A7%20step%20%24s%24%20%E3%82%92%20%24%5Cbeta%24%20%E5%80%8D%E3%81%AB%E7%B8%AE%E3%82%81%E3%82%8B%E3%80%82%E5%8D%81%E5%88%86%E5%B0%8F%E3%81%95%E3%81%84%20%24s%24%20%E3%81%A7%E3%81%AF%E5%BF%85%E3%81%9A%E6%88%90%E7%AB%8B%E3%81%99%E3%82%8B%E3%81%AE%E3%81%A7%E3%80%81%0A%20%20%20%20%E3%81%93%E3%81%AE%E6%8E%A2%E7%B4%A2%E3%81%AF%E6%9C%89%E9%99%90%E5%9B%9E%E3%81%A7%E7%B5%82%E3%82%8F%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%20residue)%3A%0A%20%20%20%20def%20back_tracking(%0A%20%20%20%20%20%20%20%20params%3A%20np.ndarray%2C%0A%20%20%20%20%20%20%20%20direction%3A%20np.ndarray%2C%0A%20%20%20%20%20%20%20%20alpha%3A%20float%20%3D%200.3%2C%0A%20%20%20%20%20%20%20%20beta%3A%20float%20%3D%200.5%2C%0A%20%20%20%20%20%20%20%20initial%3A%20float%20%3D%201.0%2C%0A%20%20%20%20)%20-%3E%20float%3A%0A%20%20%20%20%20%20%20%20%22%22%22Armijo%20%E6%9D%A1%E4%BB%B6%E3%82%92%E6%BA%80%E3%81%9F%E3%81%99%20step%20%E5%B9%85%E3%82%92%E8%BF%94%E3%81%99%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20step%20%3D%20initial%0A%20%20%20%20%20%20%20%20current%20%3D%20residue(*params)%0A%20%20%20%20%20%20%20%20slope%20%3D%20float(direction%20%40%20direction)%0A%20%20%20%20%20%20%20%20while%20residue(*(params%20-%20step%20*%20direction))%20%3E%20current%20-%20alpha%20*%20step%20*%20slope%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20step%20*%3D%20beta%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20step%20%3C%201e-12%3A%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%20step%0A%0A%20%20%20%20return%20(back_tracking%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%88%9D%E6%9C%9F%E5%80%A4%E3%82%92%E4%B8%AD%E5%BF%83%20%24(0.5%2C-0.6)%24%E3%83%BB%E5%8D%8A%E5%BE%84%20%249%24%20%E3%81%A8%E3%81%97%E3%81%A6%20200%20%E5%9B%9E%E5%8F%8D%E5%BE%A9%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_(back_tracking%2C%20gradient%2C%20np%2C%20residue)%3A%0A%20%20%20%20_params%20%3D%20np.array(%5B0.5%2C%20-0.6%2C%209.0%5D)%0A%20%20%20%20history%20%3D%20%5Bnp.append(_params%2C%20residue(*_params))%5D%0A%20%20%20%20for%20_step%20in%20range(200)%3A%0A%20%20%20%20%20%20%20%20_grad%20%3D%20gradient(*_params)%0A%20%20%20%20%20%20%20%20_params%20%3D%20_params%20-%20back_tracking(_params%2C%20_grad)%20*%20_grad%0A%20%20%20%20%20%20%20%20history.append(np.append(_params%2C%20residue(*_params)))%0A%20%20%20%20history%20%3D%20np.array(history)%0A%0A%20%20%20%20(%0A%20%20%20%20%20%20%20%20f%22%E6%8E%A8%E5%AE%9A%E5%80%A4%3A%20%E4%B8%AD%E5%BF%83%20(%7Bhistory%5B-1%2C%200%5D%3A.3f%7D%2C%20%7Bhistory%5B-1%2C%201%5D%3A.3f%7D)%2C%20%E5%8D%8A%E5%BE%84%20%7Bhistory%5B-1%2C%202%5D%3A.3f%7D%22%2C%0A%20%20%20%20%20%20%20%20%22%E7%9C%9F%E5%80%A4%3A%20%E4%B8%AD%E5%BF%83%20(0.1%2C%20-0.2)%2C%20%E5%8D%8A%E5%BE%84%2010%EF%BC%88%E5%8D%8A%E5%BE%84%E3%81%AB%E3%81%AF%E6%A8%99%E6%BA%96%E5%81%8F%E5%B7%AE%200.5%20%E3%81%AE%E3%81%B0%E3%82%89%E3%81%A4%E3%81%8D%E3%81%8C%E3%81%82%E3%82%8B%EF%BC%89%22%2C%0A%20%20%20%20%20%20%20%20f%22%E6%AE%8B%E5%B7%AE%20%7Bhistory%5B0%2C%203%5D%3A.4f%7D%20-%3E%20%7Bhistory%5B-1%2C%203%5D%3A.6f%7D%22%2C%0A%20%20%20%20)%0A%20%20%20%20return%20(history%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%B7%A6%E3%81%AF%E6%AE%8B%E5%B7%AE%E3%81%AE%E6%8E%A8%E7%A7%BB%EF%BC%88%E5%AF%BE%E6%95%B0%E8%BB%B8%EF%BC%89%E3%80%81%E5%8F%B3%E3%81%AF%E6%8E%A8%E5%AE%9A%E3%81%97%E3%81%9F%E5%86%86%E3%81%A8%E8%A6%B3%E6%B8%AC%E7%82%B9%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82%0A%20%20%20%20%E6%AE%8B%E5%B7%AE%E3%81%AF%E6%9C%80%E5%88%9D%E3%81%AE%E6%95%B0%E5%8D%81%E5%9B%9E%E3%81%A7%201%20%E6%A1%81%E4%BB%A5%E4%B8%8A%E8%90%BD%E3%81%A1%E3%80%81%E3%81%9D%E3%81%AE%E3%81%82%E3%81%A8%E3%81%AF%E5%B9%B3%E5%9D%A6%E3%81%AB%E3%81%AA%E3%82%8B%E3%80%82%E8%A6%B3%E6%B8%AC%E8%87%AA%E4%BD%93%E3%81%AB%0A%20%20%20%20%E5%8D%8A%E5%BE%84%E3%81%AE%E3%81%B0%E3%82%89%E3%81%A4%E3%81%8D%E3%81%8C%E3%81%82%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E6%AE%8B%E5%B7%AE%E3%81%AF%E3%82%BC%E3%83%AD%E3%81%AB%E3%81%AF%E3%81%AA%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_(data%2C%20history%2C%20np%2C%20plt)%3A%0A%20%20%20%20_fig%2C%20_axes%20%3D%20plt.subplots(1%2C%202%2C%20figsize%3D(9.6%2C%204.0)%2C%20dpi%3D100)%0A%0A%20%20%20%20_axes%5B0%5D.semilogy(history%5B%3A%2C%203%5D)%0A%20%20%20%20_axes%5B0%5D.set_xlabel(%22iteration%22)%0A%20%20%20%20_axes%5B0%5D.set_ylabel(%22residue%22)%0A%20%20%20%20_axes%5B0%5D.set_title(%22convergence%22)%0A%20%20%20%20_axes%5B0%5D.grid(alpha%3D0.3)%0A%0A%20%20%20%20_theta%20%3D%20np.linspace(0%2C%202%20*%20np.pi%2C%20200)%0A%20%20%20%20_x0%2C%20_y0%2C%20_r%20%3D%20history%5B-1%2C%20%3A3%5D%0A%20%20%20%20_axes%5B1%5D.scatter(data%5B%3A%2C%200%5D%2C%20data%5B%3A%2C%201%5D%2C%20s%3D12%2C%20label%3D%22observed%22)%0A%20%20%20%20_axes%5B1%5D.plot(_x0%20%2B%20_r%20*%20np.cos(_theta)%2C%20_y0%20%2B%20_r%20*%20np.sin(_theta)%2C%20color%3D%22crimson%22%2C%20label%3D%22fitted%22)%0A%20%20%20%20_axes%5B1%5D.set_aspect(%22equal%22)%0A%20%20%20%20_axes%5B1%5D.legend()%0A%20%20%20%20_axes%5B1%5D.set_title(%22fitted%20circle%22)%0A%0A%20%20%20%20_fig.tight_layout()%0A%20%20%20%20_fig%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
4409be4e823d8956a614f277408e2e53