2015-10-15 3 views
0

Голый со мной, так как я очень новичок в кодировании и очень ценю помощь. У меня есть набор данных в виде матрицы 15x55 в отдельном файле, который я импортировать и тянуть данные с помощью этого кода:При попытке подгонки данных к экспоненциальной кривой в python я получаю странный набор ошибок

ScanNum = [] 

#Import the data 
data = loadtxt('FNScan40.txt') 

#Define columns 
ccd1= data[:,14] 
t= data[:,0] 

Я уверен в этой части кода, потому что я использовал его в другом коде и была эта работа. Затем я определил функцию, к которой я хотел подобрать данные.

def Kinetics(tk,A,B): 
f=A*(1.0-math.e**(-B*tk)) 
return f 

Где A и B - неизвестные коэффициенты. Затем я поместил данные x и y, которые у меня есть в массивы.

x = array([t]) 
y = array([ccd1]) 

До здесь я не уверен, что все правильно, это когда я на самом деле пытаюсь выполнить подгонку кривой, что у меня есть проблемы. Это остальная часть кода, что у меня есть:

popt, pcov = curve_fit(Kinetics, x, y, p0=None) 

print popt, pcov 

plt.figure() 
plt.plot(x, kinetics(x, *popt), label="Fitted Curve") 
plt.show() 

Когда я выполняю код, я получаю сообщение об ошибке: Неправильные вход: N = 2 не должна превышать M = 1. Я знаю, что N - количество точек данных, а M - количество начальных параметров. Я не уверен, как это исправить. Единственное, что я пытался попробовать, это установить мои собственные начальные параметры, поэтому в приведенном выше коде я определил p0 = [1,1] (так как у меня есть два параметра, которые я пытаюсь угадать, A и B.) Это привело только к ту же ошибку (неправильный вход: N = 2 не должен превышать M = 1), поэтому я попытался изменить количество «1», в которое я вложил. Если я перехожу через два, я просто получаю сообщение об ошибке: я пытался ввести слишком много аргументов в кинетику, что имеет смысл.

Я пробовал все, что мог придумать/найти в Интернете, безрезультатно. Если M - начальные параметры, почему не меняется число «1 в p0», измените то, что сообщает об ошибке как M? Что я могу сделать, чтобы исправить эту проблему?

ответ

0

Проблема, с которой я столкнулся, была в массивах. Я решил посмотреть на реальные массивы, чтобы узнать, не проблема. Когда я включал скобки вокруг 't' и 'ccd1', он задавал длину массива равным единице. Устранение скобок фиксировало эту проблему. В коде есть другие, несвязанные проблемы, которые должны быть легко решены.

Смежные вопросы