I would suggest just approximating the $\max(0,\cdot)$ function, and then using that to implement $\max(0,1-x^2)$. This is a very well-studied problem, since $\max(0,\cdot)$ is the relu function which is currently ubiquitous in machine learning applications. One possibility is
$$
\max(0,y) \approx \mu(w)(y) = \frac{y}2 + \sqrt{\frac{y^2}4 + w}
$$

One way of deriving this formula: it's the positive-range inverse of $x\mapsto x-\tfrac{w}x$.

Then, composed with the quadratic, this looks thus:

Notice how unlike Calvin Khor's suggestions, this avoids ever going negative, and is easier to adopt to other parabolas.

Nathaniel remarks that this approach does not preserve the height of the peak. I don't know if that matters at all – but if it does, the simplest fix is to just rescale the function with a constant factor. That requires however knowing the actual maximum of the parabola itself (in my case, 1).

To get an even better match to the original peak, you can define a version of $\mu$ whose first two Taylor coefficients around 1 are both 1 (i.e. like the identity), by rescaling both the result and the input (this exploits the chain rule):
$$\begin{align}
\mu_{1(1)}(w,y) :=& \frac{\mu(w,y)}{\mu(1)}
\\ \mu_{2(1)}(w,y) :=& \mu_{1(1)}\left(w, 1 + \frac{y - 1}{\mu'_{1(1)}(w,1)}\right)
\end{align}$$

And with that, this is your result:

The nice thing about this is that Taylor expansion around 0 will give you back the exact original (un-restricted) parabola.

Source code (Haskell with dynamic-plot):

```
import Graphics.Dynamic.Plot.R2
import Text.Printf
μ₁₁, μ₁₁', μ₂₁ :: Double -> Double -> Double
μ₁₁ w y = (y + sqrt (y^2 + 4*w))
/ (1 + sqrt(1 + 4*w))
μ₁₁' w y = (1 + y / sqrt (y^2 + 4*w))
/ (1 + sqrt(1 + 4*w))
μ₂₁ w y = μ₁₁ w $ 1 + (y-1) / μ₁₁' w 1
q :: Double -> Double
q x = 1 - x^2
main :: IO ()
main = do
plotWindow
[ plotLatest [ plot [ legendName (printf "μ₂₍₁₎(w,q(x))")
. continFnPlot $ μ₂₁ w . q
, legendName (printf "w = %.2g" w) mempty
]
| w <- (^1500).recip<$>[1,1+3e-5..]]
, legendName "max(0,q x)" . continFnPlot
$ max 0 . q, xAxisLabel "x"
, yInterval (0,1.5)
, xInterval (-1.3,1.3) ]
return ()
```