Je suis en train de mettre en œuvre le code Matlab pour résoudre l'équation d'onde, ma fonction ressemble à ceci:Équation d'onde avec FDM, Matlab
function [x,t,w] = wave_eqn(xl,xr,yb,yt,M,N,f,l,r,p)
% input: space interval [xl,xr], time interval [yb,yt]
% number of space steps M, number of time steps N
% output: solution w
D=2; % diffusion coefficient
h=(xr-xl)/M; k=(yt-yb)/N; m=M-1; n=N;
sigma=D*k/(h*h);
a=diag(1-2*sigma*ones(m,1))+diag(sigma*ones(m-1,1),1);
a=a+diag(sigma*ones(m-1,1),-1); % define matrix a
lside=l(yb+(0:n)*k); rside =r(yb+(0:n)*k);
w(:,1)=f(xl+(1:m)*h)'; % initial conditions
for j=1:n
w(:,j+1)=a*w(:,j)-w(:,j-1)+sigma^2*[lside(j);zeros(m-2,1);rside(j)];
end
w=[lside;w;rside]; % attach boundary conds
x=(0:m+1)*h;t=(0:n)*k;
% view(60,30);axis([xl xr yb yt -1 1])
end
%source: numerical analysis 2nd edition
Je continue à obtenir une erreur à l'équation dans la boucle avec le w (:, j-1) terme qui dit: Les indices d'indice doivent être soit des entiers positifs réels, soit des logiques.
Je ne suis pas sûr de savoir comment résoudre ce problème. Il faut aussi noter que f, p, l, r sont toutes les fonctions d'entrée de x et t. J'ai utilisé un modèle pour l'équation de la chaleur pour faire ce code, mais je ne suis pas sûr de savoir comment mettre en œuvre la quatrième fonction, p. Merci.