Una tipica curva sigmoide è la curva tanh (x).
Per definizione,
tanh(x) = sinh(x)/cosh(x) =
= [(1/2) (e^x - e^-x)]/[(1/2) (e^x + e^-x)] =
= (e^x - e^-x)/(e^x + e^-x) =
= (e^(2x) - 1)/(e^(2x) + 1)
http://privat.rejbrand.se/tanh.png
(High-res)
Si noti che le linee di simmetria sono spostate rispetto alla foto del campione.Per fare un aspetto grafico tanh più come tuo esempio, è sufficiente spostarlo verso l'alto e verso destra:
y = 1 + (e^(2x - 6) - 1)/(e^(2x - 6) + 1)
http://privat.rejbrand.se/tanh2.png
(High-res)
In JavaScript si implementa questa espressione più efficiente
exp2x = Math.exp(2*x)
y = (exp2x - 1)/(exp2x + 1)
Aggiornamento (di nuovo)
OK, se si desidera che y sia compreso tra 0 e 100 e x sia compreso tra 0 e 100, t Han si potrebbe desiderare di provare
y = 50 + 50*tanh((x−50)/10)
che assomiglia
http://privat.rejbrand.se/tanh3.png
(High-res)
Ora
y = 50 + 50 * tanh((x−50)/10)
= 50 + 50 * (e^((x−50)/5) - 1)/(e^((x−50)/5) + 1)
La funzione di errore, ERF, sembra abbastanza simile, ma è molto più difficile da calcolare (a meno che JavaScript non abbia un divertimento erf incorporato zione).
Ryan (OP) ha aggiunto: implementato!
var y = 50 + 50 * tanh((n-50)/10);
function tanh (arg) {
return (Math.exp(arg) - Math.exp(-arg))/(Math.exp(arg) + Math.exp(-arg));
}
fonte
2010-08-13 19:21:18
meglio su math.stackexchange? EDIT: non sapeva che c'erano due. – James
Si potrebbe voler provare a chiedere su http://math.stackexchange.com/. StackOverflow è pensato per domande relative alla programmazione. – derekerdmann
@James: No. Assolutamente no.Math Overflow è per le domande matematiche a livello di ricerca, non per le cose che un undergrad potrebbe riflettere (soprattutto, almeno). Si prega di smettere di raccomandare quello per ogni domanda di matematica che vedi qui perché di solito è severamente fuori portata. – Joey