前提・実現したいこと
python
1import numpy as np 2import matplotlib.pyplot as plt 3data = np.loadtxt("springData.txt", delimiter=" ", skiprows=1) 4 5#ファイルの行数 6size = -1 7with open('springData.txt') as f: 8 for line in f: 9 size += 1 10 11# 最小二乗に基づく多項式の関数当てはめ(numpy) 12m = 1 # m次式 13G = np.array((m, m)) 14H = np.array((m, 1)) 15 16for i in range(m): 17 for j in range(m): 18 for k in range(size): 19 G[i][j] += (data[k][1]) ** (i + j) 20 H[i][0] += (data[k][1]**i)*data[k][0] 21 22X = np.linalg.solve(G, H) 23 24b = X[0] 25a = X[1] 26 27# 当てはめた直線をグラフに追加 28plt.plot(data[:, 1], a * data[:, 1] + b, label="predicted") 29# 散布図にラベルを設定 30plt.scatter(data[:, 1], data[:, 0], label="real") 31plt.title('Measured spring displacement') 32plt.xlabel('Mass (kilogram)') 33plt.ylabel('Distance(meter)') 34# 凡例の位置を指定 1=右上, 2=左上, 3=左下, 4=右下 35plt.legend(loc=2) 36plt.show() 37
pythonでm次多項式をあてはめにより正規方程式をたてて解を出しグラフを描くプログラムを作成しました。今回はm=1の状態で実装しようとしていますがmの値が任意で試行できるようなプログラムを作成したいです。
また読み込んでいるstringData.txtはこちらです。
txt
1Distance (m) Mass (kg) 20.0865 0.1 30.1015 0.15 40.1106 0.2 50.1279 0.25 60.1892 0.3 70.2695 0.35 80.2888 0.4 90.2425 0.45 100.3465 0.5 110.3225 0.55 120.3764 0.6 130.4263 0.65 140.4562 0.7 150.4502 0.75 160.4499 0.8 170.4534 0.85 180.4416 0.9 190.4304 0.95 200.437 1.0
発生している問題・エラーメッセージ
Traceback (most recent call last): File "x.py", line 17, in <module> G[i][j] += (data[k][1]) ** (i + j) IndexError: invalid index to scalar variable.
試したこと
エラーメッセージから行列の操作に問題があると判断しましたが問題のコードは行列の要素であって行列そのものではないと考え進めなくなってしまいました。
補足情報(FW/ツールのバージョンなど)
python3.7.3
Anaconda3
Windows10
VSCode
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。