#JavaScript (ES7), 55 53 bytes
JavaScript (ES7), 55 53 bytes
Based on the direct formula used by xnor.
Takes input as an array.
q=>q.map(v=>1/q?v/2/q:q=((v+Math.hypot(...q))/2)**.5)
###How?
How?
Given an array \$q=[a,b,c,d]\$, this computes:
$$x=\sqrt{\frac{a+\sqrt{a^2+b^2+c^2+d^2}}{2}}$$
And returns:
$$\left[x,\frac{b}{2x},\frac{c}{2x},\frac{d}{2x}\right]$$
q => // q[] = input array
q.map(v => // for each value v in q[]:
1 / q ? // if q is numeric (2nd to 4th iteration):
v / 2 / q // yield v / 2q
: // else (1st iteration, with v = a):
q = ( // compute x (as defined above) and store it in q
(v + Math.hypot(...q)) // we use Math.hypot(...q) to compute:
/ 2 // (q[0]**2 + q[1]**2 + q[2]**2 + q[3]**2) ** 0.5
) ** .5 // yield x
) // end of map()