Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Problem of NUMERICAL constraints (Ndsolve) with Nminimize

  • To: mathgroup at smc.vnet.net
  • Subject: [mg100876] Re: Problem of NUMERICAL constraints (Ndsolve) with Nminimize
  • From: laianhngoc at yahoo.com
  • Date: Wed, 17 Jun 2009 04:36:04 -0400 (EDT)
  • Reply-to: laianhngoc at yahoo.com

Hi Daniel,
 
I understand what u want to say. In other words, do u think that is not
one of inconvenient of Mathematica???
 
Thanks.
 
Anh. 

--- On Wed, 6/17/09, dh <dh at metrohm.com> wrote:


From: dh <dh at metrohm.com>
Subject: [mg100876] Re: Problem of NUMERICAL constraints (Ndsolve) with Nminimize
To: laianhngoc at yahoo.com
Date: Wednesday, June 17, 2009, 1:21 AM


Hi,
your main problem is not the time it takes to solver 1000 differential equa=
tions (DE), but that "x" appears in the DE. That is, for different x, you h=
ave different DE. Therefore, you can not numerically pre-solve the DE. That=
 would only be possible if you were able to symbolically solve the DE with =
x a parameter.
Daniel

laianhngoc at yahoo.com wrote:
> Hi,
>
> Let take an simple example:
>
> f[x_?NumericQ] := y[0.5] /.NDSolve[{y'[t] == (x*y[t] + Exp[-t])/(1 =
+ y[t]), y[0] == 1},y, {t, 0, 1}][[1, 1]];
>
> cons[x_] := Table[i f[x] > 0, {i, 1000}]; fun[x_?NumericQ] := x^2;
>
> NMinimize[Prepend[cons[x], fun[x]], x]// Timing
>
> and the result : {38.5, {5.55112*10^-17, {x -> -7.45058*10^-9}}}
>
> Here i have a Table : {1*f[x]>0,...,1000*f[x]>0} as constraints. Do you t=
hinks that there is a problem of REevaluate of Ndsolve 1000 times? so what =
i want to do is to compute f[x] One time for All in the constraints. Do u t=
hinks that i can do it in Mathematica? Another system can do something like that bu=
t i dont see how with Mathematica, and i need Mathematica to solve my probl=
em.
>
> Thanks for your help.
>
> Anh.
>
> --- On *Tue, 6/16/09, dh /<dh at metrohm.com>/* wrote:
>
>
>     From: dh <dh at metrohm.com>
>     Subject: Re: Problem of NUMERICAL constraints (Ndsolve) with =
Nminimize
>     To: "Anh Ngoc LAI" <laianhngoc at yahoo.com>
>     Date: Tuesday, June 16, 2009, 7:10 AM
>
>     Hi,
>     I still not sure what you try to do. Try to give a simple exa=
mple.
>     Are you trying to construct the constrains using a function?
>     This can be done like:
>     =====================
======
>     cons[x_] := Table[x > i, {i, 3}];
>     fun[x_?NumericQ] := x^2;
>     NMinimize[Prepend[cons[x], fun[x]], x]
>     =====================
=====
>     However, if the constrains change with x, your are out of luc=
k.
>     Daniel
>
>
>     Anh Ngoc LAI wrote:
>      > Hi Daniel,
>      >
>      > Thanks for your reply,
>      >
>      > I want to minimize a function using NMinimize and and a lot =
of
>     constrains (about 1000). But
>      > the constraints are not in that CONCRET form like your examp=
le. I
>     have to construct it using the form (for example) :
>      >
>      > f[x_?NumericQ, ...] = With[{a=A[0.5]/.NDSolve[x],...}, C=
[a,y[[i]]]]
>      >      > where y[[i]] is data and C[a,y[[i]]] depend on =
y[[i]]: if y[[i]]
>     is 1000 data then C[a,y[[i]]] is a List of 1000 elements.
>      >
>      > Then i use f[x,...] for my constraints (C[a,y[[i]]]>0).
>      >
>      > And here come the problem:
>      >
>      > + If C[a,y[[i]]] is a scalar, i have no problem, i just put
>     f[x,...]>0 on my constraint and it's ok.
>      >
>      > ++ But if C[a,y[[i]]] is a List of Element, I dont know what=
 can
>     i do, because for Mathematica, f[x, ...] is just one element,=
 not a
>     List.
>      >
>      > Are there any way that Mathematica take directly C[a,y[[i]]]=
 as
>     constraints or understant that f[x, ...] is a List ??? it see=
ms to
>     me that we can not do it with Mathematica??? i lost a lot of =
time
>     for it but i dont see how?
>      >
>      > I'm thinking to create 1000 functions like :
>      >
>      > f1[x_?NumericQ, ...] = With[{a=A[0.5]/.NDSolve[x],...}, =
C[a,y[[1]]]];
>      >
>      > ...
>      >
>      > f1000[x_?NumericQ, ...] = With[{a=A[0.5]/.NDSolve[x],...=
},
>     C[a,y[[1000]]]];
>      >
>      > As you see, Mathematica have to REcalcule "a" each time, and=
 that
>     can take a lot of time. To ovecome the problem of time, i thi=
nk to
>     use Memoization but the memory may fill up quickly.
>      >
>      > Well, in all cases, i will try this last option but any
>     suggestions will be very very very welcome.
>      >
>      > Thanks.
>      >
>      > Anh.
>      >
>      > --- On *Tue, 6/16/09, dh /<dh at metrohm.com>/* wrote:
>      >
>      >
>      >     From: dh <dh at metrohm.com>
>      >     Subject: Re: Problem of NUMERICAL constraints (N=
dsolve) with
>     Nminimize
>      >     To: "Anh Ngoc LAI" <laianhngoc at yahoo.com>
>      >     Date: Tuesday, June 16, 2009, 1:39 AM
>      >
>      >     Hi Anh,
>      >     if I understand correctly, you want minimize a f=
unction using
>      >     NMinimize and several constrains.
>      >     Here is an example:
>      >     =================
======
>      >     fun=x^2 - (y - 1)^2
>      >     cons={x^2 + y^2 <= 4, x > 1}
>      >     NMinimize[Prepend[cons, fun], {x, y}]
>      >     =================
=======
>      >     Daniel
>      >
>      >     Anh Ngoc LAI wrote:
>      >      > Hello everybody,
>      >      >  I have to optimize an function with numerica=
l constraints
>     using
>      >     Nminimize. To construct the constraints, i have =
to solve a
>     system of
>      >     ODEs (type):
>      >      >  Sol=NDSolve[{{B'[
>      >      >       t] == -(t6 + t13) B[t] -(t7=
 + t15 + t14*t11) F[
>      >      >         t] +(1/2)*(B[t] B[t] + t11*=
F[t] F[t] + t12*GG[t]
>     GG[t]) - t2,
>      >      >     F'[t] == -t8*F[t] - t3,
>      >      >     GG'[t] == -(t9 + t16) F[t] - (t=
10 + t17) GG[t] - t4,
>      >      >     A'[t] ==
>      >      >      t5 B[t] +((t5*t7/t6) - t14) F[
>      >      >            t] +(1/2)*(F[t] F[t] + G=
G[t] GG[t]) - t1}, {B[0] ==
>      >     F[0] ==
>      >      >       GG[0] == A[0] == 0}}, {=
B, F, GG, A}, {t, 0, 10}][[1]]
>      >      >  where t1,...,t17 are parameters to obtain.
>      >      >  and then i have to use A,B,F,GG and my data =
to construct this
>      >     constraints.
>      >      >  So i use WITH (or Block) commend for it:
>      >      >  f[t1_?NumericQ, t2_?NumericQ, t3_?NumericQ, =
t4_?NumericQ,
>      >      >   t5_?NumericQ, t6_?NumericQ, t7_?Numeric=
Q, t8_?NumericQ,
>      >      >   t9_?NumericQ, t10_?NumericQ, t11_?Numer=
icQ, t12_?NumericQ,
>      >      >   t13_?NumericQ, t14_?NumericQ, t15_?Nume=
ricQ, t16_?NumericQ,
>      >      >   t17_?NumericQ] := With[{...}, C]
>      >      >  Here C are constraints to put on Nminimize o=
ptimization.
>      >      >  I don't know how to deal with this, if C is =
only one
>     constraint
>      >     i have no problem with, but
>      >      > here C is a list. For Mathematica,
>      >      > f1[t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11=
, t12, t13,
>     t14,
>      >     t15, t16, t17] is only one
>      >      > element and not a List.
>      >      >  I think to another way to solve this problem=
 which is to get
>      >     A,B,F,GG by defining functions
>      >      > directly with Ndsolve (then construct constrain=
ts with Data
>      >     without using WITH) but i have
>      >      > to evaluate a lot of time NDSOLVE on my procedu=
re, and it
>     take a
>      >     much of time.
>      >      >
>      >      > That will be great if someone could give an ide=
a.
>      >      >  Thanks.
>      >      >
>      >
>      >
>
>
>     --     Daniel Huber
>     Metrohm Ltd.
>     Oberdorfstr. 68
>     CH-9100 Herisau
>     Tel. +41 71 353 8585, Fax +41 71 353 8907
>     E-Mail:<mailto:dh at metrohm.com>
>     Internet:<http://www.metrohm.com>
>
>


--
Daniel Huber
Metrohm Ltd.
Oberdorfstr. 68
CH-9100 Herisau
Tel. +41 71 353 8585, Fax +41 71 353 8907
E-Mail:<mailto:dh at metrohm.com>
Internet:<http://www.metrohm.com>


  • Prev by Date: Re: Time for an integration
  • Next by Date: Re: What should be a simple task....
  • Previous by thread: Re: Problem of NUMERICAL constraints (Ndsolve) with Nminimize
  • Next by thread: Extracting contour values from ContourPlot