MATLAB: Finite Difference method solver

finite differencemathematicaMATLABnumerical solversum series

I have the following code in Mathematica using the Finite difference method to solve for c1(t), where . However, I am having trouble writing the sum series in Matlab. The attatched image shows how the plot of real(c(t) should look like.
\[CapitalOmega] = 0.3;
\[Alpha][\[Tau]] := Exp[I \[CapitalOmega] \[Tau]] ;
dt = 0.1;
Ns = 1000;
ds = dt/Ns;
Ttab = Table[T, {T, 0, 10, dt}];
Stab = Table[s, {s, 0, dt - ds, ds}];
c[0] = 1;
Do[corrSum[n] = Sum[c[nn - 1]*Sum[\[Alpha][n dt - m ds]*ds, {m, Ns (nn - 1), Ns nn , 1}], {nn, 1, n}];
c[n] = c[n - 1] - dt*corrSum[n](*c[n-1]*\[Alpha][n dt]*), {n, 1, 100}]
cTtab = Table[{n*dt, c[n]}, {n, 0, 100}]
FDiff = ListPlot[Re[cTtab], PlotStyle -> Orange, PlotLegends -> {"Finite Difference"}]

Best Answer

  • By differentiating c' again you can solve the resulting second order ode as follows
    c0 = 1;
    v0 = 0;
    IC = [c0 v0];
    tspan = [0 10];
    [t, C] = ode45(@odefn, tspan, IC);
    c = C(:,1);
    plot(t,real(c),'ro'),grid
    xlabel('t'), ylabel('real(c)')
    function dCdt = odefn(~,C)
    Omega = 0.3;
    c = C(1);
    v = C(2);
    dCdt = [v;
    -1i*Omega*v - c];
    end
    This results in