Bonjour, à tous,
je me présente, je m'appelle Vivian et suis actuellement en 3e année de licence en échange en Australie. J'ai choisi ce semestre un cours de physique numérique pour apprendre à utiliser des programmes comme Matlab pour résoudre des problèmes scientifiques. Seulement le cours consiste en des heures de travail pratique sur ordinateur où certes le professeur est disponible pour nous aider mais in fine ne délivre pas de véritable cours. Aussi pendant ses séances j'arrive à avancer je suis vite bloqué lorsque j'essaie de continuer seul. C'est pour cela que je m'adresse à vous. J'ai actuellement un premier devoir à faire concernant les différentes méthodes de résolution numérique d'équation différentielles du premier ordre. Et malgré toutes mes recherches sur le net je n'arrive pas à rédiger sur Matlab une résolution d'équation par la méthode de Runge-Kutta, je comprends bien l'algorithme, je sais que l'on peut faire appel directement au solveur mais je dois écrire moi-même un scipt pour mon exercice (c'est à dire calculer k1, k2, k3, k4 puis yn).
L'équation est la suivante : dy/dx=sin4x+sin11x et y(0)=0 à résoudre sur [O,Pi] qvec un dx e 0.05.
J'ai tenté plusieurs trucs mais vois bien (avant même de tester) qu'à chaque fois ça ne va pas... je ne vois vraiment pas comment m'y prendre :
dernier essai en date :
Mais il y a là clairement un problème d'index. Donc si vous aviez une petite piste pour débuter, ça serait cool.Code:clear // Rungekutta dx=0.05; x=[0:dx:Pi]; xnum=length(x); y=zeros(0,xnum); f=(sin(4*x)+sin(11*x)); y(1)=0 for j=1:xnum k1(j) = dx * (f,{x(j),y(j)}); k2(j) = dx * (f,{x(j)+dx/2, y(j)+k1(j)/2}); k3(j) = dx * (f,{x(j)+dx/2, y(j)+k2(j)/2}); k4(j) = dx * (f,{x(j)+dx,y(j)+k3(j)}); end for j=2:xnum y(j) = y(j-1) + 1/6*(k1(j-1)+2*k2(j-1)+2*k3(j-1)+k4(j-1)) end ya=-(1/4)*cos(4*x)-(1/11)*cos(11*x)+(15/44); figure(1); plot(x, y, x, ya)
En vous remerciant par avance pour votre aide.
-----