I have written a function to Solve the following differential equation
where the number n (called in my code Nphoton) is a variable.
Nevertheless I have troubles to assign the solutions sol of the differential equation to functions funCa0, funCb0 ...
The code
Do[
ToExpression[
"fun" <> ToString[vec[[i]]] <> "=Evaluate[" <>
ToString[vec[[i]]] <> "[t]/.sol][[1]]"];
, {i, 1, Length[vec]}
];
returns the error message
ReplaceAll::reps: {sol} is neither a list of replacement rules nor a valid dispatch table, and so cannot be used for replacing. >>
I do not understand this message, what is wrong with sol?
My entire function is (it can be run simply by pasting it):
funoscillation[Nphoton_, intialAtomState_, NphotonInitial_, g0_, g1_,wSP_, w0_] :=
Module[{g0li, g1li, Delta, Omega, vec, funvec, eqns, sol, funPlot,
solReal, end},
g0li = Conjugate[g0];
g1li = Conjugate[g1];
Delta = wSP - w0;
Omega = wSP + w0;
If[Nphoton - 1 < NphotonInitial,
Print["ATTENTION: no intial state provided"]; Goto[end];];
vec = {};
funvec = {};
Do[
AppendTo[vec, ToExpression[StringJoin["Ca", ToString[i]]]];
AppendTo[funvec,
ToExpression[StringJoin["funCa", ToString[i]]]]
, {i, 0, Nphoton - 1}];
Do[
AppendTo[vec, ToExpression[StringJoin["Cb", ToString[i]]]];
AppendTo[funvec,
ToExpression[StringJoin["funCb", ToString[i]]]]
, {i, 0, Nphoton - 1}];
eqns = {};
Do[
If[i == 0,
AppendTo[eqns,
ToExpression[
"Ca" <> ToString[i] <> "'[t]==-I " <> ToString[g0] <>
" Sqrt[" <> ToString[i] <>
"+1] Exp[-I " <> ToString[Delta] <> " t] Cb" <>
ToString[i + 1] <> "[t]"]];
AppendTo[eqns,
ToExpression[
"Cb" <> ToString[i] <> "'[t]==-I " <> ToString[g1] <>
" Sqrt[" <> ToString[i] <>
"+1] Exp[-I " <> ToString[Omega] <> " t] Ca" <>
ToString[i + 1] <> "[t]"]];
];
If[i > 0 && i < Nphoton - 1,
AppendTo[eqns,
ToExpression[
"Ca" <> ToString[i] <> "'[t]==-I " <> ToString[g0] <>
" Sqrt[" <> ToString[i] <>
"+1] Exp[-I " <> ToString[Delta] <> " t] Cb" <>
ToString[i + 1] <>
"[t]-I " <> ToString[g1li] <> " Sqrt[" <> ToString[i] <>
"] Exp[I " <> ToString[Omega] <> " t] Cb" <>
ToString[i - 1] <> "[t]"]];
AppendTo[eqns,
ToExpression[
"Cb" <> ToString[i] <> "'[t]==-I " <> ToString[g1] <>
" Sqrt[" <> ToString[i] <>
"+1] Exp[-I " <> ToString[Omega] <> " t] Ca" <>
ToString[i + 1] <>
"[t]-I " <> ToString[g0li] <> " Sqrt[" <> ToString[i] <>
"] Exp[I " <> ToString[Delta] <> " t] Ca" <>
ToString[i - 1] <> "[t]"]];
];
If[i == Nphoton - 1,
AppendTo[eqns,
ToExpression[
"Ca" <> ToString[i] <> "'[t]==-I " <> ToString[g1li] <>
" Sqrt[" <> ToString[i] <>
"] Exp[I " <> ToString[Omega] <> " t] Cb" <>
ToString[i - 1] <> "[t]"]];
AppendTo[eqns,
ToExpression[
"Cb" <> ToString[i] <> "'[t]==-I " <> ToString[g0li] <>
" Sqrt[" <> ToString[i] <>
"] Exp[I " <> ToString[Delta] <> " t] Ca" <>
ToString[i - 1] <> "[t]"]];
];
, {i, 0, Nphoton - 1}];
Do[
If[i == NphotonInitial ,
If[intialAtomState == b,
AppendTo[eqns, ToExpression["Ca" <> ToString[i] <> "[0]==0"]];
AppendTo[eqns, ToExpression["Cb" <> ToString[i] <> "[0]==1"]];];
If[intialAtomState == a,
AppendTo[eqns,
ToExpression["Ca" <> ToString[i] <> "[0]==1"]];
AppendTo[eqns, ToExpression["Cb" <> ToString[i] <> "[0]==0"]];],
AppendTo[eqns, ToExpression["Ca" <> ToString[i] <> "[0]==0"]];
AppendTo[eqns, ToExpression["Cb" <> ToString[i] <> "[0]==0"]];
];
, {i, 0, Nphoton - 1}];
sol = NDSolve[eqns, vec, {t, 0, 10}];
Do[
ToExpression[
"fun" <> ToString[vec[[i]]] <> "=Evaluate[" <>
ToString[vec[[i]]] <> "[t]/.sol][[1]]"];
, {i, 1, Length[vec]}
];
Print[funvec];
Print[funCa0];
funPlot = Abs[(# & /@ funvec)]^2;
Plot[funPlot, {t, 0, 10}, PlotLegends -> vec, PlotRange -> All]
];
funoscillation[2, a, 1, 1*0, 1, 2 Pi, 2 Pi]

ToStringandToExpressionvery often; here they are clearly being "abused" for a purpose that would be better served with a different method. – Mr.Wizard Sep 12 '14 at 11:36eqnsto solve. You can start reading almost at the end to understand my problem: fromsol = NDSolve[eqns, vec, {t, 0, 10}];(the last ten lines) – lambertmular Sep 12 '14 at 12:02sol = NDSolve[{x'[t] == -y[t] - x[t]^2, y'[t] == 2 x[t] - y[t]^3, x[0] == y[0] == 1}, {x, y}, {t, 20}](from the documentation) unless it lacks a certain property of your actual code? – Mr.Wizard Sep 12 '14 at 12:04Printstatements between theDoloops, you could localize the problem. – Michael E2 Sep 12 '14 at 14:07Printstatements before posting, next time I will conserve them. – lambertmular Sep 12 '14 at 15:26