前提・実現したいこと
最小二乗法を用いて直線フィッティングしようとしていますがエラーが出て困っています。
発生している問題・エラーメッセージ
runfile('C:/Users/賢斗/Desktop/project/analysis/DAT2.py', wdir='C:/Users/賢斗/Desktop/project/analysis')
-32.42000000000001
-101.46000000000001
230.37
Traceback (most recent call last):
File "C:\Users\賢斗\Desktop\project\analysis\DAT2.py", line 42, in <module>
Sxx = (np.sum(x2*isig2))
TypeError: can't multiply sequence by non-int of type 'list'
該当のソースコード
import numpy as np
import matplotlib.pyplot as plt
def sq(list):
ret = []
for i in list:
ret.append(i**2)
return ret
def inv(list):
rrr = []
for i in list:
rrr.append(i**(-1))
return rrr
x = np.array([-4.06,3.91,-5.70,-9.76,6.90,-14.09,-13.31,4.37,5.31,-13.25,7.26])
y = np.array([-44.37,31.40,-11.56,-37.03,25.92,-56.86,-57.54,51.62,25.66,-43.26,14.56])
sig = np.array([25.19,23.98,19.81,25.35,20.72,14.31,28.80,25.27,15.18,18.39,13.37])
print(np.sum(x))
print(np.sum(y))
print(np.sum(sig))
sig2 = sq(sig)
isig2 = inv(sig2)
x2 = sq(x)
S1 = (np.sum(isig2))
Sx = (np.sum(x*(isig2)))
Sxx = (np.sum(x2isig2))
Sy = (np.sum(y(isig2)))
Sxy = (np.sum((xy)(isig2)))
Sx2 = sq(Sx)
delta = ((S1*Sxx)-(Sx2))
idelta = inv(delta)
print(S1)
print(Sx)
print(Sxx)
print(Sy)
print(Sxy)
print(delta)
m = ((S1Sxy)-(SxSy))/idelta
c = ((SySxx)-(SxSxy))/idelta
z = sq(y-((m*x)+c))
kai = (np.sum(zisig2))
COV = -Sxidelta
print(m)
print(c)
print(COV)
print(kai)
f = np.arange(-20,20,0.1)
d=m*f+c
plt.scatter(x,y)
plt.plot(f,d)
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。