Mathematica 在高考数学与高等数学等学习中的简单应用与思考
前言
一年一度的高考落下了帷幕,和往年[1][2][3]一样,我们又能看到不少讨论如何“使用某某工具快速解决高考难题的”,例如[4](更加侧重对于教师的效果演示)和[5](侧重 Wolfram Alpha 的应用)。但仔细分析,并非全部的题解都能体现出 Wolfram 语言的优秀特性:贴近自然语言,库函数丰富。
高考数学的应用
试举一例,这是我的朋友吴宇迪在中科大自主招生考试[6]中的一道解析:
1. 若
,则 |z + 1| − |z − i| 的取值范围是:
FunctionRange[{Abs[z + 1] - Abs[z - I],
z + Conjugate[z] == 1},
z, y, Complexes
]
输出如下:
-1 < Re[y] <= Sqrt[2] && Im[y] == 0
也即,z ∈ (−1,√2] + 0i
可以看到,这一类题目的特点是,技巧性要求不高,主要着眼于对基础性质的考查能力,是最适合计算机解答的一类习题。
相比其它解题方法, Mathematica 的优势在这里得到了很好的体现:丰富的数学函数能够直接描绘许多基本的数学性质,例如FunctionRange
函数可计算给定表达式的值域。
(换行仅为提升竖屏观看体验,不影响实际运行效果)
上图中,配合函数中文名提示,我们可以非常容易的理解代码:
求函数 | z + 1 | -| z - i | 的值域,其中定义域的限制为
,自变量是 z ,因变量是 y ,并且这个函数是作用在复数域上的。
利用 Reduce
(化简),Solve
(解方程),FunctionRange
(值域),D/Dt
(求导),Minimize / Maximize
(最大点值/最小点值) 等函数,大部分求定义域、值域、导数、恒成立等问题都可以被轻松解决,尤其是题目难度相对不低的时候。
但还有不少种类题目并不容易解决,例如解析几何和圆锥曲线等。这些题目的解法要求更加深入的数学知识和更多的软件使用经验与技巧。
然而,对于课业压力普遍较大的高中生,满足这个要求的实在是凤毛麟角,Mathematica 于他们而言不过是个大号计算器,难以尽其材。
高等数学和其他高校课程
然而另一方面,这一次经历高考的高中生们,大多已经被一所心仪或不那么心仪的高校录取,在暑假过后就将收拾行装,打点行囊,开始他们的高校生活。
其中大多数是理工科学生,对他们来说这也意味着面临《高等数学》(以及《线性代数》《概率论》和其它大学数理课程)的学习任务。
就高考题而言,你不能拎着 Mathematica 上考场,但是到了高等数学:
设函数 f(x,y,z)=x^4-xy+z^3,则 gradf(1,1,1)=? 解:
Grad[x^4 - x y + z^3, {x, y, z}]
/. {x -> 1, y -> 1, z -> 1}
含义很显然:以 x, y, z 作为自变量求梯度,并且将结果带入 x=1, y=1, z=1 求值。
概率论,再举一例:
设随机向量的联合概率密度函数为f(x,y)=k(6-x-y),其中 0<x<2, 2<y<4,求:
1. k 的值;
2. P(X<1, Y<3)
3. x 与 y 各自的边缘概率密度?
4. x 与 y 是否互相独立?
解:
Integrate[k (6-x-y), {x,0,2}, {y,2,4}]==1
// Solve[#, k] &
k = k /. %
dist = ProbabilityDistribution[
1/k (6 - x - y), {x, 0, 2}, {y, 2, 4}]
CDF[dist, {x, y}] /. {x -> 1, y -> 3}
{X, Y}=MarginalDistribution[dist,#1]~PDF~#2&
@@@ {{1, x}, {2, y}}
X Y= Piecewise[{{1/k (6-x-y),0<x<2&&2<y<4}}]
对于上面的代码,解释如下[7][8]:
首先,对 f 积分,得到一个有关 k 的表达式;
由概率密度函数的特性,这个表达式应为1;
求解“表达式==1”,带入,这就是第一题的答案。
dist 是概率密度函数f所构建的概率分布;
计算其累积分布,然后带入 x=1,y=3。
这就是第二题的答案。
X,Y 分别是 dist 某个边缘分布的概率密度函数,
分别对应于第1个参数是x,第2个是y。
得到的就是 X,Y 各自的边缘概率密度函数,
此即第三题答案。
X Y 独立,即边缘密度之积等于全局。
判断结果即第四题答案。
综上所述,我们可以得出结论,高校的数理课程学习,由于科目本身的知识复杂程度上升,概念抽象程度提高,任何机器处理方式都不可能像过去使用计算器那样“速成”。
例如上面提到的 ProbilityDistribution
函数,倘若没有专门了解过,即使有着 Mathematica 便捷而高效的帮助文档(按 F1 即可打开,对着函数按可以看使用示例),弄明白如何解题也不得不意味着若干小时的挠头。
幸运的是,高校学生们与之前相比大多都具有更加宽松的时间分配,而每周集中的上课时间(一般 2-3 天)也意味着,大学生们能够有着更加合理的时间规划。这使得对软件的了解能够和学习的进度想匹配,最终使得他们得以洞若观火。
对于高中生来说,Mathematica 对于大学生将会意义着更多。作为一个在高中阶段接触这软件的大学生,我深有感触。
个人能力有限,虽有雄心壮志,但最后成文之后却觉不过尔尔,可惜短时间内也难以再做提升,姑妄言之,只好权作抛砖引玉。
参考链接与注解
- 最新北京高考数学试题 Wolfram 完整版
- Wolfram 神器秒杀高考数学试题
- 用 Wolfram 语言来做 2017 年高考数学试题之天津理科卷
- 用 Wolfram Mathematica 解今年高考数学压轴题
- Wolfram|Alpha 横扫全国「各科」高考试题
- Wolfram 语言解 2020 中科大自主招生部分试题
- 严格来说这里需要,
Solve
函数得到的是“解(Rule)”,而不是方程的根(Root),因此需要带入才能得到k
的答案 - 为了在文章中作为展示,并且达到贴近自然语言的可读性,代码可能需要一些深入的知识来理解,这里这样写是为了体现语言特性。
免费软件试用
创建 Wolfram ID 登录扫码下载试用版:
Wolfram Mathematica:
https://www.wolfram.com/mathematica/trial/
Wolfram System Modeler:
https://www.wolfram.com/system-modeler/trial/
- jQuery插件编写步骤详解
- 深入探秘Neutron API
- 碎片化 | 第七阶段-10-session共享解决方案-视频
- CSS选择器是如何确定优先级的?
- JS中控制好this关键字的指向
- 碎片化 | 第四阶段-46-值栈valueStack介绍和原理-视频
- Laravel中运行Gulp任务的利器(一) —— Laravel Elixir简介及入门教程
- 碎片化 | 第四阶段-52-Hibernate特性-视频
- 碎片化 | 第四阶段-53-hibernate持久化session问题解决-视频
- 入门webpack(下)
- 巨头们关注的实时Web:发展与相关技术
- 碎片化 | 第四阶段-54-hibernate-spring整合流程-视频
- OpenDaylight Lithium版本简单应用及流表操作指南
- 碎片化 | 第四阶段-55-OpenSessionInViewFilter组件配置解决session问题-视频
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- k-近邻算法实现数字识别
- 【Linux_Shell 脚本编程学习笔记五、Oracle JDK1.8 安装shell 脚本】
- vue中子组件使用$emit传值的种种情况
- 前端工程化建设
- 机器学习101-从JAX的角度去实现
- Spring 系列之jdbcTemplate的使用
- 【Linux_Shell 脚本编程学习知识点、判断传入参数是否是 整数】
- 发现一款.NET Core开源爬虫神器:DotnetSpider
- 完整的卸载Jdk java环境教程
- HTML 元素标签语义化及使用场景
- 共享内存原理与VCS监控采集实战
- Spark中的聚类算法
- 【Linux_Shell 脚本编程学习笔记六、shell的数值运算】
- Java自动化测试(adb常用命令 32)
- 前端学习计算机理论知识的好处