Python和科学计算认证群组  - 讨论区

标题:请教如何自定义个高阶多项式

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哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号