Je voudrais faire un ajustement global d'un ensemble de données. l'équation a 5 paramètres (r1
r2
dw
pop
kex
). Si je fais un ajustement individuel, je vais avoir ces paramètres pour un fichier d'entrée 1 et c'est ok, je peux le faire. Mais quand j'essaie de faire un ajustement global, j'ai beaucoup de problèmes. En fait, si je veux utiliser 2 fichier d'entrée et je suppose que je veux les partager pop
et kex
je vais finir avec 8 paramètres (r11
r21
r12
r22
dw1
dw2
pop
kex
) avec 3 Je vais avoir 11 paramètres et ainsi de suite ...Modifier le nombre de paramètres dans une fonction et dans le moindre carré (ajustement global)
J'ai essayé de faire une boucle changer chaque fois que la valeur des paramètres de cette façon
def fit_function(r1[i], r2[i], kex, pop, dw[i]):
return (complicated function)
def residuals(p, x, y, z, err):
r1, r2, kex, pop, dw = p
return (y - fit_function(r1, r2, kex, pop, dw))/err
je commence avec le moins carré:
kex = 1311
pop = 0.025
dw = [-300,500,700,650]
while i < len(r1):
p0 = [r1[i], r2[i], kex, pop, dw[i]]
plsq = leastsq(residuals, p0, args=(x, y, z, err),
full_output = True,
xtol = 1e-15,
ftol = 1e-15,
factor = 1) #check in function
pres, cov_x, infodict, mesg, ier = plsq
print pres[0], pres[1], pres[2], pres[3], pres[4]
Le problème est que je voudrais adapter tous les paramètres en même temps mais je ne sais pas comment le faire. De cette façon, je suis raccord r11
r21
dw1
k
et pop
la première fois, puis r12
r22
dw2
k
et pop
en même temps ....
Je ne maintenant pas chaud pour résoudre ce .... Toute suggestion ? Merci
import numpy as np
import scipy
from scipy.optimize import leastsq, fmin_tnc
from numpy import sin, cos, arctan, pi, sqrt
from numpy.random import standard_normal
import sys
import scipy.stats
import os
import time
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
n=(input('how many residues?'))
pathInput='/Users/luca/Desktop/GLOBAL FITTING/global fitting/input'
pathOutput='/Users/luca/Desktop/GLOBAL FITTING/global fitting/output'
l=os.listdir(pathInput)
finalInput=pathOutput+"/mergedInput.txt"
out=open(finalInput,'w')
out1=open(pathOutput+"/inputFilenames.txt",'w')
r1 = [2.25 ,3, 2, 4]
r2 = [ 24.62, 30, 20, 25]
EF = 1
data = np.genfromtxt(datafile_name)
x = data[:,0]
y = data[:,1]
err = data[:,2]*EF
z = data[:,3]
kex = 1311
pop = 0.025
dw = [-300,500,700,650]
i=0
while i < len(r1):
p0 = [r1[i], r2[i], kex, pop, dw[i]]
plsq = leastsq(residuals, p0, args=(x, y, z, err),
full_output = True,
xtol = 1e-15,
ftol = 1e-15,
factor = 1)
pres, cov_x, infodict, mesg, ier = plsq
print pres[0], pres[1], pres[2], pres[3], pres[4]
i=i+1
Votre code est incomplet, et il est difficile de comprendre votre problème – Elazar
quelles devraient être les arguments de la fonction leastsq? –
devrait être r11 r21 r21 r22 et ainsi de suite ... Je voudrais choisir le nombre de paramètre depuis le début ... –