Un farmaco ha inizialmente una concentrazione plasmatica di 138 mg/ml. Dopo 20' la concentrazione in mg/ml è 84, dopo 40' è 52, dopo 60' è 30, dopo 80' è 18. Sapendo che l'andamento della concentrazione è approssimativamente esponenziale, schizza il grafico della concentrazione in funzione del tempo a partire dalla rappresentazione dei dati sperimentali. Cerca di individuare una formula che esprima la concentrazione in funzione del tempo.
Vediamo come affrontare il quesito sia col software online WoframAlpha sia con R.
Con WoframAlpha (vedi) è molto semplice affrontare il problema.
Posso realizzare facilmente il grafico coi comandi seguenti, ottenendo la figura sottostante a sinistra:
Posso poi cercare una funzione esponenziale che approssima i punti col comando seguente:
Otteniamo sia "formula" che "grafico" (quello sopra a destra):
Il dato 138 era arrotondato agli interi, quindi possiamo accontentarci. Se volessimo avere il punto inziale di ordinata 138.0 potremmo introdurre nel comando altri punti (0,138):
La formula cercata è 138 · e-0.0250
Il grafico, realizzato utilizzando R, che rappresenta i punti sperimentali, e li congiunge con una spezzata:
source("http://macosa.dima.unige.it/r.R") # se non già caricato t = c( 0, 20, 40, 60, 80) C = c(138,84, 52, 30, 18) BF=4; HF=3; Plane(0,85, 0,140); POINT(t,C,"brown") polyli(t,C, "brown")
La funzione è una esponenziale decrescente,
del tipo C: t → 138·at con 0 < a < 1.
So che il grafico, oltre che per (0,138), passa per (80,18). Quindi occorre che
(1) Posso usare il computer per risolverla rispetto ad a; facciamolo
con R, tenendo conto che a deve essere compreso tra 0 ed 1:
g = function(a) a^80; solution(g,3/23, 0,1)
# 0 . 9748604
(2) Ovvero posso procedere così:
80*log(a) = log(3/23)
log(a) = log(3/23)/80
a = exp(log(3/23)/80) = 0 . 9748604.
Naturalmente, questa è una soluzione approssimata in quanto approssimati erano i dati.
Posso prendere a = 0.975.
(3) Ovvero si potrebbe usare una tecnica di regressione (vedi).
(4) O si potrebbe usare un programma di approssimazione più generale (vedi), che dà
gli stessi risultati della regressione:
yy2 = function(U,V,x) U*V^x; Fun = function(x) U0*V0^x dif = 1e300 m1=0; M1=1000; m2=0; M2=1; F_RUN2(x,y,1e5); cat(U0,V0," d:",NUMBER(dif^0.5),"\n") # 141.5879 0.9736378 d: 5.40196029231507 m1=130; M1=150; m2=0.9; M2=1; F_RUN2(x,y,1e5); cat(U0,V0," d:",NUMBER(dif^0.5),"\n") # 138.3163 0.9753105 d: 1.61828404438379 m1=135; M1=145; m2=0.97; M2=0.99; F_RUN2(x,y,1e5); cat(U0,V0," d:",NUMBER(dif^0.5),"\n") # 138.2208 0.9753055 d: 1.61501928725431 m1=138; M1=139; m2=0.975; M2=0.976; F_RUN2(x,y,1e5); cat(U0,V0," d:",NUMBER(dif^0.5),"\n") # 138.2351 0.9753068 d: 1.61483535999011 m1=138.2; M1=138.3; m2=0.9753; M2=0.9754; F_RUN2(x,y,1e5); cat(U0,V0," d:",NUMBER(dif^0.5),"\n") # 138.2373 0.9753073 d: 1.61483061279149 Ct = function(t) 138.2373*0.9753073^t BF=4; HF=3; Plane(0,85, 0,140); POINT(t,C,"brown") graph1(Ct, 0,85, "brown")