Re: problem with NDSolve::dvnoarg:
- To: mathgroup at smc.vnet.net
- Subject: [mg116546] Re: problem with NDSolve::dvnoarg:
- From: Daniel Lichtblau <danl at wolfram.com>
- Date: Sat, 19 Feb 2011 05:13:10 -0500 (EST)
tarun dutta wrote: > n = 5; > p = 5/1000; > q = 1/10; > c[-1][t] = 0; d[-1][t] = 0; > c[n + 1][t] = 0; d[n + 1][t] = 0; > eqn1 = Table[ > c[i]'[t] == ((1/2)*i (i - 1) - q*i)*c[i][t] - > p*(Sqrt[i]* > c[i - 1][t]*(Sum[Sqrt[i]*d[i - 1][t]*d[i][t], {i, 0, n}]) + > Sqrt[i + 1]* > c[i + 1][ > t]*(Sum[Sqrt[i + 1]*d[i - 1][t]*d[i][t], {i, 0, n}])), {i, > 0, n}]; > eqn2 = Table[ > d[i]'[t] == ((1/2)*i (i - 1) - q*i)*d[i][t] - > p*(Sqrt[i]* > d[i - 1][t]*(Sum[Sqrt[i]*c[i - 1][t]*c[i][t], {i, 0, n}]) + > Sqrt[i + 1]* > d[i + 1][ > t]*(Sum[Sqrt[i + 1]*c[i - 1][t]*c[i][t], {i, 0, n}])), {i, > 0, n}]; > eqn3 = Table[Sum[(c[i]^2)[t], {i, 0, n}] == 1, {i, 1}]; > eqn4 = Table[Sum[(d[i]^2)[t], {i, 0, n}] == 1, {i, 1}]; > eqns = Flatten[Join[eqn1, eqn2, eqn3, eqn4]]; > bcs = {{c[0][0] == d[0][0] == 0.004567}, > Table[c[i][0] == 0.0000000034, {i, 1, 5}], > Table[d[i][0] == 0.0000000034, {i, 1, 5}]}; > var = Join[Table[c[i], {i, 0, 5}], Table[d[i], {i, 0, n}]]; > sol = NDSolve[{eqns, bcs}, var, {t, 1/10}] > > NDSolve::dvnoarg: > > I can not understand the meaning of this kind of error,, > can anyone explain and give some valuable insight. > regards, > tarun An addendum to my last two responses. Once you get a viable system you learn it is overdetermined. This is because the algebraic invariants are not needed to make it fully determined. Since you want them enforced so the solution does not "wander" due to numerical error, you can use the Projection method to enforce them. I show the code below. Please observe the usage (d[i][t]^2) rather than (d[i]^2)[t], as the latter is what persistently gives rise to an ill-formed system. n = 5; p = 5/1000; q = 1/10; c[-1][t] = 0; d[-1][t] = 0; c[n + 1][t] = 0; d[n + 1][t] = 0; eqn1 = Table[ c[i]'[t] == ((1/2)*i (i - 1) - q*i)*c[i][t] - p*(Sqrt[i]* c[i - 1][t]*(Sum[Sqrt[i]*d[i - 1][t]*d[i][t], {i, 0, n}]) + Sqrt[i + 1]* c[i + 1][ t]*(Sum[Sqrt[i + 1]*d[i - 1][t]*d[i][t], {i, 0, n}])), {i, 0, n}]; eqn2 = Table[ d[i]'[t] == ((1/2)*i (i - 1) - q*i)*d[i][t] - p*(Sqrt[i]* d[i - 1][t]*(Sum[Sqrt[i]*c[i - 1][t]*c[i][t], {i, 0, n}]) + Sqrt[i + 1]* d[i + 1][ t]*(Sum[Sqrt[i + 1]*c[i - 1][t]*c[i][t], {i, 0, n}])), {i, 0, n}]; invariants = {Sum[(c[i][t]^2), {i, 0, n}] - 1, Sum[(d[i][t]^2), {i, 0, n}] - 1}; eqns = Flatten[Join[eqn1, eqn2]]; bcs = {{c[0][0] == d[0][0] == 0.004567}, Table[c[i][0] == 0.0000000034, {i, 1, 5}], Table[d[i][0] == 0.0000000034, {i, 1, 5}]}; var = Join[Table[c[i], {i, 0, 5}], Table[d[i], {i, 0, n}]]; sol = NDSolve[Flatten[{eqns, bcs}], var, {t, 1/10}, Method -> {Projection, "Invariants" -> invariants}] This will give a solution. It is, alas, almost certainly a bad solution. This is because the invariants are not satisfied for t==0, hence cannot be satisfied elsewhere. So that might indicate a problematic formulation. Daniel Lichtblau Wolfram Research