Why 0.5 in value of heaviside/unitstep?
Well i don't have the Symbolic Math Toolbox.  but i think i know why, and it's not a really good reason.  usually we electrical engineers mean, when we say "the unit step" function, we mean what math and physics people mean by the "Heaviside step function but, there is a convention issue with what this function is with zero for its argument.

the root definition of the Heaviside unit step is

$$ H(x) \triangleq \int_{-\infty}^x { \delta(t)} \, \mathrm{d}t $$

where $\delta(t)$ is the Dirac unit impulse function.  But this does not define $H(x)$ at $x=0$.  It's infinitesimally thin, but it could be anything finite at zero.

in continuous time, it is usually most convenient to define the Heaviside step function in terms of the sign function which is: 

$$\operatorname{sgn}(x) \triangleq \begin{cases} -1, &amp; x &lt; 0 \\ 0, &amp; x = 0 \\ 1, &amp; x &gt; 0 \end{cases}$$

then the Heaviside comes out as

$$\begin{align}
 H(x) &amp;= \tfrac12 \big(1 + \operatorname{sgn}(x) \big) \\
\\
&amp;= \begin{cases} 0, &amp; x &lt; 0 \\ \tfrac12, &amp; x = 0 \\ 1, &amp; x &gt; 0 \end{cases} \\
\end{align}$$

because this, $H(x) + H(-x) = 1$, is always true, they are complementary.

the problem is extending these definitions and desired behavior to discrete $x$.  then we like to define the discrete impulse as the Kronecker delta which DSPer's express more simply as

$$ \delta[n] \triangleq \begin{cases} 0, &amp; n \ne 0 \\ 1, &amp; n = 0 \end{cases}  $$

and the discrete unit step as 

$$ H[n] \triangleq \sum_\limits{m=-\infty}^{n} \delta[m] $$

but that makes this discrete unit step come out to be:

$$ H[n] = \begin{cases} 0, &amp; n &lt; 0 \\ 1, &amp; n \ge 0 \end{cases}  $$

that is not quite the same as

$$\begin{align}
 H[n] &amp;= \tfrac12 \big(1 + \operatorname{sgn}(n) \big) \\
\\
 &amp;= \begin{cases} 0, &amp; n &lt; 0 \\ \tfrac12, &amp; n = 0 \\ 1, &amp; n &gt; 0 \end{cases} \\
\end{align}$$

now here is the stupid problem:  MATLAB is not a continuous-time tool.  it is a discrete-time tool.  

so what they are doing with the discrete Heaviside unit step function appears to me to be another one of MATLAB's mistaken conventions of definitions.  they fucked up the index origin convention which, among other problems fucked up the fft() convention putting the DC term into X(1) rather than have the index represent frequency.  they fucked up the order of polynomial coefficients in polyval() and polyfit().  and they fucked up the definition of the discrete Heaviside unit step function.

EDIT: actually, they defined the Heaviside function correctly, because it has a continuous argument.  but they (and we) need to define a discrete function for the unit step that does not have $\tfrac12$ in it.