Inscription / Connexion Nouveau Sujet
Niveau logiciels
Partager :

Optimisation avec Mathematica 6

Posté par
lazlo
16-07-09 à 14:18

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

Posté par
lazlo
il faut forcer l'évaluation numérique: 17-07-09 à 22:56

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.}}



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !