1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
/* -*- Mode: MACSYMA; Package: CL-MAXIMA -*- */
load(pwilt);
desolve(eqns,vars):=block([teqns,tvars,ovar,lvar,flag,dispflag],
modedeclare(flag,boolean),
flag:false,
if not listp(vars) then (eqns:[eqns], vars:[vars], flag:true),
if length(ovar:vars[1])#1 then
error(ovar,"contains more than one independent variable."),
ovar:inpart(ovar,1),dispflag:false,
teqns:map(lambda([z],laplace(z,ovar,lvar)),eqns),
tvars:map(lambda([z],'laplace(z,ovar,lvar)),vars),
/* if not freeof(nounify('diff),teqns) then return(false), */
teqns:errcatch(solve(teqns,tvars)),
if teqns=[] or teqns=[[]]
then error("desolve can't handle this case.")
else teqns:first(teqns),
if flag#true then teqns:first(teqns),
teqns:map(lambda([z],pwilt(z,lvar,ovar)),teqns),
if flag and length(tvars)=1 then teqns[1] else teqns)$
|