質問編集履歴
6
指摘点の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -37,7 +37,6 @@
|
|
37
37
|
#np.meshgridで格子座標を生成し、x, yの二次元ガウスの積分値の掛け算を網羅する
|
38
38
|
mesh_x, mesh_y = np.meshgrid(diff_x, diff_y)
|
39
39
|
np_integ = (height * mesh_x * mesh_y + constant).ravel()
|
40
|
-
np_integ = np_integ.ravel()
|
41
40
|
return np_integ
|
42
41
|
|
43
42
|
#実測値 ― 計算値から最小二乗法を行う
|
5
グラフの削除
title
CHANGED
File without changes
|
body
CHANGED
@@ -77,7 +77,4 @@
|
|
77
77
|
sigma:0.31
|
78
78
|
center_x:-0.41
|
79
79
|
center_y:0.01
|
80
|
-
constant:304.71
|
80
|
+
constant:304.71
|
81
|
-
|
82
|
-
fittingしたパラメータでグラフを作成しました(↓↓↓)
|
83
|
-

|
4
指摘箇所修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -7,13 +7,18 @@
|
|
7
7
|
よって処理速度の向上を目標としているのですが、良い方法が見つからないため、詳しい方がおりましたらご指摘していただければ幸いです。
|
8
8
|
|
9
9
|
|
10
|
+
修正後のプログラム
|
10
11
|
```python
|
11
12
|
import time
|
12
13
|
import numpy as np
|
13
14
|
from scipy import optimize
|
14
|
-
from scipy import integrate
|
15
15
|
from sympy import *
|
16
16
|
|
17
|
+
a = Symbol('a')
|
18
|
+
f = 1/sqrt(2)*exp(-(a**2/2))
|
19
|
+
F = integrate(f, a)
|
20
|
+
func_gauss = lambdify(a, F)
|
21
|
+
|
17
22
|
#二次元ガウスの積分
|
18
23
|
def integ_gaussian(param, x_range, y_range):
|
19
24
|
height = param[0]
|
@@ -21,18 +26,17 @@
|
|
21
26
|
cen_x = param[2]
|
22
27
|
cen_y = param[3]
|
23
28
|
constant = param[4]
|
24
|
-
a = Symbol('a')
|
25
|
-
f = 1/sqrt(2)*exp(-(a**2/2))
|
26
|
-
F = integrate(f, a)
|
27
|
-
#func_gaussで不定積分を定義する
|
28
|
-
func_gauss = lambdify(a, F)
|
29
29
|
#x_list, y_listに範囲内の不定積分を格納する
|
30
30
|
#積分する回数を減らすことができる
|
31
31
|
x_list = [func_gauss((x-cen_x)/sigma) for x in x_range]
|
32
32
|
y_list = [func_gauss((y-cen_y)/sigma) for y in y_range]
|
33
|
-
|
33
|
+
#np.diffは前後の差を求める
|
34
|
-
#
|
34
|
+
#二次元ガウスの積分値が求まる
|
35
|
-
|
35
|
+
diff_x = np.diff(x_list)
|
36
|
+
diff_y = np.diff(y_list)
|
37
|
+
#np.meshgridで格子座標を生成し、x, yの二次元ガウスの積分値の掛け算を網羅する
|
38
|
+
mesh_x, mesh_y = np.meshgrid(diff_x, diff_y)
|
39
|
+
np_integ = (height * mesh_x * mesh_y + constant).ravel()
|
36
40
|
np_integ = np_integ.ravel()
|
37
41
|
return np_integ
|
38
42
|
|
@@ -60,20 +64,20 @@
|
|
60
64
|
#optimised_param_2Dにfitting結果のパラメータが格納される
|
61
65
|
#optimised_param_2Dの所要時間を記録する。
|
62
66
|
time_1 = time.time()
|
63
|
-
optimised_param_2D = optimize.leastsq(residuals_2D, param_2D, args = (actual_data, np_range, np_range, ftol=1.49012e-1, xtol=1.49012e-1, gtol=1.49012e-1, maxfev=
|
67
|
+
optimised_param_2D = optimize.leastsq(residuals_2D, param_2D, args = (actual_data, np_range, np_range, ftol=1.49012e-1, xtol=1.49012e-1, gtol=1.49012e-1, maxfev=40))
|
64
68
|
time_2 =time.time()
|
65
69
|
print(time_2-time_1)
|
66
70
|
```
|
67
71
|
|
68
72
|
処理時間
|
69
|
-
time_2 - time_1 =
|
73
|
+
time_2 - time_1 = 0.007936954498291016
|
70
74
|
|
71
75
|
fitting結果
|
72
|
-
height:1943.
|
76
|
+
height:1943.76
|
73
77
|
sigma:0.31
|
78
|
+
center_x:-0.41
|
74
|
-
|
79
|
+
center_y:0.01
|
75
|
-
center_y:-0.42
|
76
|
-
constant:304.
|
80
|
+
constant:304.71
|
77
81
|
|
78
82
|
fittingしたパラメータでグラフを作成しました(↓↓↓)
|
79
83
|

|
3
指摘を参考に変更を加えた
title
CHANGED
File without changes
|
body
CHANGED
@@ -28,18 +28,10 @@
|
|
28
28
|
func_gauss = lambdify(a, F)
|
29
29
|
#x_list, y_listに範囲内の不定積分を格納する
|
30
30
|
#積分する回数を減らすことができる
|
31
|
-
x_list = []
|
32
|
-
y_list = []
|
33
|
-
for x in x_range:
|
34
|
-
|
31
|
+
x_list = [func_gauss((x-cen_x)/sigma) for x in x_range]
|
35
|
-
for y in y_range:
|
36
|
-
|
32
|
+
y_list = [func_gauss((y-cen_y)/sigma) for y in y_range]
|
37
|
-
integ_list = []
|
33
|
+
integ_list = [height * (x_list[i+1] - x_list[i]) * (y_list[j+1] - y_list[j]) + constant for i in range(len(x_list)-1) for j in range(len(y_list)-1)]
|
38
34
|
#不定積分に積分したい範囲を代入して積分値を求める
|
39
|
-
for i in range(len(x_list)-1):
|
40
|
-
for j in range(len(y_list)-1):
|
41
|
-
integ_result = height * (x_list[i+1] - x_list[i]) * (y_list[j+1] - y_list[j]) + constant
|
42
|
-
integ_list.append(integ_result)
|
43
35
|
np_integ = np.array(integ_list)
|
44
36
|
np_integ = np_integ.ravel()
|
45
37
|
return np_integ
|
@@ -68,7 +60,7 @@
|
|
68
60
|
#optimised_param_2Dにfitting結果のパラメータが格納される
|
69
61
|
#optimised_param_2Dの所要時間を記録する。
|
70
62
|
time_1 = time.time()
|
71
|
-
optimised_param_2D = optimize.leastsq(residuals_2D, param_2D, args = (actual_data, np_range, np_range))
|
63
|
+
optimised_param_2D = optimize.leastsq(residuals_2D, param_2D, args = (actual_data, np_range, np_range, ftol=1.49012e-1, xtol=1.49012e-1, gtol=1.49012e-1, maxfev=4、))
|
72
64
|
time_2 =time.time()
|
73
65
|
print(time_2-time_1)
|
74
66
|
```
|
2
文章の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -83,5 +83,5 @@
|
|
83
83
|
center_y:-0.42
|
84
84
|
constant:304.8
|
85
85
|
|
86
|
-
fittingしたパラメータでグラフを作成した
|
86
|
+
fittingしたパラメータでグラフを作成しました(↓↓↓)
|
87
87
|

|
1
初心者マーク、説明の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -82,4 +82,6 @@
|
|
82
82
|
center_x:0.01
|
83
83
|
center_y:-0.42
|
84
84
|
constant:304.8
|
85
|
+
|
86
|
+
fittingしたパラメータでグラフを作成した
|
85
87
|

|