对「杭州二中原创导数题及深度剖析 (by 吴禹睿)」的分析和拙见
对「杭州二中原创导数题及深度剖析 (by 吴禹睿)」的分析和拙见
公众号原文链接
题目
已知函数 \(f(x)=\frac{e^x-1}{mx}-x\ (m>0)\) 在 \(x\in (0,+\infty)\) 时有极小值。
第 1 问. 求 \(m\) 的取值范围;
第 2 问. 设直线 \(g(x)=\frac{x}{m}+1\) 与 \(f(x)\) 的图像有两个交点,横坐标分别记为 \(x_1,x_2\ (x_1<x_2)\)。当 \(m<1-\frac{1}{e^2}\) 时,证明:
注:\(e=2.71828\cdots\) 是自然对数的底数,\(\ln 2≈0.693\)。
命题加强 (by 小 Z1)
加强 1. 求证:\(2m^4+5m^3+9m^2+6m\) 随 \(m\) 的递增而递增,\(\frac{x_2}{x_1}\) 也随 \(m\) 的递增而递增;
加强 2. 考虑将第 2 问改为如下不等式:
加强以后的命题证明的难度极大,欢迎导数爱好者前来尝试。
个人解答
(1)
设分子为 \(g(x)\),分母恒正,因此 \(f'(x)\) 的正负取决于 \(g(x)\)。由 \(g'(x)=x(e^x-2m)\) 知 \(g(x)\) 在 \((0,\ln (2m))\) 单调递减,\((\ln (2m),+\infty)\) 单调递增,而 \(g(0)=0\),因此只需满足:
前者可得必要条件 \(m>\frac 12\),下面说明它是充分的:
方法一(零点存在定理)
-
当 \(m=1\),取 \(x_0=2\),得 \(g(x_0)=e^2+1-4>0\)。
-
当 \(m\neq 1\),取 \(x_0=m^2\),得
同时由此可知 \(x_0>\ln (2m)\)。
方法二(极限,高中阶段不适用)
因此 \(m>\frac 12\)。
(2)
注意到原式
右式酷似泰勒展开,这启发我们证明充分条件 \(x_1<\frac{1}{m+1}\) 以及 \(x_2>\ln \frac{1}{1-m}>\frac{m^3}{3}+\frac{m^2}{2}+m\)。
我们对 \(f(x)\) 求二阶导(计算较繁琐,这里略去)可得 \(f''(x)>0\),由此可知 \(f(x)\) 下凸,因此比较 \(f(x),g(x)\) 在 \(\frac{1}{m+1}\) 和 \(\ln \frac{1}{1-m}\) 的取值大小即可。
第一部分:\(x_1<\frac{1}{m+1}\)。
我们从结论倒推:
易知 \(e^{\frac{1}{m+1}}\) 随 \(m\) 的递增递减,代入 \(m=\frac 12\) 得 \(e^{\frac{2}{3}}<2\) 成立。
第二部分:\(x_2>\ln \frac{1}{1-m}\)。
考虑换元,令 \(t=\ln \frac{1}{1-m}\in (\ln 2,2)\),则 \(m=1-e^{-t}\)。
我们同样从结论倒推:
下面提供两种可行的方法:
方法一(放缩,by 小 Z1)
我们大胆尝试放缩:
在 \(t\in [1,2)\) 时对其求导可知 \(\text{LHS}\) 恒 \(>0\),在 \((\ln 2,1)\) 似乎放过头了……
但注意到 \(t\in (\ln 2,1)\) 时可求导说明 \(\frac{t}{e^t-1}>\frac{1}{2}\),因此:
此时再求导可知 \(\text{LHS}\) 恒 \(>0\)。
方法二(求导,by 小 Z2)
我们等价于要证明
对其求导:
容易发现红蓝两部分均恒 \(>0\),因此 \(h'(t)>0\),于是 \(h(t)>h(\ln 2)>h(0)=0\)。
个人评价
-
关于题目:本题出的很好,考点很全面,求导、泰勒展开、放缩用的淋漓尽致……但咱就是说做这题花了不少时间 qaq。
-
关于题面书写:可以看出作者的公式是用公式编辑器编辑得到的,有点糊,可以改用 LaTeX 书写,阅读体验会好很多。
-
作者的第一问解答有瑕疵:单凭 \(g'(x)\) 的正负性只能得到 \(g(x)\) 的单调性,但不能确定 \(g(x)\) 的正负性,由此无法确定 \(f(x)\) 的极值点。高中阶段我们只能用零点存在定理去说明 \(g(x)\) 的正负性。
-
作者的第二问解答有瑕疵:没有解释 \(f(x)\) 为何下凸,应通过对二阶导的正负性去推导。
-
作者的第二问解答有笔误:设的 \(\varphi(x)\) 应为 \(\frac{x}{m}+1\);原不等式写作 \(\frac{e^t}{t}-t<\frac{e^tt}{e^t-1}+1\),作者写成了 \((t+1)\)。
为本题撰写的代码
#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-4; // 精度可调
double m;
double f(double x) { return (exp(x) - 1) / m / x - x; }
double g(double x) { return x / m + 1; }
pair<double, double> calc() {
double x1, x2;
int ok = 0;
for (double x = eps; x <= 10.; x += eps) {
if (fabs(f(x) - g(x)) < 1e-2) { // 精度可调
x1 = x;
ok++;
break;
}
}
for (double x = x1 + 0.1; x <= 10.; x += eps) {
if (fabs(f(x) - g(x)) < 1e-2) { // 精度可调
x2 = x;
ok++;
break;
}
}
// printf("x1 = %.10f, x2 = %.10f\n", x1, x2);
// if (ok != 2) {
// printf("m = %.10f\n", m);
// assert(0);
// }
return make_pair(x1, x2);
}
int main() {
for (m = 0.5 + eps; m <= 1 - 1 / exp(2); m += eps) {
auto [x1, x2] = calc();
assert(6 * x2 / x1 > 2 * m * m * m * m + 5 * m * m * m + 9 * m * m + 6 * m);
}
return 0;
}