最近感觉啥都不会了,忘光了
#coding:utf-8
def df(func,x):#求导
eps = 1.0e-4
return (func(x + eps) - func(x))/eps
def customFunc(x):
return pow(x,4) + 3 * pow(x,3) + 1.5 * pow(x, 2) - 4
def newton(x, p, m):
x0 = x
k = 0
while (k < m):
k += 1
if df(customFunc, x0) == 0.0:
return 0
x1 = x0 - customFunc(x0)/df(customFunc, x0)
if abs(x1-x0) < p or abs(customFunc(x1)) < p:
print x1
return 1
else:
x0 = x1
return 0
newton(2.0, 0.01, 100)
def linematch(xl,yl):
sumx = sum(xl)
sumy = sum(yl)
sumx2 = sum([ j*j for j in xl])
sumxy = sum([ t[0] * t[1] for t in zip(xl, yl) ])
ncount = len(xl)
b = (sumx2 * sumy - sumx * sumxy) / (ncount * sumx2 - sumx * sumx)
k = (ncount * sumxy - sumx * sumy) / (ncount * sumx2 - sumx * sumx)
print 'function is y = %sx + %s'%(k, b)
k1 = (sumy * sumx - sumxy * ncount) / (sumx * sumx - sumx2 * ncount)
b1 = (sumy - sumx * k1)/ncount
print 'k1 = %s, b1 = %s'%(k1, b1)
print '##################'
linematch([2,3,4,5], [1,2,3,4])
linematch([2,3,4,5, 7], [5, 7, 9, 11, 15])
linematch([2,3,4,5, 7, 9 , 11], [6, 9, 12 , 15 , 21, 27, 33])
公式推理:http://blog.csdn.net/ice_fire3/article/details/6709929
最小二乘法求多项式系数还没写出来,
2014.4.18ps:现在才知道最小二乘法的原理是统计里面的,基础不劳靠记公式总是记不住,理解之后整个就好推导出来