A lato è rappresentato [in μmoli/(m²·s), micromoli per m² al secondo] il tasso di assimilazione di anidride carbonica di una foglia di fagiolo rosso esposta a un intenso e costante livello luminoso che hanno rilevato alcuni scienziati.  I tempi sono 5, 8, 11, …, 89 ore. T rappresenta il valore numerico di questi dati:
T=c(17.7,17.9,16.7,15.5,14.2,13.7,14.3,15.0,15.6,
  15.9,15.5,13.7,12.6,11.0,9.6,9.1,9.4,10.5,11.2,
  10.3,9.3,8.5,8.0,8.1,8.2,8.3,8.5,7.9,7.3)
Usando del software, traccia una curva che passi per i punti, calcola l'anidride carbonica assimilata nel tempo considerato e traccia il grafico del tasso istantaneo di variazione.
   

I dati sono ricavati da un articolo (Environmental effects on circadian rhythms in photosynthesis and stomatal opening) di Hennesey et al., Planta, 1993.  Procediamo usando vari software:  degli script,  R.


Il grafico con questo script.

Per trovare l'anidride carbonica assimilata devo calcolare l'integrale. Uso lo script area introducendo:

y:  0, 17.7, 17.9, 16.7, 15.5, 14.2, 13.7, 14.3, 15.0, 15.6, 15.9, 15.5, 13.7, 12.6, 11.0, 9.6, 9.1, 9.4, 10.5, 11.2, 10.3, 9.3, 8.5, 8.0, 8.1, 8.2, 8.3, 8.5, 7.9, 7.3, 0
x:  5, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35, 38, 41, 44, 47, 50, 53, 56, 59, 62, 65, 68, 71, 74, 77, 80, 83, 86, 89,89

Ottengo     993     che arrotondo a 990
  

La sequenza 5, 8, 11, ..., 89, invece che battendo i valori uno ad uno, posso ottenerla con lo script calcolatrice. Cliccando [N] con input 29 ottengo 1,...,29. Con 3 in [Q] e [data*Q] ottengo 3,...,87. Metto questi dati in input, metto 2 in [Q]; con [data+Q] ottengo 5,...,89.

Per ottenere il grafico del tasso istantaneo di variazione (derivata) introduco  17.7, 17.9, ..., 7.9, 7.3  nello script  repeated differences.
Poi impiego il risultato per ottenere il grafico a lato con questo script.
  


# Usiamo R (vedi).
source("http://macosa.dima.unige.it/r.R")   # se non ho già caricato il file
# Rappresento i punti e traccio la spline passante per essi
h = seq(5,89,3)
f = c(17.7,17.9,16.7,15.5,14.2,13.7,14.3,15.0,15.6,15.9,15.5,13.7,12.6,
   11.0,9.6,9.1,9.4,10.5,11.2,10.3,9.3,8.5,8.0,8.1,8.2,8.3,8.5,7.9,7.3)
BF=5; HF=3; Plane(0,100, 0,20); POINT(h,f, "brown")
abovex("h"); abovey("micorm./(s*m^2)")
graph1( splinefun(h,f),5,89,"seagreen" )
# Suppongo che i valori sian ben approssimati. # Altrimenti dovrei tracciare una curva che li approssimi. # Ecco l'integrale, che rappresenta l'anidride carbonica assimilata; # per calcolare l'integreale di una spline: INTEGRAL = function(x,y) areaPol( c(x[length(x)],x[1],x), c(0,0,y) ) # Il calcolo, e la rappresentazione grafica: L = spline(h,f,1000); INTEGRAL(L$x,L$y) # 993.4234 che arrotondo a 990 zero = function(x) 0; Diseq(zero,F, 5,89, "seagreen")
# Il grafico del tasso istantaneo di variazione (derivata):
Plane(5,90, -1,1); splinefunD(h,f, 1, "blue") # # Per avere un andamento più liscio, e valutare meglio la deriata, posso fare delle medie mobili: n =length(h); D1 = f; nD = n D2=D1[1]; for( i in 2:(nD-1) ) D2[i]=(D1[i-1]+D1[i]+D1[i+1])/3; D2=c(D2,D1[nD]) f1=D2 BF=5; HF=3; Plane(0,100, 0,20); POINT(h,f1, "brown") graph1( splinefun(h,f1),5,89,"seagreen" ) Plane(5,90, -1,1); splinefunD(h,f1, 1, "blue") # Ho tolto le piccole oscillazioni:
# Il grafico taglia l'asse orizzontale in corrispondenza dei max/min

I dati sono ripresi anche in manuale matematico per biologi (molto diffuso nel 2019), per introdurre il concetto di derivata e i metodi di integrazione, ma analizzati matematicamente in un un modo decisamente buffo  (quando, come abbiamo visto, era banale analizzarli anche con dei semplici script).  I dati vengono approssimati con la funzione:

A = function(t) 18-0.12*t+exp(-0.0001*t)*sin(t/4.2)

In realtà viene considerata sempre la funzione "18−0.2*t+...", ma si capisce che si tratta di un errore di scrittura di cui gli autori non si sono accorti. Ecco la rappresentazione di questa funzione e della sua derivata. Al di là delle funzioni spline, si potevano considerare infinite altre funzioni continue e derivabili che approssimasserro meglio i dati!!!