个人工具
登录
查看“Maxima在线性代数的应用”的源代码 - Ubuntu中文
页面
讨论
查看源代码
历史
搜索
导航
首页
最近更改
随机页面
页面分类
帮助
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息
查看“Maxima在线性代数的应用”的源代码
来自Ubuntu中文
←
Maxima在线性代数的应用
跳转至:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
==线性代数应用实例== ===特征值和特征向量=== 我们这里讨论线性代数很重要的特征值相关的计算。我们定义一个矩阵A , 计算特征值和特征向量时我们都以这个矩阵为主要讨论对象: (%i1) A: matrix([4,0,1],[2,3,2],[1,0,4]); [ 4 0 1 ] [ ] (%o1) [ 2 3 2 ] [ ] [ 1 0 4 ] 我们计算一下特征值: (%i2) eigenvalues(A); (%o2) [[5, 3], [1, 2]] 怎么样,很方便吧...等等,特征值怎么会出来两个向量呢!?原来,真正的特征值是放在结果的第一个list 当中,也就是5 和3。那第二个list 代表什么呢?代表的就是每个特征值的几何重数, 也就是每个特征值对应的特征向量空间之维度。换言之,这是比较完整的特征值资讯! 我们也可以用eigenvectors 计算特征向量。事实上,eigenvectors 也会把特征值列出来,所以是包含前面eigenvalues 功能的指令。不过如果我们一开始就介绍eigenvectors,看到那有点复杂的结果大家可能会昏倒。现在已经会了eigenvalues,大概就没问题了: (%i3) eigenvectors(A); (%o3) [[[5, 3], [1, 2]], [1, 2, 1], [1, 0, - 1], [0, 1, 0]] 第一部份和eigenvectors 输出一样,就是说我们有5 有和3 两个特征值,其mutiplicities 分别是1 和2。因此,对於5 应该要有一个对应的特征向量,即[1, 2, 1] ,对於3会有两个,分别是接下来的[1, 0, −1] 和[0, 1, 0] 。这些向量会生成相对应特征值的向量空间。 ===手动特征值的计算=== 上一节介绍Maxima 内建特征值计算,并不一定每个人都喜欢。比方说显示的方式比较特别,另外就是不是一步一步算的,心里有时也有不踏实的感觉。因此,我们这里介绍一下如何用Maxima 一步一步的把特征值求出来。 我们再用一次上一节的例子: (%i4) A: matrix([4,0,1],[2,3,2],[1,0,4]); [ 4 0 1 ] [ ] (%o4) [ 2 3 2 ] [ ] [ 1 0 4 ] 我们先求特征多项式,也就是A − tI 的行列式值: (%i5) f: charpoly(A,t); 2 (%o5) t + (3 - t) (4 - t) - 3 如果想要看到比较漂亮的式子, 可以将f 展开: (%i6) expand(f); 3 2 (%o6) - t + 11 t - 39 t + 45 我们还可以将f 做因式分解, 这样就可以清楚看到A 有几个特征值, 和各特征值的代数重数: (%i7) factor(f); 2 (%o7) - (t - 5) (t - 3) 这样我们就求得A 的特征值是5 和3 。 另一个解法是,我们可以求f = 0 的零根。做法是使用solve 指令: (%i8) solve(f=0, t); (%o8) [t = 5, t = 3] 当然,我们算法正确,应该是得到和前面一样的结果。 ===解线性方程组=== 线性代数的核心问题,就是解线性方程组。解线性方程组一样可以用上一节介绍的solve 指令来解。我们来看一个简单的例子,并且用Maxima 来解。 我们考虑下面的线性方程组: x + 2y + 3z = 6 2x − 3y + 2z = 14 3x + y − z = −2 我们一样可以用前面用过的solve 指令来解: (%i9) eq1: x + 2*y + 3*z = 6; (%o9) 3 z + 2 y + x = 6 (%i10) eq2: 2*x -3*y +2*z = 14; (%o10) 2 z - 3 y + 2 x = 14 (%i11) eq3: 3*x + y - z = -2; (%o11) - z + y + 3 x = - 2 (%i12) solve([eq1, eq2, eq3],[x,y,z]); (%o12) [[x = 1, y = - 2, z = 3]] ===手动求特征向量空间的基底=== 我们在前面介绍过, 使用eigenvectors 指令就可以求出特征向量空间的一组基底。我们再用一次前面的矩阵: (%i13) A: matrix([4,0,1],[2,3,2],[1,0,4]); [ 4 0 1 ] [ ] (%o13) [ 2 3 2 ] [ ] [ 1 0 4 ] 我们已经求出A 的特征值是5 和3 , 我们这里用特征值3 做范例, 看看怎么样能求出对应的特征向量。我们现在要求的就是什么样的向量v , 会满足(A − 3I)v = 0 。这里我们可以用ident 指令可以很容易造出n × n 的单位矩阵。以下我们就把大略的设定做好: (%i14) I: ident(3); [ 1 0 0 ] [ ] (%o14) [ 0 1 0 ] [ ] [ 0 0 1 ] (%i15) v: [x,y,z]; (%o15) [x, y, z] (%i16) u: (A-3*I).v; [ z + x ] [ ] (%o16) [ 2 z + 2 x ] [ ] [ z + x ] 我们现在就是要看什么样的x, y, z 会让u 是零向量。这个例子其实用手解也很容易, 但是我们给Maxima 一个机会。我们要做的就是解一个线性方程组: (%i17) eq1: u[1,1]=0; (%o17) z + x = 0 (%i18) eq2: u[2,1]=0; (%o18) 2 z + 2 x = 0 (%i19) eq3: u[3,1]=0; (%o19) z + x = 0 (%i20) solve([eq1,eq2,eq3],[x,y,z]); Dependent equations eliminated: (2 3) (%o20) [[x = - %r1, y = %r2, z = %r1]] 这看来有点可怕的%r1 和%r2 是什么呢? 原来这只是表示两个参数, 换成我们一般的写法, 我们可能会写成x = −t, y = s, z = t 。至此, 我们已找到特征向量的一般表示式, 如果要找到一组基底也很容易, 我们先令ans 代表前面解出的式子, 再把(%r1, %r2) 代入(1, 0) , (0, 1) 即可: (%i21) ans: %; (%o21) [[x = - %r1, y = %r2, z = %r1]] (%i22) ev(ans, %r1=1, %r2=0); (%o22) [[x = - 1, y = 0, z = 1]] (%i23) ev(ans, %r1=0, %r2=1); (%o23) [[x = 0, y = 1, z = 0]] 我们可能会希望把结果设成两个向量v1 , v2 , 方便以后使用。我们可以再用ev 来做到这样的事: (%i24) v1: ev([x,y,x], %o22); (%o24) [- 1, 0, - 1] (%i25) v2: ev([x,y,x], %o23); (%o25) [0, 1, 0]
返回至
Maxima在线性代数的应用
。