File: desoln.mac

package info (click to toggle)
maxima 5.6-17
  • links: PTS
  • area: main
  • in suites: woody
  • size: 30,572 kB
  • ctags: 47,715
  • sloc: ansic: 154,079; lisp: 147,553; asm: 45,843; tcl: 16,744; sh: 11,057; makefile: 7,198; perl: 1,842; sed: 334; fortran: 24; awk: 5
file content (19 lines) | stat: -rw-r--r-- 801 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* -*- Mode: MACSYMA; Package: CL-MAXIMA -*- */

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],ILT(Z,LVAR,OVAR)),TEQNS),
	IF FLAG AND LENGTH(TVARS)=1 THEN TEQNS[1] ELSE TEQNS)$