logo

Optimisation avec Mathematica 6


logicielsOptimisation avec Mathematica 6

#msg2494216 Posté le 16-07-09 à 14:18
Posté par Profillazlo lazlo

Bonjour,

J'ai conçu un problème générique pour une difficulté que je rencontre souvent sur des problèmes plus complexes.

Il s'agit de définir une fonction f[a,b] qui est la valeur x[tf] pour y[tf]=0 où x[t] et y[t] sont définis par des équations différentielles.

f[a0_, b0_] :=
Module[{a = a0, b = b0},
  eq1 = x'[t] == a;
  eq2 = y'[t] == b - 10 t;
  sol = NDSolve[
    {eq1, eq2, x[0] == 0, y[0] == 10},
    {x, y},
    {t, 0, \[Infinity]},
     Method -> {EventLocator, "Event" -> y[t],
      "EventAction" :> Throw[end = t, "StopIntegration"]}];
  First[x[end] /. sol]]

Jusque là tout va bien comme le montre:

{f[5, 5], f[5, 20], f[20, 5], f[20, 20]}
{10., 22.2474, 40., 88.9898}

là, je tente l'optimisation (triviale ici):

NMaximize[{First[f[a, b]], 5 <= a <= 20, 5 <= b <= 20}, {a , b}]

et j'obtiens:
NDSolve::ndnum: Encountered non-numerical value for a derivative at t \
== 0.`. >>
ReplaceAll::reps: {NDSolve[{(x^\[Prime])[t]==a,(y^\[Prime])[t]==b-10 \
t,x[0]==0,y[0]==10},{x,y},{t,0,\[Infinity]},Method->{EventLocator,\
Event->y[t],EventAction:>Throw[end=t,StopIntegration]}]} is neither a \
list of replacement rules nor a valid dispatch table, and so cannot \
be used for replacing.

Alors que f est bien défini sur tout le domaine d'optimisation...

C'est sans doute une erreur assez simple que je n'arrive pas à détecter.
Est-ce que quelqu'un peux m'aider?

Lazlo

PS: désolé pour la mise en forme un peu cahotique, mais c'est pire en LaTex
il faut forcer l'évaluation numérique:#msg2494819 Posté le 17-07-09 à 22:56
Posté par Profillazlo lazlo

f[a0_?NumberQ, b0_?NumberQ] :=
Module[{a = a0, b = b0, x, y, t, end},
  First[x[end] /. NDSolve[
     {x'[t] == a, y'[t] == b - 10 t, x[0] == 0, y[0] == 10},
     {x, y},
     {t, 0, \[Infinity]},
      Method -> {EventLocator, "Event" -> y[t],
       "EventAction" :> Throw[end = t, "StopIntegration"]}]]]
NMaximize[{f[a, b], 5 <= a <= 20, 5 <= b <= 20}, {a , b}]
{88.9898, {a -> 20., b -> 20.}}

Répondre à ce sujet

réservé Seuls les membres peuvent poster sur le forum !

Vous devez être connecté pour poster
attention Un modérateur est susceptible de supprimer toute contribution qui ne serait pas en relation avec le thème de discussion abordé, la ligne éditoriale du site, ou qui serait contraire à la loi.

  • Ce topic

    imprimer Imprimer
    réduire la tailleRéduire   /   agrandir la tailleAgrandir

    Pour plus d'options, connection connectez vous !
  • Fiches de maths



maths - prof de maths haut de pagehaut Retrouvez cette page sur ilemaths l'île des mathématiques
© Tom_Pascal & Océane 2012