如何使用两个不同的函数拟合一组数据

时间:2016-07-03 16:37:02

标签: python

我试图用步进函数拟合一组数据。但它不起作用。为了简单起见,这就是我想要做的。

我有一组数据。从x = 0到x = y,曲线遵循x ^ 2。从x = y到x = 100,它是0.

我的想法是找到最合适的,以便我有一个y值。它不起作用,因为它说:NumPy布尔数组索引赋值不能将710输入值分配给掩码为true的323输出值。

这是我的代码。我在每列中有710个值。

import numpy as np
from pylab import *

from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

data = np.genfromtxt('myfile.txt',delimiter='\t')
xdata = data[:,0]
ydata = data[:,1]
x = np.linspace(0,230,710)

def func(x,a,y):
    c=np.zeros(710)
    c[x<y] = a*(x-y)**2
    c[x>y] = 0
    return c

popt, pcov = curve_fit(func, xdata, ydata, p0 = [0.0001,50])

print a
print t

谢谢!

1 个答案:

答案 0 :(得分:0)

你得到的例外是因为c[x<y] = a*(x-y)**2。左侧有323个值,右侧有710个值。这是因为条件x < y也应该在右侧:

import numpy as np
from scipy.optimize import curve_fit

a = 5
y = 47

xdata = np.linspace(0, 100, 710)
ydata = a*xdata**2
ydata[xdata > y] = 0

def func(x, a, y):
    c = np.zeros(710)
    c[x < y] = a*(x[x < y]**2)
    c[x >= y] = 0
    return c

popt, pcov = curve_fit(func, xdata, ydata, p0 = [6, 46.5])

print popt