Re: Summation Problem w/ 5.0
- To: mathgroup at smc.vnet.net
- Subject: [mg44125] Re: Summation Problem w/ 5.0
- From: Paul Abbott <paul at physics.uwa.edu.au>
- Date: Thu, 23 Oct 2003 07:15:47 -0400 (EDT)
- Organization: The University of Western Australia
- References: <bllp1h$c11$1@smc.vnet.net> <bmoda0$hph$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
In article <bmoda0$hph$1 at smc.vnet.net>,
andrea.knorr at engr.uconn.edu (Andrea) wrote:
> I've imported several .csv files, and grouped several elements into
> the lists "virus", "infected", and "uninfected", which are blood
> concentrations. "vtime", "ytime", and "xtime" are the corresponding
> points in time for when the concentrations were measured.
To run or even test minfcn, the form of this data is required.
> Below is the relevant code, which is basically for nonlinear regression:
>
> titer[lambda_, beta_, d_, k_, a_, u_] :=
>
> Module[{soln, x, y, v, valueslist, xeval, yeval, veval},
>
> soln = NDSolve[{
> x'[t] == lambda - d x[t] - beta x[t] v[t],
> y'[t] == beta x[t] v[t] - a y[t],
> v'[t] == k y[t] - u v[t],
> x[0] == 10^9, y[0] == 0, v[0] == 10^9},
> {x, y, v}, {t, 0, 2500}];
>
> xtiter = Evaluate[x[xtime] /. soln];
> ytiter = Evaluate[y[ytime] /. soln];
> vtiter = Evaluate[v[vtime] /. soln];
>
> values = Table[Flatten[{xtiter, ytiter, vtiter}, 1]];
> values
> ];
This code (a form of Kermack-MacKendrick disease model?), can be
improved as follows. First, I think that it is better to use DSolve up
find the numerical solution (up to the maximum time required) as
interpolating functions:
titer[lambda_, beta_, d_, k_, a_, u_][{xtime_,ytime_,vtime_}] :=
Module[{x, y, v},
{x, y, v} /. First[NDSolve[{
x'[t] == lambda - d x[t] - beta x[t] v[t],
y'[t] == beta x[t] v[t] - a y[t],
v'[t] == k y[t] - u v[t],
x[0] == 10^9, y[0] == 0, v[0] == 10^9},
{x, y, v}, {t, 0, Max[{xtime,ytime,vtime}]}]]
]
(You probably should use scaling to reduce the size of the initial
values, say from 10^9 to 1). In this way, a solution (note again that
scaling would help), e.g.,
endtimes = {100,120,150};
nsol = titer[10^7, 5 10^-10, 0.1, 500, 0.5, 5][endtimes]
can be plotted (here v is scaled by 10^(-2)),
Plot[Evaluate[{1, 1, 10^(-2)} Through[nsol[t]]],
{t, 0, Min[endtimes]}, PlotRange -> All,
PlotStyle -> {Hue[0], Hue[1/3], Hue[1/2]}];
and then separately compute the endpoints
calcs = Inner[Compose, nsol, endtimes, List]
> minfcn[lambda_, beta_, d_, k_, a_, u_] :=
>
> Module[{i, j},
>
> diffsum =
> Sum[10000*(uninfected[[i, 2]] - calcs[[1, i]])^2 +
> 10000*(infected[[i, 2]] - calcs[[2, i]])^2, {i,
> Length[uninfected]}] +
> Sum[(virus[[j, 2]] - calcs[[3, j]])^2, {j, Length[virus]}];
> diffsum
> ]
>
> minfcn[10^7, 5*10^-10, 0.1, 500, 0.5, 5]
>
> When I evaluate "minfcn" with the values listed above, which are
> "correct" published values, that's where I get my problem. If I
> change the minfcn problem so that the sum doesn't cover the full
> length of each list, but rather only up to a particular element, I get
> one number. Any summation past that point results in the problem I
> have described below.
I do not understand the problem you are encountering. Values for
"virus", "infected", and "uninfected" might help ...
Cheers,
Paul
--
Paul Abbott Phone: +61 8 9380 2734
School of Physics, M013 Fax: +61 8 9380 1014
The University of Western Australia (CRICOS Provider No 00126G)
35 Stirling Highway
Crawley WA 6009 mailto:paul at physics.uwa.edu.au
AUSTRALIA http://physics.uwa.edu.au/~paul