J'ai un problème avec l'utilisation de la fonction leastsq. Voilà, je veux fitter une cuboque à mes données (deux vecteurs de longueur égale). Je donne le code :
def cubique(p, y, x):
a,b,c,d = p
int = a*x**3 + b*x**2 + c*x + d
err = y - int
return err
def fitDiff(y, x):
# first guess for vector p
p0=[427.4, -2091.0, 3400.0, -1836.0]
res = leastsq(cubique, p0, args=(y,x))
p,e = res
if e!=1:
return None
print p
return p
et la commande
fitDiff(difference, pos_spectrum)
(dans mon main) me renvoie ceci (j'ai bien vérifé que les vecteurs en argument étaient corrects) :
Traceback (most recent call last):
File "/home/jqueyrel/dr/wave_test/lambda_check.py", line 340, in <module>
main(data_file,skyfile,k)
File "/home/jqueyrel/dr/wave_test/lambda_check.py", line 83, in main
po=fitDiff(difference,pos_spectrum)
File "/home/jqueyrel/dr/wave_test/lambda_check.py", line 113, in fitDiff
res = leastsq(cubique, p0, args=(y,x))
File "/usr/lib64/python2.5/site-packages/scipy/optimize/minpack.py", line 264, in leastsq
m = check_func(func,x0,args,n)[0]
File "/usr/lib64/python2.5/site-packages/scipy/optimize/minpack.py", line 11, in check_func
res = atleast_1d(thefunc(*((x0[:numinputs],)+args)))
File "/home/jqueyrel/dr/wave_test/lambda_check.py", line 104, in cubique
int = a*x**3 + b*x**2 + c*x + d
TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'
Je vois pas pourquoi.
Merci pour voitre aide si vous avez une idée (je suis débutant en Python)