Bonjour,
Au sujet du dernier graphe:
la pente paraît voisine de 1/2 ; un facteur (2) n'aurait-il pas été oublié quelque part ?
J'ai eu après coup quelques scrupules pour t'avoir proposé de tester la fonction parabolique par morceaux, le plus simple des 2 exemples, mais dont les dérivées ne sont pas continues; mais cela aurait dû fonctionner avec le deuxième. Vérifie tout de même les conditions de dérivabilité.
Envoyé par
eddy01
Quand je trace l'approximation par le schéma de Lax Wendroff pour les fonctions que vous m'avez proposé, ça explose complètement !
Tu as sur les bras une suite numérique divergente; il y a donc une erreur mathématique, mais pas de faute de syntaxe ou de débordement de domaine pour les indices, qui bloquerait la compilation.
Deux possibilités dans ce cas:
a) Insérer dans l'exécution du programme l'affichage temporaire des grandeurs intermédiaires, notamment les coefficients de la matrice, et comparer dès les premières étapes les valeurs lues à ce que donne un calcul manuel; tu pourrais repérer ainsi l'apparition des valeurs anormales.
b) Réécrire l'algorithme, si cela est possible, en changeant de notation et en détaillant toute les opérations sur les matrices - cela risque d'être lourd !
Le recours à la calculatrice (auquel j'avais d'abord pensé) ne me paraît pas opportun dans le cas présent, à moins qu'il ne s'agisse d'un modèle performant.
Dans le code que tu donnes
B=(1-(k/h)^2)*eye(m,m)+diagm((1/2)*(k/h)*(1+(k/h))*ones(m-1),-1)+diagm((1/2)*(k/h)*(-1+(k/h))*ones(m-1),1)
combien y a-t-il de termes non nuls dans les 2 derniers termes 'diagm(...)' ?
Je n'ai trouvé que des renseignements hétérogènes et incomplets sur cette fonction (Scilab, Julia).
Travaille sur une fonction périodique facile à manipuler, comme pas ex. U0(x) = 1 + cos(x) si |x| < Pi/2 sinon U0(x) = 0 .
Partager