- #1

- 4

- 0

The equation i'm trying to solve is

dq(x,t)/dt=-c*dq(x,t)/dx

with initial condition for example q(x,0)=exp(-(x-5)^2)

c is a constant. What i want to do is to first discritize the initial condition with interval dx then because i have to know the value of -c*dq/dx, i use fourier transform in matlab then i multiply it by -c*i*k after that i invert the fourier transform back so i get the value of -c*dq/dx at every point in my grid. Then i solve it with matlab ODE solver such ODE45 but result is still incorrect, i don't know where i might have gone wrong, here is my code

******the main code********

N=2^14;c0=0.5;

dx=0.01;x=[0:dx:(N-1)*dx];%defining the dx for x

tspan=linspace(0,20,100);%defining the time span for the solution

%defining the initial condition

q0=exp(-(x-5).^2);

dqx = diskx(q0,dx,N,c0);

%calculating the solution

ode=@(t,q) rhs(t,diskx(q0,dx,N,c0)*q);

options = odeset('RelTol',1e-5,'AbsTol',1e-6);

[t,q] = ode23(ode,tspan,q0);

%animating the result

for i=1:length(tspan)

h=plot(x,q(i,;axis([0 164 -10 11]);

name=['Simpangan q(x,t) saat t=',num2str(t(i))];

title(name);

pause(0.1)

set(h,'EraseMode','xor');

end

******function diskx********

function dxq = diskx(q0,dx,N,c0)

dk=2*pi/((N-1)*dx);

k=[-(N-1)/2*dk:dk:(N-1)/2*dk];

Q0=fft(q0);

Q0T=fftshift(Q0);

dQ0T=-c0*i*k.*Q0T;

dQ0=ifftshift(dQ0T);

dxq=real(ifft(dQ0));

******function rhs********

function dqdt = rhs(t,dqx,q)

dqdt = [dqx'];

please give me hint or correct me if i'm wrong, because i've checked and rechecked that the result suppose to be correct and yet i'm still not getting what i want which is just a moving function with the speed c. thx guys