直線当てはめ-出力誤差

出力誤差モデル

 y_\alpha = ax_\alpha + b + \sigma_\alpha

#-*- coding:utf-8 -*-
from scipy import stats
import numpy as np
from pylab import *
u=0 #期待値を0と置く

def g(A,B): #正規方程式を解く
	x_11=np.dot(A,A)
	x_12=sum(A)
	x_21=sum(A)
	x_22=len(A)
	y_11=np.dot(A,B)
	y_21=sum(B)
	A=matrix([[x_11,x_12],[x_21,x_22]])
	b=matrix([[y_11],[y_21]])
	C=dot(A.I,b)
	return C[0],C[1]

if __name__=="__main__":
	print "分散の値を入力してください。"
	v=input() #分散を1と置く
	xlist=np.linspace(-1,1,100)
	print "パラメータaの値を入力してください。"
	a=input()
	print "パラメータbの値を入力してください。"
	b=input()

	wlist=a*xlist+b
	plot(xlist,wlist,)

	ylist=[]
	for i in xlist:
		ylist.append(a*i+b+stats.norm.rvs(u,v))

	a1,b1=g(xlist,ylist)
	ylist=matrix(ylist)
	xlist=matrix(xlist)
	zlist=a1[0]*xlist+b1[0]
	plot(xlist,ylist,'r-*')
	plot(xlist,zlist,'g*')
	show()