File: functs.mac

package info (click to toggle)
maxima 5.9.1-9
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 32,272 kB
  • ctags: 14,123
  • sloc: lisp: 145,126; fortran: 14,031; tcl: 10,052; sh: 3,313; perl: 1,766; makefile: 1,748; ansic: 471; awk: 7
file content (95 lines) | stat: -rw-r--r-- 3,171 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
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/* eval_when([translate,load,loadfile,batch,demo],
 MATCHDECLARE(a,nonzeroandfreeof(x),[b,c],FREEOF(x)))$ */

define_variable(takegcd,true,boolean,"used in gcdivide to decide the
gcd choice");

conjugate&&  conjugate(m):=IF MATRIXP(m) THEN FULLMAPL('conjugate,m)
    ELSE IF FREEOF(%I,SUBST('\&I,%I,m)) THEN
    SUBST(-%I,%I,m) ELSE RATSUBST(-%I,%I,m)$

rempart&&  rempart(exp,n):=
    ?APPEND(REST(exp,  /* combine two parts of exp
	   first part is beginning to part to be removed
	   Specify that the first l-1 parts are retained */
	(IF LISTP(n) THEN n[1] ELSE n)-1-LENGTH(exp)),
	BLOCK([t],  /* last part is from removed part to end */
	IF ATOM(t:REST(exp,  /* last m-1 parts are retained */
	    IF LISTP(n) THEN n[2] ELSE n))
	THEN ?LIST(t) ELSE ?CDR(t)))$

wronskian&&  wronskian(functlist,var):=BLOCK([end],
    end:LENGTH(functlist)-1,
    functlist:[functlist],
    THRU end DO functlist:ENDCONS(MAP(LAMBDA([x],DIFF(x,var)),
	LAST(functlist)),functlist),
    APPLY('MATRIX,functlist))$

adjoint&&  adjoint(m):=BLOCK([adjoint,len],
    adjoint:DIAGMATRIX(len:LENGTH(m),0),
    FOR i THRU len DO
	FOR j THRU len DO
	    adjoint[i,j]:(-1)^(i+j)*DETERMINANT(MINOR(m,i,j)),
    TRANSPOSE(adjoint))$

tracematrix&&  tracematrix(m):=block([sum,len],sum:0,len:length(m),
for i:1 thru len do sum:sum+part(m,i,i),sum)$

rational&&  rational(z):=BLOCK([n,d,cd,RATFAC],
    RATFAC:FALSE,
    n:RATDISREP(RATNUMER(z)*(cd:conjugate(d:RATDENOM(z)))),
    d:RAT(n/RATDISREP(d*cd)),
    IF RATP(z) THEN d ELSE RATDISREP(d))$

oddp&&  oddp(x):=IS(logand(x,1)#0)$
	evenp(x):=IS(logand(x,1)=0)$

logical&&  logand(x,y):=?BOOLE(1,x,y)$
	logxor(x,y):=?BOOLE(6,x,y)$
	logor(x,y):=?BOOLE(7,x,y)$

uprobe&&  uprobe(file):=?APPLY('?UPROBE,?FULLSTRIP(?CDR(file)))$

kronecker&&  kronecker(m,n):=IF m=n THEN 1 ELSE 0$

nonzeroandfreeof&&  nonzeroandfreeof(x,e):=IS(e#0 AND FREEOF(x,e))$

/* linear&& MATCHDECLARE(a,nonzeroandfreeof(x),[b,c],FREEOF(x))$
    DEFMATCH(linearize,a*x+b,x)$
    DEFMATCH(quadraticize,a*x^2+b*x+c,x)$
    linear(exp,x):=BLOCK([a,b],IF linearize(exp,x)=FALSE THEN exp ELSE
	a*x+b)$
    quadratic(exp,x):=BLOCK([a,b,c],IF quadraticize(exp,x)=FALSE THEN
	exp ELSE a*x^2+b*x+c)$ */

lcm&& lcm([list]):=block([listconstvars:false],if listofvars(list)=[] then
lcm1(list) else factor(lcm1(list)))$

lcm1(list):=if list=[] then 1 else block([rlist:rest(list),flist:first(list),
frlist,partswitch:true,inflag:true,piece], if rlist=[] then flist else
lcm1(cons(flist*(frlist:first(rlist))/gcd(flist,frlist),rest(rlist))))$

gcdivide&&  gcdivide(poly1,poly2):=BLOCK([gcdlist],
		gcdlist:IF takegcd THEN EZGCD(poly1,poly2)
			ELSE [1,poly1,poly2],
		gcdlist[2]/gcdlist[3])$

series&&  arithmetic(a,d,n):=a+(n-1)*d$
	geometric(a,r,n):=a*r^(n-1)$
	harmonic(a,b,c,n):=a/(b+(n-1)*c)$
	arithsum(a,d,n):=n*(a+(n-1)*d/2)$
	geosum(a,r,n):=IF n='INF THEN a/(1-r)
		ELSE a*(1-r^n)/(1-r)$

gauss&&  gaussprob(x):=1/SQRT(2*%PI)*%E^(-x^2/2)$

gd&&  gd(x):=2*ATAN(%E^x-%PI/2)$
	agd(x):=LOG(TAN(%PI/4+x/2))$

trig&&  vers(x):=1-COS(x)$
	covers(x):=1-SIN(x)$
	exsec(x):=SEC(x)-1$
	hav(x):=(1-COS(x))/2$

combination&&  combination(n,r):=BINOMIAL(n,r)$
	permutation(n,r):=BINOMIAL(n,r)*r!$