Re: problem with NDSolve::dvnoarg:
- To: mathgroup at smc.vnet.net
- Subject: [mg116562] Re: problem with NDSolve::dvnoarg:
- From: tarun dutta <tarunduttaz at gmail.com>
- Date: Sun, 20 Feb 2011 05:24:09 -0500 (EST)
- References: <ijo53p$lec$1@smc.vnet.net>
On Feb 19, 3:13 pm, Daniel Lichtblau <d... at wolfram.com> wrote: > 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 yes the initial condition does not satisfy constraint at t=0, so I will have to look into that matter. thanks again daniel. with best regards, tarun