2016-07-03 12 views
0

ステップ関数を使用してデータセットを適合させようとしています。しかし、それは動作しません。簡単にするために、ここで私がやろうとしていることがあります。2つの異なる関数を使用してデータセットを適合させる方法

私は一連のデータを持っています。 x = 0からx = yまで、曲線はx^2に従います。 x = yからx = 100までは0です。

私はyの値を持つように最適なフィットを見つけることを考えています。 NumPyブール配列インデックス割り当てでは、マスクが真である323の出力値に710の入力値を割り当てることはできません。

ここに私のコードです。私は各列に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 

ありがとうございます!

答えて

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