bonjour, j'ai un souci avec mon code mais je ne trouve pas l'erreur ! quelqu'un peut m'aider? et au dessus j'ai deja crée ma fonction Phi(x,i)=sin(i*pi*x/L) et aussi la fonction f(x)=7x(x-3)..... i va de 1 à N=5 et x=np.linspace(0,L,100)
-----
bonjour, j'ai un souci avec mon code mais je ne trouve pas l'erreur ! quelqu'un peut m'aider? et au dessus j'ai deja crée ma fonction Phi(x,i)=sin(i*pi*x/L) et aussi la fonction f(x)=7x(x-3)..... i va de 1 à N=5 et x=np.linspace(0,L,100)
Il faut poster le code en utilisant la balise [Code]...[/Code].
Rien ne sert de penser, il faut réfléchir avant - Pierre Dac
je n'ai pas compris! comment mettre le code dans la balise
Tu passes en mode "avancé", tu surlignes ta zone de code et ensuite tu cliques dans le bouton où il y a un dièse : #
Quoi? Quelque chose que je ne connais pas et qui me fait l'affront d'exister?!
Et la raison est que là, si quelqu'un veut t'aider il est obligé de recopier tout ton code à la main pour le faire tourner. Si tu le postes entre balises CODE, il peut faire un copier/coller.
Et en plus, cela évite de poster une image pour transmettre du texte ce qui est bon pour la planète
Code:import sys,os import numpy as np import scipy as sp import matplotlib import matplotlib.pyplot as plt L=3 def f(x): return (7*x*(x-3)) def Phi(x,i): '''ième fonction de base en x''' # YOUR CODE HERE return np.sin(i*np.pi*x/L) raise NotImplementedError() def smb(N): '''calcul 2nd membre de la FF avec N fonctions de base''' # YOUR CODE HERE B=np.zeros((N,1)) x=np.linspace(0,L,100) for i in range (1,N+1): S=Phi(x,i) D=f(x) B[i]=quadrature(S*D,0,L)[0] return B[i] def solution(N): '''calcul solution avec N fonctions de base''' # YOUR CODE HERE for i in range (1,N+1): v=smb(N) u[i]+=(2*L*v)/((np.pi)**2 * i**2) return u[i] N = 5 U = solution(N) print('U=',U)
Dernière modification par eric keba ; 18/10/2021 à 16h26. Motif: voici le code en entier!
j'ai oublié de mettre la bibliothequeCode:from scipy.integrate import quadrature
Merci pour le code utilisable.
Sinon, tu appelles quadrature avec un tableau S*D alors qu'il attend une fonction. Ensuite, tu fais une boucle pour calculer plein de B[i] mais tu renvoies uniquement le dernier.
La 1ère chose à faire serait donc de corriger ta méthode smb pour appeler quadrature correctement comme décrit dans sa doc ce qui devrait te simplifier massivement le code (pas besoin de linspace notamment).
j'ai besoin de la fonction f et phi , car Bi c'est l'intégrale de f*phi. Bi est normalement un vecteur colonneMerci pour le code utilisable.
Sinon, tu appelles quadrature avec un tableau S*D alors qu'il attend une fonction. Ensuite, tu fais une boucle pour calculer plein de B[i] mais tu renvoies uniquement le dernier.
La 1ère chose à faire serait donc de corriger ta méthode smb pour appeler quadrature correctement comme décrit dans sa doc ce qui devrait te simplifier massivement le code (pas besoin de linspace notamment).
apres correction , j'ai toujours un message d'erreur, quadrature n'accepte qu'une seule fonction, dans mon cas il faut que je multiplie deux fonction, c'est qui est impossible dans python!Merci pour le code utilisable.
Sinon, tu appelles quadrature avec un tableau S*D alors qu'il attend une fonction. Ensuite, tu fais une boucle pour calculer plein de B[i] mais tu renvoies uniquement le dernier.
La 1ère chose à faire serait donc de corriger ta méthode smb pour appeler quadrature correctement comme décrit dans sa doc ce qui devrait te simplifier massivement le code (pas besoin de linspace notamment).
entre autre, problème d'indice, en python, c'est de 0 à n-1...
donc i ne peut être utilisé pour indexer sans un -1 pour l'indice (edit, ok, je me répète , mais ça donne un indice...)
comme pm42 l'a dit, il faut rendre B et non B[i]
pourquoi des array ((N,1)) alors que des array (N) suffisent.
comme pm42 l'a dit, il faut donner une fonction à quadrature, donc par exemple définir dans smb une fonction SD qui rend Phi(x,i)*f(x) (edit: ou bien une lambda, mais je n'aime pas les lambda (question de goût))
du coup, le x=np.linspace(0,L,100) ne sert à rien (oui, c'est déjà dit, mais parfois, il faut répéter).
dans ta fonction solution, tu calcules N fois smb(N).
en fait, dans solution, il n'y a pas besoin de boucle, il suffit d'avoir l'array rendu par smb et un np.linspace(1,N,N) pour i.
et tu fais ton u = ... en une seule ligne (merci numpy)
Dernière modification par polo974 ; 19/10/2021 à 10h25.
Jusqu'ici tout va bien...
merci pour ton apport mon code marche parfaitemententre autre, problème d'indice, en python, c'est de 0 à n-1...
donc i ne peut être utilisé pour indexer sans un -1 pour l'indice (edit, ok, je me répète , mais ça donne un indice...)
comme pm42 l'a dit, il faut rendre B et non B[i]
pourquoi des array ((N,1)) alors que des array (N) suffisent.
comme pm42 l'a dit, il faut donner une fonction à quadrature, donc par exemple définir dans smb une fonction SD qui rend Phi(x,i)*f(x) (edit: ou bien une lambda, mais je n'aime pas les lambda (question de goût))
du coup, le x=np.linspace(0,L,100) ne sert à rien (oui, c'est déjà dit, mais parfois, il faut répéter).
dans ta fonction solution, tu calcules N fois smb(N).
en fait, dans solution, il n'y a pas besoin de boucle, il suffit d'avoir l'array rendu par smb et un np.linspace(1,N,N) pour i.
et tu fais ton u = ... en une seule ligne (merci numpy)
Jusqu'ici tout va bien...