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

标题:恩。。还是一个基本的问题。。

2010年12月09日 星期四 08:04

x,y为1*6数组。

现在要将(x0,y0),(x1,y1)...(x5,y5)分别(共6次运算)去除,对其余5对数经行

leastsq运算,并以其余一组数为验证组。应该如何运用for语句?

2010年12月09日 星期四 08:20

请先把数据贴出来看看,然后说明一下具体的运算顺序。

分别去除是指什么?用什么函数对数据进行leastsq拟合?是直线么?

2010年12月09日 星期四 08:40

def residual(p):
    for i in range(0,len(x)-1):
        x1 = x[x!=x[i]]
        y1 = y[y!=y[i]]
        k, b, c  = p
        return y-(k*x+b)**2-c

大概就是这个意思。关键是把这个for放在哪?

我最后要对比6次插值,然后plot出来做对比。

2010年12月09日 星期四 09:12

# -*- coding: utf-8 -*-

import numpy as np

from scipy.optimize import leastsq

 

### 测试用数据 ###

k, b, c = 0.5, 0.2, 0.3

x = np.array([0.0, 0.1, 0.2, 0.3, 0.4, 0.5])

y = (k*x+b)**2+c + np.random.normal(size=len(x))*0.01

 

### 计算误差 ###

def residual(p, x, y):

    k, b, c = p

    return y - ((k*x+b)**2+c)

 

### 拟合 ###

def func(x, y, i):

    """"从x,y中删除第i个元素之后进行拟合,并用第i个元素计算误差"""

    x0, y0 = x[i], y[i]

    xp = np.delete(x, i)

    yp = np.delete(y, i)

    plsq = leastsq(residual, [1,1,1], args=(xp, yp))

    return plsq[0], residual(plsq[0], x0, y0)

 

### 绘图 ###

import pylab as pl

px = np.arange(0,1,0.01)    

pl.plot(x, y, "o")

for i in xrange(len(x)):

    p, error = func(x, y, i)

    k,b,c = p

    py = (k*px+b)**2+c

    pl.plot(px, py, label="%d:%f" % (i, error))

 

pl.legend()

pl.show()  

2010年12月09日 星期四 09:30

这里贴程序不太方便,我放到下面的地址了:

http://hyry.dip.jp/code.py?id=104

2010年12月09日 星期四 09:39

谢谢张老师!

还是没有很好的把握住问题,才会出现如此低级的失误。。

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号