Re: FindRoot and NDSolve

• To: mathgroup at smc.vnet.net
• Subject: [mg48073] Re: FindRoot and NDSolve
• From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
• Date: Tue, 11 May 2004 05:19:56 -0400 (EDT)
• References: <20040510110322.14062.qmail@sina.com>
• Sender: owner-wri-mathgroup at wolfram.com

```On 10 May 2004, at 20:03, longbw2005 wrote:

> Dear SiR:
>   i have a problem about the numberic calulation of mathematica and i
> hope you can give me some advice. thank you!
> i want to use FindRoot to solve an eqution whose cofficent depend on
> the result of NDSolve.
>
> the procedure is as follow  :
>
> fdc[c1_?NumericQ] = c1 -0.455802;
>  (1)
> mt1[c1_?NumericQ] = 0.75 - c1;
>  (2)
> fg[c1_?NumericQ]  =21.8552*fdc[c1];
>  (3)
> fb[c1_?NumericQ]  =3.1088*10^8*fdc[c1]^1.7*mt1[c1];
>  (4)
> n20[c1_?NumericQ] = fb[c1]/fg[c1];
>  (5)
>
> ans=NDSolve[{n'[L]==-(18138.6*Exp[-0.0063*L]-n[L])/1700/
> fg[c1],n[0]==n20[c1]},n,{L,0,2000}];
> n2=ans[[1,1,2]];
> (6)
> n2[0]=n20[c1];
>
> mt2=2*10^-15*NIntegrate[n2[l]*l^3,{0,2000}];
>  (7)
>
> f1=mt1[c1]/mt2-1;
> ans=FindRoot[f1,{c1,0.46,0.65}];
>
> f1 is the equation,c1 is the unkown variable,mt1 calculated by (2),
> mt2 calculated by (7),
>
> The mathematica gives error message:
> NDSolve::ndinnt: Initial condition n20[c1] is not a number or a
> rectangular \
> array of numbers.
>
>
> it seems that fg ,fb and n20 did not get evaluated as numbers.
>
> if there is no mistake in the defination,i can not figure out where
> the mistake is. i use mathematica 5.0 windows version.
>
> any suggestion will be appreciated! Thank you
>
>
>
Actually,there are many mistakes here: in fact so many it is very
condition for n n[0]==n20[c1] is not given in terms of a numerical
value . I have also no idea what you expect to get from
n2=ans[[1,1,2]]. Actually, should also remove all those _?NumericQ from
the first group of definitions as they only prevent evaluation of
expressions like  n2[0]=n20[c1], but because there are so many ohter
things wrong it won't help much. But but in any case, what is n2[0]
doing there at all? And what is this:
> mt2=2*10^-15*NIntegrate[n2[l]*l^3,{0,2000}];
?

First, there is no variable you are integrating with respect to. But
even if we assume you meant it to be l, still

> mt2=2*10^-15*NIntegrate[n2[l]*l^3,{l, 0,2000}];

can't be computed because you have not defined n2[l] (you have only
defined n2[0] and even that only in terms of c1, which is not a
number). I am afraid at this stage you have not even got to the stage