3.23 How to invert roles of dependent variable and independent variable in an ode?

Sometimes it is useful to invert an ode. i.e. make the independent variable the dependent variable, and the dependent variable the independent. For example, given

\[ 1+\left (\frac {x}{y \left (x \right )}-\sin \left (y \left (x \right )\right )\right ) \left (\frac {d}{d x}y \left (x \right )\right ) = 0 \]
We want the ode to become
\[ -\sin \left (y \right ) y +y \left (\frac {d}{d y}x \left (y \right )\right )+x \left (y \right ) = 0 \]

This can be done as follows

restart; 
 
ode:=1+ (x/y(x)-sin(y(x) ))*diff(y(x),x)=0; 
tr:={x=u(t),y(x)=t}; 
ode:=PDEtools:-dchange(tr,ode); 
ode:=eval(ode,[t=y,u=x]); 
ode:=simplify(ode);
 
\[ \frac {-\sin \left (y \right ) y +y \left (\frac {d}{d y}x \left (y \right )\right )+x \left (y \right )}{y \left (\frac {d}{d y}x \left (y \right )\right )} = 0 \]

In this case, we can get rid of the denominator, but this is a manual step for now.

ode:=numer(lhs(ode))=0;
 
\[ -\sin \left (y \right ) y +y \left (\frac {d}{d y}x \left (y \right )\right )+x \left (y \right ) = 0 \]

The above can now be solved more easily for \(x(y)\) than solving the original ode for \(y(x)\).