質問内容
・ウィキペディア「ガウス・ニュートン法」
https://ja.wikipedia.org/wiki/%E3%82%AC%E3%82%A6%E3%82%B9%E3%83%BB%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%88%E3%83%B3%E6%B3%95
こちらのサイトの例にありますガウスニュートン法を用いたモデルのフィッティングの再現をしています。小数点の表示を3桁以下にして表示したく「np.set_printoptions(precision=3)」とコードに入れておりますが、出力が小数点3桁以下とならず予想に反した表示となります。
数値自体は合っていると思われますが、出力を小数点3桁以下にするにはどうすればよろしいでしょうか?
コード
Python3
1# coding: utf-8 2import numpy as np 3import matplotlib.pyplot as plt 4 5theta_1 = 0.9 6theta_2 = 0.2 7 8x = [0.038,0.194,0.425,0.626,1.253,2.500,3.740] 9y = [0.050,0.127,0.094,0.2122,0.2729,0.2665,0.3317] 10 11def res1(a,b): 12 calcu3 = - a / (theta_2 + a) 13 return calcu3 14 15def res2(a,b): 16 calcu4 = (theta_1 * a) / ((theta_2 + a)**2) 17 return calcu4 18 19def res3(a,b): 20 calcu5 = b - (theta_1 * a) / (theta_2 + a) 21 return calcu5 22 23i = 0 24 25for i in range(0,10): 26 27 residu = np.array([[res3(x[0],y[0])],[res3(x[1],y[1])],[res3(x[2],y[2])],[res3(x[3],y[3])],[res3(x[4],y[4])],[res3(x[5],y[5])],[res3(x[6],y[6])]]) 28 29 jacobi_t = np.array([[res1(x[0],y[0]),res1(x[1],y[1]),res1(x[2],y[2]),res1(x[3],y[3]),res1(x[4],y[4]),res1(x[5],y[5]),res1(x[6],y[6])],[res2(x[0],y[0]),res2(x[1],y[1]),res2(x[2],y[2]),res2(x[3],y[3]),res2(x[4],y[4]),res2(x[5],y[5]),res2(x[6],y[6])]]) 30 jacobi = np.array([[res1(x[0],y[0]),res2(x[0],y[0])],[res1(x[1],y[1]),res2(x[1],y[1])],[res1(x[2],y[2]),res2(x[2],y[2])],[res1(x[3],y[3]),res2(x[3],y[3])],[res1(x[4],y[4]),res2(x[4],y[4])],[res1(x[5],y[5]),res2(x[5],y[5])],[res1(x[6],y[6]),res2(x[6],y[6])]]) 31 32 jacobi_mul = np.dot(jacobi_t,jacobi) 33 jacobi_invmul = np.linalg.inv(jacobi_mul) 34 35 delta_theta = -np.dot(np.dot(jacobi_invmul,jacobi_t),residu) 36 37 theta_1 = theta_1 + delta_theta[0,0] 38 theta_2 = theta_2 + delta_theta[1,0] 39 40 np.set_printoptions(precision=3) 41 42 print("theta_1[" + str(i) + "] = " + str(theta_1) + "\t") 43 print("theta_2[" + str(i) + "] = " + str(theta_2) + "\n") 44 45 i += 1
出力結果
theta_1[0] = 0.3326629279063379 theta_2[0] = 0.2601739065636697 theta_1[1] = 0.3428092548404625 theta_2[1] = 0.42607917994138833 theta_1[2] = 0.35777521550273894 theta_2[2] = 0.5295084359436374 theta_1[3] = 0.3614054587650916 theta_2[3] = 0.5536581025916869 theta_1[4] = 0.36180308278463424 theta_2[4] = 0.556072534220654 theta_1[5] = 0.36183442015991113 theta_2[5] = 0.5562524645285597 theta_1[6] = 0.3618366954234483 theta_2[6] = 0.5562654497238558 theta_1[7] = 0.3618368593026168 theta_2[7] = 0.5562663846290323 theta_1[8] = 0.3618368710998805 theta_2[8] = 0.5562664519286844 theta_1[9] = 0.36183687194910424 theta_2[9] = 0.556266456773227
試したこと
「np.set_printoptions(precision=3)」の書く位置が違うのかと思いまして、「for i in range(0,10):」の前や「import matplotlib.pyplot as plt」の次の行に書いてみたりしています。しかし、位置を変えても小数点が3桁以下となりません。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/28 23:22