質問編集履歴
4
解決案1のコードを載せました
test
CHANGED
File without changes
|
test
CHANGED
@@ -88,15 +88,109 @@
|
|
88
88
|
|
89
89
|
解決案として、
|
90
90
|
|
91
|
-
|
91
|
+
1. 測定値を線形補間して2点間の直線の式を求め、数値計算のx座標の値を代入->残差を計算する
|
92
|
-
|
92
|
+
|
93
|
-
|
93
|
+
2. 数値計算の値を何らかの多変数関数として表現し、その関数を用いてパラメータフィッティングを行う
|
94
|
+
|
94
|
-
|
95
|
+
~~
|
95
|
-
|
96
|
-
|
96
|
+
|
97
|
-
といったことを考えているのですが、このような方針がそもそも適切なのか、どのように実装するのが良いのか方針が立っておりません。
|
97
|
+
といったことを考えているのですが、このような方針がそもそも適切なのか、どのように実装するのが良いのか方針が立っておりません。~~
|
98
|
+
|
98
|
-
|
99
|
+
1で示した方法についてコードを書いてみましたが、もう少しうまいやり方があるような気がするのでアドバイスを頂けると幸いです。
|
100
|
+
|
101
|
+
|
102
|
+
|
99
|
-
|
103
|
+
```python
|
104
|
+
|
105
|
+
# 直線の式y = a * x + bのa, bを計算してparamsとして出力
|
106
|
+
|
107
|
+
def calc_param(result):
|
108
|
+
|
109
|
+
dx = 1 / len(result)
|
110
|
+
|
111
|
+
result_distance = np.linspace(0,1,len(result),endpoint=True) # x座標を0-1に規格化している
|
112
|
+
|
113
|
+
params = np.zeros([len(result)-1, 2])
|
114
|
+
|
115
|
+
for j in range(len(result)-1):
|
116
|
+
|
117
|
+
a = (result[j+1] - result[j]) / dx
|
118
|
+
|
119
|
+
b = result[j] - j * dx
|
120
|
+
|
121
|
+
params[j] = [a,b]
|
122
|
+
|
123
|
+
return params, result_x
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
def main():
|
128
|
+
|
129
|
+
df_result = pd.read_csv("result.csv", index_col=0).values
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
data_value = [37, 24, 59,..., 43]
|
134
|
+
|
135
|
+
data_x = [0, 0.74, 1.08,..., 19.39]
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
# x座標の規格化
|
140
|
+
|
141
|
+
data_x = data_x / max(data_x)
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
# 計算
|
146
|
+
|
147
|
+
list_reses = []
|
148
|
+
|
149
|
+
for i in range(len(df_result)):
|
150
|
+
|
151
|
+
result = df_result[i]
|
152
|
+
|
153
|
+
params, result_x = calc_param(result)
|
154
|
+
|
155
|
+
reses = 0
|
156
|
+
|
157
|
+
#print(len(result_x))
|
158
|
+
|
159
|
+
# 数値計算のx座標を順番に入力
|
160
|
+
|
161
|
+
for m in range(len(result_x)-1):
|
162
|
+
|
163
|
+
# 分析値のx座標を順番に入力
|
164
|
+
|
165
|
+
for n in range(len(data_x)):
|
166
|
+
|
167
|
+
# もし範囲内にあれば内挿して残差二乗を計算
|
168
|
+
|
169
|
+
# 末尾は規格化して1なのでresult_x[m+1]==data_x[n]
|
170
|
+
|
171
|
+
if ( result_x[m] <= data_x[n] < result_x[m+1] ) \
|
172
|
+
|
173
|
+
or (result_x[m+1] == data_x[n]):
|
174
|
+
|
175
|
+
f = params[m,0] * data_x[n] + params[m,1]
|
176
|
+
|
177
|
+
res = (f - data_value[n]) ** 2
|
178
|
+
|
179
|
+
reses += res
|
180
|
+
|
181
|
+
else:
|
182
|
+
|
183
|
+
pass
|
184
|
+
|
185
|
+
list_reses.append(reses)
|
186
|
+
|
187
|
+
print(list_reses.index(min(list_reses)))
|
188
|
+
|
189
|
+
if __name__ == '__main__':
|
190
|
+
|
191
|
+
main()
|
192
|
+
|
193
|
+
```
|
100
194
|
|
101
195
|
|
102
196
|
|
3
前提の説明を補いました
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
研究用途として、数値計算のプログラムを作成しています。
|
4
4
|
|
5
|
-
数値計算の結果として、下の表のようにt=0, 1, 2,..., iごとの計算結果yのリストが格納された`result.csv`ファイルが出力されています。
|
5
|
+
解析的には解くことができない偏微分方程式の数値計算の結果として、下の表のように時間ステップt=0, 1, 2,..., iごとの計算結果yのリストが格納された`result.csv`ファイルが出力されています。
|
6
6
|
|
7
7
|
|
8
8
|
|
2
解決案について修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -86,9 +86,15 @@
|
|
86
86
|
|
87
87
|
|
88
88
|
|
89
|
-
解決案として、
|
89
|
+
解決案として、
|
90
90
|
|
91
|
+
- 測定値を線形補間して2点間の直線の式を求め、数値計算のx座標の値を代入->残差を計算する
|
92
|
+
|
93
|
+
- 数値計算の値を何らかの多変数関数として表現し、その関数を用いてパラメータフィッティングを行う
|
94
|
+
|
95
|
+
|
96
|
+
|
91
|
-
とい
|
97
|
+
といったことを考えているのですが、このような方針がそもそも適切なのか、どのように実装するのが良いのか方針が立っておりません。
|
92
98
|
|
93
99
|
|
94
100
|
|
1
リンクを追加しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -78,9 +78,15 @@
|
|
78
78
|
|
79
79
|
### 試したこと
|
80
80
|
|
81
|
-
「パラメータフィッティング python」等で検索しましたが、フィッティングする関数が予め与えられている場合が
|
81
|
+
「パラメータフィッティング python」等で検索しましたが、フィッティングする関数が予め与えられている場合がヒットしました。
|
82
82
|
|
83
|
+
[補間やカーブフィッティングなどの最適化](https://qiita.com/maskot1977/items/256481012dcbbd41a49f)
|
84
|
+
|
85
|
+
しかし、数値計算の結果のような離散値をどのように扱うべきか分かりませんでした。
|
86
|
+
|
87
|
+
|
88
|
+
|
83
|
-
測定値を線形補間して2点間の直線の式を求め、数値計算のx座標の値を代入->残差を計算する
|
89
|
+
解決案として、測定値を線形補間して2点間の直線の式を求め、数値計算のx座標の値を代入->残差を計算する
|
84
90
|
|
85
91
|
ということができないか考えているのですが、このような方針がそもそも適切なのか、どのように実装するのが良いのか方針が立っておりません。
|
86
92
|
|