在Word界面上实现矩阵操作
2013-12-12吕洪升
吕洪升
(巢湖学院,安徽 巢湖 238000)
数学教学中,数据处理、绘图等费时费力,且无论用PowerPoint还是Word设计教案,所插入的数学公式不能与其它文字统一处理,必须单独编辑,就这一点,教师备课就得花不少无谓时间,何况数学公式软件只能编辑公式而不能实现数据分析或计算呢。为化解这个矛盾,本人在概率统计和离散数学教学中引入工程软件Matlab作为后台工具,在PowerPoint或Word界面上无缝隙链接Matlab的强大数据处理、绘图和简单模拟等功能[1],而不用考虑学生是否具备Matlab程序设计语言的基础,也不用刻意补充讲授该语言的各种规定和程序设计的语法体系,取得了良好的教学效果。作为教学经验总结或教学研究,这里试图将Matlab作为矩阵教学的后台工具,仍在Microsoft-Word平台上介绍矩阵的各种操作,以提高高等代数课堂教与学的兴趣和教学效果。
1 引例
求一个已知矩阵A(在解题中给出)的行列式、逆矩阵B、特征值D和特征向量V。
1.1 解题过程
解 (只需两步:输入、选择执行 )。
第一步:输入
第二步:选择执行(图1)
结果如下:
图1
1.2.1 录入数据和指令:(1)输入矩阵 A,所有元素必须放在矩阵标识符——中括号 “[]”内,逗号“,”或空格”分隔矩阵列,分号“;”或回车键“”分隔矩阵的行[1];(2)输入求矩阵行列式函数“det”、求逆矩阵函数“inv”和特征值、特征向量函数“eig”[1]。
1.2 解题步骤和显示规律分析
1.2.2 执行计算: 选中输入的四行字符,击“加载项/notebook/Evaluate Cell”菜单(见图1),选中文字立刻变成绿色,计算结果以蓝色字符显示。
1.2.3 结果显示的一般规律:执行指令后,若有结果输出,一般依次显示在选中行的下方。命令行左边若有字母和赋值号“=”,结果就赋给该命令左边的字母(如第三行的逆矩阵B),若左边没有任何符号,结果一律用“ans”表示(如第二行的行列式值12);要不想显示某个指令的输出结果,就在该指令行后面加“;”且与该行一并选中[1](如第一行的矩阵A)。第四行的“eig”函数有些特别,它同时求得矩阵特征向量、特征值,并分别用V和D表示。
1.2.4 解题分析:通常情况下,即使矩阵 A不太复杂,课堂上动态解答这一结果也是不太容易的,而在引例环境下,只要熟悉三个指令,输入四行,选择一下希望输出的结果,计算机就会现场给出答案,而且输入的公式或输出的数字符号等可与其它文字统一编辑,大大方便了数学教案的个性化编排。再看解题结果,输入的四行数据都变成了绿色,且被一对灰色中括号括住,这就是Word中能与Matlab接口并可被其执行的指令,称为输入细胞;第二、三、四行执行结果被以蓝色字符显示,是系统执行该输入细胞的结果,称为输出细胞,第一行A因为后面的“;”而不显示。
1.2.5 运行平台剖析:这是一个Word平台上的矩阵操作实例,是在工程软件Matlab打开的前提下,利用兼Word文字处理和工程计算功能为一体的notebook核心模板M-book界面,从后台调用了Matlab的函数或命令,前台却完全看不到,学生感到只要熟悉几个功能函数或命令就能得到想要的计算结果,这种拿来即用的简单工具师生都会喜欢,无论直接用于数学教学还是作为数学验证,都是难得的好帮手。不论概率统计、离散数学还是微积分中绘图、求导、求积分和解微分方程等,都有对应取之即用的简单指令,对数学教师而言,最实用的可能是符号运算。而在信息科学和自动控制领域或教学中,该软件更有用武之地。
2 数学教学中如何配置和使用notebook
从上面引例看到,我们的操作界面就是微软的文字处理软件Word,对现在任何一个大学生,使用都不会有问题。如何配置,也易如反掌,但我们的目的是在不增加学生学习负担的前提下使用Matlab的简单函数和基本命令,久而久之,学生不仅感觉方便、有趣且离不开,而这种解释式、能集Fortran、Pascal、C语言等于一体的第四代程序设计语言[2]很简单,易于掌握且功能特别强大,有数学教学中使用的基础,学生一定会无师自通的。
下面简述如何配置计算机并进入引例的环境。
2.1 Matlab的安装和运行。早期的Matlab,由于容量大,安装费时费力,很不容易,现在有绿色便携版或云软件系统 (百度一下就有许多资源),只要下载到U盘中,在任一部装有Windows XP或Windows 7操作系统的PC机上就能即插即用,不用安装,非常方便,当然在Unix平台上使用也简单,不需赘述。
2.2 notebook安装。本机使用的操作系统是Windows 7,且假定已安装了Microsoft Word2007(Windows和Word其它版本操作类似)。首先运行Matlab软件,在其命令窗口输入notebooksetup回车 (这里要注意notebook与后面 “-setup”的减号之间要空一格,否则系统报错,安装失败),在欢迎界面中键入Microsoft Word2007前面的数字5(图略),就完成了安装。
2.3 notebook启动,无论在Matlab还是在Word2007环境下,都有多种启动方法。
在Matlab命令窗口,键入notebook,回车,新M-book模板文档即可供编辑,操作的窗口就是我们常见的Word2007界面;
若先打开Word,击“新建/我的模板/M-book.dot”文档(见图2),击“确定”按键即进入空文档编辑状态。
图2
编辑或打开已有文档与Word通常操作完全一样。
3 涉及矩阵处理的常用命令
学生没有Matlab基础,教师在课堂上直接使用Matlab简单函数处理数学教学中的数据问题,为引导学生逐渐熟悉和掌握Matlab部分功能,除课堂使用中自然介绍Matlab常用命令或函数的基本功能和调用格式外,还要讲述在M-book中输入的函数如何被执行,执行结果又以什么格式显示和如何被调用等,以下逐一说明。
3.1 用于矩阵操作的常用命令
3.1.1 常规运算符号。Matlab以矩阵为基本操作元素,所以矩阵的加(+)、减(-)、乘(*)、乘方(^)、转置(' )(当然还有左除、右除和按位乘、除等,有兴趣者请查看相关资料)象小学算术里四则运算一样简单好用,输入格式就是英文字符环境下普通Word文本格式。
3.1.2 特殊矩阵生成。普通矩阵的生成方法如引例的第一行A,但一些特殊矩阵有专门的函数生成,如ones、zeros、eye分别生成单位矩阵、全0 和全 1 矩阵[1],magic、rand(randn)、diag、compan分别生成魔方矩阵、随机矩阵、对角矩阵和伴随矩阵。线性代数中常用的Pascal、范德蒙矩阵可用函数Pascal和vander生成[1],想了解更多或每个函数的详细用法,可借助“help”命令寻求帮助,输入 “help vander”后回车,屏幕即显示范德蒙函数的使用信息(如下文的帮助文字),想知道magic 的详情,只要将“help vander”后面的“vander”用“magic”替代即可,如法炮制,可查询任何函数的使用详情。
绿色文字“help vander”是输入细胞——用户请求信息,其后蓝色的输出细胞——计算机反馈给用户的帮助文字只保留了一部分,不仅显示范德蒙函数的用法,还给出了范德蒙矩阵的定义。
例题1 创建3阶均匀分布、正态分布随机矩阵和5阶范德蒙矩阵。
解 输入对应的三个生成函数 (每个函数一行),其它操作同引例,结果如下:
从输出结果可知矩阵生成函数的用法(其它函数类似),矩阵A是一个[0,1]上均匀分布的3阶随机矩阵,因为行末尾有“;”未显示,B是3阶标准正态分布随机矩阵,C是所需的5阶范德蒙矩阵,这里要注意第 3 行函数 vander(1:5)括号内的不同形式。
至此,引例中矩阵A、B已被重新赋值。一般情况下,只要本机不重新启动且A、B没有被重新赋值,A、B的数据保持不变,且随时随处可调用。
例题2 求矩阵A与B的积M。
解 输入计算公式M=A*B,再设其为有结果输出的输入细胞(同引例)。结果如下:
显然计算结果是例题1中两个3阶随机矩阵的积。
若微机重启后(或下次课)仍需使用以前数据矩阵A、B时,只要将原始录入数据对应的行(最好行后加“;”)选中后,设为有结果输出的输入细胞(击“/notebook/Evaluate Cell”菜单,见图1)即可,不需重新输入矩阵A、B。但要注意,若将例题1中三行如是执行后,矩阵A、B已不一样,因为随机函数每次生成的矩阵都不相同[3],除非设置重现,矩阵C保持不变。
如果希望一个矩阵每次课都能直接调用,就在输入时定义其为自初始化细胞且永不被重新赋值。
3.1.3 常用的矩阵函数。除引例中介绍的求方阵的行列式、逆矩阵、特征值和特征向量函数外,rank可求矩阵的秩;其实引例中eig(A)是可对角化方阵A的特征分解函数,当A不可对角化(特征向量线性相关)时可用Schur(A)对A作科利分解,稍微推广,还有针对正定矩阵的Cholesky分解和一般矩阵的LU分解、QR分解、SVD分解[4],分解名即函数名,使用与特征分解一样,都非常方便。另外,两个矩阵拼接函数也很实用,horzcat(A,B)是将两个同行矩阵A、B水平合并成一个大矩阵,而函数 vertcat(A,B)能将两个同列矩阵A、B垂直合并成一个矩阵。例如,判断线性方程组AX=B是否有解,只要用语句K=horzcat(A,B)合并A、B得到增广矩阵K,再计算矩阵A、K的秩 rank(A)、rank(K)就知道方程是否相容了。
3.1.4 矩阵信息和矩阵元素寻访。矩阵最基本的信息是其尺寸,即矩阵维数 (包括高维矩阵)、各维的长度和元素个数,分别用函数nidims、numel和size获取。矩阵元素寻访有常用的双下标方式和单下标方式,双下标命令A(i,j)很自然读取矩阵A的第i行第j列元素,如果输入C(3,2),再选择执行(图1),立刻得到结果:
但单下标读取与其它语言不同,Matlab规定先列后行[3],如果我们用C(:)将矩阵C转换成一个列向量(第二列接在第一列后面,第三列接在第二列后面……,依次类推),就知道矩阵C双下标元素 C(3,2)对应单下标元素 C(8)了。一般地,若A是一个m×n矩阵,则A的双下标元素A(i,j)对应其单下标元素是 A[m×(j-1)+i],反过来也容易推算。另外,函数max(或min)可以找出矩阵每一列的最大值(最小值),很自然,max(max(A)(或 min(min(A))能求出整个矩阵的最大值(或最小值),而[MaxValue,MaxIndex]=max(A(:))还能轻松获得A的最大值和最大值单下标索引号。
例题3 求矩阵的最大元素及其对应位置。
解 输入矩阵D和相应函数
选中并击“notebook/Evaluate Cell”菜单执行
得到所需的输出结果
——上两行是输入细胞(信息),以下两行是输出细胞(微机反馈的计算结果)
这个结果表明D(9)=90是矩阵D的元素最大值。
3.2 输入细胞和输出细胞
在Word平台上使用Matlab的矩阵操作指令,自然有一个信息交换过程。其实我们将Matlab当成了隐蔽的加工厂,在前台,将制造所需产品的原料或零配件(如引例中输入的矩阵和所使用的Matlab矩阵操作函数)打包待用(选中),击“加载项/notebook/Define input Cell”菜单(见图1)或按快捷键“Alt+D”,选中的指令立即变成“绿色”且被一对灰色中括号括住,表示选中部分已被设成了“输入细胞”,但没有加工,所以无输出结果,若要将“输入细胞”加工成产品——输出细胞,就击“notebook/Evaluate Cell”菜单或按快捷键“Ctrl+Enter”,输出细胞将以“蓝色”字符显示。暂时放在加工厂的中间产品其对应输入细胞后面就用英文字符下分号“;”标明。每次一开工就要运往加工厂加工的零配件,可以选中后击“加载项/Notebook/Define AutoInit Cell”菜单,将其设成自初始化细胞。
3.3 注意事项
首先,文中列出了Word平台上矩阵操作的常用函数,从矩阵教学的角度讲,这些功能足以将教师从矩阵计算中解脱出来,教师能将更多精力用于矩阵概念和方法的讲授上。其次,文中的所有Matlab指令、标点符号等必须在英文字符状态下输入,以免出错或死机。第三,尽管notebook已很好地兼容了Word和Matlab的功能,但Matlab的完整程序语言、交互式操作、动画和Simulink仿真都不能被调用,这就提醒读者推广使用时注意或者直接使用Matlab。
4 推广使用
本文尽可能简单地介绍了关于矩阵处理的几个基本指令,而涉及高等数学的所有计算、作图、统计分析等都有对应的Matlab函数,且只要知道其名称就能象文中一样自如应用,期待更多人通过这里简单的使用能重视和推广工程软件Matlab在各科教学中工具作用,保持传统教学观念的同时兼顾一下新技术手段进课堂的教学尝试,为所教的学生将进入信息社会做些铺垫。我们应该承认,各种方法或功能,只要学生知道其存在、实用,学生一定会学习和掌握它,并且探究的信心、推广的能力可能会大大超出教师的预想。
[1]董霖.MATLAB 使用详解[M].北京:电子工业出版社,2009:483,32,113-120,1,26,33,42,19.
[2]刘维.精通Matlab与C/C++混合程序设计[M].北京:北京航空航天大学出版社,2012.
[3]薜志涌.精通 Matlab[M].北京:北京航空航天大学出版社,2012:1,40,55.
[4]史荣昌.矩阵分析[M].北京:北京理工大学出版社,1998:142-145.