“Maxima导引”的版本间的差异
来自Ubuntu中文
第5行: | 第5行: | ||
Maxima: http://wiki.ubuntu.org.cn/Maxima | Maxima: http://wiki.ubuntu.org.cn/Maxima | ||
− | ==函数 | + | == 函数 == |
− | + | ||
− | + | === 定义函数 === | |
− | ====一元函数==== | + | 注意函数使用的符号是 := |
+ | |||
+ | ==== 一元函数 ==== | ||
f(x):=expr; | f(x):=expr; | ||
第17行: | 第18行: | ||
(%i1) f(x):= 1+x; | (%i1) f(x):= 1+x; | ||
− | (%o1) | + | (%o1) f(x) := 1 + x |
(%i2) f(2); | (%i2) f(2); | ||
− | (%o2) | + | (%o2) 3 |
− | ====多元函数==== | + | ==== 多元函数 ==== |
f(x,y):=expr; | f(x,y):=expr; | ||
第28行: | 第29行: | ||
(%i3) f(x,y):=y^2+x^2; | (%i3) f(x,y):=y^2+x^2; | ||
− | + | 2 2 | |
− | (%o3) | + | (%o3) f(x, y) := y + x |
(%i4) f(2,3); | (%i4) f(2,3); | ||
− | (%o4) | + | (%o4) 13 |
+ | |||
+ | === 初等函数 === | ||
+ | |||
+ | ;幂函数: x^2, x^(-1/2),...;指数函数:2^x, (1/2)^x, exp(x), %e^x...:在 maxima 中,常数e=2.718281828459045被记为:%e. 所以指数函数 e^x 在 maxima 中被表示为:%e^x | ||
− | |||
− | |||
− | |||
− | |||
由于这个函数的重要性,它有一个专门的记法:exp(x). | 由于这个函数的重要性,它有一个专门的记法:exp(x). | ||
− | (%i2)f(x) := %e^x; | + | (%i2)f(x) := %e^x; |
− | + | x | |
− | (%o2) | + | (%o2) f(x) := %e |
− | (%i3)g(x) := exp(x); | + | (%i3)g(x) := exp(x); |
− | (%o3) | + | (%o3) g(x) := exp(x) |
(%i4)expand(f(x) - g(x)); | (%i4)expand(f(x) - g(x)); | ||
− | (%o4) | + | (%o4) 0 |
+ | |||
+ | ;对数函数:log(x):在 maxima 中,log(x) 就是自然对数,即以 e 为底的对数,数学上常记为 ln(x)。maxima 没有其它形式的对数,要使用以 10 或 2 为底的对数,只能使用换底公式。如果把下面的代码放到 ~/.maxima/maxima-init.mac 中,则 maxima 在运行时会加载自定义函数 log10、log2,并把 ln 定义为 log。这样就可以使用 log10、log2 和 ln 了。 | ||
− | |||
− | |||
log10(x):=log(x)/log(10); | log10(x):=log(x)/log(10); | ||
log2(x):=log(x)/log(2); | log2(x):=log(x)/log(2); | ||
ln:log; | ln:log; | ||
− | ;三角函数:sin, cos, tan, cot, sec, csc | + | ;三角函数:sin, cos, tan, cot, sec, csc:在 maxima 中,pi=3.141592653589793 被记为 %pi. |
− | :在 maxima 中,pi=3.141592653589793 被记为 %pi. | + | |
;反三角函数:asin, acos, atan, acot, asec, acsc | ;反三角函数:asin, acos, atan, acot, asec, acsc | ||
− | ===分段函数=== | + | === 分段函数 === |
− | f(x)= x-1, x | + | f(x)= x-1, x<0 |
− | + | 0, x=0 | |
− | + | x+1, x>0 | |
− | (%i2) f(x) := if x | + | (%i2) f(x) := if x < 0 then x - 1 else (if x = 0 then 0 else 1 + x); |
− | (%o2) | + | (%o2) f(x) := if x < 0 then x - 1 else (if x = 0 then 0 else 1 + x) |
(%i3) f(- 1); | (%i3) f(- 1); | ||
− | (%o3) | + | (%o3) - 2 |
(%i4) f(0) | (%i4) f(0) | ||
− | (%o4) | + | (%o4) 0 |
(%i5) f(1) | (%i5) f(1) | ||
− | (%o5) | + | (%o5) 2 |
+ | |||
+ | == 极限 == | ||
− | |||
求极限的命令为: | 求极限的命令为: | ||
limit (expr, var, val, direction); | limit (expr, var, val, direction); | ||
+ | <br> expr 是要求极限的表达式; var 是变量名; val 指定在何处取极限;direction 是方向,可以是 plus 和 miuns,分别指右极限和左极限。 | ||
− | + | <br> 例子: | |
− | + | ||
− | + | ||
− | 例子: | + | |
(%i2)limit (sin(x)/x, x, 0); | (%i2)limit (sin(x)/x, x, 0); | ||
− | (%o2) | + | (%o2) 1 |
(%i3)limit (tan(x), x, %pi/2); | (%i3)limit (tan(x), x, %pi/2); | ||
− | (%o3) | + | (%o3) und |
(%i4)f:diff(abs(x), x); | (%i4)f:diff(abs(x), x); | ||
(%i5)limit(f, x, 0, plus); | (%i5)limit(f, x, 0, plus); | ||
− | (%o5) | + | (%o5) 1 |
(%i6)limit(f, x, 0, minus); | (%i6)limit(f, x, 0, minus); | ||
− | (%o6) | + | (%o6) -1 |
+ | |||
+ | |||
其中 und 表示极限不存在。 | 其中 und 表示极限不存在。 | ||
− | 如果要取无穷处的极限,可以用常数 inf, | + | 如果要取无穷处的极限,可以用常数 inf, minf。前者表示正无穷,後者表示负无穷。 |
(%i1) limit (1/x, x, inf); | (%i1) limit (1/x, x, inf); | ||
− | (%o1) | + | (%o1) 0 |
(%i2) limit (atan(x), x, inf); | (%i2) limit (atan(x), x, inf); | ||
− | (%o2) | + | (%o2) %pi/2 |
(%i3) limit (atan(x), x, minf); | (%i3) limit (atan(x), x, minf); | ||
− | (%o3) | + | (%o3) -%pi/2 |
== 导数 == | == 导数 == | ||
求导数: | 求导数: | ||
+ | <pre>diff(expr, var)</pre> | ||
+ | 例子: | ||
− | |||
− | |||
− | |||
− | |||
(%i1) diff(sin(x),x); | (%i1) diff(sin(x),x); | ||
(%o1) cos(x) | (%o1) cos(x) | ||
(%i2) diff(f(x)*g(x),x); | (%i2) diff(f(x)*g(x),x); | ||
− | + | d d | |
(%o2) f(x) (-- (g(x))) + g(x) (-- (f(x))) | (%o2) f(x) (-- (g(x))) + g(x) (-- (f(x))) | ||
− | + | dx dx | |
− | + | ||
− | 求高阶导数: | + | <br> 求高阶导数: |
− | diff(expr, var, n) | + | diff(expr, var, n) |
+ | <br> 例子: | ||
− | + | (%i3)diff(sin(x),x, 2); | |
+ | (%o3) - sin(x) | ||
+ | (%i4) diff(f(x)*g(x),x,3); | ||
+ | 3 2 | ||
+ | d d d | ||
− | (% | + | (%o4) f(x) (--- (g(x))) + 3 (-- (f(x))) (--- (g(x))) |
− | ( | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | 3 dx 2 | |
+ | dx dx | ||
+ | 2 3 | ||
+ | d d d | ||
+ | + 3 (--- (f(x))) (-- (g(x))) + g(x) (--- (f(x))) | ||
+ | 2 dx 3 | ||
+ | dx dx | ||
− | + | == 集合 == | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | === 集合定义 === | |
− | ===集合定义=== | + | |
maxima 似乎只支持有限集。建立集合的方式是列举。 | maxima 似乎只支持有限集。建立集合的方式是列举。 | ||
− | ;set(a_1, ..., a_n) | + | ;set(a_1, ..., a_n):n 个元素的集合 |
− | :n 个元素的集合 | + | ;{a_1, ..., a_n}:同上 |
− | ;{a_1, ..., a_n} | + | ;setify(foo):list->set |
− | :同上 | + | |
− | ;setify(foo):list- | + | |
:把列表 foo 转换为集合 | :把列表 foo 转换为集合 | ||
− | ;fullsetify(foo) | + | ;fullsetify(foo):把列表 foo 转换为集合, 对列表的列表元素递归调用 fullsetify。列表的列表元素指的是:列表的一个元素,本身又是一个列表。 |
− | :把列表 foo 转换为集合, 对列表的列表元素递归调用 fullsetify。列表的列表元素指的是:列表的一个元素,本身又是一个列表。 | + | |
例子: | 例子: | ||
− | (%i2) A : set(1, 2, 3) | + | (%i2) A : set(1, 2, 3) |
− | (%o2) | + | (%o2) {1, 2, 3} |
− | (%i3) B : {a, b, c} | + | (%i3) B : {a, b, c} |
− | (%o3) | + | (%o3) {a, b, c} |
− | (%i4) C : {} | + | (%i4) C : {} |
− | (%o4) | + | (%o4) {} |
(%i2) setify([a, b, c]) | (%i2) setify([a, b, c]) | ||
− | (%o2) | + | (%o2) {a, b, c} |
(%i3) setify([a, b, [1, 2], [a, b, c]]) | (%i3) setify([a, b, [1, 2], [a, b, c]]) | ||
− | (%o3) | + | (%o3) {[1, 2], a, [a, b, c], b} |
(%i2) fullsetify([a, b, [1, 2], [a, b, c]]) | (%i2) fullsetify([a, b, [1, 2], [a, b, c]]) | ||
− | (%o2) | + | (%o2) {{1, 2}, a, {a, b, c}, b} |
+ | <br> | ||
− | ===元素与集合=== | + | === 元素与集合 === |
+ | |||
+ | ;elementp(x,y):判断 x 是否集合 S 的元素 | ||
+ | ;adjoin(x, S):返回集合 {t | (t in S) or t = x} 即返回把 x 添加到 S 中得到的集合,但 S 本身并不改变。 | ||
+ | ;disjoin(x, S):返回把 x 从集合 S 中去除後的集合,S 本身并不改变。 | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
例子: | 例子: | ||
− | (%i2) A : {a, b, c} | + | |
− | (%o2) | + | (%i2) A : {a, b, c} |
+ | (%o2) {a, b, c} | ||
(%i3) elementp(a, A) | (%i3) elementp(a, A) | ||
− | (%o3) | + | (%o3) true |
(%i4) elementp(d, A) | (%i4) elementp(d, A) | ||
− | (%o4) | + | (%o4) false |
# 把 d 添加到 A 中 | # 把 d 添加到 A 中 | ||
(%i5) adjoin(d, A) | (%i5) adjoin(d, A) | ||
− | (%o5) | + | (%o5) {a, b, c, d} |
# A 并未改变,d 不是 A 的元素 | # A 并未改变,d 不是 A 的元素 | ||
(%i6) elementp(d, A) | (%i6) elementp(d, A) | ||
− | (%o6) | + | (%o6) false |
# 把 d 添加到 A 中,并把得到的集合赋值给 A | # 把 d 添加到 A 中,并把得到的集合赋值给 A | ||
− | (%i7) A : adjoin(d, A) | + | (%i7) A : adjoin(d, A) |
− | (%o7) | + | (%o7) {a, b, c, d} |
(%i8) elementp(d, A) | (%i8) elementp(d, A) | ||
− | (%o8) | + | (%o8) true |
− | (%i9) A : disjoin(a, A) | + | (%i9) A : disjoin(a, A) |
− | (%o9) | + | (%o9) {b, c, d} |
(%i10) elementp(a, A) | (%i10) elementp(a, A) | ||
− | (%o10) | + | (%o10) false |
− | ===集合运算=== | + | === 集合运算 === |
− | ;emptyp(S) | + | ;emptyp(S):判断 S 是否空集 |
− | :判断 S 是否空集 | + | ;intersection(A, B):交 |
− | ;intersection(A, B) | + | ;intersect(A, B):同上,似乎无任何区别 |
− | :交 | + | ;union (A, B):并 |
− | ;intersect(A, B) | + | ;setdifference(A, B):差,馀。 A\B |
− | :同上,似乎无任何区别 | + | ;symmdifference(A,B):对称差 |
− | ;union (A, B) | + | ;subsetp(A,B):判断 A 是否 B 的子集 |
− | :并 | + | ;subset(A, f):返回集合 {x | (x in A) and (f(x)=true)} f 必须是谓词函数,也即其值域为 {true, false}。 |
− | ;setdifference(A, B) | + | ;subset (A, f):返回一个 A 的一个子集合,由 A 中满足 f 的元素全体组成。 |
− | : | + | ;powerset(A):返回 A 的全部子集合构成的集合。 |
− | ;symmdifference(A,B) | + | ;powerset(A,n):返回 A 的大小为 n 的子集构成的集合。 |
− | :对称差 | + | ;cartesian_product(A,B):返回 A, B 的笛卡尔积(直积)。 |
− | ;subsetp(A,B) | + | ;cardinality:返回集合 A 的大小|A|。 |
− | :判断 A 是否 B 的子集 | + | ;disjointp(A,B):若集合 A, B 相交,则返回 false,否则返回 true。 |
− | ;subset(A, f) | + | |
− | :返回集合 {x | (x in A) and (f(x)=true)} f 必须是谓词函数,也即其值域为 {true, false}。 | + | |
− | ;subset (A, f): 返回一个 A 的一个子集合,由 A 中满足 f 的元素全体组成。 | + | |
− | ;powerset(A) | + | |
− | :返回 A 的全部子集合构成的集合。 | + | |
− | ;powerset(A,n) | + | |
− | :返回 A 的大小为 n 的子集构成的集合。 | + | |
− | ;cartesian_product(A,B) | + | |
− | :返回 A, B 的笛卡尔积(直积)。 | + | |
− | ;cardinality | + | |
− | :返回集合 A 的大小|A|。 | + | |
− | ;disjointp(A,B) | + | |
− | :若集合 A, B 相交,则返回 false,否则返回 true。 | + | |
例子: | 例子: | ||
− | (%i2) A : {a, b, c} | + | |
− | (%o2) | + | (%i2) A : {a, b, c} |
− | (%i3) B : {b, c, d} | + | (%o2) {a, b, c} |
− | (%o3) | + | (%i3) B : {b, c, d} |
+ | (%o3) {b, c, d} | ||
(%i4) intersection(A, B) | (%i4) intersection(A, B) | ||
− | (%o4) | + | (%o4) {b, c} |
(%i5) intersect(A, B) | (%i5) intersect(A, B) | ||
− | (%o5) | + | (%o5) {b, c} |
(%i6) setdifference(A, B) | (%i6) setdifference(A, B) | ||
− | (%o6) | + | (%o6) {a} |
(%i7) symmdifference(A, B) | (%i7) symmdifference(A, B) | ||
− | (%o7) | + | (%o7) {a, d} |
(%i8) subsetp(A, B) | (%i8) subsetp(A, B) | ||
− | (%o8) | + | (%o8) false |
(%i9) subsetp(setdifference(B, A), B) | (%i9) subsetp(setdifference(B, A), B) | ||
− | (%o9) | + | (%o9) true |
(%i10) powerset(A) | (%i10) powerset(A) | ||
− | (%o10) | + | (%o10) {{}, {a}, {a, b}, {a, b, c}, {a, c}, {b}, {b, c}, {c}} |
(%i11) powerset(A, 2) | (%i11) powerset(A, 2) | ||
− | (%o11) | + | (%o11) {{a, b}, {a, c}, {b, c}} |
(%i12) cartesian_product(A, B) | (%i12) cartesian_product(A, B) | ||
(%o12) {[a, b], [a, c], [a, d], [b, b], [b, c], [b, d], [c, b], [c, c], [c, d]} | (%o12) {[a, b], [a, c], [a, d], [b, b], [b, c], [b, d], [c, b], [c, c], [c, d]} | ||
# 在 Maxima 中,用 % 表示上一条命令的输出,在这里,就是 A 与 B 的直积。 | # 在 Maxima 中,用 % 表示上一条命令的输出,在这里,就是 A 与 B 的直积。 | ||
(%i13) cardinality(%) | (%i13) cardinality(%) | ||
− | (%o13) | + | (%o13) 9 |
2008年1月25日 (五) 17:38的版本
来源:http://blog.chinaunix.net/u/20/showart_172159.html
作者:win_hate
Maxima: http://wiki.ubuntu.org.cn/Maxima
函数
定义函数
注意函数使用的符号是 :=
一元函数
f(x):=expr;
例子:
(%i1) f(x):= 1+x; (%o1) f(x) := 1 + x (%i2) f(2); (%o2) 3
多元函数
f(x,y):=expr;
例子:
(%i3) f(x,y):=y^2+x^2; 2 2 (%o3) f(x, y) := y + x (%i4) f(2,3); (%o4) 13
初等函数
- 幂函数: x^2, x^(-1/2),...;指数函数:2^x, (1/2)^x, exp(x), %e^x...
- 在 maxima 中,常数e=2.718281828459045被记为:%e. 所以指数函数 e^x 在 maxima 中被表示为:%e^x
由于这个函数的重要性,它有一个专门的记法:exp(x).
(%i2)f(x) := %e^x; x (%o2) f(x) := %e (%i3)g(x) := exp(x); (%o3) g(x) := exp(x) (%i4)expand(f(x) - g(x)); (%o4) 0
- 对数函数:log(x)
- 在 maxima 中,log(x) 就是自然对数,即以 e 为底的对数,数学上常记为 ln(x)。maxima 没有其它形式的对数,要使用以 10 或 2 为底的对数,只能使用换底公式。如果把下面的代码放到 ~/.maxima/maxima-init.mac 中,则 maxima 在运行时会加载自定义函数 log10、log2,并把 ln 定义为 log。这样就可以使用 log10、log2 和 ln 了。
log10(x):=log(x)/log(10); log2(x):=log(x)/log(2); ln:log;
- 三角函数:sin, cos, tan, cot, sec, csc
- 在 maxima 中,pi=3.141592653589793 被记为 %pi.
- 反三角函数:asin, acos, atan, acot, asec, acsc
分段函数
f(x)= x-1, x<0 0, x=0 x+1, x>0
(%i2) f(x) := if x < 0 then x - 1 else (if x = 0 then 0 else 1 + x); (%o2) f(x) := if x < 0 then x - 1 else (if x = 0 then 0 else 1 + x) (%i3) f(- 1); (%o3) - 2 (%i4) f(0) (%o4) 0 (%i5) f(1) (%o5) 2
极限
求极限的命令为:
limit (expr, var, val, direction);
expr 是要求极限的表达式; var 是变量名; val 指定在何处取极限;direction 是方向,可以是 plus 和 miuns,分别指右极限和左极限。
例子:
(%i2)limit (sin(x)/x, x, 0); (%o2) 1 (%i3)limit (tan(x), x, %pi/2); (%o3) und (%i4)f:diff(abs(x), x); (%i5)limit(f, x, 0, plus); (%o5) 1 (%i6)limit(f, x, 0, minus); (%o6) -1
其中 und 表示极限不存在。
如果要取无穷处的极限,可以用常数 inf, minf。前者表示正无穷,後者表示负无穷。
(%i1) limit (1/x, x, inf); (%o1) 0 (%i2) limit (atan(x), x, inf); (%o2) %pi/2 (%i3) limit (atan(x), x, minf); (%o3) -%pi/2
导数
求导数:
diff(expr, var)
例子:
(%i1) diff(sin(x),x); (%o1) cos(x) (%i2) diff(f(x)*g(x),x); d d (%o2) f(x) (-- (g(x))) + g(x) (-- (f(x))) dx dx
求高阶导数:
diff(expr, var, n)
例子:
(%i3)diff(sin(x),x, 2); (%o3) - sin(x) (%i4) diff(f(x)*g(x),x,3); 3 2 d d d
(%o4) f(x) (--- (g(x))) + 3 (-- (f(x))) (--- (g(x)))
3 dx 2 dx dx 2 3 d d d + 3 (--- (f(x))) (-- (g(x))) + g(x) (--- (f(x))) 2 dx 3 dx dx
集合
集合定义
maxima 似乎只支持有限集。建立集合的方式是列举。
- set(a_1, ..., a_n)
- n 个元素的集合
- {a_1, ..., a_n}
- 同上
- setify(foo)
- list->set
- 把列表 foo 转换为集合
- fullsetify(foo)
- 把列表 foo 转换为集合, 对列表的列表元素递归调用 fullsetify。列表的列表元素指的是:列表的一个元素,本身又是一个列表。
例子:
(%i2) A : set(1, 2, 3) (%o2) {1, 2, 3} (%i3) B : {a, b, c} (%o3) {a, b, c} (%i4) C : {} (%o4) {}
(%i2) setify([a, b, c]) (%o2) {a, b, c} (%i3) setify([a, b, [1, 2], [a, b, c]]) (%o3) {[1, 2], a, [a, b, c], b}
(%i2) fullsetify([a, b, [1, 2], [a, b, c]]) (%o2) {{1, 2}, a, {a, b, c}, b}
元素与集合
- elementp(x,y)
- 判断 x 是否集合 S 的元素
- adjoin(x, S)
- 返回集合 {t | (t in S) or t = x} 即返回把 x 添加到 S 中得到的集合,但 S 本身并不改变。
- disjoin(x, S)
- 返回把 x 从集合 S 中去除後的集合,S 本身并不改变。
例子:
(%i2) A : {a, b, c} (%o2) {a, b, c} (%i3) elementp(a, A) (%o3) true (%i4) elementp(d, A) (%o4) false # 把 d 添加到 A 中 (%i5) adjoin(d, A) (%o5) {a, b, c, d} # A 并未改变,d 不是 A 的元素 (%i6) elementp(d, A) (%o6) false # 把 d 添加到 A 中,并把得到的集合赋值给 A (%i7) A : adjoin(d, A) (%o7) {a, b, c, d} (%i8) elementp(d, A) (%o8) true (%i9) A : disjoin(a, A) (%o9) {b, c, d} (%i10) elementp(a, A) (%o10) false
集合运算
- emptyp(S)
- 判断 S 是否空集
- intersection(A, B)
- 交
- intersect(A, B)
- 同上,似乎无任何区别
- union (A, B)
- 并
- setdifference(A, B)
- 差,馀。 A\B
- symmdifference(A,B)
- 对称差
- subsetp(A,B)
- 判断 A 是否 B 的子集
- subset(A, f)
- 返回集合 {x | (x in A) and (f(x)=true)} f 必须是谓词函数,也即其值域为 {true, false}。
- subset (A, f)
- 返回一个 A 的一个子集合,由 A 中满足 f 的元素全体组成。
- powerset(A)
- 返回 A 的全部子集合构成的集合。
- powerset(A,n)
- 返回 A 的大小为 n 的子集构成的集合。
- cartesian_product(A,B)
- 返回 A, B 的笛卡尔积(直积)。
- cardinality
- 返回集合 A 的大小|A|。
- disjointp(A,B)
- 若集合 A, B 相交,则返回 false,否则返回 true。
例子:
(%i2) A : {a, b, c} (%o2) {a, b, c} (%i3) B : {b, c, d} (%o3) {b, c, d} (%i4) intersection(A, B) (%o4) {b, c} (%i5) intersect(A, B) (%o5) {b, c} (%i6) setdifference(A, B) (%o6) {a} (%i7) symmdifference(A, B) (%o7) {a, d} (%i8) subsetp(A, B) (%o8) false (%i9) subsetp(setdifference(B, A), B) (%o9) true (%i10) powerset(A) (%o10) {{}, {a}, {a, b}, {a, b, c}, {a, c}, {b}, {b, c}, {c}} (%i11) powerset(A, 2) (%o11) {{a, b}, {a, c}, {b, c}} (%i12) cartesian_product(A, B) (%o12) {[a, b], [a, c], [a, d], [b, b], [b, c], [b, d], [c, b], [c, c], [c, d]} # 在 Maxima 中,用 % 表示上一条命令的输出,在这里,就是 A 与 B 的直积。 (%i13) cardinality(%) (%o13) 9