NMininimize vs. FIndMinimum with NDSolve?
- To: mathgroup at smc.vnet.net
- Subject: [mg51135] NMininimize vs. FIndMinimum with NDSolve?
- From: Manuel Morales <Manuel.A.Morales at williams.edu>
- Date: Tue, 5 Oct 2004 04:37:45 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Is it possible to use NMinimize to estimate parameters for a
differential equation solved with NDSolve? I *am* able to use
FindMinimum, but NMinimize doesn't seem to work...
Here is what I am doing using FindMinimum:
sse[r_?NumberQ, q_?NumberQ] := Block[{sol, f},
Plus @@ Table[
sol = NDSolve[{f'[t] == r f[t] + q f[t]^2,
f[0] == data[[i]][[1]][[2]]},
f, {t, 0, 10}][[1]];
Plus @@ Apply[(f[#1] - #2)^2 &, data[[i]], {1}] /. sol, {i, 1,
Length[data]}]];
params = FindMinimum[sse[r, q], {r, .1, .2}, {q, -.001, -.002}]
However, using NMinimize to estimate doesn't work. That is, if I replace
the last line with:
params = NMinimize[sse[r, q], {r, q}]
I get a bunch of error messages.
Thanks for any help. If anyone wants to try this, you can generate a
test data set below:
Block[{r, q},
r = .5; q = -.001;
data = Table[
sol = NDSolve[{f'[t] == r f[t] + q f[t]^2, f[0] == j},
f, {t, 0, 10}][[1]];
Table[{i, f[i] /. sol}, {i, 0, 10, 2}],
{j, 1, 301, 150}]
]
Manuel