查看“Maxima在线性代数的应用”的源代码
来自Ubuntu中文
←
Maxima在线性代数的应用
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
作者:蔡炎龍 原文:[http://math.nccu.edu.tw/~yenlung/mynotes/maximalinear_html html] 简体整理:dbzhang 本文:[http://maxima.sourceforge.net/docs/tutorial/cn/maxima_l_cn.pdf pdf] 状态:整理中... ==简介== 这篇文章,是介绍Maxima 这套数学软件,在学习线性代数的应用。 Maxima 是一个所谓的「电脑代数系统」(Computer Algebra System, CAS),这种系统比较为人熟知的还有Mathematica 和Maple 等等。我们选定Maxima 做为我们使用的程序,主要有三个原因: ;免费 : Maxima 是免费,又是各平台都有的。所有的人可以在自己的电脑上练习。 ;功能完整 : Maxima 虽然不要钱,并不代表不好。Maxima 不论计算或图形功能都十分完整。事实上,Maxima 是最早的全功能CAS 系统Macsyma 的后代。 ;具代表性 : 许多新的CAS 系统,如Maple, Mathematica 都多少受到Macsyma 的启发。所以学会Maxima,要学会Maple 或Mathematica 等软件都是很容易的事。 这篇文章主要是介绍线性代数相关功能。我们不假设同学已会基本的Maxima 使用方式,所以我们会用到的概念,也许不纯粹是线性代数的,也会一并介绍。专就线性代数而言,我们要会的其实并不多。想要快速进入状况,可以跳过前面的部份,直接看线性代数相关指令,在操作上有问题时,再回头看有问题部份的相关说明即可。 如果同学们比较喜欢使用Mathematica,Maple,或是Matlab 等商业软件也是可以的。我们系上的电脑室有提供这些软件,可以上机试用看看。 == 基本概念 == 我们先介绍一下Maxima 操作的方式。 === Maxima 当计算器 === 我们先来看,如果我们要把Maxima 当计算器用,会是什么情况? (%i1) 1+1; (%o1) 2 (%i2) 3*4*7; (%o2) 84 (%i3) 9/3; (%o3) 3 到目前为止,似乎还没什么特别。除了可以做复杂一点点的运算,和平常的计算机或数值计算软件也没什么不同。以下的例子就不一样了: (%i4) 7/3; 7 (%o4) - 3 (%i5) 1/2+2/3; 7 (%o5) - 6 从(%o4)我们看到,7/3这种运算,Maxima 不是告诉我们2.3333...,而是分数的形式!难道Maxima 真的懂分数?不要怀疑,这就是所谓电脑代数系统(CAS) 的特长。我们可以像(%o5)的例子一样,输入个分数的四则运算试试即知。 如果坚持要用浮点数,那只要加个float 指令即可: (%i6) float(7/3); (%o6) 2.333333333333334 为了完整,我们顺便再介绍指数,根号,阶乘表示法: (%i7) 2^10; (%o7) 1024 (%i8) sqrt(9); (%o8) 3 (%i9) 5!; 我们可以看出,这些运算不是自然的数学符号,就是和我们平常电脑程序语言的写法。 === 指令结尾=== 在上面的例子中,我们发现,在Maxima 下指令,结束时一定要打上分号「;」,让Maxima 知道我们下的指令已结束。为什么要多这一个动作,主要是为了有时打比较长的指令可以换行之故。另一个结束方式是打入「$」的符号。不同於分号的地方是「运算结果不会显示出来」: (%i10) 2+3$ (%i11) 2+3; (%o11) 5 有一些CAS 程序,如Matehmatica 是用分号表示不显示运算结果。不过Maxima 中分号已用上,必需用其他字符。 ===离开Maxima=== 离开Maxima 打入“quit();” 即可。 当然,很多人可能会觉得奇怪,为什么不是打入“quit” 就好了呢?原来像这种程序导向的语言,什么动作其实都是执行一个函数。所以我们事实上是执行一个叫「离开」的函数。这函数没有参数,所以就成了quit() 的形式。 === 结果的引用=== 我们时常会需要引用前面的结果,这时就用百分比符号“%” 。比方说: (%i12) 7/3; 7 (%o12) - 3 (%i13) float(%); (%o13) 2.333333333333334 Maxima 也可以指定使用第几个输出的结果,不过自己定一个标签可能是最好的方式。比方说,我们可以这样用: (%i14) myresult:34+(65*72)/119; 8726 (%o14) ---- 119 (%i15) float(myresult); (%o15) 73.32773109243698 ===重要常数=== Maxima 当然有内建e 或是π 常常用到的数,只是表示法奇怪一点。e 是%e 而π 是%pi 。 ===定义变量=== Maxima定义变量的想法有点特别,在定义一个变数时,其时是给某个数字、矩阵,或想要定义的任何式子等等一个标签。让我们来看几个例子: (%i16) a: 37; (%o16) 37 (%i17) a; (%o17) 37 (%i18) b: 22+100*(375-128); (%o18) 24722 (%i19) a+b; (%o19) 24759 ===函数=== Maxima 函数的定义和使用非常直觉,我们看几个例子就知道: (%i20) f(x) := 3*x^2+5; 2 (%o20) f(x) := 3 x + 5 (%i21) f(2); (%o21) 17 (%i22) g(x, y) := sin(x)*cos(y); (%o22) g(x, y) := sin(x) cos(y) (%i23) g(2*%pi, 4); (%o23) 0 重点就是,在定义函数时要用“:=” 去定义。比较一下和变数定义的不同,想想为什么要有两种不一样的定义方式。 ==进阶使用== ===列式而不运算=== 我们先计算一个瑕积分,用到无穷大的部份Maxima 是以inf 表示: (%i1) integrate(%e^(-x^2),x,0,inf); sqrt(%pi) (%o1) --------- 2 还记得这在微积分是怎么积出来的吗?Maxima 居然会积!不过,今天这不是我们的重点。今天重点是,有时你不是要秀答案,只是要列出式子。我们要怎么样让Maxima 不要太自动就算出来呢?答案是加个“”号在前面,例如: (%i2) 'integrate(%e^(-x^2),x,0,inf); inf / 2 [ - x (%o2) I %e dx ] / 0 ===kill 指令=== 有时我们设定了一堆变数,函数,后来又不想再用下去,可以用kill 指令。而kill(all) 更是把我们定义过的变数,函数全部删除。看些例子就更加清楚: (%i3) f(x) := 3*x^2+5; 2 (%o3) f(x) := 3 x + 5 (%i4) f(x); 2 (%o4) 3 x + 5 (%i5) kill(f); (%o5) done (%i6) f(x); (%o6) f(x) ===ev的使用=== 我们可以把Maxima 的ev 指令想成一个独立的环境。有点像在写程序时的函式一样, 并不会影响到其他的运作。第一种ev 的应用是把我们设成不要执行的指令执行: (%i7) f: 'integrate(x^2, x); / [ 2 (%o7) I x dx ] / (%i8) ev(f, integrate); 3 x (%o8) -- 3 另一个很有用的使用方式是, 我们有个式子, 比方说: (%i9) f: a*x^2+b*2+c; 2 (%o9) a x + c + 2 b 假设我们想令一个式子是a = 1, b = −2, c = −8 的情况, 我们当然可以先令各个变数是这样,们问题是这么一来, f 也永远是x2 − 2x − 8, a, b, c 这三个变数也不再是「符号」, 而是有值的。为了避免这个问题, 我们可以用ev 指令, 在下了这个指令后, 我们可以发现, 并没有变动到原来a, b, c或是f : (%i10) g: ev(f, a=1, b=-2, c=-8); 2 (%o10) x - 12 (%i11) a; (%o11) a ==线性代数相关指令== 这节我们正式介绍线性代数相关,也就是矩阵相关的指令。 ===矩阵及向量=== 我们先来看矩阵和向量的定义方式。前面说过,在Maxima 里,所谓设定一个变数的值,只不过是给某个数字或矩阵等等一个名称。我们这里就举应用在矩阵和向量时的情况: ==线性代数应用实例== ===特征值和特征向量=== 我们这里讨论线性代数很重要的特征值相关的计算。我们定义一个矩阵A , 计算特征值和特征向量时我们都以这个矩阵为主要讨论对象: ===手动特征值的计算=== 上一节介绍Maxima 内建特征值计算,并不一定每个人都喜欢。比方说显示的方式比较特别,另外就是不是一步一步算的,心里有时也有不踏实的感觉。因此,我们这里介绍一下如何用Maxima 一步一步的把特征值求出来。 我们再用一次上一节的例子: ===解线性方程组=== 线性代数的核心问题,就是解线性方程组。解线性方程组一样可以用上一节介绍的solve 指令来解。我们来看一个简单的例子,并且用Maxima 来解。 我们考虑下面的线性方程组: ===手动求特征向量空间的基底=== 我们在前面介绍过, 使用eigenvectors 指令就可以求出特征向量空间的一组基底。我们再用一次前面的矩阵: ==Maxima 的绘图功能== ===二维绘图=== Maxima 二维绘图的指令是用plot2d。比方说,我们要画4x3 − 2x − 2 这个函数,设定x 轴范围是从-5 到5,就下这个指令: (%i1) plot2d([4 * x^3-2 * x-2],[x,-5,5]); ===三维绘图=== 三维绘图也一样容易,只要改用plot3d 的指令即可: (%i2) plot3d(cos(-x^2+y^3/4),[x,-4,4], [y,-4,4]); Geomview 是一个UNIX 的软件,Maxima 可以运用Geomview 做出非常漂亮的3D 图形。我们来看上个例子以Geomview 输出的结果。 (%i3) plot3d(cos(-x^2+y^3/4),[x,-4,4], [y,-4,4], [plot_format,geomview]); Geomview 不但可以画出漂亮3D 图形,更重要的是它可以弥补Maxima 的一些缺点。比方说,Maxima 本身的3D 绘图不可以同时显示两个或两个以上函数图形(2D可以),但利用Geomview,这样的绘图变成可能。 ===点绘图=== 有很多绘图的应用,就只需要画出点,或是用一些点来描述一些函数。这事实上比画函数还简单,但是Maxima 直到5.9.2 版才有这样的功能。详情请参考(5.9.2 之后的) 使用手册。 ===多个函数的绘图=== 如果要比较几个函数,要如何下指令呢?我们来看个例子就明白了: (%i4) plot2d([cos(x), sin(x), tan(x)], [x, -2*%pi, 2*%pi], [y,-2,2])$ 这个例子会同时画出cos(x), sin(x) 和tan(x) 的图形。 ===参数式绘图=== 我们仅简单举一参数式绘图之例子, 详情请参考Maxima 使用手册。 (%i5) plot2d([parametric, cos(t), sin(t), [t,-2*%pi,2*%pi], [nicks,80]]); ==Maxima 的安装== 在Maxima 的官方网站有不同版本的Maxima 供各平台使用: *http://maxima.sourceforge.net/ 不过,不同平台可能有一些不同的选择。我概略说明一下我建议的安装方式。不管用Windows, Mac, 或是Linux,我都推荐使用TeXmacs 这个文书处理软件当界面,因为这样可以显示最漂亮的数学符号。 == ==
返回
Maxima在线性代数的应用
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
登录
导航
首页
最近更改
随机页面
页面分类
帮助
搜索
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息