CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Help python erreur dans une boucle simple

roulio62
roulio62
Niveau 31
29 novembre 2020 à 18:08:02

Bonjour,

j'essaye de calculer une racine avec la méthode de la sécante. J'ai fait juste avant la méthode de Newton, et ça fonctionne très bien. Pour la méthode de la sécante, j'ai juste modifié l'expression tournant dans la bouche, mais j'ai une erreur à chaque fois :

def methode_de_la_secante(xo,x1,func):
# Initialisation de la méthode
x = np.zeros(10)
x[0] = xo
x[1] = x1
for i in range(1,9):
x[i+1] = x[i] - ((x[i]-x[i-1])/(func(x[i])- func(x[i-1])))*func([i])
x[i] = x[i+1]
#print("", x)
return x

Je n'ai pas de problème de syntaxe. Mais quand j'appelle la fonction pour calculer une valeur avec la méthode de la sécante avec ça :

racinex = methode_de_la_secante(2, 3, fhistoriquenewton)
print("", racinex)

J'obtiens un message d'erreur :

TypeError Traceback (most recent call last)
TypeError: only size-1 arrays can be converted to Python scalars

The above exception was the direct cause of the following exception:

ValueError Traceback (most recent call last)
<ipython-input-120-d2473857d584> in <module>
----> 1 racinex = methode_de_la_secante(2, 3, fhistoriquenewton)
2 print("", racinex)

<ipython-input-119-d45ea82bfc5a> in methode_de_la_secante(xo, x1, func)
8 #A = x[i] - x[i-1]
9 #B = func(x[i]) - func(x[i-1])
---> 10 x[i+1] = x[i] - ((x[i]-x[i-1])/(func(x[i])- func(x[i-1])))*func([i])
11 #x[i+1] = x[i] - (A/B)*func([i])
12 x[i] = x[i+1]

ValueError: setting an array element with a sequence.

J'ai modifié plusieurs fois l'expression de x|i+1| et je ne comprends pas pourquoi l'erreur persiste. Je ne comprends pas non plus pourquoi il me dit que je transforme un array en séquence ...

roulio62
roulio62
Niveau 31
29 novembre 2020 à 19:05:06

Personne ?

El_Camino
El_Camino
Niveau 10
29 novembre 2020 à 19:33:31

Alors sans trop chercher pour moi l'erreur est ligne 10 ; tu donne en paramètre de func une liste contenant i au lieu de i directement.

---> 10 x[i+1] = x[i] - ((x[i]-x[i-1])/(func(x[i])- func(x[i-1])))*func([i])

devient

---> 10 x[i+1] = x[i] - ((x[i]-x[i-1])/(func(x[i])- func(x[i-1])))*func(i)
Azerban
Azerban
Niveau 16
29 novembre 2020 à 19:34:24

Le message ne dit pas ça, il te dit que tu ne peux pas assigner une sequence à un element de ton array.

Ton array de base est une collection d'éléments qui ont tous le même type (des floats) et toi t'essaie d'assigner une liste à ton élement x[i+1].

Si tu fais :

import numpy as np
x = np.zeros(10)
x[1] = np.array([1, 2, 3])

Ça te renvoie:

TypeError                                 Traceback (most recent call last)
TypeError: only size-1 arrays can be converted to Python scalars

The above exception was the direct cause of the following exception:

ValueError                                Traceback (most recent call last)
<ipython-input-18-fd662d5487a5> in <module>
----> 1 x[1] = np.array([1, 2, 3])

ValueError: setting an array element with a sequence.

C'est le code suivant qui renvoie une séquence et non un nombre :

x[i] - ((x[i]-x[i-1])/(func(x[i])- func(x[i-1])))*func([i])
Azerban
Azerban
Niveau 16
29 novembre 2020 à 19:49:52

t'essaies*

roulio62
roulio62
Niveau 31
29 novembre 2020 à 20:34:34

Salut,

merci pour toutes ces réponses. J'étais afk. Je vais tester de ce suite les propositions.

roulio62
roulio62
Niveau 31
29 novembre 2020 à 20:57:38

Le 29 novembre 2020 à 19:34:24 Azerban a écrit :
Le message ne dit pas ça, il te dit que tu ne peux pas assigner une sequence à un element de ton array.

Ton array de base est une collection d'éléments qui ont tous le même type (des floats) et toi t'essaie d'assigner une liste à ton élement x[i+1].

Si tu fais :

import numpy as np
x = np.zeros(10)
x[1] = np.array([1, 2, 3])

Ça te renvoie:

TypeError                                 Traceback (most recent call last)
TypeError: only size-1 arrays can be converted to Python scalars

The above exception was the direct cause of the following exception:

ValueError                                Traceback (most recent call last)
<ipython-input-18-fd662d5487a5> in <module>
----> 1 x[1] = np.array([1, 2, 3])

ValueError: setting an array element with a sequence.

C'est le code suivant qui renvoie une séquence et non un nombre :

x[i] - ((x[i]-x[i-1])/(func(x[i])- func(x[i-1])))*func([i])

D'accord, le code devrait retourner un nombre et non un séquence ... Mais je ne comprends pas pourquoi ??
J'ai juste changé la méthode de Newton en remplaçant la dérivée par une autre expression et ça ne fonctionne plus depuis.

roulio62
roulio62
Niveau 31
29 novembre 2020 à 21:08:25

Je n'ai rien changé au code, et j'obtiens ça désormais :

<ipython-input-245-70484bc3046c>:10: RuntimeWarning: invalid value encountered in double_scalars

Apparemment, c'est le dénominateur qui est arrondi à zéro dans le calcul.

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment