For Heun's order-2 method (a.k.a. "explicit trapeziodal"), that is the order-2 "ExplicitRungeKutta"
method (which has an embedded error estimator):
Method -> {"ExplicitRungeKutta", "DifferenceOrder" -> 2}
NDSolve`EmbeddedExplicitRungeKuttaCoefficients[2, MachinePrecision]
will show the
$a$,
$b$,
$c$,
$b_{err}$ matrix/vectors of the Butcher table if you want to check. The last vector
$b_{err}$ is for estimating the error.
Alternatively, you can code your own Butcher tableau and plug it in:
explicitTrapezoidalCoefficients // ClearAll;
explicitTrapezoidalCoefficients[2, wp_, caller___] :=
N[{{{1}}, {1/2, 1/2}, {1}}, wp];
explicitTrapezoidal = {"ExplicitRungeKutta",
"Coefficients" -> explicitTrapezoidalCoefficients,
"DifferenceOrder" -> 2};
Method -> explicitTrapezoidal
For the implicit trapezoidal method, you can use
Method -> {"ImplicitRungeKutta",
"Coefficients" -> "ImplicitRungeKuttaLobattoIIIACoefficients",
"DifferenceOrder" -> 2}
NDSolve`ImplicitRungeKuttaLobattoIIIACoefficients[2, MachinePrecision]
will give the a, b, c matrx/vectors of the Butcher table, if you want to check.
Alternatively, the Crank-Nicholson method (a.k.a. "implicit trapezoidal") is coded up in the tutorial https://reference.wolfram.com/language/tutorial/NDSolvePlugIns.html#1708771088