由于课程设计的关系,我必须得找个符号运算软件,无奈mathmatica死活要注册码.于是选择了MAXIMA.发现网上还没有多少相关的中文资料,只好自己动手翻译了一个简介,希望能够对后来人有所帮助.有些数学名词和语法上肯定还有不好的地方,希望大家多提提意见!:thank 如果还有时间,我会继续把它的帮助文件翻译过来.
1 简介
在 Linux 中运行 MAXIMA, 只需键入
maxima<回车
电脑将显示如下致辞:
GCL (GNU Common Lisp) Version(2.3) ter jun 27 14:16:29 BRT 2000
Licensed under GNU Library General Public License
Contains Enhancements by W. Schelter
Maxima 5.4 ter jun 27 14:16:11 BRT 2000 (with enhancements by W. Schelter).
Licensed under the GNU Public License (see file COPYING)
(C1)
这里的 (C1) 是一个``标签''. 每一个输入或者输出行将被标记一个标签, 凭此种唯一的标签, 该行可以在其余的会话中被调出. C 标签用来标记你的命令; D 标签用来标记机器的输出. 所以绝对不要使用诸如 C1 或 D5的变量名, 如果使用, 将会和那些行的标签搞混.
MAXIMA 对字母的大小写是不敏感的: 不管你输入的是 sin(x) 还是 SIN(x), 是 %e^x 还是 %E^x, 它都会明白你的意思是正弦函数和指数函数, 然后按标准的方式回显大写的 SIN 和 %E. 以上对用户定义的变量并不成立, 即: x and X 对于 MAXIMA 是 不一样的 变量! (试试看.)
2 特殊的按键和符号
要结束一个 MAXIMA 对话, 只需键入 quit();. 如果你按了 ^C, 将会变成下面的样子:
Correctable error: Console interrupt.
Signalled by MACSYMA-TOP-LEVEL.
If continued: Type :r to resume execution, or :q to quit to top level.
Broken at SYSTEM:TERMINAL-INTERRUPT. Type :H for Help.
MAXIMA:q
(C1)
注意在 MAXIMA 提示符后键入 :q 或者 :t (for top level) 将会带你回到 MAXIMA level. 另一方面 ^Y , 除了在屏幕上回显外不会产生任何效果; 最终, ^Z 会和 quit(); 同样的效果. (这里的 ^ 表示控制键, 所以 ^C 意味着先按住标着 Ctrl 的键再按下 C 键.)
要中止一次计算, 但不离开 MAXIMA, 只需键入 ^C. 知道这个用法对你很重要, 比如说, 你开始了一次要花很多时间的计算. 记住在 MAXIMA 提示符后键入 :q 以回到 MAXIMA. 如例所示:
(C1) sum(1/x^2,x,1,1000);
Correctable error: Console interrupt.
Signalled by MACSYMA-TOP-LEVEL.
If continued: Type :r to resume execution, or :q to quit to top level.
Broken at SYSTEM:TERMINAL-INTERRUPT. Type :H for Help.
MAXIMA:q
(C2)
为了告诉 MAXIMA 你已经输完了你的命令, 记得用分号 (;), 再加上一个回车. 注意单独的一个回车并不代表了你已经完成了你的输入.
另一个可以代替分号 (;) 的终止符是一个美元符号 ($), 而且, 它可以取消 MAXIMA 计算结果的显示. 当你在进行一次有着很长结果的计算, 并且你不想浪费时间显示结果的时候, 这会很有用.
如果你想重复一条你已经给出的命令, 比如说在 (C5) 行, 你可以在上述的行号前加两个单引号 ('') 的方法来避免再次输入, i.e., ''C5. (注意这只是简单地输入 C5 行, 而不是把它再做一次 - 试试吧.)
如果你想直接查询 MAXIMA 已经计算出的结果, 你也可以使用它的 D 标签, 或者你可以使用专门的符号--分号 (%).
标准量 e (自然对数的底数), i (-1 的平方根) 和 p (3.14159) 分别表示成 %e (或者 %E), %i (或者 %I), 和 %pi (或者 %PI). 注意这里 % 只是作为一个前缀使用, 与用 % 来查询先前计算结果的用法完全无关.
为了把一个值赋给一个变量, MAXIMA 使用冒号 (:), 而不是等号. 等号被用来表示相等关系.
3 算术
常见的算术符号有:
[+] 加
[-] 减 [*] 数乘
[/] 除
[^] 或者 ** 幂
[.] 矩阵乘法
[sqrt(x)] x的平方根.
MAXIMA 的输出是严格按(有理数的)算术表示. E.g.,
(C1) 1/100+1/101;
201
(D1) -----
10100
如果是包涵无理数的混合运算, 无理数将保持用符号表示的方式:
(C2) (1+sqrt(2))^5;
5
(D2) (SQRT(2) + 1)
(C3) expand(%);
(D3) 29 SQRT(2) + 41
当然, 用十进制小数表示结果往往是很有用的. 这可以通过在你想要展开的表达式后面加上 ``,numer'' 来实现.
(C4) %,numer;
(D4) 82.01219330881976
注意在这里使用了 % 来查询先前的结果. 在这个版本的 MAXIMA 里, numer 给出 16 位的有效数字, 但最后一位往往是不可靠的. 当然, MAXIMA 可以通过使用 bfloat 函数来提供 任意高的的精度 :
(C5) bfloat(d3);
(D5) 8.201219330881976B1
有效数字显示的位数由 MAXIMA 变量 FPPREC 控制, 它的缺省值是 16:
(C6) fpprec;
(D6) 16
我们把 FPPREC 替换成100位:
(C7) fpprec:100;
(D7) 100
(C8) ''c5;
(D8) 8.20121933088197564152489730020812442785204843859314941221237124017312418#
7540110412666123849550160561B1
注意在 (C8) 中用双引号 ('') 来重复命令 (C5). MAXIMA 可以处理非常大的数而不用近似值:
(C9) 100!;
(D9) 9332621544394415268169923885626670049071596826438162146859296389521759999#
322991560894146397615651828625369792082722375825118521091686400000000000000000#
0000000
4 代数
作为一个使分析计算更便利的计算机工具, 当我们看到 MAXIMA 在代数上的方便后, 它的重要性就变得更明显了. 这里有一个分解多项式的例子:
(C1) (x+3*y+x^2*y)^3;
2 3
(D1) (x y + 3 y + x)
(C2) expand(%);
6 3 4 3 2 3 3 5 2 3 2 2 4
(D2) x y + 9 x y + 27 x y + 27 y + 3 x y + 18 x y + 27 x y + 3 x y
2 3
+ 9 x y + x
现在假设我们把 5/z 代入上面表达式中的 x 中:
(C3) d2,x=5/z;
2 3 2 3 2
135 y 675 y 225 y 2250 y 125 5625 y 1875 y 9375 y
(D3) ------ + ------ + ----- + ------- + --- + ------- + ------ + -------
z 2 2 3 3 4 4 5
z z z z z z z
3
15625 y 3
+ -------- + 27 y
6
z
MAXIMA 函数 RATSIMP 可以把它按同分母排列:
(C4) ratsimp(%);
3 6 2 5 3 4 2 3
(D4) (27 y z + 135 y z + (675 y + 225 y) z + (2250 y + 125) z
3 2 2 3 6
+ (5625 y + 1875 y) z + 9375 y z + 15625 y )/z
表达式还可以使用 factor 函数进行因式分解:
(C5) factor(%);
2 3
(3 y z + 5 z + 25 y)
(D5) ----------------------
6
z
MAXIMA 可以进行非线性代数方程的系统求解, 在这个例子里,我们使用函数 solve 解一个三元方程组, 三个变量为 A, B, C:
(C6) a + b*c=1;
(D6) b C + a = 1
(C7) b - a*c=0;
(D7) b - a C = 0
(C8) a+b=5;
(D8) b + a = 5
(C9) solve([d6,d7,d8],[a,b,c]);
25 SQRT(79) %I + 25 5 SQRT(79) %I + 5 SQRT(79) %I + 1
(D9) [[a = -------------------, b = -----------------, C = ---------------],
6 SQRT(79) %I - 34 SQRT(79) %I + 11 10
25 SQRT(79) %I - 25 5 SQRT(79) %I - 5 SQRT(79) %I - 1
[a = -------------------, b = -----------------, C = - ---------------]]
6 SQRT(79) %I + 34 SQRT(79) %I - 11 10
注意这里的显示由一个 ``列表(list)'' 组成, i.e., 由两个方括号 [ ... ] 括住的一些表达式, 它本身还包涵着两个列表. 后者每一个都包涵了方程组的一组解.
MAXIMA 同样可以轻松处理三角问题. trigexpand 函数使用 sum-of-angles (和差化积?) 公式尽可能的把每一个参数分配进三角函数:
(C10) sin(u+v)*cos(u)^3;
3
(D10) COS (u) SIN(v + u)
(C11) trigexpand(%);
3
(D11) COS (u) (COS(u) SIN(v) + SIN(u) COS(v))
反之, trigreduce 函数把一个表达式转换成和的形式, 每一项只包涵一个 sin 或 cos:
(C12) trigreduce(d10);
SIN(v + 4 u) + SIN(v - 2 u) 3 SIN(v + 2 u) + 3 SIN(v)
(D12) --------------------------- + -------------------------
8 8
realpart 函数和 imagpart 函数可以返回一个复表达式的实部和虚部:
(C13) w:3+k*%i;
(D13) %I k + 3
(C14) w^2*%e^w;
2 %I k + 3
(D14) (%I k + 3) %E
(C15) realpart(%);
3 2 3
(D15) %E (9 - k ) COS(k) - 6 %E k SIN(k)
5 微积分
MAXIMA 可以计算导数和积分, 把函数按 Taylor 级数展开, 求极限, 对普通的微分方程进行精确求解. 我们从把符号 f 定义为如下的 x 的方程开始:
(C1) f:x^3*%E^(k*x)*sin(w*x);
3 k x
(D1) x %E SIN(w x)
我们计算 f 对 x 的导数:
(C2) diff(f,x);
3 k x 2 k x 3 k x
(D2) k x %E SIN(w x) + 3 x %E SIN(w x) + w x %E COS(w x)
现在我们来找 f 对 x 的不定积分:
(C3) integrate(f,x);
6 3 4 5 2 7 3
(D3) (((k w + 3 k w + 3 k w + k ) x
6 2 4 4 2 6 2 4 3 2 5
+ (3 w + 3 k w - 3 k w - 3 k ) x + (- 18 k w - 12 k w + 6 k ) x
4 2 2 4 k x
- 6 w + 36 k w - 6 k ) %E SIN(w x)
7 2 5 4 3 6 3 5 3 3 5 2
+ ((- w - 3 k w - 3 k w - k w) x + (6 k w + 12 k w + 6 k w) x
5 2 3 4 3 3 k x
+ (6 w - 12 k w - 18 k w) x - 24 k w + 24 k w) %E COS(w x))
8 2 6 4 4 6 2 8
/(w + 4 k w + 6 k w + 4 k w + k )
稍稍变换一下语法就可以得到定积分:
(C4) integrate(1/x^2,x,1,inf);
(D4) 1
(C5) integrate(1/x,x,0,inf);
Integral is divergent
-- an error. Quitting. To debug this try DEBUGMODE(TRUE);)
下面我们用 f(先前已经在 C1 中定义) 和双曲正弦函数定义符号 g , 然后找出它关于点 x = 0 的 Taylor 级数展开式 (up to, say, order 3 terms):
(C6) g:f/sinh(k*x)^4;
3 k x
x %E SIN(w x)
(D6) -----------------
4
SINH (k x)
(C7) taylor(g,x,0,3);
2 3 2 2 3 3
w w x (w k + w ) x (3 w k + w ) x
(D7)/T/ -- + --- - -------------- - ---------------- + . . .
4 3 4 3
k k 6 k 6 k
当 x 趋向于0时 g 的极限可以如下求出:
(C8) limit(g,x,0);
w
(D8) --
4
k
MAXIMA 还可以对不可求值的式子求解 (用引号标记):
(C9) 'diff(y,x);
dy
(D9) --
dx
(C9) 里的引号运算符的意思是 ``不去求值''. 如果没有它, MAXIMA 将得到 0:
(C10) diff(y,x);
(D10) 0
使用引号运算符我们就可以写出微分方程:
(C11) 'diff(y,x,2) + 'diff(y,x) + y;
2
d y dy
(D11) --- + -- + y
2 dx
dx
MAXIMA 的 ODE2 函数可以解出 first and second order ODE's:
(C12) ode2(d11,y,x);
- x/2 SQRT(3) x SQRT(3) x
(D12) y = %E (%K1 SIN(---------) + %K2 COS(---------))
2 2
6 矩阵乘法
MAXIMA 可以计算行列式, 以及带符号元素(i.e., 带有代数变量的元素) 的矩阵的逆, 特征值和特征向量. 我们从一个元素一个元素地输入一个矩阵 m 开始:
(C1) m:entermatrix(3,3);
Is the matrix 1. Diagonal 2. Symmetric 3. Antisymmetric 4. General
Answer 1, 2, 3 or 4 : 4;
Row 1 Column 1: 0;
Row 1 Column 2: 1;
Row 1 Column 3: a;
Row 2 Column 1: 1;
Row 2 Column 2: 0;
Row 2 Column 3: 1;
Row 3 Column 1: 1;
Row 3 Column 2: 1;
Row 3 Column 3: 0;
Matrix entered.
[ 0 1 a ]
[ ]
(D1) [ 1 0 1 ]
[ ]
[ 1 1 0 ]
然后我们找出它的转置, 行列式和逆矩阵:
(C2) transpose(m);
[ 0 1 1 ]
[ ]
(D2) [ 1 0 1 ]
[ ]
[ a 1 0 ]
(C3) determinant(m);
(D3) a + 1
(C4) invert(m),detout;
[ - 1 a 1 ]
[ ]
[ 1 - a a ]
[ ]
[ 1 1 - 1 ]
(D4) -----------------
a + 1
在 (C4) 中, 修饰语 DETOUT 将矩阵行列式的值保持在矩阵的逆之外. 作为检验, 我们用 m 去乘它的逆 ( 注意这里用句号表示矩阵乘法的用法):
(C5) m.d4;
[ - 1 a 1 ]
[ ]
[ 1 - a a ]
[ 0 1 a ] [ ]
[ ] [ 1 1 - 1 ]
(D5) [ 1 0 1 ] . -----------------
[ ] a + 1
[ 1 1 0 ]
(C6) expand(%);
[ a 1 ]
[ ----- + ----- 0 0 ]
[ a + 1 a + 1 ]
[ ]
[ a 1 ]
(D6) [ 0 ----- + ----- 0 ]
[ a + 1 a + 1 ]
[ ]
[ a 1 ]
[ 0 0 ----- + ----- ]
[ a + 1 a + 1 ]
(C7) factor(%);
[ 1 0 0 ]
[ ]
(D7) [ 0 1 0 ]
[ ]
[ 0 0 1 ]
另外, 要找出 m 的特征值和特征向量, 我们使用 EIGENVECTORS 函数:
(C8) eigenvectors(m);
Warning - you are redefining the MACSYMA function EIGENVALUES
Warning - you are redefining the MACSYMA function EIGENVECTORS
SQRT(4 a + 5) - 1 SQRT(4 a + 5) + 1
(D8) [[[- -----------------, -----------------, - 1], [1, 1, 1]],
2 2
SQRT(4 a + 5) - 1 SQRT(4 a + 5) - 1
[1, - -----------------, - -----------------],
2 a + 2 2 a + 2
SQRT(4 a + 5) + 1 SQRT(4 a + 5) + 1
[1, -----------------, -----------------], [1, - 1, 0]]
2 a + 2 2 a + 2
在 D8 中, 第一个 triple 给出了 m 的特征值, 第二个给出了它们各自的重数 (这里每个都是无重复的). 下面三个 triples 给出了 m 相应的特征向量. 为了从三个特征向量表达式中提取一个, 我们可以使用 PART 函数:
(C9) part(%,2);
SQRT(4 a + 5) - 1 SQRT(4 a + 5) - 1
(D9) [1, - -----------------, - -----------------]
2 a + 2 2 a + 2
7 用 MAXIMA 编程
到现在为止, 我们已经在交互模式下用过了 MAXIMA, 就象个计算器一样. 然而, 对于那些扯进了反复控制次序的计算, 还是运行一个程序来得方便. 这里我们展示了一个短且简单的程序, 用来计算一个有着两个变量 x 和 y 的函数 f 的临界点. 这个程序提示用户输入函数 f, 然后它计算 fx 和 fy 的偏导数, 然后, 它使用 MAXIMA 命令 SOLVE 去获得 fx = fy = 0 的解. 这个程序是在 MAXIMA 之外用一个文本编辑器写得, 然后用 BATCH 命令装载进 MAXIMA. 下面是程序列表:
/* --------------------------------------------------------------------------
this is file critpts.max:
as you can see, comments in maxima are like comments in C
Nelson Luis Dias, nldias@simepar.br
created 20000707
updated 20000707
--------------------------------------------------------------------------- */
critpts():=(
print("program to find critical points"),
/* ---------------------------------------------------------------------------
asks for a function
--------------------------------------------------------------------------- */
f:read("enter f(x,y)"),
/* ---------------------------------------------------------------------------
echoes it, to make sure
--------------------------------------------------------------------------- */
print("f = ",f),
/* ---------------------------------------------------------------------------
produces a list with the two partial derivatives of f
--------------------------------------------------------------------------- */
eqs:[diff(f,x),diff(f,y)],
/* ---------------------------------------------------------------------------
produces a list of unknowns
--------------------------------------------------------------------------- */
unk:[x,y],
/* ---------------------------------------------------------------------------
solves the system
--------------------------------------------------------------------------- */
solve(eqs,unk)
)$
这个程序 (实际上是个没有参数的函数) 叫做 critpts. 每一行都是一个有效的, 可以由键盘上执行的 MAXIMA 命令, 它们由逗号隔开. 偏导数被贮存在一个叫做 eqs 的变量中, 未知数贮存在 unk 中. 这里是它运行的例子:
(C1) batch("critpts.max");
batching #/home/nldias/work/papers2000/intromax/critpts.max
(C2)
(C2) critpts() := (PRINT("program to find critical points"),
f : READ("enter f(x,y)"), PRINT("f = ", f), eqs : [DIFF(f, x), DIFF(f, y)],
unk : [x, y], SOLVE(eqs, unk))
(C3) critpts();
program to find critical points
enter f(x,y)
%e^(x^3+y^2)*(x+y);
2 3
y + x
f = (y + x) %E
(D3) [[x = 0.4588955685487 %I + 0.35897908710869,
y = 0.49420173682751 %I - 0.12257873677837],
[x = 0.35897908710869 - 0.4588955685487 %I,
y = - 0.49420173682751 %I - 0.12257873677837],
[x = 0.41875423272348 %I - 0.69231242044203,
y = 0.4559120701117 - 0.86972626928141 %I],
[x = - 0.41875423272348 %I - 0.69231242044203,
y = 0.86972626928141 %I + 0.4559120701117]]
8 MAXIMA 函数提要
看在 maxima-5.4/info/ 目录中 texinfo 或 html 格式的手册. 从 MAXIMA 本身, 你可以用 DESCRIBE(function name).
ALLROOTS(A)
Finds all the (generally complex) roots of the polynomial equation A, and lists them in NUMERical format (i.e. to 16 significant figures).
APPEND(A,B)
Appends the list B to the list A, resulting in a single list.
BATCH(A)
Loads and runs a BATCH program with filename A.
COEFF(A,B,C)
Gives the coefficient of B raised to the power C in expression A.
CONCAT(A,B)
Creates the symbol AB.
CONS(A,B)
Adds A to the list B as its first element.
DEMOIVRE(A)
Transforms all complex exponentials in A to their trigonometric equivalents.
DENOM(A)
Gives the denominator of A.
DEPENDS(A,B)
Declares A to be a function of B. This is useful for writing unevaluated derivatives, as in specifying differential equations.
DESOLVE(A,B)
Attempts to solve a linear system A of ODE's for unknowns B using Laplace transforms.
DETERMINANT(A)
Returns the determinant of the square matrix A.
DIFF(A,B1,C1,B2,C2,...,Bn,Cn)
Gives the mixed partial derivative of A with respect to each Bi, Ci times. For brevity, DIFF(A,B,1) may be represented by DIFF(A,B). 'DIFF(...) represents the unevaluated derivative, useful in specifying a differential equation.
EIGENVALUES(A)
Returns two lists, the first being the eigenvalues of the square matrix A, and the second being their respective multiplicities.
EIGENVECTORS(A)
Does everything that EIGENVALUES does, and adds a list of the eigenvectors of A.
ENTERMATRIX(A,B)
Cues the user to enter an A × B matrix, element by element.
EV(A,B1,B2,...,Bn)
Evaluates A subject to the conditions Bi. In particular the Bi may be equations, lists of equations (such as that returned by SOLVE), or assignments, in which cases EV ``plugs'' the Bi into A. The Bi may also be words such as NUMER (in which case the result is returned in numerical format), DETOUT (in which case any matrix inverses in A are performed with the determinant factored out), or DIFF (in which case all differentiations in A are evaluated, i.e., 'DIFF in A is replaced by DIFF). For brevity in a manual command (i.e., not inside a user-defined function), the EV may be dropped, shortening the syntax to A,B1,B2,...,Bn.
EXPAND(A)
Algebraically expands A. In particular multiplication is distributed over addition.
EXPONENTIALIZE(A)
Transforms all trigonometric functions in A to their complex exponential equivalents.
FACTOR(A)
Factors A.
FREEOF(A,B)
Is true if the variable A is not part of the expression B.
GRIND(A)
Displays a variable or function A in a compact format. When used with WRITEFILE and an editor outside of MAXIMA, it offers a scheme for producing BATCH files which include MAXIMA-generated expressions.
IDENT(A)
Returns an A × A identity matrix.
IMAGPART(A)
Returns the imaginary part of A.
INTEGRATE(A,B)
Attempts to find the indefinite integral of A with respect to B.
INTEGRATE(A,B,C,D)
Attempts to find the indefinite integral of A with respect to B. taken from B = C to B = D. The limits of integration C and D may be taken is INF (positive infinity) of MINF (negative infinity).
INVERT(A)
Computes the inverse of the square matrix A.
KILL(A)
Removes the variable A with all its assignments and properties from the current MAXIMA environment.
LIMIT(A,B,C)
Gives the limit of expression A as variable B approaches the value C. The latter may be taken as INF of MINF as in INTEGRATE.
LHS(A)
Gives the left-hand side of the equation A.
LOADFILE(A)
Loads a disk file with filename A from the current default directory. The disk file must be in the proper format (i.e. created by a SAVE command).
MAKELIST(A,B,C,D)
Creates a list of A's (each of which presumably depends on B), concatenated from B = C to B = D
MAP(A,B)
Maps the function A onto the subexpressions of B.
MATRIX(A1,A2,...,An)
Creates a matrix consisting of the rows Ai, where each row Ai is a list of m elements, [B1, B2, ..., Bm].
NUM(A)
Gives the numerator of A.
ODE2(A,B,C)
Attempts to solve the first- or second-order ordinary differential equation A for B as a function of C.
PART(A,B1,B2,...,Bn)
First takes the B1th part of A, then the B2th part of that, and so on.
PLAYBACK(A)
Displays the last A (an integer) labels and their associated expressions. If A is omitted, all lines are played back. See the Manual for other options.
RATSIMP(A)
Simplifies A and returns a quotient of two polynomials.
REALPART(A)
Returns the real part of A.
RHS(A)
Gives the right-hand side of the equation A.
SAVE(A,B1,B2,..., Bn)
Creates a disk file with filename A in the current default directory, of variables, functions, or arrays Bi. The format of the file permits it to be reloaded into MAXIMA using the LOADFILE command. Everything (including labels) may be SAVEd by taking B1 equal to ALL.
SOLVE(A,B)
Attempts to solve the algebraic equation A for the unknown B. A list of solution equations is returned. For brevity, if A is an equation of the form C = 0, it may be abbreviated simply by the expression C.
STRING(A)
Converts A to MACSYMA's linear notation (similar to FORTRAN's) just as if it had been typed in and puts A into the buffer for possible editing. The STRING'ed expression should not be used in a computation.
STRINGOUT(A,B1,B2,...,Bn)
Creates a disk file with filename A in the current default directory, of variables (e.g. labels) Bi. The file is in a text format and is not reloadable into MAXIMA. However the strungout expressions can be incorporated into a FORTRAN, BASIC or C program with a minimum of editing.
SUBST(A,B,C)
Substitutes A for B in C.
TAYLOR(A,B,C,D)
Expands A in a Taylor series in B about B = C, up to and including the term (B-C)D. MAXIMA also supports Taylor expansions in more than one independent variable; see the Manual for details.
TRANSPOSE(A)
Gives the transpose of the matrix A.
TRIGEXPAND(A)
Is a trig simplification function which uses the sum-of-angles formulas to simplify the arguments of individual SIN's or COS's. For example, trigexpand(sin(x+y)) gives COS(x) SIN(y) + SIN(x) COS(y).
TRIGREDUCE(A)
Is a trig simplification function which uses trig identities to convert products and powers of SIN and COS into a sum of terms, each of which contains only a single SIN or COS. For example, trigreduce(sin(x)^2) gives (1 - COS(2x))/2.
TRIGSIMP(A)
Is a trig simplification function which replaces TAN, SEC, etc., by their SIN and COS equivalents. It also uses the identity SIN()2 + COS()2 = 1.
--------------------------------------------------------------------------------
Footnotes:
1 Adapted from ``Perturbation Methods, Bifurcation Theory and Computer Algebra'' by Rand and Armbruster, Springer, 1987
2 Adapted to LATEX and HTML by Nelson L. Dias (nldias@simepar.br), SIMEPAR Technological Institute and Federal University of Paran? Brazil