Bonjour,
Je cherche à résoudre l'équation de KDV avec la méthode des différences fini. J'ai de la difficulté à comprendre comment je fais pour faire respecté mes condifions frontière, si quelqu'un pouvait m'aider à faire ça cela serait déjà géniale !
En lisant un peu sur le sujet je me suis mit à essayer le code suivant, mais ce dernier diverge ;(, et j'ai l'impression que mon problème provient des condition frontière :
Code:function KDV() % Variables de base et discrétisation de l'espace et du temps nx=100; nt=100; u=zeros(nx,nt); dux=zeros(nx,nt); ddux=zeros(nx,nt); dddux=zeros(nx,nt); dut=zeros(nx,nt); L=1/2; T=1/2; x=linspace(-L,L,nx); t=linspace(-T,T,nt); dx=2*L/nx; dt=2*T/nt; a=0; b=0.022; %condition initiale u(:,1)=((sin(L*x./pi)))'; %Résolution de l'équation discrétisée et conditions frontieres for n=1:nt-1 for j=2:nx-2 dux(j,n)=(u(j+1,n)-u(j-1,n))/(2*dx); ddux(j,n)=(u(j+1,n)-2*u(j,n)+u(j-1,n))/(dx^2); dddux(j,n)=(u(j+2,n)-3*u(j+1,n)+3*u(j,n)-u(j-1,n))/(dx^3); dut(j,n)=(u(j,n+1)-u(j,n))/dt; u(1,n)=0; u(nx,n)=0; % conditions frontieres expérimentales mais j'ai l'impression que c'est la que ca chie ! dux(1,n)=0; u(j,n+1)=-dt*(dux(j,n)+a*u(j,n)*dux(j,n)+b*dddux(j,n))+u(j,n); end end %Mise en graphique mesh(x,t,u)
-----