2011年09月10日 星期六 00:58
def make_polys(n):
p = lambda x: 1
polys = [p]
for i in range(n):
polys.append(lambda x: polys[i](x)*x)
return polys
哪位能帮忙修改下?
2011年09月10日 星期六 06:47
看不懂这个程序要做什么。请详细描述此程序的功能。
2011年09月11日 星期日 18:38
就是想实现自己定义一个多项式函数。
2011年09月11日 星期日 19:30
用numpy.polyval可以计算多项式的值,不需要自己编程实现。
2011年09月12日 星期一 16:15
numpy.polyval 我知道这个函数,但是我想要的是多项式函数不是多项式的值:
p[0]*x**(N-1) + p[1]*x**(N-2) + ... + p[N-2]*x + p[N-1]
用自定义的 多项式 乘或卷积其他函数。
2011年09月12日 星期一 20:01
import numpy as np
from scipy.optimize import leastsq
import pylab as pl
def func(x, p):
A, k, theta = p
return A*np.sin(2*np.pi*k*x+theta)
def residuals(p, y, x):
return y - func(x, p)
x = np.linspace(-3*np.pi, 3*np.pi, 114)
A, k, theta = 10, 0.34, np.pi/6
y0 = func(x, [A, k, theta])
y1 = data # 试验数据见最后
p0 = [7, 0.2, 0]
plsq = leastsq(residuals, p0, args=(y1, x))
pl.figure()
pl.plot(x, y1, label=u"带噪声的实验数据")
pl.plot(x, func(x, plsq[0]), label=u"拟合数据")
pl.legend()
pl.show()
#*********************************************************************
data = [2.75639
3.97165
4.72495
5.31081
5.68947
6.08332
6.23813
5.48331
4.31399
2.28694
0.36045
-2.52302
-5.45316
-7.94016
-8.46374
-8.52871
-7.84455
-7.44377
-5.96844
-5.11487
-3.65623
-2.46373
-1.27709
0.12462
2.26017
3.87067
4.89751
6.20883
6.88498
6.23701
4.69433
3.51443
2.5816
0.96891
-1.01085
-2.51547
-3.23179
-4.5866
-6.21946
-7.34243
-8.34983
-9.43245
-10.41272
-10.3108
-9.10867
-7.70023
-5.95046
-4.15056
-2.55721
-1.19178
0.01031
1.16028
2.34649
3.87504
5.50016
6.9346
9.02992
10.53671
10.03473
8.20291
6.37939
4.73132
2.65467
0.72397
-0.70808
-1.35105
-1.33728
-1.73245
-2.45617
-3.60272
-4.7017
-6.61886
-7.88985
-7.59211
-6.64272
-5.90925
-4.99971
-3.22331
-0.62722
0.99687
1.29258
2.71908
4.3571
4.83579
5.17987
6.20811
8.12223
8.56313
7.67699
6.83747
5.04405
2.54342
-0.25406
-2.94645
-4.73459
-6.07936
-7.15068
-7.31689
-7.28349
-7.60032
-6.76688
-6.90558
-5.25344
-2.57442
-0.33886
1.58355
3.92314
5.79057
6.19411
6.11486
6.02074
5.3364
4.32001
4.00096
]
2011年09月12日 星期一 20:10
用np.polyval可以计算多项式函数的值,当然也可以用它定义多项式函数。例如:
import numpy as np
import pylab as pl
def poly(x):
return np.polyval([1,2,1,2], x)
x = np.linspace(-3, 3, 100)
pl.plot(x, poly(x))
pl.show()
另外,你贴那个正弦波拟合的例子是要做多项式拟合吗?如果做多项式拟合的话,可以直接用np.polyfit()。
2011年09月12日 星期一 20:44
在以上代码中单纯的sine函数拟合数据data,效果不是很好,所以想用sine和多项式的卷积拟合data,请教如何实现2个函数的卷积来拟合data,谢谢!
2011年09月12日 星期一 21:13
卷积就是用np.convolve()计算。因此分别算出正弦数据和多项式数据,然后卷积即可。
2011年09月12日 星期一 21:24
不过这种波形不应该用卷积函数拟合,可能用多个频率不同的正弦波拟合更好。
a1 * sin(k*x + p1) + a2 * sin(2*k*x + p2) + ...
Zeuux © 2024
京ICP备05028076号