aboutsummaryrefslogtreecommitdiff
path: root/src/input/wester.input.pamphlet
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
committerdos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
commitab8cc85adde879fb963c94d15675783f2cf4b183 (patch)
treec202482327f474583b750b2c45dedfc4e4312b1d /src/input/wester.input.pamphlet
downloadopen-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz
Initial population.
Diffstat (limited to 'src/input/wester.input.pamphlet')
-rw-r--r--src/input/wester.input.pamphlet395
1 files changed, 395 insertions, 0 deletions
diff --git a/src/input/wester.input.pamphlet b/src/input/wester.input.pamphlet
new file mode 100644
index 00000000..5e08228b
--- /dev/null
+++ b/src/input/wester.input.pamphlet
@@ -0,0 +1,395 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/input wester.input}
+\author{Michael Wester}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+\section{License}
+<<license>>=
+--Copyright The Numerical Algorithms Group Limited 1996.
+@
+<<*>>=
+<<license>>
+
+
+-- ----------[ A x i o m ]----------
+-- ---------- Initialization ----------
+)set messages autoload off
+)set messages time on
+)set quit unprotected
+)set streams calculate 7
+-- ---------- Numbers ----------
+-- Let's begin by playing with numbers: infinite precision integers
+factorial(50)
+factor(%)
+-- Infinite precision rational numbers
+1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + 1/8 + 1/9 + 1/10
+-- Arbitrary precision floating point numbers
+digits(50);
+-- This number is nearly an integer
+exp(sqrt(163.)*%pi)
+digits(20);
+-- Special functions
+besselJ(2, 1 + %i)
+-- Complete decimal expansion of a rational number
+decimal(1/7)
+-- Continued fractions
+continuedFraction(%pi)
+-- Simplify an expression with nested square roots
+s1:=sqrt(2*sqrt(3) + 4)
+p:POLY FRAC INT:= (ratPoly(s1::Expression Integer)::SUP FRAC INT).'z
+solp:=radicalSolve p
+rhs select (z+-> real abs (complexNumeric rhs z - complexNumeric s1) < 1.E-19,solp).1
+simplify(s1)
+-- Try a more complicated example (from the Putnam exam)
+s1:=sqrt(14 + 3*sqrt(3 + 2*sqrt(5 - 12*sqrt(3 - 2*sqrt(2)))))
+p:POLY FRAC INT:= (ratPoly(s1::Expression Integer)::SUP FRAC INT).'z
+solp:=radicalSolve p
+rhs select (z+-> real abs (complexNumeric rhs z - complexNumeric s1) < 1.E-19,solp).1
+simplify(s1)
+-- Cardinal numbers
+2*Aleph(0) - 3
+-- ---------- Statistics ----------
+-- ---------- Algebra ----------
+-- Numbers are nice, but symbols allow for variability---try some high school
+-- algebra: rational simplification
+(x**2 - 4)/(x**2 + 4*x + 4)
+-- This example requires more sophistication
+(%e**x - 1)/(%e**(x/2) + 1)
+normalize(%)
+-- Expand and factor polynomials
+(x + 1)**20
+D(%, x)
+factor(%)
+x**100 - 1
+factor(%)
+-- Factor polynomials over finite fields and field extensions
+p:= x**4 - 3*x**2 + 1
+factor(p)
+phi:= rootOf(phi**2 - phi - 1);
+factor(p, [phi])
+factor(p :: Polynomial(PrimeField(5)))
+expand(%)
+-- Partial fraction decomposition
+(x**2 + 2*x + 3)/(x**3 + 4*x**2 + 5*x + 2)
+padicFraction(
+ partialFraction(numerator(%) :: UnivariatePolynomial(x, Fraction Integer),
+ factor(denominator(%) :: Polynomial Integer) ::
+ Factored UnivariatePolynomial(x, Fraction Integer)))
+-- ---------- Inequalities ----------
+-- ---------- Trigonometry ----------
+-- Trigonometric manipulations---these are typically difficult for students
+r:= cos(3*x)/cos(x)
+real(complexNormalize(%))
+real(normalize(simplify(complexNormalize(r))))
+-- Use rewrite rules
+sincosAngles:= rule _
+ (cos((n | integer?(n)) * x) == _
+ cos((n - 1)*x) * cos(x) - sin((n - 1)*x) * sin(x); _
+ sin((n | integer?(n)) * x) == _
+ sin((n - 1)*x) * cos(x) + cos((n - 1)*x) * sin(x) )
+sincosAngles r
+-- ---------- Determining Zero Equivalence ----------
+-- The following expressions are all equal to zero
+sqrt(997) - (997**3)**(1/6)
+sqrt(999983) - (999983**3)**(1/6)
+s1:=(2**(1/3) + 4**(1/3))**3 - 6*(2**(1/3) + 4**(1/3)) - 6
+simplify(%)
+p:POLY FRAC INT:= (ratPoly(s1::Expression Integer)::SUP FRAC INT).'z
+solp:=radicalSolve p
+rhs select (z+-> real abs (complexNumeric rhs z - complexNumeric s1) < 1.E-19,solp).1
+-- This expression is zero for x, y > 0 and n not equal to zero
+x**(1/n)*y**(1/n) - (x*y)**(1/n)
+normalize(%)
+-- See Joel Moses, ``Algebraic Simplification: A Guide for the Perplexed'',
+-- CACM, Volume 14, Number 8, August 1971
+expr:= log(tan(1/2*x + %pi/4)) - asinh(tan(x))
+complexNormalize(%)
+-- Use a roundabout method---show that expr is a constant equal to zero
+D(expr, x)
+normalize(rootSimp(expand(simplify(%))))
+normalize(eval(expr, x = 0))
+expr:=log((2*sqrt(r) + 1)/sqrt(4*r + 4*sqrt(r) + 1))
+D(expr, x)
+eval(expr, x = 0)
+(4*r + 4*sqrt(r) + 1)**(sqrt(r)/(2*sqrt(r) + 1)) _
+ * (2*sqrt(r) + 1)**(1/(2*sqrt(r) + 1)) - 2*sqrt(r) - 1
+normalize(%)
+-- ---------- The Complex Domain ----------
+-- Complex functions---separate into their real and imaginary parts
+rectform(z) == real(z) + %i*imag(z)
+rectform(log(3 + 4*%i))
+simplify(rectform(tan(x + %i*y)))
+-- Check for branch abuse. See David R. Stoutemyer, ``Crimes and Misdemeanors
+-- in the Computer Algebra Trade'', Notices of the AMS, Volume 38, Number 7,
+-- September 1991. This first expression can simplify to sqrt(x y)/sqrt(x),
+-- but no further in general (consider what happens when x, y = -1).
+sqrt(x*y*abs(z)**2) / (sqrt(x)*abs(z))
+rootSimp %
+-- If z = -1, sqrt(1/z) is not equal to 1/sqrt(z)
+sqrt(1/z) - 1/sqrt(z)
+-- If z = 3 pi i, log(exp(z)) is not equal to z
+log(%e**z)
+normalize(%)
+-- The principal value of this expression is (10 - 4 pi) i
+log(%e**(10*%i))
+normalize(%)
+-- If z = pi, arctan(tan(z)) is not equal to z
+atan(tan(z))
+-- If z = 2 pi i, sqrt(exp(z)) is not equal to exp(z/2)
+sqrt(%e**z) - %e**(z/2)
+-- ---------- Equations ----------
+-- Manipulate an equation using a natural syntax
+(x = 0)/2 + 1
+-- Solve various nonlinear equations---this cubic polynomial has all real roots
+radicalSolve(3*x**3 - 18*x**2 + 33*x - 19 = 0, x)
+map(e +-> lhs(e) = rectform(rhs(e)), %)
+-- Some simple seeming problems can have messy answers
+eqn:= x**4 + x**3 + x**2 + x + 1 = 0
+radicalSolve(eqn, x)
+-- Check one of the answers
+eval(eqn, %.1)
+%e**(2*x) + 2*%e**x + 1 = z
+solve(%, x)
+-- This equation is already factored and so *should* be easy to solve
+(x + 1) * (sin(x)**2 + 1)**2 * cos(3*x)**3 = 0
+solve(%, x)
+-- The following equations have an infinite number of solutions (let n be an
+-- arbitrary integer): z = 0 [+ n 2 pi i]
+solve(%e**z = 1, z)
+-- x = pi/4 [+ n pi]
+solve(sin(x) = cos(x), x)
+solve(tan(x) = 1, x)
+-- x = 0, 0 [+ n pi, + n 2 pi]
+solve(sin(x) = tan(x), x)
+-- This equation has no solutions
+solve(sqrt(x**2 + 1) = x - 2, x)
+-- Solve a system of linear equations
+eq1:= x + y + z = 6
+eq2:= 2*x + y + 2*z = 10
+eq3:= x + 3*y + z = 10
+-- Note that the solution is parametric
+solve([eq1, eq2, eq3], [x, y, z])
+-- Solve a system of nonlinear equations
+eq1:= x**2*y + 3*y*z - 4 = 0
+eq2:= -3*x**2*z + 2*y**2 + 1 = 0
+eq3:= 2*y*z**2 - z**2 - 1 = 0
+-- Solving this by hand would be a nightmare
+solve([eq1, eq2, eq3], [x, y, z])
+-- ---------- Matrix Algebra ----------
+m:= matrix([[a, b], [1, a*b]])
+-- Invert the matrix
+minv:= inverse(m)
+m * minv
+-- Define a Vandermonde matrix (useful for doing polynomial interpolations)
+matrix([[1, 1, 1, 1 ], _
+ [w, x, y, z ], _
+ [w**2, x**2, y**2, z**2], _
+ [w**3, x**3, y**3, z**3]])
+determinant(%)
+-- The following formula implies a general result
+factor(%)
+-- Compute the eigenvalues of a matrix from its characteristic polynomial
+m:= matrix([[ 5, -3, -7], _
+ [-2, 1, 2], _
+ [ 2, -3, -4]])
+characteristicPolynomial(m, lambda)
+solve(% = 0, lambda)
+-- ---------- Tensors ----------
+-- ---------- Sums and Products ----------
+-- Sums: finite and infinite
+summation(k**3, k = 1..n)
+sum(k**3, k = 1..n)
+limit(sum(1/k**2 + 1/k**3, k = 1..n), n = %plusInfinity)
+-- Products
+product(k, k = 1..n)
+-- ---------- Calculus ----------
+-- Limits---start with a famous example
+limit((1 + 1/n)**n, n = %plusInfinity)
+limit((1 - cos(x))/x**2, x = 0)
+-- Apply the chain rule---this is important for PDEs and many other
+-- applications
+y:= operator('y);
+x:= operator('x);
+D(y(x(t)), t, 2)
+)clear properties x y
+-- ---------- Indefinite Integrals ----------
+1/(x**3 + 2)
+-- This would be very difficult to do by hand
+integrate(%, x)
+D(%, x)
+-- This example involves several symbolic parameters
+integrate(1/(a + b*cos(x)), x)
+map(simplify, map(f +-> D(f, x), %))
+-- Calculus on a non-smooth (but well defined) function
+D(abs(x), x)
+integrate(abs(x), x)
+-- Calculus on a piecewise defined function
+a(x) == if x < 0 then -x else x
+D(a(x), x)
+integrate(a(x), x)
+)clear properties a
+-- The following two integrals should be equivalent. The correct solution is
+-- [(1 + x)^(3/2) + (1 - x)^(3/2)] / 3
+integrate(x/(sqrt(1 + x) + sqrt(1 - x)), x)
+integrate((sqrt(1 + x) - sqrt(1 - x))/2, x)
+-- ---------- Definite Integrals ----------
+-- The following two functions have a pole at zero
+integrate(1/x, x = -1..1)
+integrate(1/x**2, x = -1..1)
+-- Different branches of the square root need to be chosen in the intervals
+-- [0, 1] and [1, 2]. The correct results are 4/3, [4 - sqrt(8)]/3,
+-- [8 - sqrt(8)]/3, respectively.
+integrate(sqrt(x + 1/x - 2), x = 0..1)
+integrate(sqrt(x + 1/x - 2), x = 0..1, "noPole")
+integrate(sqrt(x + 1/x - 2), x = 1..2)
+integrate(sqrt(x + 1/x - 2), x = 1..2, "noPole")
+integrate(sqrt(x + 1/x - 2), x = 0..2)
+integrate(sqrt(x + 1/x - 2), x = 0..2, "noPole")
+-- Contour integrals
+integrate(cos(x)/(x**2 + a**2), x = %minusInfinity..%plusInfinity)
+integrate(cos(x)/(x**2 + a**2), x = %minusInfinity..%plusInfinity, "noPole")
+-- Integrand with a branch point
+integrate(t**(a - 1)/(1 + t), t = 0..%plusInfinity)
+integrate(t**(a - 1)/(1 + t), t = 0..%plusInfinity, "noPole")
+-- Multiple integrals: volume of a tetrahedron
+integrate(integrate(integrate(1, z = 0..c*(1 - x/a - y/b)), _
+ y = 0..b*(1 - x/a)), _
+ x = 0..a)
+-- ---------- Series ----------
+-- Taylor series---this first example comes from special relativity
+1/sqrt(1 - (v/c)**2)
+series(%, v = 0)
+1/%**2
+tsin:= series(sin(x), x = 0)
+tcos:= series(cos(x), x = 0)
+-- Note that additional terms will be computed as needed
+tsin/tcos
+series(tan(x), x = 0)
+-- Look at the Taylor series around x = 1
+)set streams calculate 1
+log(x)**a*exp(-b*x)
+series(%, x = 1)
+)set streams calculate 7
+-- Compare the Taylor series of two different formulations of a function
+taylor(log(sinh(z)) + log(cosh(z + w)), z = 0)
+% - taylor(log(sinh(z) * cosh(z + w)), z = 0)
+series(log(sinh(z)) + log(cosh(z + w)), z = 0)
+% - series(log(sinh(z) * cosh(z + w)), z = 0)
+-- Power series (compute the general formula)
+log(sin(x)/x)
+series(%, x = 0)
+exp(-x)*sin(x)
+series(%, x = 0)
+-- Derive an explicit Taylor series solution of y as a function of x from the
+-- following implicit relation
+y:= operator('y);
+x = sin(y(x)) + cos(y(x))
+seriesSolve(%, y, x = 1, 0)
+)clear properties y
+-- Pade (rational function) approximation
+pade(1, 1, taylor(exp(-x), x = 0))
+-- ---------- Transforms ----------
+-- Laplace and inverse Laplace transforms
+laplace(cos((w - 1)*t), t, s)
+inverseLaplace(%, s, t)
+-- ---------- Difference and Differential Equations ----------
+-- Second order linear recurrence equation
+r:= operator('r);
+r(n + 2) - 2 * r(n + 1) + r(n) = 2
+[%, r(0) = 1, r(1) = m]
+)clear properties r
+-- Second order ODE with initial conditions---solve first using Laplace
+-- transforms
+f:= operator('f);
+ode:= D(f(t), t, 2) + 4*f(t) = sin(2*t)
+map(e +-> laplace(e, t, s), %)
+-- Now, solve the ODE directly
+solve(ode, f, t = 0, [0, 0])
+-- First order linear ODE
+y:= operator('y);
+x**2 * D(y(x), x) + 3*x*y(x) = sin(x)/x
+solve(%, y, x)
+-- Nonlinear ODE
+D(y(x), x, 2) + y(x)*D(y(x), x)**3 = 0
+solve(%, y, x)
+-- A simple parametric ODE
+D(y(x, a), x) = a*y(x, a)
+solve(%, y, x)
+D(y(x), x) = a*y(x)
+solve(%, y, x)
+-- ODE with boundary conditions. This problem has nontrivial solutions
+-- y(x) = A sin([pi/2 + n pi] x) for n an arbitrary integer.
+solve(D(y(x), x, 2) + k**2*y(x) = 0, y, x)
+-- bc(%, x = 0, y = 0, x = 1, D(y(x), x) = 0)
+-- System of two linear, constant coefficient ODEs
+x:= operator('x);
+system:= [D(x(t), t) = x(t) - y(t), D(y(t), t) = x(t) + y(t)]
+solve(system,[x,y],t)
+-- Check the answer
+-- Triangular system of two ODEs
+system:= [D(x(t), t) = x(t) * (1 + cos(t)/(2 + sin(t))), _
+ D(y(t), t) = x(t) - y(t)]
+-- Try solving this system one equation at a time
+solve(system.1, x, t)
+genericx:=C1*%.basis.1
+eval(lhs rightZero system.2,x,genericx,t)
+solve(%,y,t)
+genericy:=simplify (%.particular)+K1*(%.basis.1)
+eval(lhs rightZero system.1,x,genericx,t)
+eval(lhs rightZero system.2,[x,y],[genericx,genericy],t)
+)clear properties x y
+-- ---------- Operators ----------
+-- Linear differential operator
+DD:= operator("D") :: Operator(Expression Integer)
+evaluate(DD, e +-> D(e, x))$Operator(Expression Integer)
+L:= (DD - 1) * (DD + 2)
+g:= operator('g)
+L(f(x))
+subst(L(subst(g(y), y = x)), x = y)
+subst(L(subst(A * sin(z**2), z = x)), x = z)
+-- Truncated Taylor series operator
+T:= (f, xx, a) +-> subst((DD**0)(f(x)), x = a)/factorial(0) * (xx - a)**0 + _
+ subst((DD**1)(f(x)), x = a)/factorial(1) * (xx - a)**1 + _
+ subst((DD**2)(f(x)), x = a)/factorial(2) * (xx - a)**2
+T(f, x, a)
+T(g, y, b)
+Sin:= operator("sin") :: Operator(Expression Integer)
+evaluate(Sin, x +-> sin(x))$Operator(Expression Integer)
+T(Sin, z, c)
+-- ---------- Programming ----------
+-- Write a simple program to compute Legendre polynomials
+)clear properties p
+p(n, x) == 1/(2**n*factorial(n)) * D((x**2 - 1)**n, x, n)
+for i in 0..4 repeat { output(""); output(concat(["p(", string(i), ", x) = "])); output(p(i, x))}
+eval(p(4, x), x = 1)
+-- Now, perform the same computation using a recursive definition
+pp(0, x) == 1
+pp(1, x) == x
+pp(n, x) == ((2*n - 1)*x*pp(n - 1, x) - (n - 1)*pp(n - 2, x))/n
+for i in 0..4 repeat { output(""); output(concat(["pp(", string(i), ", x) = "])); output(pp(i, x))}
+)clear properties p pp
+-- ---------- Translation ----------
+-- Horner's rule---this is important for numerical algorithms
+a:= operator('a)
+sum(a(i)*x**i, i = 1..5)
+p:= factor(%)
+-- Convert the result into FORTRAN syntax
+)set fortran ints2floats off
+outputAsFortran('p = p)
+-- ---------- Boolean Logic ----------
+-- Simplify logical expressions
+true and false
+x or (not x)
+--x or y or (x and y)
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}