《Maxima在线性代数的应用.pdf》由会员分享,可在线阅读,更多相关《Maxima在线性代数的应用.pdf(19页珍藏版)》请在金锄头文库上搜索。
1、Maxima在线性代数的应用 作者 蔡炎龍 转换重排 dbzhang 目录 1简介2 2基本概念3 2 1Maxima 当计算器 3 2 2指令结尾 4 2 3离开Maxima 4 2 4结果的引用 4 2 5重要常数 5 2 6定义变量 5 2 7函数 6 3进阶使用6 3 1列式而不运算 6 3 2kill 指令 7 3 3ev的使用 7 4线性代数相关指令8 4 1矩阵及向量 8 4 2矩阵的表示和截取 9 4 3矩阵向量之四则运算 10 4 4矩阵相关函数 10 4 5使用模组 12 5线性代数应用实例13 5 1特征值和特征向量 13 1 1简介2 5 2手动特征值的计算 13 5
2、3解线性方程组 14 5 4手动求特征向量空间的基底 15 6Maxima 的绘图功能17 6 1二维绘图 17 6 2三维绘图 17 6 3点绘图 17 6 4多个函数的绘图 17 6 5参数式绘图 17 7Maxima 的安装18 7 1Windows 18 7 2Linux 18 7 3Mac OS X 19 8关於这份文件 19 8 1原繁体中文版 19 8 2本文件 19 1简介 这篇文章 是介绍Maxima 这套数学软件 在学习线性代数的应用 Maxima 是一个所谓的 电脑代数系统 Computer Algebra System CAS 这种系统比 较为人熟知的还有Mathema
3、tica 和Maple 等等 我们选定Maxima 做为我们使用的程序 主要有 三个原因 免费 Maxima 是免费 又是各平台都有的 所有的人可以在自己的电脑上练习 功能完整 Maxima 虽然不要钱 并不代表不好 Maxima 不论计算或图形功能都十分完整 事实 上 Maxima 是最早的全功能CAS 系统Macsyma 的后代 具代表性 许多新的CAS 系统 如Maple Mathematica 都多少受到Macsyma 的启发 所以学 会Maxima 要学会Maple 或Mathematica 等软件都是很容易的事 这篇文章主要是介绍线性代数相关功能 我们不假设同学已会基本的Maxim
4、a 使用方式 所 以我们会用到的概念 也许不纯粹是线性代数的 也会一并介绍 专就线性代数而言 我们要会 2基本概念3 的其实并不多 想要快速进入状况 可以跳过前面的部份 直接看线性代数相关指令 在操作上 有问题时 再回头看有问题部份的相关说明即可 如果同学们比较喜欢使用Mathematica Maple 或是Matlab 等商业软件也是可以的 我们 系上的电脑室有提供这些软件 可以上机试用看看 2基本概念 我们先介绍一下Maxima 操作的方式 2 1Maxima 当计算器 我们先来看 如果我们要把Maxima 当计算器用 会是什么情况 i1 1 1 o1 2 i2 3 4 7 o2 84 i
5、3 9 3 o3 3 到目前为止 似乎还没什么特别 除了可以做复杂一点点的运算 和平常的计算机或数值计 算软件也没什么不同 以下的例子就不一样了 i4 7 3 o4 7 3 i5 1 2 2 3 o5 7 6 从 o4 我们看到 7 3这种运算 Maxima 不是告诉我们2 3333 而是分数的形式 难 道Maxima 真的懂分数 不要怀疑 这就是所谓电脑代数系统 CAS 的特长 我们可以像 o5 的例子一样 输入个分数的四则运算试试即知 如果坚持要用浮点数 那只要加个fl oat 指令即可 i6 float 7 3 o6 2 333333333333334 2基本概念4 为了完整 我们顺便再
6、介绍指数 根号 阶乘表示法 i7 2 10 o7 1024 i8 sqrt 9 o8 3 i9 5 o9 120 我们可以看出 这些运算不是自然的数学符号 就是和我们平常电脑程序语言的写法 2 2指令结尾 在上面的例子中 我们发现 在Maxima 下指令 结束时一定要打上分号 让Maxima 知道我们下的指令已结束 为什么要多这一个动作 主要是为了有时打比较长的指令可以换行之 故 另一个结束方式是打入 的符号 不同於分号的地方是 运算结果不会显示出来 i10 2 3 i11 2 3 o11 5 有一些CAS 程序 如Matehmatica 是用分号表示不显示运算结果 不过Maxima 中分号已
7、用 上 必需用其他字元 2 3离开Maxima 离开Maxima 打入 quit 即可 当然 很多人可能会觉得奇怪 为什么不是打入 quit 就好了呢 原来像这种程序导向的语 言 什么动作其实都是执行一个函数 所以我们事实上是执行一个叫 离开 的函数 这函数没 有引数 所以就成了quit 的形式 2 4结果的引用 我们时常会需要引用前面的结果 这时就用百分比符号 比方说 2基本概念5 i12 7 3 o12 7 3 i13 float o13 2 333333333333334 Maxima 也可以指定使用第几个输出的结果 不过自己定一个标签可能是最好的方式 比方 说 我们可以这样用 i14
8、myresult 34 65 72 119 o14 8726 119 i15 float myresult o14 73 32773109243698 2 5重要常数 Maxima 当然有内建e 或是 常常用到的数 只是表示法奇怪一点 e 是 e 而 是 pi 2 6定义变量 Maxima定义变量的想法有点特别 在定义一个变数时 其时是给某个数字 矩阵 或想要 定义的任何式子等等一个标签 让我们来看几个例子 i16 a 37 o16 37 i17 a o17 37 i18 b 22 100 375 128 o18 24722 i19 a b o19 24759 3进阶使用6 2 7函数 Max
9、ima 函数的定义和使用非常直觉 我们看几个例子就知道 i20 f x 3 x 2 5 o20 f x 3x2 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 重点就是 在定义函数时要用 去定义 比较一下和变数定义的不同 想想为什么要有两 种不一样的定义方式 3进阶使用 3 1列式而不运算 我们先计算一个瑕积分 用到无穷大的部份Maxima 是以inf 表示 i1 integrate e x 2 x 0 inf o1 2 还记得这在微积分是怎么积出来的吗 Maxima 居然会积 不过
10、 今天这不是我们的重点 今天重点是 有时你不是要秀答案 只是要列出式子 我们要怎么样让Maxima 不要太自动就算 出来呢 答案是加个 号在前面 例如 i2 integrate e x 2 x 0 inf o2 0 1 ex 2dx 3进阶使用7 3 2kill 指令 有时我们设定了一堆变数 函数 后来又不想再用下去 可以用kill 指令 而kill all 更是把 我们定义过的变数 函数全部删除 看些例子就更加清楚 i3 f x 3 x 2 5 o3 f x 3x2 5 i4 f x o4 3x2 5 i5 kill all o5 done i6 f x o6 f x 3 3ev的使用 我们
11、可以把Maxima 的ev 指令想成一个独立的环境 有点像在写程序时的函式一样 并不会 影响到其他的运作 第一种ev 的应用是把我们设成不要执行的指令执行 i7 f integrate x 2 x o7 x2dx i8 ev f integrate o8 x3 3 另一个很有用的使用方式是 我们有个式子 比方说 i9 f a x 2 b x c o9 ax2 bx c 假设我们想令一个式子是a 1 b 2 c 8 的情况 我们当然可以先令各个变数是这样 们问题是这么一来 f 也永远是x2 2x 8 a b c 这三个变数也不再是 符号 而是有值的 为 了避免这个问题 我们可以用ev 指令 在下
12、了这个指令后 我们可以发现 并没有变动到原来a b c 或是f 4线性代数相关指令8 i10 g ev f a 1 b 2 c 8 o10 x2 2x 8 i11 a o11 a 4线性代数相关指令 这节我们正式介绍线性代数相关 也就是矩阵相关的指令 4 1矩阵及向量 我们先来看矩阵和向量的定义方式 前面说过 在Maxima 里 所谓设定一个变数的值 只 不过是给某个数字或矩阵等等一个名称 我们这里就举应用在矩阵和向量时的情况 i1 A matrix 1 2 3 2 8 3 1 4 9 o1 123 283 149 i2 v 2 3 5 o2 2 3 5 我们可以看出 要定义一个矩阵 就是把矩
13、阵一列列的输入 定义一个向量 其实和我们用 手写向量出来也差不多 不过 问题是我们在线性代数常常要把向量写成 行向量 而非如上 的 列向量 表示方式 我们可以用下面两种不同的方式达成 i3 v transpose 2 3 5 o3 2 3 5 i4 v matrix 2 3 5 o4 2 3 5 4线性代数相关指令9 其实向量应该是一个一列或一行的矩阵 但是Maxima 提供了简单定义列向量的方法 这里 要强调一点 一般来说因为矩阵乘法的关系 我们写成列向量和行向量差别很大 不过Maxima 其 实不太在意这点 它可以聪明地发现你要做的事 并且正确得计算出来 简单的说 一般而言 我 们不需要麻
14、烦得定义行向量 用列向量即可 4 2矩阵的表示和截取 这节我们讨论矩阵的抽象表示和取出一个矩阵行 列 甚至entry 的方法 这在很多理论和 计算的尝试会用到 Maxima 是一个CAS 系统 所以我们可以完全用符号去定义一个矩阵 比方 说 i5 A matrix a 1 1 a 1 2 a 2 1 a 2 2 o5 a1 1a1 2 a2 1a2 2 你也可以做完全抽象的代数计算 i6 c A o6 a1 1ca1 2c a2 1ca2 2c 如此一来 我们要试著导出一些定理就非常方便 现在 我们重新把A 定义成一个实数矩阵 再看看怎么样找出A 的某一列 某一行 或某 个entry i7 A
15、 matrix 1 2 3 2 8 3 1 4 9 o7 123 283 149 i8 row A 1 o8 123 i9 col A 2 o9 2 8 4 i10 A 2 3 o10 3 4线性代数相关指令10 4 3矩阵向量之四则运算 我们要做矩阵加法 减法 乘法非常直觉而容易 乘法用的运算元是 我们假设有了前面 矩阵A 和向量v 的定义 来看以下的例子 i11 A v o11 23 35 59 你也可以定义非向量的矩阵试试矩阵的乘法 比方说 两个矩阵A B 的乘积是A B 要注 意A B 并不会得到矩阵相乘的结果 到底A B 是什么意思 大家不妨自己试试 看可不可以找 出其中的意义 向量
16、内积的做法和你想的一样 i12 w 2 3 5 o12 2 3 5 i13 w w o13 38 你可能发现了一个问题 那就是我们上面内积的例子是用列向量 那行向量可以吗 可以 的 Maxima会聪明的知道你想做什么 不信可以试试看 矩阵和向量的纯量乘法是用平常的 号 i14 2 A o14 246 4166 2818 现在我们来看一下有可能会产生误会的地方 假设我们现在要算A A 你可能会想是A 2 结果并不正确 其实A 2 是把A 的每一个entry 都平方 正确计算A A 要用A 2 4 4矩阵相关函数 我们要计算矩阵的行列式值 求转置矩阵 矩阵的秩等等的基本运算 Maxima 当然也都有 A还是我们之前定义的矩阵 4线性代数相关指令11 i15 transpose A o15 1 21 284 339 i16 determinant A o16 54 i17 rank A o17 3 我们当然也可以手动计算行列式值 但这时需要知道矩阵第i j 这个位置的子式 minor 也 就是A 矩阵去掉第i 列 第j 行所成的矩阵 这指令叫minor i18 minor A 1 1 o18