Ease-in-out function

I am trying to create a nice ease-in-out function that given values from 0 - 1 produces an output of 0 - 1 which accelerates slowly up to full speed then slows down again as it nears 1.

I currently have a function using sine, in the form...

$$y = (\sin(πx/2))^2$$

This works ok, and gives me results in the range I require however it is too quick to reach the terminal velocity, I am looking for something which has a more gradual start / end and a steeper center (if that makes sense).

Any help would be appreciated!


Something to try would be the parametrized function $$ f_\alpha(x)=\frac{x^\alpha}{x^\alpha+(1-x)^\alpha} $$ $f_1(x)=x$ and $f_2(x)$ looks like this

$\hspace{5cm}$curve

As $\alpha$ gets bigger, the slope in the middle becomes greater and the ends at $x=0$ and $x=1$ become flatter. As $\alpha\to\infty$, the curve tends toward a step function.

These functions have the nice property that $f_a\circ f_b=f_{ab}$. Thus, $f_a$ and $f_{1/a}$ are inverses.


You could also use a polynomial that's $0$ at $0$, $1$ and $1$ and has zero derivative at both ends; the unique polynomial of degree $3$ with those properties is $y=x^2(3-2x)$.

In both of those functions, you can replace $x$ by

$$u=\frac12+\frac{\arctan\left(\alpha\left(x-\frac12\right)\right)}{2\arctan\frac\alpha2}$$

and choose $\alpha$ to achieve the desired steepness, with $\alpha\to0$ corresponding to $u=x$ and $\alpha\to\infty$ corresponding to a step function.