Etude de fonction pour maintenir une valeur constante

rhadamanthe

XLDnaute Junior
Bonjour,

Imaginons que l'on ait un composé qui se dissolve avec le temps libérant un composé actif suivant une fonction f(t).

Hors, on veut garder la valeur d'activité constante dans le système c'est à dire ajouter une quantité de produit à un intervalle de temps suffisant.

A la main (cf feuille jointe), j'arrive à le faire sur un intervalle de temps court. Néanmoins, je me demandais si vous auriez des pistes pour améliorer le calcul.

Spécialistes d'excel intéressés, je suis à votre disposition pour apporter les modifications nécessaires à ce fichier. :D

Bonne soirée à ceux qui me liront!

rhad
 

Pièces jointes

  • Ajout pour maintenir activité constante.xls
    29 KB · Affichages: 92

ROGER2327

XLDnaute Barbatruc
Re : Etude de fonction pour maintenir une valeur constante

Bonjour rhadamanthe
Un essai avec cette procédure qui calcule les ajouts nécessaires et donne le tableau de variation de ce que vous appelez f(t) globale, que je nomme F(t).
Code:
[B][COLOR="DarkSlateGray"]Sub tata()
Dim masse#, cible#, tol#, vmin#, vmax#
Dim t#, tmp#, i&, j%, n&, pas%, delta#
Dim table#(), nt&
Dim gr(), ng&, sg&
[COLOR="SeaGreen"]'[/COLOR]
   masse = 1
   cible = 30
   tol = 0.05
[COLOR="SeaGreen"]'[/COLOR]
   pas = 100
[COLOR="SeaGreen"]'[/COLOR]
   vmin = cible * (1 - tol)
   vmax = cible * (1 + tol)
   nt = 0
   t = -pas
   For n = 1 To 30
      For j = 0 To 5 [COLOR="SeaGreen"]' 14[/COLOR]
         delta = pas / 10 ^ j
         Do
            t = t + delta
            tmp = masse * f(t)
            For i = 1 To nt
               tmp = tmp + table(2, i) * f(t - table(1, i))
            Next i
         Loop While tmp > vmin
         t = t - delta
      Next j
      tmp = masse * f(t)
      For i = 1 To nt
         tmp = tmp + table(2, i) * f(t - table(1, i))
      Next i
      nt = nt + 1
      ReDim Preserve table(1 To 3, 1 To nt)
      table(1, nt) = t
      table(2, nt) = (vmax - tmp) / f(0)
      table(3, nt) = tmp
   Next n
   Range(Cells(1, 1), Cells(nt, 2)).Offset(1, 0).Value = WorksheetFunction.Transpose(table)
[COLOR="SeaGreen"]'[/COLOR]
   ng = 0
   pas = 50
   For n = 0 To 100
      t = n * pas
      tmp = masse * f(t)
      For i = 1 To nt
         If t > table(1, i) Then
            tmp = tmp + table(2, i) * f(t - table(1, i))
         Else
            sg = i
            Exit For
         End If
      Next i
      ng = ng + 1
      ReDim Preserve gr(1 To 3, 1 To ng)
      gr(1, ng) = t
      gr(2, ng) = tmp
      If t + pas > table(1, sg) Then
         ng = ng + 1
         ReDim Preserve gr(1 To 3, 1 To ng)
         gr(1, ng) = table(1, sg)
         gr(2, ng) = table(3, sg)
         tmp = masse * f(table(1, sg))
         For i = 1 To sg
            tmp = tmp + table(2, i) * f(table(1, sg) - table(1, i))
         Next i
         ng = ng + 1
         ReDim Preserve gr(1 To 3, 1 To ng)
         gr(1, ng) = table(1, sg)
         gr(2, ng) = tmp
         gr(3, ng) = table(2, sg)
      End If
   Next n
   Range(Cells(1, 4), Cells(ng, 6)).Offset(1, 0).Value = WorksheetFunction.Transpose(gr)
End Sub[/COLOR][/B]
Voyez la feuille Feuil2 du classeur joint.​
ROGER2327
#4002


Mercredi 11 Phalle 137 (Sainte Lèchefrite, botteuse, SQ)
4 Fructidor An CCXVIII
2010-W33-6T00:23:38Z
 

Pièces jointes

  • rhadamanthe_4002.zip
    15.9 KB · Affichages: 25

rhadamanthe

XLDnaute Junior
Re : Etude de fonction pour maintenir une valeur constante

Bonjour Roger!

:eek::eek: Impressionnant!

C'est exactement ce que je voulais obtenir. Quant à la méthode, j'avoue ne pas avoir tout assimilé mais je vais sérieusement me pencher dessus.

Un grand merci. :)

rhad
 

ROGER2327

XLDnaute Barbatruc
Re : Etude de fonction pour maintenir une valeur constante

Bonjour rhadamanthe
Voici une version un peu moins brute de fonderie, notamment en ce qui concerne le paramétrage.​
ROGER2327
#4003


Mercredi 11 Phalle 137 (Sainte Lèchefrite, botteuse, SQ)
4 Fructidor An CCXVIII
2010-W33-6T09:08:36Z
 

Pièces jointes

  • rhadamanthe_4003.zip
    15.3 KB · Affichages: 29

rhadamanthe

XLDnaute Junior
Re : Etude de fonction pour maintenir une valeur constante

Merci bien.

Evidemment, ce produit est toxique et l'activité ne doit pas dépasser la cible.
Ainsi, la masse initiale peut être calculé directement via cible/f(0) tandis que dans le tableau, à t=0, on aura la masse initiale ajoutée.

Ensuite, il convient de fixer un palier de masse cible à ne pas dépasser dans le système à partir duquel, il faut retirer une partie de l'ancienne masse de produit moins active pour la remplacer par la nouvelle.

Je joins votre fichier excel modifié avec les ajouts en rouge à la main. J'avoue que votre macro dépasse de loin mon niveau actuel (qui ne demande qu'à progresser). Il va me falloir un peu de temps pour tout comprendre. :)

Bonne journée,

rhad
 

Pièces jointes

  • rhadamanthe_4003re.xls
    43 KB · Affichages: 64

ROGER2327

XLDnaute Barbatruc
Re : Etude de fonction pour maintenir une valeur constante

Re...
Vous faites bien de relancer la discussion.
Je n'ai pas trouvé de solution au problème, et j'ai même rencontré des difficultés insoupçonnées. J'y reviendrai peut-être, mais la complexité du problème fait qu'il faudrait y consacrer un temps que je n'ai pas en ce moment.
J'espère que d'autres trouveront quelques pistes permettant d'avancer : plus il y a de points de vue, meilleure est la vision !
Bon courage et peut-être à bientôt.​
ROGER2327
#4074


Dimanche 1er Absolu 138 (Nativité d' Alfred Jarry, SPp)
22 Fructidor An CCXVIII
2010-W36-3T01:19:04Z
 

rhadamanthe

XLDnaute Junior
Re : Etude de fonction pour maintenir une valeur constante

Bonsoir,

Après quelques temps de réflexion :

N'est il pas possible d'ajouter une fonction masse totale ? Une fois que la masse totale dans le systeme est atteinte, le retrait et ajout vont se faire en quantité constante. Aussi, une fois que la masse totale atteint un certain seuil, il suffirait de passer en mode retrait ajout à intervalle de temps constant ?

Qu'en pensez vous ?

Bonne soirée,

rhad