Maxima/Numbers
Check
edit(%i1) load(to_poly); (%o1) home/a/maxima/share/to_poly_solve/to_poly.lisp (%i2) r; (%o2) r (%i3) isreal_p(r); (%o3) true /* When I use unspecified variables, Maxima seems to assume that they are real */ (%i4) z:x+y*%i; (%o4) %i y + x (%i5) isreal_p(z); (%o5) isreal_p(%i y) /* maxima can't check if it is real or not */ (%i6) isreal_p(x); (%o6) true (%i7) isreal_p(y); (%o7) true (%i8) complex_number_p(z); (%o8) false (%i9) declare(z, complex); (%o9) done (%i10) complex_number_p(z); (%o10) false /* still not complex */ true
Random numbers
editbfloat(random(10^fpprec) / 10^fpprec); /* random bfloat with fpprec decimal digits in the range 0 to 1 */
Number types
editBinary numbers
edit(%i1) ibase; (%o1) 10 (%i2) obase; (%o2) 10 (%i3) ibase:2; (%o3) 2 (%i4) x=1001110; (%o4) x=78
Complex numbers
editArgument
editPrincipial value of argument of complex number in turns carg produces results in the range (-pi, pi] . It can be mapped to [0, 2*pi) by adding 2*pi to the negative values
carg_t(z):= block( [t], t:carg(z)/(2*%pi), /* now in turns */ if t<0 then t:t+1, /* map from (-1/2,1/2] to [0, 1) */ return(t) )$
On can order list of complex points according to it's argument :
l2_ordered: sort(l2, lambda([z1,z2], is(carg(z1) < carg(z2))))$
rational numbers
edit- rat
- ratp
Rationalize with limit denominator:[1]
limit_denominator(x, max_denominator):= block([p0, q0, p1, q1, n, d, a, q2, k, bound1, bound2, ratprint: false], [p0, q0, p1, q1]: [0, 1, 1, 0], [n, d]: ratexpand([ratnum(x), ratdenom(x)], 0), if d <= max_denominator then x else (catch( do block( a: quotient(n, d), q2: q0+a*q1, if q2 > max_denominator then throw('done), [p0, q0, p1, q1]: [p1, q1, p0+a*p1, q2], [n, d]: [d, n-a*d])), k: quotient(max_denominator-q0, q1), bound1: (p0+k*p1)/(q0+k*q1), bound2: p1/q1, if abs(bound2 - x) <= abs(bound1 - x) then bound2 else bound1))$
Predicate functions
edit(%i1) is(0=0.0); (%o1) false
Compare :
(%i1) a:0.0$ (%i2)is(equal(a,0)); (%o2) true
List of predicate functions ( see p at the end ) :
- abasep
- alphacharp
- alphanumericp
- atom
- bfloatp
- blockmatrixp
- cequal
- cequalignore
- cgreaterp
- cgreaterpignore
- charp
- clessp
- clesspignore
- complex_number_p from to_poly package
- constantp
- constituent
- diagmatrixp
- digitcharp
- disjointp
- elementp
- emptyp
- evenp
- featurep
- floatnump ( compare : isreal_p)
- if
- integerp
- intervalp
- is
- isreal_p from to_poly package
- lcharp
- listp
- listp
- lowercasep
- mapatom
- matrixp
- matrixp
- maybe
- member
- nonnegintegerp
- nonscalarp
- numberp
- oddp
- operatorp
- ordergreatp
- orderlessp
- picture_equalp
- picturep
- poly_depends_p
- poly_grobner_subsetp
- polynomialp
- prederror
- primep
- ratnump
- ratp
- scalarp
- sequal
- sequalignore
- setequalp
- setp
- stringp
- subsetp
- subvarp
- symbolp
- symmetricp
- taylorp
- unknown
- uppercasep
- zeroequiv
- zeromatrixp
- zn_primroot_p
See also :
- declare[2]
- property:
- rational, irrational, real, imaginary, complex,
- even, odd,
- decreasing, increasing
- evenfun, oddfun
- property:
Number Theory
editThere are functions and operators useful with integer numbers
Elementary number theory
editIn Maxima there are some elementary functions like the factorial n! and the double factorial n!! defined as where is the greatest integer less than or equal to
Divisibility
editSome of the most important functions for integer numbers have to do with divisibility:
gcd, ifactor, mod, divisors...
all of them well documented in help. you can view it with the '?' command.
Function ifactors takes positive integer and returns a list of pairs : prime factor and its exponent. For example :
a:ifactors(8); [[2,3]]
It means that :
Other Functions
editContinuus fractions :
(%i6) cfdisrep([1,1,1,1]); (%o6) 1+1/(1+1/(1+1/1)) (%i7) float(%), numer; (%o7) 1.666666666666667