File: antid.mac

package info (click to toggle)
maxima 5.10.0-6
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 44,268 kB
  • ctags: 17,987
  • sloc: lisp: 152,894; fortran: 14,667; perl: 14,204; tcl: 10,103; sh: 3,376; makefile: 2,202; ansic: 471; awk: 7
file content (44 lines) | stat: -rw-r--r-- 1,604 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

nonzeroandfreeof(xargumentx, eargumente)
:= is(eargumente # 0 and freeof(xargumentx, eargumente))$
matchdeclare(aargumenta, nonzeroandfreeof(xargumentx), bargumentb,
freeof(xargumentx))$
defmatch(linear, aargumenta*xargumentx+bargumentb, xargumentx)$
antid(fn, var, unk) := block(
  [lclvariablelcl, dvariabled, aargumenta, bargumentb, tvariablet,
  uvariableu, killer, lisarith:true],
   dvariabled : derivdegree(fn, unk, var),
   if dvariabled = 0 then (
    tvariablet : integrate(fn, var),
      if 
      not freeof(nounify(integrate), tvariablet) 
      then return([0, fn]) else 
      return([tvariablet, 0])  ),
   uvariableu : diff(unk, var, dvariabled),
   killer(eargumente) := if 
    hipow(eargumente, uvariableu) <= 1 
   then eargumente else 0,
   if 
    linear(fn, uvariableu) = false 
   then (
    tvariablet : expand(fn),
      if 
      part(tvariablet, 0) # "+" 
      then 
      return([0, tvariablet]),
      aargumenta : map(killer, tvariablet),
      return(antid(aargumenta, var, unk)+[0, ratsimp(fn-aargumenta)])
       ),
   tvariablet : subst(diff(unk, var, dvariabled-1), lclvariablelcl,
   integrate(subst(lclvariablelcl, diff(unk, var, dvariabled-1),
   expand(aargumenta)), lclvariablelcl)),
   if 
    not freeof(nounify(integrate), tvariablet) 
   then 
    return([0, aargumenta*uvariableu]+antid(bargumentb, var, unk)),
   return([tvariablet, 0]+antid(ratsimp(fn-diff(tvariablet, var)),
   var, unk))  )$
antidiff(fn, var, unk) := block(
  [tvariablet],
   tvariablet : antid(fn, var, unk),
   return(part(tvariablet, 1)+'integrate(part(tvariablet, 2), var))  )$