#-*- coding:utf-8 -*-
from numpy import *
from pylab import *
#例題4.5
x=[-1,0,0,1]
y=[0,-2,-1,0]

#当てはめる式を二次関数とするax^2+bx+c
def g(A,B):
	A_11=[]
	for i in A:
		A_11.append(i*i*i*i)
	x_11=sum(A_11)
	A_12=[]
	for i in A:
		A_12.append(i*i*i)
	x_12=sum(A_12)
	x_21=x_12
	x_13=np.dot(A,A)
	x_22=x_13
	x_31=x_22
	x_23=sum(A)
	x_32=x_23
	x_33=len(A)
	b_1=dot(A_12,B)
	b_2=dot(A,B)
	b_3=sum(B)
	J=matrix([[x_11,x_12,x_13],[x_21,x_22,x_23],[x_31,x_32,x_33]])
	K=matrix([[b_1],[b_2],[b_3]])
	L=dot(J.I,K)
	return L[0],L[1],L[2]

def main():
	a,b,c=g(x,y)
	plot(x,y,'r*')
	xlist1=array(linspace(-2,2,1000))
	xlist2=matrix(xlist1**2)
	xlist1=matrix(xlist1)
	ylist=a*xlist2+b*xlist1+c
	plot(xlist1,ylist,'b+')
	show()

if __name__=="__main__":
	main()