Mathematica 在教育领域的应用综述 02
数据的导入/导出
Wolfram 语言对导入和导出数据强有力的支持使得您可以在单一系统中完成数据可视化、分析和报告.
所支持导入导出数据类型
截止版本 11.1.1 可以导入/导出文件格式数量
链接数据库
用 DatabaseLink 连接各种主流数据库
MathLink、J/Link、和 .NET/Link , RLink
对于 Java (J/Link) 和 .NET (.NET/Link) 也有专门的程序进行连接. 这样就能把外面的库集成到 Mathematica 中,能使程序高速运行并节省重新开发的时间.
以图片导入为例
以 2013 年数学建模碎纸片拼接为例, 来查看如何将某个文件夹下的图片批量导入, 首先是将文件夹内的图片导入
查看前面 10 张碎纸片图片
定义图片拼接函数, 这里可以看到 Wolfram 语言的特点, 可以用中文来给变量或函数命名, 这样会更容易让别人读懂程序的逻辑:
利用定义好的函数, 也可以查看碎纸片拼接的整个动画过程, 用这样的方式非常容易进行调试:
下面我们再来在拟合问题中再来看看电子表格数据的载入.
数据类型问题 - 拟合
需要根据以往历史工资数据来进行预测, 通过导入建模的例子看这些任务如何被完成.步骤1 : 导入第一个工作簿全部的数据
观察导入后的数据, 发现某些数据并不是我们所需要的, 只有中间的数据才是所关心的. 那对于数据的过滤, 利用模式匹配进行数据预处理步骤3 的工作 - 过滤数据或提取感兴趣的数据部分:
图形的绘制
如何寻找相应的数学模型 -- 一种方式利用 Wolfram|Alpha 去查询
找出各个系数的最佳拟合
求出整个拟合的模型方差
或者是为了得到分析对数据拟合的好坏以及检验该拟合时候满足模型的假设条件, 使用非线性的模型
这样就能非常方便从模型中获取信息
获取实际响应和预测响应间的差值以及方差分析表
绘制数据和拟合函数的图形
数据类型问题 - 分类问题
将每个记录分配到已经定义好的类别中,称为分类. Classify [LongDash] 使用内置分类器或者从范例学习对数据进行分类, 改命令属于监督式学习. Mathematica已经内置主流分类算法, 方便我们调用.
示例:手写字的识别问题. 从内置的数据集中载入手写字数据作为训练集
随机取出 20 组数据进行查看
数据送入系统, Wolfram 会自动选取合适的算法生成分类器
现在就可以识别出手写字相对应的数字了
下面来测试分类器的效果如何, 取出测试集数据
计算出准确度, 绘制出混淆矩阵
可以利用 FeatureSpacePlot 来查看不同的数字再特质空间是怎样分类
如果我们想要从新开始训练一个神经网络, 而不是利用 Classify 的高级功能
将部分数据送入网络进行训练, 然后也可以正确的识别出手写的数字了
数据类型问题 - 预测问题
与 Classify 不同, Predict 函数用于数值目标的预测
示例 : 葡萄酒品质打分预测每种葡萄酒都有 11 种化学成分且根据不同的属性值对应相应的品质分数
查看都那些化学成分, 比如固定酸度, 残糖量, PH值, 酒精含量等:
分析对所有已经打过分的葡萄酒里酒精含量和PH值绘制直方图, 发现 alcohol 会在 8 ~ 14, pH 值会在 2.8 ~3.8 之间:
生成预测器, 并对尚未打分的一组葡萄酒进行评分:
现在考虑如果能调整 pH 值或者酒精含量, 能否提高葡萄酒的分数呢? 怎样调整呢? 看看能否求解出来, 定义一个函数, 这里的 pH 值和 alcohol 都是变数:
从上图可以看到如果pH 值和将 alcohol 调高的话, 就能提高到 6.2 分左右, 这样优化问题也可以求解出来:
数据类型问题 - 聚簇分析问题
聚类分析是一种用于数据分类的无监督学习技术. 数据元素被划分为称为簇(clusters)的组,它们代表了基于距离或者相异函数的邻近元素组成的集合. 相同元素组成的对的距离或相异度为零,而其它所有元素对的距离或者相异度都为正值.
一般聚类函数. FindClusters 的数据变量可以是数据元素或者对元素和标签进行索引的规则列表. 并且内置了 Agglomerate, DBSCAN, NeighborhoodContraction, JarvisPatrick,KMeans,MeanShift 等算法.
下面的示例主要来说明可以灵活使用不同方法解决同一个问题(选自StackExchange). 比如网站的运营者非常关注用户在上网时候眼球在网页的轨迹, 如果在某一个位置吸引停留的时间较长, 该位置有可能投放广告, 这对于提高点击量非常有帮助.
示例: 根据眼球运动轨迹的数据来分析浏览网页时的个人习惯以及浏览内容的先后顺序. 导入一个眼球轨迹的数据集, 来分析相应的热点(聚簇点的中心)
直接对数据进行聚簇的话, 效果并不是很好, 原因在于并不清楚划分为几个簇是合适的:
根据点和点直接 EuclideanDistance 分析, 凡是距离很小的就是应该被划分为一个簇内的, 由此可以算出划分的数量, 然后绘制相应的图形出来:
其实如果试用图像处理的方法步骤, 在 Wolfram 语言中更为简洁, 二值化 - 腐蚀 - 删除微小噪声 - 得到图像的数字矩阵 - 进行各种分析就可以解决:
连续类型问题 - 微分方程
Wolfram 语言自动选择数百种强大的原算法,对微分方程(常微分方程、偏微分方程、微分代数方程组、时滞微分方程组 ......) 提供数值解和符号解. 除了指定符号方程外,Wolfram 语言使用一整套丰富的特殊函数和它的符号插值函数来表示解,这样方便快速操纵和可视化.
示例: 模拟一个球反弹设置回弹系数为 0.75, 设置微分方程, 求解得函数解并绘制图形:
同时也可以求出并绘制球的动能、势能和总能量:
实际上,任何参数或一个方程、模型或函数的变量可以藉由 Mathematica 进行交互操作 , 将上面精通模型改写成动态的 Manipulate 模型, 只需要设置回弹系数和表示阶梯宽度为变量即可:
示例: 求解KDV方程 , 详见这篇文章
连续类型问题 - 最优化问题
用以求解局部和全局最优化问题的方法取决于特定问题的类型. 最优化问题可以根据一些不同的标准分类. 根据所涉及到的函数类型,我们有线性和非线性 (多项式、代数、超越、 ...) 最优化问题. 如果约束条件涉及 x∈Reals ,我们就有了整数以及整数-实数混合最优化问题. 此外,最优化算法可分为数值和符号化 (精确) 算法.关于约束最优化的 Wolfram 语言函数包括 Minimize、Maximize、关于全局约束最优化的NMinimize、NMaximize、关于局部约束最优化的 FindMinimum 和提供了对线性规划方法有效直接应用的 LinearProgramming. 下面的表格对各个函数进行了简要的总结.
FindMinimum 和 FindMaximum 从一个点开始, 循序渐进地寻找极值. 一旦找到一个极值, 就会返回结果, 因为给出的可能是函数的局部极值, 而不见得的是全局的极值.
示例: 动态模型演示 FindMinimum 求解局部极值
NMinimize 和 NMaximize 执行好几种算法用以求约束全局最优解. 这些方法具有足够的灵活性,以处理不可微或连续,并且不容易被局部最优解捕捉的函数.寻找一个全局最优解的问题可具有任意难度,即使在没有约束的情况下,所以我们使用的方法可能会失败. 在通常情况下,多次使用不同的初始条件最优化,并采用其中最好的结果来,对于最优化该函数是有益的.
示例: 非约束最优化问题指定随机初始点算法, 不过因为问题本身的复杂性, 所得到的并不是最优解:
采用具有更多初始值的 RandomSearch 选项来就可以得到全局极小值, 并将其绘制出来:
如果目标函数 f 和约束条件对于所有变量都是线性的, 那么极小化和极大化就对应于一个线性规划问题. 因此, 直接用矩阵和向量的形式来代替明确的方程组来描述这些问题更加高效, 这样可以用 LinearProgramming 命令.
离散类型问题 - 图与网络
我们的周围都是图和网络,包括技术网络(因特网、电网、电话网、交通网),社会网络(社会图、附属网......)信息网络(万维网、引用图、专利网......),生物学网络(生化网、神经网,食物网......)等.
Wolfram 语言为建模、分析、合成与可视化图与网络提供先进的功能. 并提供多种高层次的函数用于创建或计算图.
示例: 求解最短路问题Wolfram 语言中有已经内置的 HigthlightGraph 可以求解 Graph 类型的最短路问题:
示例: 最大流问题加拿大 6 个城市的铁路网络,与网络边上每日的车厢数量:
求从温哥华到温尼伯可以运载的最大车厢数量:
城市之间的车厢数量并显示在地图上:
示例:最小生成树用来求解网络构建, Wolfram 语言中有 FindSpanningTree 命令, 并可以指定不同的算法 "Prim"、"Kruskal" 和 "MinimumCostArborescence".
离散类型问题 - 最短路径 TSP 问题
在 Mathematica 下我们可以自己动手编写任何算法, 比如对于这个 TSP 问题, 我们可以写模拟退火算法来解决问题.
代码(略)
或者用内置的 FindShortestTour 函数来求解, 这样会执行效率最大化
并且可以通过指定不同的算法来进行对比:
在大型的数据集上(10万个点), 也可以顺利运行. 根据列奥纳多.达.芬奇的画作《蒙娜丽莎》设计的TSP, 重新优化的解最短路径算法使得更大的数据集成为可能.在线导入数据集, 并进行数据过滤:
将此数据点集绘制出来:
计算遍历十万个点的最短距离的值:
可以跟世界最好的乘积做对比:
面对高精度或密集型计算
选用任意的精度进行计算
使用 Mathematica 做数值计算, 不需要定义类型, Mathematica 会自动处理, 并且默认是用无限精度进行计算.
示例: Wolfram 中无限精度的整数和浮点数的精度
示例: 机器数计算机与无限精度整数计算对比使用机器数进行计算, 但是注意经过计算误差的累计出现的问题:
Mathematica 使用无限精度的整数去计算, 就能保证结果的正确:
或者是指定足够的有效数字计算, 而不是机器精度数:
应对更复杂, 密集计算
执行并行计算
Wolfram 语言下可以用 Parallelize 命令, 在可能的情况下会把计算并行化:
如果计算不能平行运行, 则会给出提示, 并自动转成串行计算:
对于经常用于密集型计算的函数有特殊优化设计, 有些 Mathematica 函数(如 Table) 有对应的并行命令(ParallelTable),自动执行并行计算.
通过编译提高代码执行效率
Mathematica 中还引入了各种增强性能,如更快速的编译执行、独立生成 C 语言代码、调用动态连接库的能力和增加对其他连接技术的支持.
示例: 自定义函数的运行时间
如果经过编译, 并制定生成底层 C 代码的话, 即便数量级别又高一层, 也是瞬间完成:
实际应用当中 Mathematica 的一点建议
1. Mathematica 默认使用无限精度的整数进行计算, 如果想要提高程序运行的效率, 可以使用机器数进行.
示例: 无限精度 vs. 机器数计算比较
循环函数中如果尽早使用机器数效率也会大大提升:
2. 图形的绘制完全可以借用 Wolfram|Alpha 绘制 / 相关数据集也可以借由WA查询获取
Wolfram|Alpha 绘制图形完全由语义决定, 所以并无固定语法, 日常简单的英文即可玩转整个知识世界. 所有图形在 Mathematica 下可以直接导出另存为本地文件.
3. 图形导出的时候, 默认会有一定压缩比率, 指定选项来导出更精细图像.
导出图形时候记得设置 "CompressionLevel" 选项为压缩比为 0:
4. Mathematica 不能直接保存为 Word 格式, 但
首先保存为网页格式, 再利用 All Office Converter Platinum 软件保存为 Doc 格式即可.
5. 灵活利用现有资源
详见最后给出的更多资源链接.
6. 不要重复造轮子, 尽量使用高效地编程方式
对 Wolfram 语言越是熟练就能更高效的进行建模工作, 灵活利用帮助文档去搜索相应的关键字是非常必要掌握的技能.
7. 导入导出 LaTex格式数学公式
可以用 面板 -> 课堂助手 来以鼠标点击方式对公式进行编辑, 然后导出为 LaTeX 格式.
示例: 将编辑好的公式导出为 TeX 格式
示例: 或者将 TeX 格式导入到 Mathematica在 中进行下一步计算处理
8. 使用 PlotTheme 来定制自己的图形
PlotTheme 的相关组合可以绘制满足自己需要的图形图表.
示例: 设置为详细 + 大图标风格的组合风格
或者进行自由格式组合来实现所期望的效果:
9. 利用建议栏助手可以进行更为便捷的操作
建议栏助手可以非常方便的辅助我们的工作. 因为一旦完成某个计算,便可得到关于下一步操作的最优化建议. 点击按钮即可运行一个新函数,或者弹出互动向导, 帮助在 Mathematica 系统中浏览和探索各种功能.
10. 查找函数可以用 ? + 通配符的方式
如果不记得函数是否被定义过,可以使用 ? 算符来查看定义和内容. 或者印象只记得某个命令的个别关键字, 也可以使用星号 (*) 作为通配符. 比如,我想找出所有含有字母 Plot 的函数和符号.
更多学习资源
帮助文档 » 支持布尔搜索
网页资源搜索 » 网页高级搜索来在整个 Wolfram 网站进行检索
WolframAlpha » 查询数学计算公式 / 数据集 / 上千领域的专业可计算知识
官方现成资源链接 »
Wolfram 公司主页:http://www.wolfram.com
官方微博:http://weibo.com/wolframchina
官方微信 WeChat ID: WolframChina
Wolfram|Alpha: http://www.wolframalpha.com
Wolfram 云:http://www.wolframcloud.com
Mathematica 文档和教程:http://reference.wolfram.com,资料库: http://library.wolfram.com
官方用户论坛: http://community.wolfram.com, 学习、分享、讨论、直接与软件开发者沟通
演示项目资料库(Demonstrations Project):http://demonstrations.wolfram.com, 收藏上万个互动文档、课件、模型,覆盖多学科,下载 CDF 文档后立即可免费使用
数学概念百科全书 MathWorld :http://mathworld.wolfram.com
数学函数百科全书:http://functions.wolfram.com,NSF 资助项目;收录了30多万条数学函数性质、公式
客户服务和技术支持:http://www.wolfram.com/support,报 bugs, 提出任何关于产品的问题,寻求帮助
小结
在自由格式输入、建议栏、鼠标输入面板的帮助下,任何人在 5 分钟内即可轻松上手软件
在上课、做实验或完成作业的过程中亲自动手操作动态演示模型,加深对概念的理解
制作讲义、小测验和课堂演示时可把文字、图形、公式等元素完美地融合在动态的、可计算的文档中
系统内集成的科学数据帮您快速开始具体, 有意义计算
Mathematica(桌面版和在线版)是学习, 研究和项目开发的最佳助手
感谢您的参与
在 Mathematica-Wolfram学习营中, 查看公告提供的教程指引会得到更多学习资料:
参考资料: Wolfram 语言帮助系统