Maple 微积分实验考试2
MATH1131 核心命令复习
针对实验考试的 Maple 核心命令复习,涵盖函数定义、求解、绘图与极值问题
当方程无法直接解出精确的符号解时,用它来找数值解(近似解)。
- 用途:求解单个或多个方程的数值解。
- 语法:
- 基本形式: fsolve(方程, 变量);
- 在指定区间内求解: fsolve(方程, 变量 = 起点..终点);
// 基本求解
f := x -> x^3 - 2*x - 5;
fsolve(f(x) = 0, x); // 在整个实数范围寻找解
// 指定区间求解
fsolve(df(x) = 0, x = 0..0.3); // 在 x 位于 0 和 0.3 之间寻找解
fsolve(sin(x) = 0.5, x = 0..Pi); // 在指定区间内求解三角方程
用于求解方程,并给出精确的符号解(例如整数、分数、根式等)。
- 用途:求解方程,给出精确的符号解。这在题目要求 "exact values" 时至关重要。
- 与 fsolve() 的区别:solve() 追求精确解;fsolve() 给出数值近似解(小数)。
- 语法:solve(方程, 变量);
// 二次方程的精确解
solve(x^2 + 2*x - 24 = 0, x); // 输出精确的整数解 -6, 4
solve(x^2 - 2 = 0, x); // 输出带根号的精确解 sqrt(2), -sqrt(2)
// 三角方程的精确解
solve(sin(x) = 1/2, x); // 输出精确的角度解
// 系统方程
solve({x + y = 5, x - y = 1}, {x, y}); // 解方程组
- 使用 solve():当题目要求精确值、分数、根式等符号形式的答案时。
- 使用 fsolve():当需要数值近似解,或者方程过于复杂无法得到符号解时。
这是解决"求函数在闭区间 [a,b] 上的绝对最大/最小值"这类问题的标准方法。
任何一个在闭区间 [a,b] 上的连续函数,都必然存在一个绝对最大值和一个绝对最小值。
这些最大/最小值只会出现在以下三类"候选点"上:
- 驻点 (Stationary Points):在区间内部 (a, b),使得导数 f'(x) = 0 的点。
- 奇点 (Singular Points):在区间内部 (a, b),使得导数 f'(x) 不存在的点。
- 区间端点 (Endpoints):即 x = a 和 x = b。
- 找出所有候选点:驻点、奇点、端点。
- 筛选:只保留所有在闭区间 [a,b] 内的、不重复的候选点。
- 求值:将筛选后的所有候选点逐个代入原始函数 f(x) 中计算函数值。
- 比较:所有计算出的函数值中,最大的就是绝对最大值,最小的就是绝对最小值。
f := x -> abs(x^3 - 2*x^2 - 7*x - 4);
g := x -> x^3 - 2*x^2 - 7*x - 4;
// 找驻点:求解 g'(x) = 0
solve(D(g)(x) = 0, x);
// 找奇点:求解 g(x) = 0(绝对值函数的尖角点)
solve(g(x) = 0, x);
// 然后手动筛选在指定区间内的点,代入原函数求值并比较
limit 命令是 Maple 中计算函数极限的核心工具,尤其在处理洛必达法则问题时,它是你最可靠的验证助手。
只有当极限是 0/0 或 ∞/∞ 的不定式时,才可以尝试使用洛必达法则。
- 验证前提:分别计算分子和分母的极限,以确定极限的类型。这是判断能否使用洛必达法则的关键一步。
- 验证答案:直接计算整个分式的极限,以核对你的最终答案(无论是否使用了洛必达法则)。
- 双边极限:limit(表达式, 变量=趋近的值);
- 单边极限:limit(表达式, 变量=趋近的值, left); 或 limit(表达式, 变量=趋近的值, right);
// 基本极限计算
limit(sin(x)/x, x=0); // 输出 1
// 单边极限
limit(ln(x), x=0, right); // 输出 -infinity
// 验证洛必达法则条件的例子
// 问题: lim(x->0) cos(x)/ln(x) 是否可用洛必达?
// 1. 验证分子极限
limit(cos(x), x=0); // 输出: 1
// 2. 验证分母极限
limit(ln(x), x=0, right); // 输出: -infinity
// 3. 结论: 极限类型是 1/(-∞),不是不定式,不能使用洛必达法则
- 分别计算分子和分母的极限
- 判断是否为 0/0 或 ∞/∞ 不定式
- 如果是不定式,可以使用洛必达法则
- 如果不是,直接计算原极限或使用其他方法
- 最后用 limit 命令验证最终答案
Digits := 10;
f := x -> 3*sin(x^2/2) - (sin(x/2))^2;
df := D(f);
x0 := fsolve(df(x) = 0, x = 1..2);
ddf := D(df);
ddf(x0);
Digits := 10;
integrand := (exp(-x) * cos(x^2 / 3)) / (5 + x);
evalf(int(integrand, x = 0..infinity));
with(plots);
polarplot(3*sin(theta) - cos(4*theta), theta = 0..2*Pi);