Je dois réaliser un programme qui permet de calculer le résultat numérique d'un systeme différentiel mais je récolte "ValueError: setting an array element with a sequence" malgrès tout mes efforts , quelqu'un aurait il une odée ? merci d'avance
line 9, in euler
X[i] = X[i-1] + np.dot(fun(T[i-1],X[i-1]),Pas)
line 12, in fun
return np.array([x,(1-x**2)*y - x])
ValueError: setting an array element with a sequence.
Dans ta fonction euler, \(t_0\), \(t_f\) et \(N\) sont des entiers ou des flottants, donc ta variable Pas est un entier ou un flottant, donc tu n'as pas besoin d'utiliser la fonction dot de Numpy. La fonction dot de Numpy n'est là que pour réaliser des produits matriciels (matrice-matrice, vecteur-matrice). La multiplication élément-par-élément (de Kronecher il me semble) est effectuée par défaut avec l'opérateur "*" de Python. Un exemple pour que tu te rende compte comment ça marche:
In [1]: import numpy as np
In [2]: A = np.linspace(0, 1, 10)
In [3]: A
Out[3]:
array([ 0. , 0.11111111, 0.22222222, 0.33333333, 0.44444444,
0.55555556, 0.66666667, 0.77777778, 0.88888889, 1. ])
In [4]: b = np.pi
In [5]: b * A
Out[5]:
array([ 0. , 0.34906585, 0.6981317 , 1.04719755, 1.3962634 ,
1.74532925, 2.0943951 , 2.44346095, 2.7925268 , 3.14159265])
Ton fonction fun est assez mal nommée. Son nom ne suffit pas à comprendre à quoi elle sert.
On a l'habitude de donner les tailles avec des tuples, et pas spécialement avec des listes. C'est vraiment anecdotique, mais d'habitude ça se fait comme ça Du coup ta ligne
X = np.empty([N+1,n],dtype='f')
deviendrai
X = np.empty((N+1,n),dtype='f')
Ensuite ton problème... Une recherche rapide sur un moteur de recherche et j'ai trouvé ça. Ca a l'air de venir du fait que dans ton expression
np.array([x,(1-x**2)*y - x])
x est un flottant et (1-x**2)*y-x est un tableau de flottants. Regarde peut-être au niveau des procédures de concaténation offertes par Numpy
mon erreur est localisé ligne 15 ou ligne 18, merci d'avance