Comment peut-on sommer des fonction avec lambda de python
Fermé
Utilisateur anonyme
-
Modifié le 6 déc. 2019 à 17:09
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 - 6 déc. 2019 à 21:05
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 - 6 déc. 2019 à 21:05
A voir également:
- Comment peut-on sommer des fonction avec lambda de python
- Fonction si et - Guide
- Citizen code python avis - Accueil - Outils
- Fonction somme excel - Guide
- Fonction moyenne excel - Guide
2 réponses
Bonsoir,
Que ce soit une fonction lambda ou non, le principe est le même.
Nommer une fonction y est une mauvaise idée.
C'est sans doute pas vraiment ce que tu veux obtenir comme résultat et le nom de la fonction n'est sans doute pas représentative de ce qu'elle doit faire.
Les lambdas sont plus réservées pour créer des fonctions à la volée, dans ton code il est préférable d'en faire une fonction bien établie que l'on peut documenter.
Que ce soit une fonction lambda ou non, le principe est le même.
Nommer une fonction y est une mauvaise idée.
get_y = lambda si, v: solutions[si] * x**v # voici mon polynôme initialisé y = get_y(0, p-1) y += sum(get_y(i, i + 1) for i in range(1, len(solutions) - 1))
C'est sans doute pas vraiment ce que tu veux obtenir comme résultat et le nom de la fonction n'est sans doute pas représentative de ce qu'elle doit faire.
Les lambdas sont plus réservées pour créer des fonctions à la volée, dans ton code il est préférable d'en faire une fonction bien établie que l'on peut documenter.
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
Ambassadeur
1 550
Modifié le 6 déc. 2019 à 20:28
Modifié le 6 déc. 2019 à 20:28
bonjour,
je trouve que les noms de tes variables sont mal choisis, et n'aident pas à comprendre ton programme.
au lieu de la fonction polynome, je ferais une classe de même nom:
et je remplacerais la ligne 38 par
je trouve que les noms de tes variables sont mal choisis, et n'aident pas à comprendre ton programme.
au lieu de la fonction polynome, je ferais une classe de même nom:
class polynome: def __init__(self, X, Y, p): A = VDM(X, p) A_transpose = np.transpose(A) Y = np.array([Y]) Y_transpose = np.transpose(Y) produit1 = np.dot(A_transpose, A) produit2 = np.dot(A_transpose, Y_transpose) self.solutions = np.linalg.solve(produit1, produit2) self.p = p def f(self, x): y= self.solutions[0]*x**(self.p-1) # voici mon polynôme initialisé for i in range(1, len(self.solutions)-1): y += self.solutions[i]*x**(i+1) # voici les sommes de polynôme c'est ici que j'ai une erreur !!! return y
et je remplacerais la ligne 38 par
y = polynome(X1, Y1, 4).f
je te commente mon code pour une compréhension de mon algo
#Nuage de points afin d'approximer un polynôme avec !
X1 = [10.0, 8.0, 13.0, 9.0, 11.0, 14.0, 6.0, 4.0, 12.0, 7.0, 5.0]
Y1 = [8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.82, 5.68]
def VDM(X, p): #cette fonction retourne la matrice de Vandermonde
A = np.empty([len(X), p])
index = 0
while p != 0:
p -= 1
for i in range(0, len(X)):
A[i, index] = X[i]**(p)
index += 1
return A
def polynome(X, Y, p): #cette fonction retourne un polynôme d'ordre p exemple p = 3 a*x**2 + b*x + c
A = VDM(X, p)
A_transpose = np.transpose(A)
Y = np.array([Y])
Y_transpose = np.transpose(Y)
produit1 = np.dot(A_transpose, A)
produit2 = np.dot(A_transpose, Y_transpose)
solutions = np.linalg.solve(produit1, produit2) #cela trouve les variables a, b et c de a*x**2 + b*x + c
y = lambda x : solutions[0]*x**(p-1) # voici mon polynôme initialisé
for i in range(1, len(solutions)-1):
y += solutions[i]*x**(i+1) # voici les sommes de polynôme c'est ici que j'ai une erreur !!!
return y
# cela doit retourner pour un exemple d'ordre 3 ==> y = lambda x : solutions[0]*x** 3 + solutions[1]*x**2 + solutions[2]*x**1 + solutions[3]*x**0, cette forme est traduite par a*x**2 + b*x + c
plt.scatter(X1, Y1, s = 50, c = 'red')
x = np.linspace(min(X1),max(X1),200)
y = polynome(X1, Y1, 4) # c'est une approximation d'un polynôme par un nuage de points à l'ordre 4 plus l'ordre est grand plus c'est précis !
plt.plot(x, y(x))
plt.grid()
plt.show()
yg_be
Messages postés
23342
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2024
1 550
>
Utilisateur anonyme
6 déc. 2019 à 21:05
6 déc. 2019 à 21:05
je recommande que tu adaptes les noms de tes variables, cela complète les commentaires et t'aidera à comprendre.
merci de toujours utiliser les balises de code quand tu postes du code.
as-tu testé ma suggestion?
quand tu n'auras plus d'erreur, tu constateras que tes résultats ne sont pas corrects.
merci de toujours utiliser les balises de code quand tu postes du code.
as-tu testé ma suggestion?
quand tu n'auras plus d'erreur, tu constateras que tes résultats ne sont pas corrects.