We find KCL equations for the junctions labeled \(V_1\) and \(V_2\)
\begin{align}
0 = \amp I_3 + I_6 - I_4 \tag{4.5.1}\\
0 = \amp I_2 - I_5 - I_6 \text{.}\tag{4.5.2}
\end{align}
We can also write down expressions for the currents by examining voltage changes across components
\begin{align}
I_2 = \amp I_0\left(e^{\left(V_\text{in}-V_2\right)/V_T}-1\right) \tag{4.5.3}\\
I_3 = \amp -I_0\left(e^{\left(V_1-V_\text{in}\right)/V_T}-1\right) \tag{4.5.4}\\
I_4 = \amp I_0\left(e^{V_1/V_T}-1\right) \tag{4.5.5}\\
I_5 = \amp -I_0\left(e^{-V_2/V_T}-1\right) \tag{4.5.6}\\
I_6 = \amp \frac{V_2-V_1}{R} \text{.}\tag{4.5.7}
\end{align}
\begin{align*}
0 = \amp -I_0\left(e^{\left(V_1-V_\text{in}\right)/V_T} + e^{V_1/V_T} - 2\right) + \frac{V_2-V_1}{R} \\
0 = \amp I_0\left(e^{-V_2/V_T}+e^{\left(V_\text{in}-V_2\right)/V_T}-2\right) - \frac{V_2 - V_1}{R} \text{.}
\end{align*}
Using Newton’s method in Section A.1, we’ll set
\begin{equation*}
\vec{f}(\vec{V})=
\begin{pmatrix}
-I_0\left(e^{\left(V_1-V_\text{in}\right)/V_T} + e^{V_1/V_T} - 2\right) + \frac{V_2-V_1}{R}\\
I_0\left(e^{-V_2/V_T}+e^{\left(V_\text{in}-V_2\right)/V_T}-2\right) - \frac{V_2-V_1}{R}
\end{pmatrix}
\end{equation*}
where
\begin{equation*}
\vec{V}=\begin{pmatrix} V_1 \\ V_2\end{pmatrix}\text{.}
\end{equation*}
Given \(\vec{f}(\vec{V})\text{,}\) we then calculate
\begin{equation*}
\nabla\vec{f}\left(\vec{V}\right) =
\begin{pmatrix}
-\frac{I_0}{V_T}\left(e^{\left(V_1-V_\text{in}\right)/V_T} + e^{V_1/V_T}\right)-\frac{1}{R} \amp \frac{1}{R}\\
\frac{1}{R} \amp -\frac{I_0}{V_T}\left(e^{-V_2/V_T}+e^{\left(V_\text{in}-V_2\right)/V_T}\right) - \frac{1}{R}
\end{pmatrix}\text{.}
\end{equation*}
Then, Newton’s method can be used in Python to estimate the circuit behavior governed by
\begin{equation*}
\nabla\vec{f}\left(\vec{V}\right) \cdot \vec{V} = \vec{f}\left(\vec{V}\right)
\end{equation*}
to solve for \(\Delta\vec{x}\) and find our new root estimate
\begin{equation*}
\vec{x}' = \vec{x}-\Delta\vec{x}\text{,}
\end{equation*}
iterating to some desired tolerance.