Experimentally, we can determine \(\delta V_1\) from \(\delta V_{photodiode}\) by measuring the statistical spread in the minimum value of \(V_{pd}\) (when \(\phi=\ \frac{\pi}{2}\) radians and \(\delta V\ =\ \delta V_1\)). We can then determine \(\delta V_0\) by measuring the corresponding statistical spread in the maximum value of \(V_{pd}\) (when \(\phi=\ 0\) and \(\delta V_{pd}=\sqrt{\left(\delta V_0\right)^2+\left(\delta V_1\right)^2}\)). In contrast, the uncertainty \(\delta\phi\) depends on our own judgement as to how small a change in angle can be physically resolved with the apparatus at hand, assuming the polarizer angles are mechanically set.
Having done so, the first computational challenge here is that even after experimentally determining \(\delta V_0\), \(\delta V_1\), and \(\delta\phi\), solving for \(\delta V\) requires knowledge of \(V_0\). Since the point of curve fitting to the data is to determine \(V_0\), how do we determine the numerical values for \(\delta V_{pd}\left(\theta\right)\) needed to find a best estimate of \(V_0\)?
This is not the impasse that it might seem, however, as we always need to supply an initial guess for our curve-fit parameters and we can make a rough first guess from a graph of the data itself. The solution is to then take the values provided by the curve fit as the initial guesses for a second round of curve fitting, and continue until the result is self-consistent (that is, the output value matches the input value within the reported uncertainty).
The second challenge is that the result requires recalculation for every value of \(\phi\), hence the need to have this done by the computer. In the curve-fit code above, this can be done by writing a Python function for \(\delta V_{pd}\) analogous to Eq. \ref{eq:delta_V_Malus}.