Bonjour à vous,
Je vous explique mon problème, je dois caractériser la loi de comportement d'un acier. J'ai réalisé divers essais expérimentaux et j'ai gardé 3 jeux de paramètres (3 essais à divers vitesses de plastifications).
J'utilise une fonction de type Johnson-Cooke. (Fonction à évaluer de 5 paramètres)
Maintenant, je dois optimiser tout cela. Ainsi, j'utilise la fonction leastsq qui utilise un algorithme de Levenberg Marquardt.
Le but est d'avoir les mêmes paramètres de sortie pour les 3 fonctions à évaluer. Je somme mes 3 fonctions cout mais une erreur apparaît...
Voila le code:
Et l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 #Importation des différents modules. from scipy import * from scipy.optimize import leastsq import scipy.io.array_import from pylab import * import matplotlib.pyplot as ptt import numpy as np import pylab import Tkinter as tk import math #Importation fichier0.0008 filename=('fichier0,008.txt') data = scipy.io.array_import.numpy.loadtxt(filename) #La colonne 0 du fichier sera les valeurs en x, et la colonne 1 sera celle des y y1 = data[:,1] x1 = data[:,0] #Importation fichier0.0008 filename=('fichier0,8.txt') data = scipy.io.array_import.numpy.loadtxt(filename) #La colonne 0 du fichier sera les valeurs en x, et la colonne 1 sera celle des y y2 = data[:,1] x2 = data[:,0] #Importation fichier0.0008 filename=('fichier3,8.txt') data = scipy.io.array_import.numpy.loadtxt(filename) #La colonne 0 du fichier sera les valeurs en x, et la colonne 1 sera celle des y y3 = data[:,1] x3 = data[:,0] #FONCTION A EVALUER def peval1(x1,p): return (p[0]+((p[1])*(x1**(p[2]))))* (1+(p[3])*(log(p[4]/0.0008))) #Fonction cout epsilon_point=0.0002 def residuals1(p, y1, x1): err1 = y1 - peval(x1,p) return err1 #FONCTION A EVALUER def peval2(x2,p): return (p[0]+((p[1])*(x2**(p[2]))))* (1+(p[3])*(log(p[4]/0.8))) #Fonction cout epsilon_point=0.0002 def residuals2(p, y2, x2): err2 = y2 - peval2(x2,p) return err2 #FONCTION A EVALUER def peval3(x3,p): return (p[0]+((p[1])*(x3**(p[2]))))* (1+(p[3])*(log(p[4]/3.8))) #Fonction cout epsilon_point=0.0002 def residuals3(p, y3, x3): err3 = y3 - peval3(x3,p) return err3 #Sommation des 3 fonctions cout def residualsToTal(p, y1, y2, y3, x1, x2, x3): errTOT = y1 + y2 + y3 - peval1(x1,p) - peval2(x2,p) - peval3(x3,p) return errTOT #Initialisation, nous entrons un jeu de paramètres "assez" proches des paramètres optimaux #A1_0 = 1 A_0= 100 B_0= 200 n_0= 0.42 C_0= 0.02 EP_0= 0.005 pname = (['A1','A2','k1','k2','n1']) p0 = array([A_0, B_0, C_0, n_0, EP_0]) #Appel de l'algorithme de LM plsq = leastsq(residualsToTal, p0, args=(y1, x1, y2, x2, y3, x3), maxfev=50000) #Affichage des paramètres optimaux print plsq[0]
A savoir que l'algo fonctionne parfaitement avec ce code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Traceback (most recent call last): File "C:\Documents and Settings\gair-da\Bureau\FittingComplet.py", line 96, in <module> plsq = leastsq(residualsToTal, p0, args=(y1, x1, y2, x2, y3, x3), maxfev=50000) File "C:\Python26\lib\site-packages\scipy\optimize\minpack.py", line 266, in leastsq m = check_func(func,x0,args,n)[0] File "C:\Python26\lib\site-packages\scipy\optimize\minpack.py", line 12, in check_func res = atleast_1d(thefunc(*((x0[:numinputs],)+args))) File "C:\Documents and Settings\gair-da\Bureau\FittingComplet.py", line 79, in residualsToTal errTOT = y1 + y2 + y3 - peval1(x1,p) - peval2(x2,p) - peval3(x3,p) ValueError: shape mismatch: objects cannot be broadcast to a single shape
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 #Importation des différents modules. from scipy import * from scipy.optimize import leastsq import scipy.io.array_import from pylab import * import matplotlib.pyplot as ptt import numpy as np import pylab import Tkinter as tk import math #Importation fichier0.0008 filename=('fichier0,008.txt') data = scipy.io.array_import.numpy.loadtxt(filename) #La colonne 0 du fichier sera les valeurs en x, et la colonne 1 sera celle des y y = data[:,1] x = data[:,0] #FONCTION A EVALUER def peval(x,p): return (p[0]+((p[1])*(x**(p[2]))))* (1+(p[3])*(log(p[4]/0.0002))) #Fonction cout epsilon_point=0.0002 def residuals(p, y, x): err = y - peval(x,p) return err #Initialisation, nous entrons un jeu de paramètres "assez" proches des paramètres optimaux #A1_0 = 1 A_0= 100 B_0= 200 n_0= 0.42 C_0= 0.02 EP_0= 0.005 pname = (['A1','A2','k1','k2','n1']) p0 = array([A_0, B_0, C_0, n_0, EP_0]) #Appel de l'algorithme de LM plsq = leastsq(residuals, p0, args=(y, x), maxfev=50000) #Affichage des paramètres optimaux print plsq[0]
Cordialement,
Strychnine
Partager