Matematica applicata alle dinamiche fisioloche
Buongiorno,
per un lavoro di gruppo in un corso di modellizzazione agronomica avremmo bisogno di trovare una funzione che assomigli tanto tanto (tanto) a questa:
${(y=3.6, 0<=x<0.4),(y=ax^-b, x>0.4):}$
con a=2.7387 e b=0.3
Visto che nei fenomeni biologici non sono mai presenti "gradini", vorremmo ottenere un qualcosa di più smussato, ma con ancora il pianerottolo iniziale.
Non abbiamo però idea di come muoverci: qualcuno sa darci una dritta?
Grazie!
Carlo
per un lavoro di gruppo in un corso di modellizzazione agronomica avremmo bisogno di trovare una funzione che assomigli tanto tanto (tanto) a questa:
${(y=3.6, 0<=x<0.4),(y=ax^-b, x>0.4):}$
con a=2.7387 e b=0.3
Visto che nei fenomeni biologici non sono mai presenti "gradini", vorremmo ottenere un qualcosa di più smussato, ma con ancora il pianerottolo iniziale.
Non abbiamo però idea di come muoverci: qualcuno sa darci una dritta?
Grazie!
Carlo
Risposte
"Stemby":
avremmo bisogno di trovare una funzione che assomigli tanto tanto (tanto) a questa:
${(y=3.6, 0<=x<0.4),(y=ax^-b, x>0.4):}$
con a=2.7387 e b=0.3
Visto che nei fenomeni biologici non sono mai presenti "gradini", vorremmo ottenere un qualcosa di più smussato, ma con ancora il pianerottolo iniziale.
buongiorno, alcune precisazioni:
assomigli tanto tanto (tanto) = mi dici che ordine di approssimazione ($+-$)?
l'intervallo di x è $[0,+infty]$?
Inoltre servirebbe sapere con che caratteristiche di regolarità vi serve la funzione.
Insomma vi basta continua, o la volete derivabile una volta con derivata continua, o derivabile due volte con le due derivate continue,... oppure derivabile infinite volte (con derivate tutte continue, ovviamente)?
Insomma vi basta continua, o la volete derivabile una volta con derivata continua, o derivabile due volte con le due derivate continue,... oppure derivabile infinite volte (con derivate tutte continue, ovviamente)?
Grazie mille per le risposte.
È difficile dare una misura... tendenzialmente la nuova curva dovrebbe essere sovrapponibile, con lo spigolo però smussato. Tanto più le 2 curve sono sovrapponibili, tanto è meglio. La parte che è più importante che sia "uguale" alla vecchia curva è quella per $x>0.4$.
Diciamo $[0,20]$ (in effetti questo dettaglio mi ero dimenticato di passarlo, scusate).
Basta che sia continua.
Grazie mille per la disponibilità!
"piero_":
assomigli tanto tanto (tanto) = mi dici che ordine di approssimazione ($+-$)?
È difficile dare una misura... tendenzialmente la nuova curva dovrebbe essere sovrapponibile, con lo spigolo però smussato. Tanto più le 2 curve sono sovrapponibili, tanto è meglio. La parte che è più importante che sia "uguale" alla vecchia curva è quella per $x>0.4$.
l'intervallo di x è $[0,+infty]$?
Diciamo $[0,20]$ (in effetti questo dettaglio mi ero dimenticato di passarlo, scusate).
"Gugo82":
Inoltre servirebbe sapere con che caratteristiche di regolarità vi serve la funzione.
Basta che sia continua.
Grazie mille per la disponibilità!
Vabbè, se bastasse la continuità, il problema non ve lo sareste nemmeno dovuto porre, visto che la vostra funzione è già continua (e quindi coincide con la sua "migliore approssimazione" continua).
Quindi suppongo vogliate fare le cose per bene e farvi uscire almeno una funzione di classe $C^1$.
Un'idea semplice è la seguente.
Cercate di sostituire il pezzetto di funzione corrispondente all'intervallo $[x_0,0.45]$ con un pezzetto di parabola $y=alpha x^2+betax+gamma$ con i coefficienti $alpha, beta, gamma$ ed il punto $x_0$ scelti in modo da verificare le condizioni seguenti:
1) il vertice della parabola è in $P=(x_0, 3.6)$;
2) la parabola è convessa (ossia sta tutta sotto il vertice);
3) la parabola passa per il punto $Q=(0.45, a*(0.45)^(-b))$ ed ha in tale punto la stessa tangente della curva $ax^(-b)$ (che è $-ab*(0.45)^(-b-1)$).
Le 1-3) sono quattro condizioni indipendenti che dovrebbero individuare un'unica quattrupla di parametri $(x_0,alpha,beta,gamma)$: se $x_0 \in [0,0.4]$ allora siete contenti e potete scrivere la vostra funzione approssimata come:
$\{(y=3.6, " se " 0<=x<=x_0),(alpha x^2+beta x+gamma, ", se " x_0<=x<=0.45),(a*x^(-b), ", se " x>=0.45):}$
altrimenti, se $x_0 \notin [0,0.4]$, al posto di $0.45$ potete pensare di mettere un numero che stia ancora più vicino a $0.4$ (ad esempio $0.425$ 0 $0.401$...) e ripetere la procedura. (Questa procedura si può iterare; prima o poi il valore di $x_0$ cadrà dove vi fa più comodo.)
I conti forse non saranno molto belli da fare a mano, ma se avete a disposizione qualche programmino tipo Mathematica potete risolvere la questione numericamente senza scervellarvi troppo.
Spero di esservi stato utile.
Quindi suppongo vogliate fare le cose per bene e farvi uscire almeno una funzione di classe $C^1$.
Un'idea semplice è la seguente.
Cercate di sostituire il pezzetto di funzione corrispondente all'intervallo $[x_0,0.45]$ con un pezzetto di parabola $y=alpha x^2+betax+gamma$ con i coefficienti $alpha, beta, gamma$ ed il punto $x_0$ scelti in modo da verificare le condizioni seguenti:
1) il vertice della parabola è in $P=(x_0, 3.6)$;
2) la parabola è convessa (ossia sta tutta sotto il vertice);
3) la parabola passa per il punto $Q=(0.45, a*(0.45)^(-b))$ ed ha in tale punto la stessa tangente della curva $ax^(-b)$ (che è $-ab*(0.45)^(-b-1)$).
Le 1-3) sono quattro condizioni indipendenti che dovrebbero individuare un'unica quattrupla di parametri $(x_0,alpha,beta,gamma)$: se $x_0 \in [0,0.4]$ allora siete contenti e potete scrivere la vostra funzione approssimata come:
$\{(y=3.6, " se " 0<=x<=x_0),(alpha x^2+beta x+gamma, ", se " x_0<=x<=0.45),(a*x^(-b), ", se " x>=0.45):}$
altrimenti, se $x_0 \notin [0,0.4]$, al posto di $0.45$ potete pensare di mettere un numero che stia ancora più vicino a $0.4$ (ad esempio $0.425$ 0 $0.401$...) e ripetere la procedura. (Questa procedura si può iterare; prima o poi il valore di $x_0$ cadrà dove vi fa più comodo.)
I conti forse non saranno molto belli da fare a mano, ma se avete a disposizione qualche programmino tipo Mathematica potete risolvere la questione numericamente senza scervellarvi troppo.
Spero di esservi stato utile.
"Gugo82":
Un'idea semplice è la seguente. [...]
Grazie per il suggerimento!
In questo modo effettivamente si ottiene la smussatura.
L'ideale però sarebbe avere a disposizione un'equazione unica, che funga da "modello". L'idea che abbiamo è infatti di dare questa funzione in pasto a gnuplot, e fargli fare una regressione non lineare basandosi su dei dati sperimentali, in modo che sia poi il software a trovare i coefficienti più adatti a seconda delle diverse condizioni; in pratica la funzione deve solo rappresentare l'andamento del fenomeno, e questo andamento lo studiamo su un caso preso come modello. Non so se è chiaro quel che ho scritto.
I problemi sono quindi questi:
1) non so se gnuplot sia in grado di gestire dei sistemi: credo di no; se invece la risposta è sì, allora siamo a cavallo e procediamo come suggerito da Gugo82.
2) non siamo capaci di trovare un'equazione partendo da un grafico (il contrario dello studio di funzione che si fa al liceo): è un qualcosa di umanamente possibile (in questo caso: come si fa?), solo a portata dei matematici, o del tutto impossibile?
Scusate la terminologia sicuramente poco accurata, ma il nostro campo è un altro... (è fatto di terra)
Grazie ancora per il prezioso supporto
Carlo
"Stemby":
I problemi sono quindi questi:
1) non so se gnuplot sia in grado di gestire dei sistemi: credo di no; se invece la risposta è sì, allora siamo a cavallo e procediamo come suggerito da Gugo82.
la mia breve e ormai vecchia esperienza con gnuplot (che ricordo appena)non mi permette di essere tanto preciso; però ricordo che
era possibile usare comandi pascal, c e fortran. questo mi porta a pensare che sarebbe possibile passare la funzione di gugo in un ciclo if. Ma più facilmente (questo dovreste dirlo voi) non si possono passare i dati in un file .DAT e successivamente plottarli?
gnuplot > plot 'nomefiledati.dat' with linespoints
o qualcosa del genere

p.s.
provate a chiedere qui informazioni sulle potenzialità di gnuplot, vi aiuteranno sicuramente:
https://www.matematicamente.it/forum/inf ... a-f15.html
"piero_":
la mia breve e ormai vecchia esperienza con gnuplot (che ricordo appena)non mi permette di essere tanto preciso; però ricordo che
era possibile usare comandi pascal, c e fortran. questo mi porta a pensare che sarebbe possibile passare la funzione di gugo in un ciclo if.
Ci sto pensando su, e temo che questa strada sia davvero difficile da seguire: la parte che varia maggiormente è il ramo di iperbole, quindi basterebbe fare la regressione solo su quella parte della curva. Il problema è che probabilmente l'intorno di $x$ in cui si colloca la parabola non sarà sempre 0.4, ma cambierà da situazione a situazione; ciò renderebbe davvero ostico questo approccio. Comunque lunedì ne parlo con gli altri e sento cosa ne pensano.
Ma più facilmente (questo dovreste dirlo voi) non si possono passare i dati in un file .DAT e successivamente plottarli?
No: la rappresentazione grafica a noi interessa poco/niente, quello che stiamo cercando è un'equazione da inserire in un modello matematico. I dati sperimentali servono per mettere a punto il modello (in pratica un simulatore), che alla fine sarà in grado di prevedere le rese temporalmente prima che il ciclo colturale sia chiuso: capisci bene che di dati misurati da plottare non ce ne saranno proprio, in fase di utilizzo.
provate a chiedere qui informazioni sulle potenzialità di gnuplot, vi aiuteranno sicuramente:
https://www.matematicamente.it/forum/inf ... a-f15.html
Ok, se prendiamo la strada del sistema, non esiterò a domandare lumi.
Vi ringrazio tantissimo; ovviamente se vi venisse in mente qualcos'altro, accogliamo qualsiasi idea a braccia aperte

Buon weekend
Carlo
"Stemby":Perché?
Buongiorno,
per un lavoro di gruppo in un corso di modellizzazione agronomica avremmo bisogno di trovare una funzione che assomigli tanto tanto (tanto) a questa:
"Stemby":Perché? NON è vero. Se i piccini di una specie nascono concentrati in un giorno, si avrà un gradino (magari le spore che finalmente trovano un ambiente adatto: un acquazzone, per esempio...).
Visto che nei fenomeni biologici non sono mai presenti "gradini", vorremmo ottenere un qualcosa di più smussato, ma con ancora il pianerottolo iniziale.
O, meglio, non è una scelta furba, modellisticamente parlando, volere a tutti i costi smussare il gradino. Si può fare, ma non serve. A meno che uno non sia interessato a descrivere in dettaglio la dinamica della popolazione proprio nel giorno della "schiusa".
Poi, ovviamente, questo NON è vero se il fenomeno biologico è sottoposto a perturbazioni esterne (se oggi rilascio 1000 carpe...). O se pianto le patate.
"Fioravante Patrone":Perché?[/quote]
[quote="Stemby"]
Buongiorno,
per un lavoro di gruppo in un corso di modellizzazione agronomica avremmo bisogno di trovare una funzione che assomigli tanto tanto (tanto) a questa:
Perché quella è la funzione inserita da circa 20 anni nei principali modelli di simulazione agronomica, funzione che stiamo cercando di migliorare.
"Stemby":Perché?
Visto che nei fenomeni biologici non sono mai presenti "gradini", vorremmo ottenere un qualcosa di più smussato, ma con ancora il pianerottolo iniziale.
Va beh, diciamo che forse sono stato un po' sbrigativo: in effetti esistono senz'altro dei sistemi di sincronizzazione in molti fenomeni, ma non è comunque mai come accendere un interruttore, ci sarà sempre una curva (più o meno ripida). Anche la nascita dei pulcini non avviene esattamente allo stesso istante, sebbene sia ravvicinata.
Ad ogni modo, nel nostro caso, la curva rappresenta la concentrazione di azoto in funzione della biomassa di una pianta di riso: non abbiamo alcun indizio che ci faccia supporre che ad un certo momento ci sia un cambiamento improvviso e tanto marcato (c'è proprio uno spigolo!) nel comportamento della pianta, la cosa non ha proprio senso, quindi quel gradino è da smussare.
Comunque la mia domanda non era se la curva che vogliamo ottenere rappresenti meglio o peggio la realtà rispetto a quella che vi ho passato, per questo faremo poi noi tutte le verifiche del caso; la mia domanda era: è possibile ottenere l'equazione di una funzione partendo da un grafico? Se sì, come?
[edit]
Andando più o meno a caso, mi sembra che quello che stiamo cercando sia sostanzialmente un'interpolazione polinomiale, mentre quanto suggerito sia un'interpolazione spline.
http://it.wikipedia.org/wiki/Interpolazione
Vedrò di approfondire la cosa; ovviamente qualsiasi aiutino è ben accetto!
[/edit]
"Stemby":
non è comunque mai come accendere un interruttore, ci sarà sempre una curva (più o meno ripida). Anche la nascita dei pulcini non avviene esattamente allo stesso istante, sebbene sia ravvicinata.
Veramente, interruttore = pulcini...