out oode; %off nat; load "odesolve"; depend y,x; %ode1 := df(y,x); % A simple separable case ans := odesolve(df(y,x) - y**2 - x,y,x); % We can improve this by solve(ans,y); shut oode; bye; end; % A separable case, in different variables, with an initial condition depend z,w $ ode:= (1-z**2)*w*df(z,w)+(1+w**2)*z; % Assign the answer so we can input the condition (z = 2 at w = 1/2) ans:=odesolve(ode,z,w); % To tidy up the answer we will get for the constant we use for all x let log(x)+log(1/x)=0 $ arbconst(!!arbconst) := sub(z=2,w=1/2, rhs first solve(ans,arbconst(!!arbconst))); ans; clear arbconst(!!arbconst) $ nodepend z,w $ % Now a homogeneous one depend y,x $ ode:=df(y,x) - (x-y)/(x+y); % To make this look decent... for all x,w let e**((log x)/w)=x**(1/w), (sqrt w)*(sqrt x)=sqrt(w*x) $ ans := odesolve(ode,y,x); % Reducible to homogeneous % Note this is the previous example with origin shifted ode:=df(y,x) - (x-y-3)/(x+y-1); ans := odesolve(ode,y,x); % and the special case of reducible to homogeneous ode:=df(y,x)-(2*x+3*y+1)/(4*x+6*y+1); ans := odesolve(ode,y,x); % To tidy up the next one we need for all x,w let e**(log x + w) = x*e**w, e**(w*log x)=x**w $ % a Bernoulli equation ode:=x*(1-x**2)*df(y,x) + (2*x**2 -1)*y - x**3*y**3; odesolve(ode,y,x); % and finally, in this set, an exact case ode:=(2*x**3 - 6*x*y + 6*x*y**2) + (-3*x**2 + 6*x**2*y - y**3)*df(y,x); odesolve(ode,y,x); % ****************************************** % Now for higher-order linear equations with constant coefficients % First, examples without driving terms % A simple one to start ode:=6*df(y,x,2)+df(y,x)-2*y; odesolve(ode,y,x); % An example with repeated and complex roots ode:=df(y,x,4)+2*df(y,x,2)+y; odesolve(ode,y,x); % A simple right-hand-side using the above example; % It will need the substitution for all w let (sin w)**2 + (cos w)** 2 = 1 $ ode:=ode-exp(x); odesolve(ode,y,x); ode:=df(y,x,2)+4*df(y,x)+4*y-x*exp(x); ans:=odesolve(ode,y,x); % At x=1 let y=0 and df(y,x)=1 ans2 := solve({first ans, 1 = df(rhs first ans, x)}, arbconst(!!arbconst-1),arbconst(!!arbconst)); arbconst(!!arbconst -1) := sub(x=1,y=0,rhs first first ans2); arbconst(!!arbconst) := sub(x=1,y=0,rhs second first ans2); ans; clear arbconst(!!arbconst),arbconst(!!arbconst-1), ans, ans2 $ % For simultaneous equations you can use the machine e.g. as follows depend z,x $ ode1:=df(y,x,2)+5*y-4*z+36*cos(7*x); ode2:=y+df(z,x,2)-99*cos(7*x); ode:=df(ode1,x,2)+4*ode2; y := rhs first odesolve(ode,y,x); z := rhs first solve(ode1,z); clear ode1, ode2, ode, y,z $ nodepend z,x $ % A "homogeneous" n-th order (Euler) equation ode := x*df(y,x,2) + df(y, x) + y/x + (log x)**3; odesolve(ode, y, x); % Not yet working % ode :=6*df(y,x,2)+df(y,x)-2*y + tan x; % odesolve(ode, y,x); % To reset the system !!arbconst := 0 $ clear ode $ off trode$ nodepend y,x $ end $