Mathematica与线性代数

合集下载

mathematica 行向量 列向量 矩阵

mathematica 行向量 列向量 矩阵

mathematica 行向量列向量矩阵摘要:一、Mathematica软件简介二、行向量与列向量1.定义及特点2.基本操作与运算三、矩阵的概念与运算1.矩阵的定义2.矩阵的分类3.矩阵的运算4.矩阵的性质四、Mathematica在矩阵运算中的应用实例五、总结与展望正文:【一、Mathematica软件简介】Mathematica是一款功能强大的数学软件,自1988年问世以来,广泛应用于科学计算、数据分析、教育等领域。

它具有丰富的函数库,能解决诸如线性代数、微积分、概率统计等各种数学问题。

在本文中,我们将重点探讨Mathematica在向量、矩阵运算方面的应用。

【二、行向量与列向量】行向量和列向量是线性代数中的基本概念。

在Mathematica中,行向量和列向量分别表示为rows和columns。

【1.定义及特点】行向量:一个由n个元素组成的1×n矩阵,其中n为自然数。

行向量有n 个分量,分别表示该向量在各个方向上的分量值。

列向量:一个由n个元素组成的n×1矩阵,其中n为自然数。

列向量有n 个分量,分别表示该向量在每个方向上的分量值。

【2.基本操作与运算】在Mathematica中,行向量和列向量的基本操作与运算主要包括以下几点:1.加法:两个向量相加,结果为一个新向量,其元素为两个向量对应分量之和。

2.减法:两个向量相减,结果为一个新向量,其元素为两个向量对应分量之差。

3.数乘:向量与实数相乘,结果为一个新向量,其元素为原向量对应分量乘以实数。

4.标量积:两个向量的标量积为一个实数,等于两个向量对应分量的乘积之和。

5.向量积:两个向量的向量积为一个新向量,其分量依次为两个向量对应分量的向量积。

【三、矩阵的概念与运算】矩阵是线性代数中的核心概念,它可以看作是一个由行向量或列向量组成的矩形阵列。

在Mathematica中,矩阵表示为一个二维数组。

【1.矩阵的定义】矩阵是一个m×n的矩阵,其中m表示矩阵的行数,n表示矩阵的列数。

Mathematica教程用Mathematica求解线性代数基本问题

Mathematica教程用Mathematica求解线性代数基本问题

Module[{x,y,...},body] Module[{x=x0,y=y0,…},body] lhs:=Module[vars,rhs/:cond] Block[{x,y,... },body] Block[{x=x0,y=y0,…},bddy]
具有局部变量x,y… 的模块
具有初始值的局部变 量的模块 rhs和cond共享局部 变量 运用局部值x,y, …计 算body 给x,y,..赋初始值
Do循环结构
Do[expr,{i,imax}] 循环计算expr,以步长1,i从 1增加到imax
循环计算expr,以步长di,i Do[expr,{i,imin,imax,di}] 从imin增加到imax Do[expr,{n}] 循环计算expr n次



键入
t0={{1,2,3},{4,5,6}}
则得到一个名为t0的2行3列的矩阵。
• 2、也可利用工具栏或菜单输入矩阵 • 点击工具栏上的矩阵输入的工具,就会得到一个 二行二列的矩阵输入框,若不是二行二列的矩阵, 可通过按Ctrl+Enter键增加一行,按Ctrl+,键增加 一列,用鼠标选定一行(或一列),按Del键可删 除一行(或一列)。通过这样的操作,就可输入任 意一个矩阵。下面的图演示了这个过程。
Out[5]=True
ln[6]:=TrueQ[x==y]
Out[6]=false
用“===”可直接测试两个表达式的等同性:
In[7]:=x===y
Out[7]:=False
一般情况下,“===”返回值为真(True)或假(False), 而“==”为符号形式输出,表示一个符号等式。 在 特殊情况下可用“===”测试一个表达式的 结构,而用“==”测试数学上的等同性。

Mathematica的主要功能

Mathematica的主要功能

3、数
Mathematica 以符号运算为主,这与一些语言有所不同,例如源自, e, 2 ,3
2 等符号表示准确数,近似数用带小数点的数表示,例如
1.2,2.3*10^5 等。Mathematica 中求近似值以及近似值的精度控制
函数为函数“N”,其调用格式如下:
N[表达式] 计算表达式的近似值,具有机器规定的精度(16 位有 效数字),但是按标准输出只显示前 6 位有效数字
每次运行结束后,Mathematica 会自动在输入的式子前面加上 “In[n]:=”(n 表示输入命令的序列号),在输出的答案前面加上 “Out[n]=”(n 表示输出结果的序列号),以便分清输入和输出并 自动加上编号。可以用“%”表示前一个输出的内容,“%%” 表 示倒数第 2 个输出的内容,依此类推,“% n”表示第 n 个(即 Out[n])输出的内容。也就是说 Mathematica 输出的内容被系统 记忆,它们可以像其它变量一样在后面的计算中引用。
四、编程基础
1、自定义函数
前面介绍了 Mathematica 本身自带的内置函数,下面我们以实 例来说明定义函数的方法。例如,要定义函数 f (x) ex (sin x 1) ln x2 , 我们只要键入命令 f[x_]:=Exp[x]*(Sin[x]+1)+Log[x^2] 运行即可。
注意:在函数的自变量后面有一个下划线“_”,这表示 x 为自变量, 可以把 x 代入为任何的值进行计算;等号前面的有个冒号,表示定 义函数。同样可以定义多变量函数。定义了函数 f[x]后,可以直接 地调用 f[x]来进行符号数学运算(例如积分、微分等)
三、基本代数运算
下面介绍一些实现基本代数运算的函数,用于变换数学表达式、解 方程和解不等式。Mathematica 具有强大的符号运算功能,下面列 举的函数均可代入具有字母的表达式进行计算,得到精确解。

mathematica计算n阶行列式

mathematica计算n阶行列式

mathematica计算n阶行列式n阶行列式是线性代数中的重要概念,它在矩阵理论、线性方程组的求解以及求解线性变换等方面有着广泛的应用。

在Mathematica 中,我们可以使用Det函数来计算n阶行列式的值。

行列式是一个由元素组成的方阵,其中元素的排列方式对计算结果起到关键作用。

对于一个n阶行列式来说,我们可以通过对第一行(或第一列)展开来计算其值。

展开后的表达式是一个多项式,其中每一项的系数就是对应元素的代数余子式。

在Mathematica中,我们可以使用MatrixForm函数来直观地表示一个矩阵。

例如,对于一个3阶行列式来说,我们可以使用如下代码进行表示:```mathematicaMatrixForm[{{a, b, c}, {d, e, f}, {g, h, i}}]```其中,a、b、c等为矩阵的元素。

这样,我们就可以清晰地看到矩阵的结构,便于进行计算和分析。

接下来,我们将使用Det函数来计算一个n阶行列式的值。

假设我们有一个4阶行列式,可以使用如下代码进行计算:```mathematicaDet[{{a, b, c, d}, {e, f, g, h}, {i, j, k, l}, {m, n, o, p}}]```其中,a、b、c等为矩阵的元素。

运行此代码后,Mathematica将返回计算结果,即该4阶行列式的值。

除了计算n阶行列式的值,Mathematica还提供了其他一些与行列式相关的函数,如Eigenvalues、Eigenvectors等。

这些函数可以用于计算矩阵的特征值和特征向量,从而进一步分析矩阵的性质和行列式的特点。

除了使用Det函数外,我们还可以使用Simplify函数对行列式进行化简。

化简后的行列式可以更好地展示其特点和性质,便于我们进行分析和理解。

在Mathematica中,我们还可以使用Transpose函数对矩阵进行转置。

转置后的矩阵可以改变行列式的排列方式,从而影响行列式的计算结果。

mathematica编程

mathematica编程

mathematica编程
在数学软件Mathematica中编程,可以进行各种数学计算和图形绘制。

Mathematica是一种功能强大的计算机代数系统,可以处理各种数学问题。

它提供了丰富的函数和工具,可以进行符号计算、数值计算、绘图以及数据分析等。

使用Mathematica编程时,我们可以通过定义变量、函数和方程来描述数学问题。

例如,我们可以定义一个变量x,并通过方程y=x^2来表示一个二次函数。

然后,我们可以使用Plot函数来绘制这个函数的图形,并通过调整参数来改变图形的样式。

除了进行数学计算和绘图外,Mathematica还可以进行符号计算。

例如,我们可以使用Solve函数来求解方程,使用Integrate函数来进行积分计算。

这些功能可以帮助我们解决各种数学问题,包括代数、微积分、线性代数等。

Mathematica还提供了许多其他功能,如数据分析、统计分析、图像处理等。

我们可以使用内置的函数和工具来处理数据,进行数据可视化和分析。

这些功能使得Mathematica成为一个非常强大的数学工具。

Mathematica是一种功能强大的数学软件,可以用于各种数学计算和图形绘制。

它提供了丰富的函数和工具,可以帮助我们解决各种数学问题,并进行数据分析和图像处理。

无论是在学术研究、工程
设计还是数学教育中,Mathematica都是一个非常有用的工具。

使用Mathematica编程,我们可以更加高效地进行数学计算和数据分析,提高工作效率。

mathematica使用指南

mathematica使用指南

Mathematica使用指南1.简介M a th em at ic a是一种功能强大的数学软件,它提供了广泛的数学计算和数据分析功能。

本文档将介绍M at he ma t ic a的基础知识和使用方法,帮助初学者快速上手。

2.安装与配置2.1下载与安装在官方网站上下载Ma t he ma ti ca的安装包,并按照提示完成安装过程。

2.2授权与激活通过输入许可证密钥进行授权和激活,确保软件的正常运行。

3.基本功能3.1符号计算M a th em at ic a可以进行符号计算,包括基本的代数运算、微积分、线性代数等。

使用各种符号和函数进行数学表达式的简化和求解。

3.2图形与可视化M a th em at ic a提供了强大的图形和可视化功能,可以绘制各种二维和三维图形,包括函数图像、曲线、散点图等。

还可以添加标签、注释、图例等增强图形的可读性。

3.3数据分析与统计M a th em at ic a支持数据分析和统计操作,可以导入和处理各种数据格式,并进行数据可视化、分布拟合、假设检验等统计分析。

3.4编程与脚本M a th em at ic a具有强大的编程功能,支持多种编程范式,包括函数式编程、面向对象编程等。

用户可以编写自定义函数和脚本,实现复杂的算法和任务。

4.实例演示为了更好地理解M ath e ma ti ca的使用,本节将介绍几个常见的实例演示,展示其在数学、物理、工程等领域的应用。

4.1解方程使用Ma th em at ic a求解方程是其常见的使用方式之一。

通过给定方程和初始条件,演示如何使用M at he ma ti ca快速求解方程并绘制解的图像。

4.2数据分析以一个实际的数据分析问题为例,展示如何使用M at he ma ti ca导入数据、进行数据清洗和预处理,并通过统计分析和可视化揭示数据的规律。

4.3拟合曲线通过生成一些带有噪声的数据点,并使用M at he ma ti c a进行曲线拟合,展示如何选择合适的拟合模型,并评估拟合的效果。

利用Mathematica软件实现线性方程组求解

利用Mathematica软件实现线性方程组求解

利用Mathematica 软件实现线性方程组求解摘要:Mathematica 作为一款独特的数学软件,有强大的数值计算和符号计算能力,具有很强的实用性,而线性方程组在线性代数中具有重要的地位.针对线性方程组的解具有零解、唯一解、无穷解的情况,文章借助Mathematica 数学软件分别给出求解的算法以及如何直接调用内部函数求解线性方程组的方法.文章中主要利用高斯-约当(Gauss-Jordan )消元法、矩阵的LU 分解法求解线性方程组,并用Mathematica 软件对这两种算法予以实现.同时给出了带有可读性好的求解过程、能用于各种逆矩阵和线性方程组求解的通用程序,利用Mathematica 数学软件实现对求逆矩阵和线性方程组的可读性计算.关键字:Mathematica ;线性方程组;可读性计算;算法引言1.Mathematica 软件功能简介Mathematica 作为一款独特的数学软件,有强大的数值计算和符号计算能力.同时,线性方程组是连接矩阵和向量组的纽带,也是矩阵和向量组的直接应用.在我们的实际工作中出现的大量数学模型,他们最后都可以化为解线性方程组,所以对线性方程组的解的研究是非常重要的.在数学的许多分支中都涉及到线性方程组的问题,我们通常分齐次与非齐次两大类以及未知量个数与方程个数相等或不等对其进行求解,在系数矩阵为方阵时,还可以按照行列式是否为零进行分类.对于线性方程组的求解,其算法是非常清楚的,就是利用矩阵的行初等变换将对应的增广矩阵化为行最简矩阵,然后就可写出通解.但是由于整个过程涉及到大量数字运算,往往会因计算过程中不小心出现一些计算错误而导致错误的结论,有时甚至出现对没解的方程求出有解,或相反.然而,如果利用数学软件Mathematica ,可以将大家从繁琐的数字运算中解脱出来,而将注意力集中在基本概念和基本算法的学习上,从而增加学习兴趣,提高学习效率.笔者从事了一年多大学生创新实验《基于数学软件的高等代数解题实践研究》,通过实践发现,如果能够通过计算机编程让计算机自动求解各种线性方程组,这将是非常快速、方便的.因此本文以Mathematica 数学软件为平台,通过举例、演示与实验来理解线性方程组中的一些抽象概念和理论,并简捷直观地用计算机来解决复杂的线性方程组的求解问题,化简过难、过繁的运算技巧.本文根据Mathematica 软件强大的数值计算无误差的特点和符号计算功能,总结Mathematica 的关于线性方程组计算的功能、命令,总结了求解线性方程组的解的算法,并给出带有可读性好的求解过程、能用于各种线性方程组求解的通用程序,实现线性方程组的可读性计算.由于本章用到线性代数的许多基本知识,有必要对相关的概念和性质做一下说明. 定义1 如两个方程组具有完全相同的解,则称两个方程组为等价方程组.定义2 关于方程组的初等运算有三种类型:1) 交换方程组中两个方程:i j R R ↔,称为交换运算.2) 用一个非零的实数乘以某一方程:i i R R λ→,称为倍法运算.3) 某方程加上另一个方程的倍数:i j i R R R λ+→,称为消法运算.定理1 若一个方程由另一个方程经过有限次初等运算得到的,则这两个方程组等价.定义3 矩阵的初等变换,用i A 表示矩阵A 的第i 行,那么有:1) 交换A 的两行:i j A A ↔,称为交换变换.2) 用一个非零的实数λ乘以A 的某一行:i j A A λ→,称为倍法变换.3) 用A 某行加上另一行的λ倍:i j i A A A λ+→,称为消法表换.定义4 对矩阵A 施行初等变换,得到的矩阵称为相应的初等阵.例如23100100010001001010A A ↔⎛⎫⎛⎫ ⎪ ⎪−−−→ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭记作23E2210010001000001001A A λλ⨯↔⎛⎫⎛⎫ ⎪ ⎪−−−−→ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭记作()2E λ32310010001001000101A A A λλ+⨯↔⎛⎫⎛⎫ ⎪ ⎪−−−−−→ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭记作()23E λ定理2 对矩阵施行初等变换相当于将矩阵左乘相应的初等阵.212+-210210221-101-5001001A A A ⨯→⎛⎫⎛⎫ ⎪ ⎪−−−−−−→ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭()相当于12(-2)E A100102102-21021-1=01-5001001001⎛⎫⎛⎫⎛⎫ ⎪⎪ ⎪ ⎪⎪ ⎪ ⎪⎪ ⎪⎝⎭⎝⎭⎝⎭定理3 对任何n 阶矩阵A,以下性质等价:1) A 存在逆矩阵,即A 是可逆矩阵.2) 0A ≠,即A 是非奇异矩阵.3) A 的行向量组(列向量组)线性无关.4) 方程组AX b =有唯一解.定理4 如果矩阵A 经过一系列的初等变换化为单位阵E,则单位阵E 通过相同的初等变换化为1A -.由此得出用初等变换求矩阵逆的方法下例所示. 例1:求矩阵123133247A ⎛⎫ ⎪= ⎪ ⎪⎝⎭的逆. 解:()(2)(1)(1)(2)(3)(1)13(3)(2)13(1)(3)(3)(1)(1)(2)211231*********33010010-110247001011-201123100100010-110010001-1-110A E +-⨯→+-⨯→+-⨯→+-⨯→+-⨯→⎛⎫⎛⎫ ⎪ ⎪=−−−−−−→−−−−−−→ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭⎛⎫ ⎪−−−−−−→ ⎪ ⎪⎝⎭()()()()()()()-161-3-110=01-1-11E A ⎛⎫ ⎪ ⎪ ⎪⎝⎭ 2 Mathematica 软件常用命令及其功能为了便于读者更好地利用Mathematica 软件解决数学问题,首先给出本文程序涉及的Mathematica 数学软件的命令及其功能.Append[expr,elem]——生成一个在表expr 的最后添加元素elem 后的表;Complement[listall, list1,list2,…]——求全集listall 对listi 的差集; Delete[expr,{i}]——删除expr 中第i 个元素后剩下的表;Do[expr,{imax}]——重复执行expr 共imax 次;Table[expr,{imax}]-—生成一个由表达式expr 产生的元素构成的共imax 个元素的表; Do[expr,{i,min,max}]——循环变量i 按步长1从min 取至max,重复执行表达式expr; Do[expr,{i,imin,imax},{j,jmin,jmax},…]——多重循环;Dot[a,b]——矩阵、向量、张量a 与b 的内积;Transpose[list]——对矩阵list 进行转置; IdentityMatrix[n]——自动生成一个n 阶单位矩阵;Insert[expr,elem,n]——在表expr 的第n 个元素前插入元素elem 产生一个新表; If[condition,t,f]——如果条件condition 为True,执行t 段,否则执行f 段;Length[expr]——表expr 中第一层元素的个数( 通常称为表的长度);LinearSolve[A,b],给出向量x,使得Ax b =成立.——求解线性方程组Ax b =的一个特解; LUBackSubstitution[数据,b]——利用LUDecomposition[矩阵A]输出的结果求解方程组矩阵.x=bLUDecomposition[A]——求出矩阵A 的LU 分解;LUMatrices[lu]——返回一个形式为{l,u}的列表;MatrixForm[expr]——按矩阵形式将表expr 输出;NullSpace[A]——求齐次线性方程组AX=0的基础解系;Print[expr1,expr2,…]——顺次输出表达式expri 的值;RowReduce[A]——将矩阵A 化为简化行梯形形式;Simplify[expr]——对表达式expr 进行化简;Solve[eqns,vars]——从方程组eqns 中解出变量vars;(*information*)--注释语句,其中information 表示对程序作说明;{a,b,c}--Mathematica 中表的结构,表示元素分别为a,b,c 的表;3线性方程组解的算法及在Mathematica 软件中的实现3.1线性方程组的解考虑线性方程组:,,,()n m m n A X b X R b R R A m ⨯=∈∈= (1)其对应的齐次线性方程组为:0AX = (2)讨论线性方程组AX b =的求解问题,式中A 为m n ⨯阶系数矩阵,b 为1m ⨯阶右端列向量,X 为待求的1n ⨯阶列向量.这里首先假定m n ≤,如果m n >留待稍后讨论.当m n =且行列式0A ≠时,称AX b =为恰定方程组;当m n <时,称AX b =为不定方程组;当m n >时,称AX b =为超定方程组;在上述方程组求解的讨论中,常常要用到系数矩阵A 的秩()R A ,与增广矩阵的秩(,)R A b ,有时还要计算对应齐次方程组0AX =的基础解系.线性方程组(1)的解有以下3个结论:线性方程组的解的基本问题:当()(,)R A R A b n ==时,(1)有唯一解;当()(,)R A R A b n =<时,(1)有无穷多组解;当()(,)R A R A b <时,(1)无解.线性方程组的解的结构问题:线性方程组(1)对应的齐次方程组(2)的基础解系由()n R A -个向量组成;(2)的通解为基础解系的任意线性组合;(1)的通解为(1)的特解与(2)的通解之和.Mathematica 软件中的命令Solve 可以直接求出方程组(不限于线性)的解,一般格式为:Solve[eqns,vars],其功能是从方程组eqns 中解出变量vars.(但对于大的方程组而言,这种方法就显得有点儿麻烦,而且效率不高.)也有专门用于求解线性方程组的命令,一般格式为:LinearSolve[A,b],给出向量x,使得AX b =成立.其功能是求解线性方程组AX b =的一个特解,此命令的缺陷是当方程组的解不唯一时,只能求出一个特解而不能求通解.其中A 是方程组的系数矩阵,而b 为线性方程组的“右边项”.如果A 为可逆阵,那么LinearSolve 就给出线性方程组的唯一解.如果A 为奇异阵,那么方程组就可能没有解,也有可能存在无穷组解.如果方程组具有唯一解,Mathematica 就会给出这个解(如例3).如果方程组没有解,Mathematica 就会返回出错信息(*Linear equation encountered which has no solution.*),即遇到了没有解的线性方程组.(如例4)例2:求解线性方程组.⎪⎩⎪⎨⎧=++=++=++147338523532321321321x x x x x x x x xA1={{2,1,3},{3,2,5},{3,3,7}};b1={5,8,14};Det[A1]=10≠,故知方程组有唯一解LinearSolve[A1,b1] (*利用Solve 函数求解11A X b =*)={-3,-4,5} (*求得解543321=-=-=x x x *)例3:求解线性方程组⎪⎩⎪⎨⎧=++=+-=++124313427233z y x z y x z y x⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=12171;4313422331b a a1={{3,3,2},{2,-4,3},{1,3,4}};b1={{7},{1},{12}};运行LinearSolve[a1,b1]得:231776,,701435⎧⎫⎧⎫⎧⎫⎧⎫-⎨⎨⎬⎨⎬⎨⎬⎬⎩⎭⎩⎭⎩⎭⎩⎭例4:方程组⎪⎩⎪⎨⎧=+-=+-=++1143313462z y x z y x z y x 没有解.⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=11162;4333411122b a a2={{2,1,1},{1,-4,3},{3,-3,4}};b2={{6},{1},{11}};运行LinearSolve[a2,b2]得:LinearSolve::nosol: Linear equation encountered that has no solution.(遇到了没有解的线性方程组)LinearSolve[{{2,1,1},{1,−4,3},{3,−3,4}},{{6},{1},{11}}]如果方程组没有解,Mathematica 就会返回出错信息(*Linear equation encountered which has no solution.*),即这是一个没有解的线性方程组.如果方程组Ax=b 有无穷组解,问题就有一些复杂了.对于这种情况,Mathematica 就会返回一个解,我们称其为特解.而所有解是由特解加上对应的齐次方程组Ax=0的所有解构成的.所有满足0AX =的向量X 全体称为A 的零空间,可以很容易地用NullSpace 命令确定出零空间的构造.NullSpace[A ]返回A 的零空间的基向量,即齐次线性方程组AX=0的基础解系.A 的零度,即A 的零空间中最大线性无关向量组的向量个数,可以通过运行Length[NullSpace[a]]得到. A的秩可以用n-Length[NullSpace[A]]算出,其中n表示A 的列数.例5:方程组2y74323349x zx y zx y z++=⎧⎪-+=⎨⎪-+=⎩有无穷组解.a={{2,1,1},{1,-4,3},{3,-3,4}};b={{7},{2},{9}};nullspacebasis=NullSpace[a]{{−7,5,9}}(*由于零向量非空,因此没有唯一解*)particular = LinearSolve[a, b]{{10/3}, {1/3}, {0}}(*这是一个特解*)方程组的完全解具有形式t*nullspacebasis+particular,其中t是任意参数.然而,为了表示成单个列表,我们必须展平nullspacebasis和particular. generalsolution = t*Flatten[nullspacebasis] + Flatten[particular]{10/3 - 7 t, 1/3 + 5 t, 9 t}作为检验的步骤,我们下面把一般解代回到原来的方程组中.a.x /. x -> {10/3 - 7 t, 1/3 + 5 t, 9 t} // Expand{7,2,9}关于线性方程组求解的算法研究已比较成熟,本文主要利用高斯-约当(Gauss-Jordan)消元法和矩阵LU分解法求解线性方程组.3.2高斯-约当(Gauss-Jordan)消元法求解线性方程组ax=b的高斯-约当方法是基于对增广矩阵[]a b的简化处理,这个过程通过初等变换把矩阵转化为简化行阶梯形的形式.基本初等行变换有下述三种:①交换两行②在一行中乘上一个非零常数③在一行中加上另一行的倍数.容易证明初等行变换对方程组的解没有影响.一个矩阵称为简化行阶梯形形式,是指①每一行中第一个非零元素都是1(称为首1)②在这个1的上面或者下面的元素都是0③对于两个首1的行,下面的行中第一个非零元素比前一个更靠右.在求解线性方程组时,我们首先应该使用初等行变换把增广矩阵转化为简化梯形形式.学过线性代数或者高等代数的读者都知道初等行变换是非常麻烦的,很容易出错.并且只要有一个地方出错,后面的计算就已经无用了.然而,Mathematica数学软件中的RowReduce命令可以自动把任意矩阵转化为简化行梯形形式.RowReduce[A]——把矩阵A 转化为简化行梯形形式.例6: 考虑3⨯4阶矩阵,其元素为ij a i j =-.a=Table[Abs[i-j],{i,1,3},{j,1,4}];a//MatrixForm⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡123012101210 RowReduce[a] //MatrixForm⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡23021100010001 下面我们演示行简化过程是怎么用于线性方程组的求解.为了便于比较,我们使用的范例采用前面的例3、例4与例5 中考虑的三个例子.例7:(a )方程组124313427233=++=+-=++z y x z y x z y x (有唯一解) (b )方程组1143313462=+-=+-=++z y x z y x z y x (无解) (c )方程组943323472=+-=+-=++z y x z y x z y x (有无穷组解)这三个方程组的增广矩阵分别为 ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=9433234171123;11433134161122;12431134272331a a aa1={{3,3,2,7},{2,-4,3,1},{1,3,4,12}};a2={{2,1,1,6},{1,-4,3,1},{3,-3,4,11}};a3={{2,1,1,7},{1,-4,3,2},{3,-3,4,9}}; RowReduce[a1]//MatrixForm⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-357610014170107023001 (*当矩阵被简化后,如果把它看作方程组,容易看出x=-23/70,y=17/14,z=76/35*) RowReduce[a2] //MatrixForm795910001-00001⎛⎫ ⎪ ⎪ ⎪⎝⎭(*简化后的矩阵第三行指的是0001x y z ++=,这当然是不可能的.这个矛盾(一行中只有最后一个元素是非零,其余都是零)说明方程组没有解.*) RowReduce[a3] //MatrixForm7109351931001-0000⎛⎫ ⎪ ⎪ ⎪⎝⎭(底行全是0没有任何不对的地方,然而这个方程组没有唯一解,如果令z=t,其中t 为独立参数,那么方程组的解具有如下形式:10715,,3939x t y t z t =-=+=) [注释] 虽然这个解与例5给出的解在形式上稍有些不同,但从它们确定相同的解集的意义上看,它们是等价的.求解线性方程组的算法步骤为:1.对增广矩阵(非齐次)或系数矩阵(齐次)进行初等行变换,将其转化为行最简形矩阵(对非齐次线性方程组判断是否有解);2.确定非自由未知量和自由未知量,将行最简形“翻译”为方程组;3.令自由未知量等于任意常数,得到通解.3.3 矩阵的LU 分解法(Doolittle 法)LU 分解法(杜利特尔Doolittle 方法) 是另外一种经常使用的求解线性方程组的方法,尤其是当具有许多方程组,而且每个方程组的系数相同时,这种方法特别有用. LU 分解法的基本思想是这样的.如果A 为方阵,那么它可以分解为A=LU,其中L 为下三角矩阵,主对角线上元素全是1,U 为上三角矩阵.这样方程组Ax=b 就转化为(LU )x=b,其可重写为L (Ux )=b.如果令y=Ux,那么可以从Ly=b 中解出y,一旦有了y,就可以从Ux=y 中解出x.(LU)Ly b Ax b x b Ux y =⎧=⇔=⇔⎨=⎩虽然矩阵LU 分解法把一个方程组的求解转化为两个方程组的求解,但由于现在每个方程组的系数矩阵都是三角矩阵,因此计算起来速度是很快的.这样一来,如果使用LU 分解法求解线性方程组,就包含两个步骤:分解与回代.对应的Mathematica 命令就分别为LUDecomposition 与LUBackSubstitution .LUDecomposition[A]——求出矩阵A 的LU 分解;LUBackSubstitution[数据,b]——利用LUDecomposition[矩阵A]输出的结果求解方程组矩阵.x=bLUDecomposition 的输出为数据,由三部分组成:(1)矩阵L 与U 被压缩到一个矩阵中,(2)一个置换向量,以及(3)矩阵的L ∞条件数.把数据送给LUBackSubstitution 就可以求解出线1112111121421222212221212111n n n n n nn n n nn a a a r r r a a a l r r A a a a l l r ⎛⎫⎛⎫⎛⎫ ⎪ ⎪⎪ ⎪ ⎪⎪== ⎪ ⎪⎪ ⎪ ⎪⎪⎝⎭⎝⎭⎝⎭性方程组.置换向量对行进行重新安排,以保证矩阵具有最大的数值稳定性.本文不再对条件数加以讨论.LUDecomposition 与LUBackSubstitution 不能用于求解具有无穷组解的线性方程组.例8: 利用LU 分解法求解线性方程组2y 743232213x z x y z x y z ++=⎧⎪-+=⎨⎪++=⎩.为了用LU 分解法求解线性方程组,我们首先对系数矩阵进行矩阵分解.2117143;2;32213a b ⎡⎤⎡⎤⎢⎥⎢⎥=-=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦运行Clear all;a={{2,1,1},{1,-4,3},{3,2,2}};b={{7},{2},{13}};data=LUDecomposition[a]得{{{1, -4, 3}, {2, 9, -5}, {3, 14/9, 7/9}}, {2, 1, 3}, 1}LUBackSubstitution[data,b]{{1},{2},{3}}在例9和例10中演示了LUDecomposition 返回数据的结构.例9 567131232728m ⎛⎫ ⎪= ⎪ ⎪⎝⎭;m={{5,6,7},{1,3,12},{3,27,28}};{lu,m,cond}=LUDecomposition[m]{{{1,3,12},{5,-9,-53},{3,-2,-114}},{2,1,3},1}在本例中,没有进行行置换,因为此时的置换向量p 就是{1,2,3}.LUDecomposition[m]的第一部分是以压缩形式给出的两个矩阵,因为我们已知LU 的形式为100100100x x x x x x x x x ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦; 所以要想指定矩阵L 、U,只需要指定九个元素(用x 表示).在LUDecomposition[m]的第一部分就是用单个矩阵的形式给出这九个数.lu//MatrixForm234256347⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦这些数虽然是组合在一个矩阵中,但每个数所在的位置却是分别与L 、U 中的位置一致的,因此100234LU 210056341007⎡⎤⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦例10 211143322m ⎡⎤⎢⎥=-⎢⎥⎢⎥⎣⎦; Clear all;m={{2,1,1},{1,-4,3},{3,2,2}};{lu,p,cond}=LUDecomposition[m]{{{1, -4, 3}, {2, 9, -5}, {3, 14/9, 7/9}}, {2, 1, 3}, 1}lu//MatrixForm714991432953⎛⎫ ⎪ ⎪ ⎪⎝⎭--如果仍然按前面例子同样的步骤处理,就会得到71499100143210;095;3100l u -⎡⎤⎡⎤⎢⎥⎢⎥==-⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦ 但这时l 与u 乘起来并不等于原来的矩阵.l.u//MatrixForm143211322-⎡⎤⎢⎥⎢⎥⎢⎥⎣⎦实际上这时置换向量为p={2,1,3},表明矩阵中第一行与第二行交换了顺序.如果这时交换l 中相应的行,再乘上U 就会得到原来的矩阵.149210100;31l ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦L.U//MatrixForm211143322⎡⎤⎢⎥-⎢⎥⎢⎥⎣⎦重构出L 与U 矩阵的更方便的方法是利用LUMatrices 命令,这条命令包含在软件包LinearAlgebra`MatrixManipulation`中.LUMatrices[lu]——返回一个列表,形式为{l,u},由对应于lu 的矩阵在LU 分解中被置换后的上三角与下三角矩阵组成,其中lu 为运行LUDecomposition[A]所得结果中的第一个元素.例11:自动求解例9中的L 、U运行<<LinearAlgebra`MatrixManipulation`调入软件包. 运行m={{2,1,1},{1,-4,3},{3,2,2}}; {lu,p,cond}=LUDecomposition[m]得数据{{{1, -4, 3}, {2, 9, -5}, {3, 14/9, 7/9}}, {2, 1, 3}, 1} 运行LUMatrices[lu] 得转换后的L 、U 矩阵{{1,0,0},{2,1,0},{3,14/9,1}},{{1,-4,3},{0,9,-5},{0,0,7/9}}} 由此可见可以自动提取转换后的L 、U 矩阵: L= LUMatrices[lu][[1]]; U= LUMatrices[lu][[2]];L[[p]]//MatrixForm (*L[[p]]根据向量p 对矩阵L 的行进行置换*)14921010031⎛⎫ ⎪ ⎪ ⎪⎝⎭U//MatrixForm7914309500-⎛⎫⎪- ⎪ ⎪⎝⎭运行下列命令,从结果可见L 与U 的乘积与原矩阵一致:L[[p]].U//MatrixForm211143322⎛⎫ ⎪- ⎪ ⎪⎝⎭例12:利用LU 分解法求解方程⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛-400320102423xLU 分解法的计算步骤:1.首先将方程组的系数矩阵进行LU 分解,得到A LU =.2.求解LY=b.3.求解UX=Y.(*输入数据*)A = {{3, 2, -4}, {2, 0, 1}, {0, 2, 3}}; b = {0, 0, 4};(*对A 进行LU 分解:A=LU*)Print["待求方程组为", MatrixForm[A], "x=", MatrixForm[b]]; n = Length[b];{lu, p, c} = LUDecomposition[A];Print["LU 分解的紧凑格式为", MatrixForm[lu]]; Print["置换向量为", p];l = lu SparseArray[{i_, j_} /; j < i -> 1, {n, n}] + IdentityMatrix[n]; Print["分离的L 矩阵为", MatrixForm[l]];u = lu SparseArray[{i_, j_} /; j >= i -> 1, {n, n}]; Print["分离的U 矩阵为", MatrixForm[u]]; (*求解Ly=b*)y = LinearSolve[l, b[[p]]]; Print["求解Ly=b 得:y=", y]; (*求解ux=y*)x = LinearSolve[u, y] // N; Print["方程组解为:x=", x];运行以上程序得:4线性方程组求解过程的可读性计算假设AX E =,其中A 为n 阶系数矩阵,E 为单位矩阵,即123=,,,,n E e e e e (),其中(1,2,)i e i n =为单位列向量,X 为n 个列向量构成的矩阵,即2(,,)i n X x x x =,其中,(1,2,)i x i n =为列向量.于是,可以把等式AX E =看作求解n 个线性方程组,(1,2,)i i Ax e i n ==出了所有i x 之后,也即得到了矩阵X .而由AX E =可知,矩阵X 是A 的逆矩阵,即1X A -=.这样就求出了A 的逆矩阵.于是求逆矩阵的过程被化成了解线性方程组的过程.我们利用Mathematica 软件实现对求逆矩阵的可读性计算,对我们探讨线性方程组的解法有非常重要的意义.4.1 求逆矩阵可读性计算我们编写可读性程序如下: (*求矩阵的逆矩阵*)运行InvMatr[A_] := (If[! MatrixQ[A],Print["A is not a Matrix, We don't calculate the inverse of A."], Print["Matrix A =", MatrixForm[A], ", "]; If[Det[A] == 0,Print["Because of Det[A]=0, There isn't inverse Matrix of A."], n = Length[A];ident = IdentityMatrix[n]; AT = Transpose[A]; Temp = AT;Do[Temp = Append[Temp, ident[[i]]], {i, 1, n}]; AE = Transpose[Temp];Print["(A|E)=", MatrixForm[AE]]; Do[k = Infinity; r = j;Do[ If[Abs[AE[[i, j]]] < k && AE[[i, j]] != 0, k = AE[[i, j]]; r = i], {i, j, n}];If[r != j, TempMatrix = AE[[r]]; AE[[r]] = AE[[j]]; AE[[j]] = TempMatrix];Do[AE[[i]] = AE[[i]] - AE[[j]]*AE[[i, j]]/AE[[j, j]], {i, 1, j - 1}];Do[AE[[i]] = AE[[i]] - AE[[j]]*AE[[i, j]]/AE[[j, j]], {i, j + 1, n}]; AE[[j]] = AE[[j]]/AE[[j, j]];Print["-->", MatrixForm[AE]]; , {j, 1, n} ];B = Transpose[AE]; Temp = {B[[n + 1]]};Do[Temp = Append[Temp, B[[i]]], {i, n + 2, 2 n}];Print["The Inverse Matrix A of is ", Transpose[Temp] // MatrixForm, "."] ] ] )为说明本程序可用于任何对矩阵的逆的各种情形的求解处理,举例计算如下.例13:已知a1={2,3,1,4};a2={3,0,2,5};a3={4,3,8};a4={2,7,4,15};A={a1,a2,a3,a4},求A 的逆阵. 运行Clear; a1={2,3,1,4}; a2={3,0,2,5}; a3={4,3,8}; a4={2,7,4,15}; A={a1,a2,a3,a4}; InvMatr[A]得:A is not a Matrix, We don't calculate the inverse of A. 如果我们输入的A 不是矩阵,我们不可求A 的逆阵.例14:求矩阵A=⎪⎪⎪⎪⎪⎭⎫⎝⎛64401800154012202的逆矩阵. 运行Clear;a1={2,0,2,2}; a2={1,0,4,5}; a3={1,0,0,8}; a4={1,0,4,64}; A={a1,a2,a3,a4}; InvMatr[A]得:Matrix A =⎪⎪⎪⎪⎪⎭⎫ ⎝⎛64401800154012202 Because of Det[A]=0, There isn't inverse Matrix of A.此时,A 的行列式为0,A 没有可逆阵.例15:求矩阵A=⎪⎪⎪⎭⎫ ⎝⎛--242022233的逆矩阵.Clear;a1={3,3,2};a2={2,-2,0}; a3={-2,4,2}; A={a1,a2,a3}; InvMatr[A]运行结果为:例16:求矩阵A= ⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛3000023000023000023000023的逆矩阵Clear;a1={3,2,0,0,0};a2={0,3,2,0,0};a3={0,0,3,2,0};a4={0,0,0,3,2}; a5={0,0,0,0,3};A={a1,a2,a3,a4,a5}; InvMatr[A]通过上面的讨论我们可以看出该程序对任何一个矩阵型数据均能做出相应的处理,对输入的矩阵为可逆时,程序能计算出逆矩阵.进而我们通过Mathemtica 软件对解方程组也可实现可读性计算.4.2 线性方程组的可读性计算虽然Mathematica 软件中有解方程组的函数,但是,用此函数求解方程组存在不足之处:不能看到求解方程组的过程,也不能看到求解方程组的其他信息;输入方程组信息的形式繁琐且输出的内容不符合代数教材中通常的习惯,不能为其他程序提供更多的信息.而通过Mathematica 软件到底能不能对解线性方程组算法的实现将其过程展现出来呢?我们的答案是肯定的.只是在求解过程中,要运用到更多的输出形式函数.其程序相对较复杂.程序中较多的命令都是由简单命令复合而成,现对复合命名的构造过程进行描述.为了使实例17中的增广矩阵2-21-1121-42-2334-103-57812-11-2-1⎛⎫ ⎪ ⎪ ⎪⎪⎝⎭具有分块形式22111|214223|3410357|812112|1⎛⎫⎪⎪⎪ ⎪⎝⎭---------, 就需要在最后一列前插入符号“|”进行分隔,但Mathematica 中的矩阵是由行表构造而成,因此先用Transpose 命令对矩阵AUB 进行转置,并事先生成一个全由“|”为元素的一维表B0,一次性地把B0 插入到AUB 的转置矩阵的最后一行之前,然后再转置,就实现了我们希望的输出效果.完整的命令如下:B0=Table["|",{i,1,m}];MatrixForm[Transpose[Insert[Transpose[AUB],B0,n+1]]]Mathematica对表进行操作时是对表的每个元素进行同一操作,因此在对AUB 中找出的主元AUB(r,j)进行归一化处理时,可用下列命令实现对r行元素各除以AUB(r,j):AUB[[r]]=AUB[[r]]/AUB[[r,j]];为了把j 列除主元AUB(r,j)外的各元素全变成零,可对1 至r-1 行及r+1 至m 行分别进行第三类初等行变换.完整命令如下:Do[AUB[[i]]=AUB[[i]]-AUB[[r]]*AUB[[i,j]] ,{i,1,r-1}];Do[AUB[[i]]=AUB[[i]]-AUB[[r]]*AUB[[i,j]] ,{i,r+1,m}];处理解唯一时的输出时要解决的问题:AUB 的第n+1 列就是所求的解,但当m>n 时由于方程个数比未知量个数多,直接输出AUB(n+1)将出现多余的0,因此先把这些0 的位置存入表dele 中,再用Delete 命令把AUB(n+1)中多余的0 删除;为了把行向量以列的方式输出,由于Transpose 对一维表无效,因此把删除多余元素后的表放在{}中以增加其维数,最后形成的完整命令如下:dele=Table[{i},{i,n+1,m}];MatrixForm[Transpose[{Delete[Transpose[Simplify[AUB]][[n+1]], dele]}]]]下面是经过完整的求解线性方程组的可读性计算的完整程序:conslist = {C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13,C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25};varlist = {x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25}; MatrixPrint[A_] := (B0 = Table["|", {i, 1, m}];MatrixForm[Transpose[Insert[Transpose[AUB], B0, n + 1]]])PrintSolve[] := (ME = IdentityMatrix[S];basV = Complement[Table[i, {i, 1, n}], fuq];L = Length[basV];(*L 记录基变量的个数*)AUB = Transpose[AUB];eta = Table["", {S}];i = 0; eta[[i]] = AUB[[n + 1]];eta[[i]] = Table[eta[[i]][[j]], {j, 1, L}];Do[eta[[i]] = Insert[eta[[i]], 0, fuq[[k]]], {k, 1, S}];Do[eta[[i]] = -AUB[[fuq[[i]]]];eta[[i]] = Table[eta[[i]][[j]], {j, 1, L}];Do[eta[[i]] = Insert[eta[[i]], ME[[i, k]], fuq[[k]]], {k, 1,S}], {i, 1, S}];Ck = Table[conslist[[i]], {i, 1, n}];solv = MatrixForm[Transpose[{eta[[0]]}]];Do[solv = solv + MatrixForm[Transpose[{eta[[i]]}]]*Ck[[i]], {i, 1,n - r}];Print["X=", solv];)SolutionEquation[A_, B_] := (n = Length[A[[1]]]; m = Length[B];X = Table[varlist[[i]], {i, 1, n}]; AX = Dot[A, X];Print["求解下列线性方程组:"];Do[Print[AX[[i]], "=", B[[i]]], {i, 1, m}];Print["解:先对增广矩阵进行初等行变换:"];AUB = Transpose[Append[Transpose[A], B]];Print[MatrixPrint[Simplify[AUB]]];r = 1; fuq = {};(*fuq 存放自由未知量的下标*)Do[k = Infinity; flag = 0;(*查找列主元素的位置*)Do[If[AUB[[i, j]] != 0, flag = 1], {i, r, m}];If[flag == 0, fuq = Append[fuq, j]; Continue,Do[If[Abs[AUB[[i, j]]] < k && AUB[[i, j]] != 0, k = AUB[[i, j]]; t = i], {i, r, m}];If[t != r, TempMatrix = AUB[[t]];AUB[[t]] = AUB[[r]]; AUB[[r]] = TempMatrix];AUB[[r]] = AUB[[r]]/AUB[[r, j]];Do[AUB[[i]] = AUB[[i]] - AUB[[r]]*AUB[[i, j]], {i, 1, r - 1}];Do[AUB[[i]] = AUB[[i]] - AUB[[r]]*AUB[[i, j]], {i, r + 1, m}];Print["-->", MatrixPrint[Simplify[AUB]]];r = r + 1];, {j, 1, n}];r = r - 1;S = n - r;(*基础解系中解的个数*)Print[" 增广矩阵的秩r=", r, ", 未知量个数 n=", n, ";"];If[r == n, Print["结论:因为增广矩阵的秩等于未知量个数,方程组有唯一解:X=", dele = Table[{i}, {i, n + 1, m}];MatrixForm[Transpose[{Delete[Transpose[Simplify[AUB]][[n + 1]], dele]}]]], If[r == m, Print["结论:因为增广矩阵的秩等于方程个数且小于未知量个数,方程组有无穷多组解:"];PrintSolve[],If[AUB[[r + 1, n + 1]] != 0, Print["因为增广矩阵的秩小于未知量个数,但 dr+1!= 0,所给方程组无解"], Print["因为增广矩阵的秩小于未知量个数, 且dr+1=0,方程组有无穷多组解:"];PrintSolve[];];];];)说明:本程序可用于变量在25个内的任何线性方程组的求解,如果变量超过25个,只需要增加程序中conslist 与varlist 分量个数即可.例17:求解方程组⎪⎪⎩⎪⎪⎨⎧=-+-+=+-+-=+-+-=+-+-2342310634852232533354321543215432154321x x x x x x x x x x x x x x x x x x x x 在Mathematica 输入并运行:A={{3,-3,1,-1,1},{1,-5,2,-3,2},{5,-8,4,-3,6},{1,3,-2,4,-3}};b={3,2,10,2};SolutionEquation[A,b]即得到如下求解结果,其中所有内容全部由程序自动输出得到. 求解下列线性方程组: 3x1-3x2+x3-x4+x5=3 x1-5x2+2x3-3x4+2x5=2 5x1-8x2+4x3-3x4+6x5=10 x1+3x2−2x3+4x4−3x5=2例18:求解方程组⎪⎪⎩⎪⎪⎨⎧-=+-++=-++--=+-++=+-++1423412231245354321543215432154321x x x x x x x x x x x x x x x x x x x x 在Mathematica 输入并运行:A={{1,3,5,-4,2},{1,3,2,-2,1},{1,-4,1,1,-1},{1,2,1,-4,1}};b={1,-1,3,-1}; SolutionEquation[A,b]即得到如下求解结果,其中所有内容全部由程序自动输出得到.例19:求解线性方程组⎪⎪⎩⎪⎪⎨⎧-=+-=++=--=-+332523233231321321321x x x x x x x x x x x a1={1,2,-1};a2={1,-3,-1};a3={3,1,2};a4={-2,0,3};A={a1,a2,a3,a4};B={3,2,5,-3}; SolutionEquation[A,B]参考文献[1] 北京大学数学系几何与代数教研室前代数小组编.高等代数[M].北京:高等教育出版社,2003[2] 王绍恒,王艺静.利用Mathematica软件实现解线性方程组的可读性计算[J].重庆三峡学院学报,2009(3),25(3):143-146[3] 姜友谊,应宏,王绍恒.化实对称矩阵为对角矩阵的计算机算法[J].西南民族学院学报,2002,28(4):428-432[4] 张禾瑞,郝鈵新,高等代数(第五版)[M].北京:高等教育出版社,2007[5] 刘水强,王绍恒.利用初等行变换解线性矩阵方程[J].重庆三峡学院学报,2001,17(5):87-89[6] 徐士良.计算机常用算法[M].北京:清华大学出版社,2000.8.[7] 徐安农,科学计算引论:基于Mathematica的数值分析[M].北京:机械工业出版社,2010.8[8] 冯天祥,数值计算方法理论与实践研究[M].成都:西南交通大学出版社,2005[9] 阳明盛,林建华.Mathematica基础及数学软件[M],大连:大连理工大学出版社,2003[10][美] Rchard J. Gaylord,Samuel N.Kamin ,Paul R. Wellin著,耿勇译.数学软件Mathematica 入门[M].高等教育出版社,2001[11][美]D.尤金.Mathematica使用指南[M].邓建松,彭冉冉,译.北京:科学出版社,2002.。

数学软件四大家族——Maple、MATLAB、MathCAD和Mathematica优缺点比较

数学软件四大家族——Maple、MATLAB、MathCAD和Mathematica优缺点比较

数学软件四⼤家族——Maple、MATLAB、MathCAD和Mathematica优缺点⽐较⽬录数学软件四⼤家族——Maple、MATLAB、MathCAD和Mathematica优缺点⽐较2016-11-10 20:03 ⽬前在科技和⼯程界上⽐较流⾏和著名的数学软件主要有四个,分别是Maple、MATLAB、MathCAD和Mathematica。

它们在各⾃针对的⽬标都有不同的特⾊。

Maple V 系统 Maple V是由Waterloo⼤学开发的数学系统软件,它不但具有精确的数值处理功能,⽽且具有⽆以伦⽐的符号计算功能。

Maple V的符号计算能⼒还是MathCAD和MATLAB等软件的符号处理的核⼼。

Maple提供了2000余种数学函数,涉及范围包括:普通数学、⾼等数学、线性代数、数论、离散数学、图形学。

它还提供了⼀套内置的编程语⾔,⽤户可以开发⾃⼰的应⽤程序,⽽且Maple⾃⾝的2000多种函数,基本上是⽤此语⾔开发的。

Maple采⽤字符⾏输⼊⽅式,输⼊时需要按照规定的格式输⼊,虽然与⼀般常见的数学格式不同,但灵活⽅便,也很容易理解。

输出则可以选择字符⽅式和图形⽅式,产⽣的图形结果可以很⽅便地剪贴到Windows应⽤程序内。

5个星的数学软件,纯粹数学的巨⼈,如果想做数学和应⽤数学的能⼒(数值的除外)其是最好的选择。

但是此软件⼆次开发能⼒不好,仅把软件的发展⽬标放在数学上,不想向其它领域发展。

Maple⾃带的语⾔较容易理解,就像⽤英语说话⼀样。

优势:符号计算⾮常强⼤,和Mathematica相⽐各有千秋许多多项式操作⽐Mathematica更快⼀些符号积分Maple也有速度优势(特别是不定积分),不过有时返回的结果没有Mathematica给出的更严谨、鲁棒性好,能算的积分类型没有Mathematica多Maple的“适应性”更好,有的问题Mathematica需要⼀定的预处理才能算的更快,得出满意的结果Maple更擅长(偏)微分⽅程,(其实Maple和Mathematica都能解⼀些对⽅解不了的⼀些特殊微分⽅程)可以带步骤求解⼀些问题,Mathematica需要第三⽅的Package或借助WolframAlpha上⼿较快,⼀些常见的操作⽆需命令,通过右键菜单就能完成 缺点:界⾯有点卡(基于Java swing),经典界⾯流畅但是很⼟⾃带的代数⽅⾯的package⽐较丰富化简能⼒,不等式求解,逻辑系统较Mathematica逊⾊⼀些数值计算总体上⽐Matlab和Mathematica差⼀些⾼精度和⼤数计算⽅⾯强于Matlab弱于Mathematica统计⽅⾯有些薄弱MATLAB 系统 MATLAB原是矩阵实验室(Matrix Laboratory),在70年代⽤来提供Linpack和Eispack软件包的接⼝程序,采⽤C语⾔编写。

常用数学软件教程 044 第4章 Mathematica使用基础 第4节 线性代数

常用数学软件教程  044 第4章 Mathematica使用基础 第4节 线性代数

第4章 Mathematica 使用基础4.4 线性代数目录索引4.4 线性代数 (3)4.4.1 矩阵定义 (3)Array[f ,n]:定义n 维向量f (3)Array[f ,{n 1,n 2,…}]:定义n 1×n 2×…阶矩阵f........................................... 3 Array[f ,{n 1,n 2,…},{r 1,r 2,…}]:定义n 1×n 2×…阶矩阵f ,其起始下标为r 1,r 2,… .......................................................................................................... 3 IdentityMatrix[n]:n 阶单位矩阵.................................................................. 3 DiagonalMatrix[list]:对角线为list 中元素的对角矩阵 .................................. 3 DiagonalMatrix[list ,k]:第k 条副对角线上为list 中元素,其余元素为0的矩阵 3SparseArray[{pos 1,pos 2,…}->{val 1,val 2,…}]: CostantArray[f ,{n 1,n 2,…}]:在位置pos i 上元素值为val i 的稀疏矩阵............................................................... 4 SparseArray[{pos 1,pos 2,…}->{val 1,val 2,…}]: CostantArray[f ,{n 1,n 2,…}]:每一个元素都等于常数c 的n 1×n 2×…阶矩阵f ..................................................... 4 HilbertMatrix[n]:n×n 阶希尔伯特矩阵,元素等于1/(i+j-1) .......................... 4 HankelMatrix[n]:n×n 阶汉克尔矩阵,第一行和第一列元素为1、2、…、n . 4 HankelMatrix[list]:以list 为第一行和第一列元素的汉克尔矩阵 ................... 4 ToeplitzMatrix[n]:n×n 阶特普利茨矩阵,第一行和第一列元素为1、2、…、n 4ToeplitzMatrix[list]:以list 为第一行和第一列元素的特普利茨矩阵 .............. 5 ※注:在Mathematica5.0中,要先调用线性代数程序包...................................... 5 A[[i ,j]]或a[[i ,j]]:A=Array[a ,{m ,n}]的第i 行第j 列元素 ..................... 7 A[[i]]:A 的第i 行元素 ............................................................................... 7 A[[All ,j]]:A 的第j 列元素 ....................................................................... 7 A[[{i1,i2,...,ip},{j1,j2,...,jq}]]:由第i1,i2,...,ip 行和第j1,j2,...,jq 列构成的子矩阵.............................................................................................. 7 Take[A ,{i0,i1},{j0,j1}]:由第i0,i1行到第j0,j1列构成的子矩阵 .... 7 Tr[A ,List]:由列表给出矩阵的对角线元素................................................. 7 4.4.2 矩阵运算 .. (7)A+B :矩阵A 、B 相加 ................................................................................ 8 c*A :常数c 乘以矩阵A.............................................................................. 8 A.B :矩阵A 、B 相乘,即矩阵的内积 (8)A*B :矩阵A 、B 的对应元素相乘 ............................................................... 8 A^n :矩阵A 的每个元素都进行n 次幂运算 (8)Dot[a ,b]:向量a 与b 的内积.cos a b ab θ=(即向量a 的长度乘以向量b 在a 上的投影的长度),θ为向量a 与b 的夹角 (9)Cross[a,b]:向量a与b的外积sin⨯=(其长度等于以向量a、a b a bθb为边的平行四边形的面积),θ为向量a与b的夹角 (9)Transpose[m]:计算矩阵m的转置 (9)ConjugateTranspose[m]:计算m的转置共轭阵 (9)Inverse[m]:求m的逆矩阵 (9)Det[m]:求m的行列式 (9)Minors[m]:求方阵m的子式,其中第{i,j}个元素是去掉第n-i+1列和第n-j+1行之后的行列式的值 (9)Minors[m,k]:求m的所有k阶子式 (9)Tr[m]:求m的迹 (9)MatrixRank[m]:求m的秩 (9)MatrixPower[m,n]:求m的n次幂 (10)MatrixExp[m]:求e m (10)Normalaze[v]:将向量v单位化 (11)Orthogonalize[{v1,v2,...}]:将向量组v1,v2,...单位化 . (11)GramSchmidt e[{v1,v2,...}]:将向量组v1,v2,...单位化(Mathematica5.0中) (11)Norm[expr]:求向量或矩阵的范数 (12)Norm[expr,p]:求p的范数 (12)Eigenvalues[m]:求方阵m的特征值 (12)Eigenvalues[m,k]:给出方阵m的前k个特征值 (12)Eigenvectors[m]:求方阵m的特征向量 (12)Eigenvectors[m,k]:给出方阵m的前k个特征向量 (12)Eigensystem[m]:给出方阵m的(特征值、特征向量) (12)Eigensystem[m,k]:给出方阵m的前k个(特征值、特征向量) (12)LinearSolve[m,b]:求mx=b的一个解,若m非奇异,得唯一解;若m奇异,的方程组的一个特解 (13)NullSpace[m]:求mx=O的基础解系 (13)LUDecomposition[m]:对方阵m进行LU分解 (14)CholeskyDecomposition[m]:将对称正定矩阵m做楚列斯基分解 (14)QRDecomposition[m]:给出m的QR分解,结果存放为{q,r},q为正交方阵,r为上三角阵 (14)JordanDecomposition[m]:给出方阵m的若尔当分解,结果存放为{s,j},s为过渡矩阵,j为若尔当标准型 (14)N[expr]:给出表达式expr的近似值,默认有效数字为6位 (15)N[expr,n]:给出expr的近似值,有效数字为n位 (15)Expr//N:给出expr的近似值,默认有效数字为6位 (15)Map[f,expr]:对expr中第1层次的元素进行f操作 (15)4.4 线性代数相信大家在学习线性代数时,对于求一个较大矩阵的逆、特征值或者将其化为标准型,都会为其繁冗的符号运算头痛不已。

应用Mathematica软件促进/线性代数和矩阵论教学改革

应用Mathematica软件促进/线性代数和矩阵论教学改革
的 一 门公 共 基 础 必 修 课 。 主要 讲 授行 列 式、 矩阵、 线 性 方 程 组、 线性 空间、 二 次 型 等 内容 : 矩 阵 论 是 为 工 科 研 究 生 开 设 的 一 门公 共 学 位 课 。 主要讲授 线性 空 间与线性 变换 、 相 似 标 准形 、 矩 阵分 解 、 矩阵分析 、 矩 阵 函 数 等 内容 。矩 阵 论 起 初 是 线性代 数的一个分 支 , 但 其 后 由于 陆 续在 图 论 、 代数、 组 合 数 学和 统 计 上 得 到 应 用 . 逐 渐 发展 成 为 一 门独 立 的 学科 。 课 程 教 学 中 出现 的 问题 矩 阵论是 一 门理论严 谨 、 内容 抽 象 的 课 程 , 在 矩 阵 论 课 程教 学 中 。 从 线 性 代 数 中设 计 到 的 基 础 知 识 出发 , 增 加 了很 多 新 的 内容 , 而且 。 很 多理 论 从 实数 域 推 广 到 了复 数 域 。 在 授 课中。 我 们 发 现 在 一 些 涉 及 到 线 性 代 数 的 基 础 知 识 的 理 解 和
程 序 包 中有 对 向量 单 位 化 和 对 一 组 向 量 正 交化 的 函 数 , 其中
G r a mS c h mi d t 函 数 是 对 一 组 线 性 无 关组 进 行 施 密特 正 交 单 位
化 。
线 性 空 间 是 具 有 加 法 和 数 量 乘 法 两 个 线 性 运 算 的 非 空 集合 。 线 性 空 间也 叫 向量 空 间 。 线 性 空 间 中 的 元 素 都 称 为 向 量 。 学生 对 数 组 向 量 空 间 的 相 关 内容 基 本 理 解 , 对 其 他 类 型
知识 。

( 2 ) 施 密 特 正 交化 部 分 线 性 代 数 课 程 中 .很 多教 师 直 接 给 出 正 交 化 过 程 的 公 式, 或者设 某一 向量和前 面 向量正 交 。 通 过 内积 为 零 反 推 出 公 式 中 系数 , 再 通 过 简 单 的 算 例 让 学 生 练 习使 用公 式 。 这 种 做 法 学 生 不 理 解 正 交 化 的 内涵 , 对公 式只 能死记硬 背 . 导 致 矩 阵 论 课 程 开 设 时 学 生 已 经 忘 记 了正 交 化 的概 念 和 计 算 方 法。建议讲 清计算每 个正交化的向量 时 , 是 在 所 有 前 面 的 向 量 组 成 的子 空 间 中构 造 下 一 个 正 交 的 向 量 . 前 三 个 正 交化 的

mathmetica注释

mathmetica注释

mathmetica注释Mathematica是一款强大的数学计算软件,由Wolfram Research公司开发。

它提供了广泛的数学功能,包括符号计算、数值计算、绘图、矩阵计算、微积分等。

它具有友好的用户界面和高效的算法,使得用户可以更加方便地进行数学计算和数据分析。

Mathematica的符号计算功能使得用户可以进行高精度的数学运算。

它能够处理复杂的代数表达式,对函数进行求导和积分,求解代数方程和微分方程等。

这些功能使得Mathematica成为研究数学、物理、工程以及其他领域的理论和实验研究的重要工具。

使用Mathematica进行符号计算可以大大提高计算的精度和效率,同时也方便了用户对计算过程的控制和理解。

数值计算是Mathematica的另一个重要功能。

它可以进行高精度的浮点数计算,并提供了丰富的数值计算函数和算法,如求解非线性方程组、数值积分、数值微分等。

Mathematica还支持数值优化和数值拟合等功能,用户可以根据需要选择合适的算法进行计算。

Mathematica还提供了强大的绘图功能,可以绘制二维和三维图形。

用户可以使用Mathematica绘制函数图像、曲线、曲面等,并可以对图形进行编辑和精确控制。

Mathematica还支持数据可视化,用户可以直观地显示和分析数据,进行数据挖掘和统计分析等。

矩阵计算是Mathematica的另一个重要功能之一。

Mathematica提供了丰富的矩阵和线性代数相关函数,可以进行矩阵运算、矩阵分解、特征值计算等。

Mathematica还支持稀疏矩阵计算和矩阵可视化,方便用户对矩阵进行分析和操作。

Mathematica是一个交互式的计算环境,用户可以通过界面和输入框进行计算和操作。

它还支持脚本编程和命令行操作,用户可以根据需要编写和执行脚本,实现自动化和批量计算。

Mathematica还支持多种数据格式的导入和导出,用户可以方便地与其他软件和数据进行交互。

mathematica中列向量乘以行向量 -回复

mathematica中列向量乘以行向量 -回复

mathematica中列向量乘以行向量-回复题目: Mathematica中列向量乘以行向量导言:在研究线性代数和矩阵运算时,我们经常会遇到列向量和行向量的乘法运算。

在Mathematica中,我们可以利用内置的函数和操作符轻松地进行这种运算。

本文将详细介绍在Mathematica中如何实现列向量乘以行向量操作,并提供一些示例以帮助您更好地理解。

1. 创建列向量和行向量在Mathematica中,我们可以使用以下语法来创建列向量和行向量:- 列向量: 利用Column和List函数的组合来创建一个n行1列的列向量。

例如,若要创建一个3行1列的列向量`v`,可以使用以下代码:v = Column[{1, 2, 3}]- 行向量: 利用MatrixForm和Row函数的组合来创建一个1行n列的行向量。

例如,若要创建一个1行4列的行向量`u`,可以使用以下代码:u = MatrixForm[Row[{1, 2, 3, 4}]]2. 列向量乘以行向量为了实现列向量`v`乘以行向量`u`的操作,我们可以使用Dot函数或.操作符。

这两种方式都可以获取两个向量的点积(内积)。

语法如下:- 使用Dot函数:`Dot[v, u]`- 使用.操作符:`v.u`其中,`v`代表列向量,`u`代表行向量。

3. 示例现在,让我们通过几个示例来演示如何在Mathematica中实现列向量乘以行向量的操作。

示例1: 列向量乘以行向量假设我们有一个列向量v和一个行向量u,分别为:v = Column[{1, 2, 3}]u = MatrixForm[Row[{4, 5, 6}]]要计算v乘以u的结果,我们可以使用以下Mathematica代码:result = v.u运行此代码后,Mathematica将计算结果存储在result变量中,并在输出中显示结果。

示例2: 矩阵乘以向量我们也可以将列向量和行向量视为矩阵的一部分,并通过矩阵乘法来实现列向量乘以行向量的操作。

用软件Mathematica 求解线性代数

用软件Mathematica 求解线性代数
注意:只有方阵才可以求其逆矩阵,所以这里的矩阵A 必须是方阵, 注意:只有方阵才可以求其逆矩阵,所以这里的矩阵 必须是方阵, 并且为了使该矩阵可逆,还须保证该矩阵的行列式不为零。 并且为了使该矩阵可逆,还须保证该矩阵的行列式不为零。
求解逆矩阵的办法: ) 求解逆矩阵的办法:1)利用伴随矩阵
1 * A = A A
例:设
3 2 0 5 0 3 −2 3 6 −1 A= 2 0 1 5 −3 1 6 −4 −1 4
化简A为行最简形矩阵并求秩。 化简A为行最简形矩阵并求秩。 LOGO
以矩阵形式显示 行最简型矩阵
有三个非零行,秩为3 有三个非零行,秩为3
求矩阵的秩
YOUR SITE HERE
MatrixPower[A,n] 求矩阵A的n次幂 求矩阵A LinearSolve[A,b] 求线性方程组的解
YOUR SITE HERE
学习资料: 学习资料:
学习网站 中文电子书索取地址 lg8124@ 书籍
LOGO
YOUR SITE HERE
向量的相关运算 求解线性方程thematica 的功能
LOGO
• 数值与符号运算
-
能够快速准确的进行所有的数学运算
• 绘图功能强大
创建任何函数的二维及三维图像 - 创建任何函数的二维及三维图像
• 编制程序;处理声音、图像;系统模拟仿真 编制程序;处理声音、图像; 等
分号表示,系统执 分号表示, 行计算, 行计算,但不再显 示计算结果。 示计算结果。
LOGO
矩阵 格式
软件按列表数据 软件按列表数据计算 列表数据计算 ,反馈给用户也是列 表数据。 表数据。
YOUR SITE HERE

利用Mathematica求解线性系统

利用Mathematica求解线性系统
表1
函数名称 LinearS olve[ m, b] N ullS pace[ m] RowR educe[ m]
求解线性系统的函数
作 用
求矩阵方程 m x = b 的解 求矩阵方程 m x = 0 的解 通过矩阵的初等变换 , 得到矩阵 m 的简化形式
我们下面首先定义一个矩阵 m , 利用它生成一个方程组, 然后使用 Mathem at ica 中的函数 Solve 求解该方程组 , 程序及其输出结果如下 : I n[ 1 ] : = m = { { 1, 5 } , { 2 , 1} } ; m . { x , y } = { a, b} ;
第4期
李汝修等: 利用 M at hemat ica 求解线性系统 1 1 2 - 3 1 - 1 1 4 , b= 5 - 2 - 2 ,D= | A| .
71
解法 1
利用克莱姆法则, A =
1 2
- 1 - 5
3 1 2 11 0 D1 D2 D3 D4 x 1= D , x 2= D , x 3= D , x 4= D . I n[ 1 ] : = A = { { 1, 1, 1, 1} , { 1, 2, - 1, 4} , { 2, - 3, - 1, - 5} , { 3, 1 , 2, 11} } ; b = { 5 , - 2 , - 2 , 0} ; A 0 = T ranspose [ A ] ; A 1 = ReplacePart[ A 0, b , 1] ; A 2 = ReplacePart[ A 0, b , 2] ; A 3 = ReplacePart[ A 0, b , 3] ; A 4 = ReplacePart[ A 0, b , 4] ; X = { Det [ A 1 ] / Det [ A ] , Det [ A 2 ] / Det [ A ] , Det [ A 3 ] / Det [ A ] , Det [ A 4 ] / Det [ A ] } out [ 1] = { 1 , 2, 3 , - 1} 其中, A 是方程组的系数矩阵 , b 是方程右端的常数项组成的向量 , A 0 是 A 的转置矩阵 , A 1、 A 2、 A 3、 A 4 分别是矩阵 A 0 中第 i 行用 b 代替后所得到的矩阵 ( 即 A 中的第 i 列用 b 的 转置代替后所得到的矩阵的转置) , x 是解向量. - 1 解法 2 利用逆矩阵. D = | A | 0, x = A b . I n[ 2 ] : = Inverse [ A ] . b out [ 2] = { 1 , 2, 3 , - 1} 其中 , Inverse [ A ] 是矩阵 A 的逆. 解法 3 利用函数 Solve . I n[ 3 ] : = Solve [ { x 1 + x 2 + x 3 + x 4 = 5, x 1 + 2 x 2 - x 3 + 4 x 4 = - 2 , 2 x 1 - 3 x 2 - x 3 - 5 x 4 = - 2, 3 x 1 + x 2 + 2 x 3 + 11 x 4 = 0} , { x 1 , x 2 , x 3 , x 4 } ] out [ 3] = { { x 1 1 , x 2 2, x 3 3 , x 4 - 1} } 值得注意的是在 M at hemat ica 系统中方程组的表示方法, 实际上方程组被表示成了一个 由方程构成的表 , 方程中的等号用双等号表示, 上例中方程组的变量用 x 1、 x 2、 x 3、 x 4 来表 示, 它们是由字母开头的字母、 数字组成的符号串 , 它们是一个整体. 解法 4 利用 L U 分解 . 首先对矩阵 1 1 1 1 1 2 - 1 4 A= 2 - 3 - 1 - 5 3 1 2 11 进行 L U 分解 , 再利用函数 LU BackSubst itut ion 就可得到方程的解: A x= b I n[ 4 ] : = A = { { 1, 1, 1, 1} , { 1, 2, - 1, 4} , { 2, - 3, - 1, - 5} , { 3, 1 , 2, 11} } ; b = { 5, - 2, - 2, 0} ; s = L UDecomposit ion [ A ] ;

mathematica 行向量 列向量 矩阵

mathematica 行向量 列向量 矩阵

mathematica 行向量列向量矩阵Mathematica是一款强大的数学软件,广泛应用于科学计算、数据分析等领域。

本文将重点介绍Mathematica中的行向量、列向量以及矩阵的相关概念和操作。

一、Mathematica基础概念介绍Mathematica中的向量和矩阵是线性代数的基本概念。

向量是具有相同类型的元素的序列,可以表示为一个列表。

矩阵是具有相同类型的元素的二维数组。

在Mathematica中,行向量和列向量分别表示为一维列表和二维列表。

二、行向量与列向量的定义及应用1.行向量:行向量是一个长度为n的列向量,其中n表示向量中元素的个数。

在Mathematica中,用方括号[]表示行向量,如下所示:```{a1, a2, a3, ..., an}```2.列向量:列向量是一个长度为n的行向量,其中n表示向量中元素的个数。

在Mathematica中,用圆括号()表示列向量,如下所示:```(a1, a2, a3, ..., an)```3.应用:行向量和列向量在Mathematica中有很多应用,如线性方程组求解、矩阵运算等。

三、矩阵的创建与操作1.创建矩阵:在Mathematica中,可以使用以下方法创建矩阵:```Matrix[{a1, a2, a3}, {b1, b2, b3}]```其中,{a1, a2, a3}和{b1, b2, b3}分别表示矩阵的行向量和列向量。

2.矩阵操作:矩阵在Mathematica中可以进行加法、减法、乘法等基本操作。

以下为一个例子:```Matrix[{1, 2, 3}, {4, 5, 6}] + Matrix[{7, 8, 9}, {10, 11, 12}]```3.矩阵转置:使用Transpose函数可以实现矩阵的转置,如下所示:```Transpose[Matrix[{1, 2, 3}, {4, 5, 6}]```四、实例演示与实践以下为一个简单的实例,演示如何使用Mathematica解决线性方程组问题:```方程组:a * x +b * y = 1c * x +d * y = 2已知系数矩阵:{a, b, c}{d, e, f}求解得到的解为:{x, y}```使用Mathematica求解:```eqns = {a * x + b * y == 1, c * x + d * y == 2};coefficients = {a, b, c, d, e, f};sol = Solve[eqns, x, y];```通过以上实例,我们可以看出Mathematica在处理线性方程组问题方面的强大功能。

应用Mathematica软件促进线性代数和矩阵论教学改革

应用Mathematica软件促进线性代数和矩阵论教学改革

应用Mathematica软件促进线性代数和矩阵论教学改革【摘要】本文从矩阵论课程目前存在的问题出发,通过分析现有问题,提出线性代数课程中一些教学方法的改革,并提出合理使用mathematica数学软件促进两门课程的教学。

【关键词】教学改革矩阵论线性代数 mathematica软件【中图分类号】g42 【文献标识码】a 【文章编号】2095-3089(2013)03-0120-01矩阵在现代数学中可以认为是非常重要的工具,矩阵理论在计算科学、控制理论、信息科学与技术、管理科学等问题中都发挥着举足轻重的作用。

线性代数和矩阵论是研究矩阵理论的两门课程,其中,线性代数是为理工科本科学生开设的一门公共基础必修课,主要讲授行列式、矩阵、线性方程组、线性空间、二次型等内容;矩阵论是为工科研究生开设的一门公共学位课,主要讲授线性空间与线性变换、相似标准形、矩阵分解、矩阵分析、矩阵函数等内容。

矩阵论起初是线性代数的一个分支,但其后由于陆续在图论、代数、组合数学和统计上得到应用,逐渐发展成为一门独立的学科。

一、课程教学中出现的问题矩阵论是一门理论严谨、内容抽象的课程,在矩阵论课程教学中,从线性代数中设计到的基础知识出发,增加了很多新的内容,而且,很多理论从实数域推广到了复数域。

在授课中,我们发现在一些涉及到线性代数的基础知识的理解和计算中还存在着一些问题,影响了学生掌握新的知识。

(1)线性空间内容的理解线性空间是具有加法和数量乘法两个线性运算的非空集合,线性空间也叫向量空间,线性空间中的元素都称为向量。

学生对数组向量空间的相关内容基本理解,对其他类型的线性空间理解不好。

(2)矩阵正交三角分解的理解在矩阵正交三角分解这部分内容中,一个实数域上的满秩方阵可以分解为正交矩阵与正线上三角矩阵的乘积,在分解过程中需要把线性无关向量组进行施密特正交化,单位化,学生在正交化过程中出错较多。

(3)内积空间中向量长度的理解在定义了内积运算的线性空间中,向量的长度的平方定义为向量与自身的内积,学生对特定空间的内积概念与作用理解不好,经常将数组向量空间中的计算用到一般的内积空间中,导致在后面使用长度的计算中经常使用的是欧氏空间中向量的内积的计算公式。

mathematica简介

mathematica简介

In[1]:=p1=1+x;p2=1-x^2;p1+p2
注意:从 Out[5]和 Out[6]可以看到,乘法 和除法其实什么也没做,需要用前面介绍的化 简函数将结果化简。
1 x2 Out[6]= 1 x
PolynomialQuotient[p1,p2,x]
求 x 的多项式 p1 被 p2 除的商
使用等号给变量赋值,具体格式如下:
x =Value x = y =Value {x,y,…}={Value1,Value2,…} 给 x 赋值。 同时给 x,y 赋相同的值。 同时给 x,y,„赋不同的值。
为了避免隐蔽的错误,应该及时清除不再使用的变量,这时可以 用 “Clear” 命令, 格式为 “Clear[变量名]” ; 或者可以用 “ x= .” 清除变量 x 的值。
每次运行结束后, Mathematica 会自动在输入的式子前面加上 “In[n]:=” (n 表示输入命令的序列号) ,在输出的答案前面加上 “Out[n]=” (n 表示输出结果的序列号) ,以便分清输入和输出并 自动加上编号。可以用“%”表示前一个输出的内容, “%%” 表 示倒数第 2 个输出的内容,依此类推, “% n”表示第 n 个(即 Out[n])输出的内容。也就是说 Mathematica 输出的内容被系统 记忆,它们可以像其它变量一样在后面的计算中引用。
(1)函数名的首字符用大写,后面的字符一般用小写,当函数名 分成几段时, 每段的首字符应大写, 函数名中不能含有空格。
(2)参数用方括号括起来,不能用圆括号,Mathematica 认为圆 括号表示相乘。
三、基本代数运算
下面介绍一些实现基本代数运算的函数,用于变换数学表达式、解 方程和解不等式。Mathematica 具有强大的符号运算功能,下面列 举的函数均可代入具有字母的表达式进行计算,得到精确解。

mathematica 求若尔当标准型

mathematica 求若尔当标准型

mathematica 求若尔当标准型若尔当标准型(Jordan Canonical Form)是线性代数中的一个重要概念,用于描述一个线性变换在一组合适的基下的矩阵形式。

Mathematica是一种强大的数学软件,可以用来计算和处理线性代数相关的问题,包括求解若尔当标准型。

下面是一个详细的步骤,使用Mathematica求解若尔当标准型的示例:1. 首先,打开Mathematica软件并创建一个新的笔记本文件。

2. 定义一个矩阵A,表示线性变换的矩阵形式。

可以使用MatrixForm函数将矩阵以可视化的方式显示出来。

例如,可以使用以下代码定义一个3x3的矩阵A:A = {{2, 1, 0}, {0, 2, 0}, {0, 0, 3}};MatrixForm[A]3. 使用JordanDecomposition函数对矩阵A进行若尔当标准型的分解。

该函数的输入参数是一个矩阵,返回值是一个包含两个元素的列表,第一个元素是若尔当标准型矩阵,第二个元素是相应的变换矩阵。

可以使用以下代码进行计算:{J, P} = JordanDecomposition[A];4. 使用MatrixForm函数将计算得到的若尔当标准型矩阵J和变换矩阵P以可视化的方式显示出来。

例如,可以使用以下代码显示J和P:MatrixForm[J]MatrixForm[P]5. 运行代码,Mathematica将计算并显示矩阵A的若尔当标准型矩阵J和变换矩阵P。

以上是使用Mathematica求解若尔当标准型的基本步骤。

需要注意的是,Mathematica还提供了许多其他函数和工具,用于处理线性代数问题,如求解特征值和特征向量等。

可以根据具体的问题和需求,灵活运用这些功能来完成更复杂的计算任务。

mathematica特征值

mathematica特征值

mathematica特征值Mathematica是一款强大的计算机代数系统,它具有众多的功能和特点,其中之一就是能够计算矩阵的特征值。

特征值是线性代数中的一个重要概念,它可以帮助我们理解矩阵的性质和变换。

在本文中,我们将逐步讨论Mathematica中计算特征值的过程和方法。

特征值是矩阵的一个数值特征,它与矩阵的特征向量相关联。

一个n阶矩阵A的特征值可以通过求解方程det(A-λI)=0来获得,其中det表示行列式,I是单位矩阵,λ是特征值。

一旦我们求得了特征值,就可以进一步求解对应的特征向量。

首先,启动Mathematica并打开一个新的工作表。

我们可以使用Eigensystem函数来计算矩阵的特征值和特征向量。

我们首先定义一个矩阵,然后使用Eigensystem函数计算其特征值和特征向量。

以下是一个例子:matrix = {{1, 2}, {3, 4}};Eigensystem[matrix]在这个例子中,我们定义了一个2阶矩阵matrix。

然后,我们使用Eigensystem函数计算了矩阵的特征值和特征向量。

运行这段代码后,Mathematica将返回一个列表,其中包含了特征值和特征向量。

特征值以列表的形式呈现,而特征向量则以列表的形式嵌套在特征值列表中。

接下来,我们可以进一步处理特征值和特征向量,以便更好地理解矩阵的性质。

我们可以按照特征值的大小对特征向量进行排序。

以下是一个对特征向量排序的例子:{eigenvalues, eigenvectors} = Eigensystem[matrix]; sortedEigenvectors = SortBy[Transpose[{eigenvalues, eigenvectors}], First][[All, 2]]在这个例子中,我们首先使用Eigensystem函数计算矩阵的特征值和特征向量,并将它们分别保存在eigenvalues和eigenvectors变量中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二篇Mathematica软件线性代数实验第1章矩阵与向量1.1实验目的熟悉矩阵与向量的概念,理解向量的线性运算、数量积运算。

理解矩阵的基本运算、矩阵与向量的运算及行列式运算。

熟悉Mathematia数学软件做向量运算、矩阵基本运算和计算行列式的命令。

1.2实验准备1.2.1数学概念1.矩阵2.向量3.向量的线性运算4.向量的数量积运5.线性运算6.矩阵的基本运算7.转置矩阵8.逆矩阵9.单位矩阵10.对角矩阵11.行列式12.Cramer法则1.2.2数学软件命令1. a={a1,a2,…,an}功能: 定义一个一维向量{a1,a2,…,an},这里a1,a2,…,an是数或字母。

2. a=Table[f[j],{j,n}]功能: 定义一个分量可以用f[j]计算的一维向量{ f[1], f[2],…, f[2]}。

3. a={{a11,a12,…,a1n},{a21,a22,…,a2n},…,{am1,am2,…,amn}}功能: 定义一个矩阵:4. a=Table[f[i,j],{i,m},{j,n}]功能: 定义一个分量可以用f[i,j]计算的矩阵,其中f是关于i和j的函数,给出矩阵在第i行第j列的元素值。

5. MatrixForm[a]功能:把a按通常的矩阵或向量形式输出,这里a是Mathematica中的矩阵或向量。

6. DiagonalMatrix[list]功能:使用列表中list的元素生成一个对角矩阵.7. IdentityMatrix[n]功能:生成n阶单位阵8. A+B功能:求A与B的和, 这里A与B都是矩阵或都是向量。

9. A-B功能:求A与B的差。

这里A与B都是矩阵或都是向量。

10. k*A功能:求常数k与A的数乘,这里A是矩阵或向量。

11. A.B功能:求矩阵A与矩阵B的乘积,注意A与B之间的乘号"."使用键盘上的小数点。

12. a.b功能:求向量A与向量B的内积,注意a与b之间的乘号"."使用键盘上的小数点。

13. A.b或b.A功能:求矩阵A与向量B的乘积,注意A与b之间的乘号"."使用键盘上的小数点。

14. Transpose[A]功能:求矩阵A的转置矩阵15. Inverse[A]功能:求矩阵A的逆矩阵16. MatrixPower[A,n]功能:计算方阵A的n次幂。

17. Det[A]功能:求方阵A的行列式18. a[[i, j]]功能:取矩阵a的位于第i行,第j列的元素.19. a[[i]]功能:取矩阵a的第i行的所有元素或取向量a的第i个分量.20. Transpose[a][[j]]功能:取矩阵a的第j列的所有元素.1.3实验任务1.3.1基础实验本实验熟悉数学软件命令操作。

1. 输入如下矩阵1)的0矩阵m 2) 6维随机向量v 3) 4阶单位矩阵i。

4)对角矩阵s= 5)c=2.已知矩阵,向量v={1,4,7},向量u={-1,5,2}求1)A+B 2)求A-B的值 3)5A4)AB 5)u+2v 6)u与v的点积7)Av 8) v T A 9) A的转置A T10) A-1 11) |B|3.设矩阵a= ,求1)把矩阵a在第3行第4列的元素-1改为62)把矩阵a的第2行元素改为{2,-1,3,8}3)把矩阵a的第4列元素改为{2,-1,3,8}4)用矩阵a的第1行元素乘-2加到第2行上4.用Cramer法则求解方程组1.3.2探索实验本实验探索矩阵与行列式性质。

5.用Mathematia命令检验行列式的两行或两列对换后,行列式值改变符号。

(提示:用随机定义的一个4⨯4阶行列式A来进行检验)。

6.用Mathematia命令检验:|AB|=|A||B|,这里A和B都是方阵。

(提示:用若干随机定义的一个4⨯4阶矩阵来进行检验)。

7.设计一组Mathematia命令来实验“初等变换矩阵与矩阵A左乘产生矩阵A的行初等变换;初等变换矩阵与矩阵A右乘产生矩阵A的列初等变换”的结论。

(仅就3⨯3的矩阵来实验即可)。

1.3.3应用实验本实验研究动物繁殖问题。

8.某农场饲养的动物所能达到的最大年龄为15岁,将其分为三个年龄组:第一组,0——5岁;第二组6——10岁;第三组成11——15岁。

动物从第二年龄组起开始繁殖后代,经过长期统计,第二年龄组的动物在其年龄段平均繁殖4个后代,第三组在其年龄段平均繁殖3个后代,第一年龄组和第二年龄组的动物能顺利进入下一个年龄组的存活率分别是1/2和1/4。

假设农场现有三个年龄段的动物各1000头,问15年后农场饲养的动物总数及农场三个年龄段的动物各将达到多少头?指出15年间,动物总增长多少头及总增长率。

1.4实验过程1.1) In[1]:= m=Table[0,{3},{5}]Out[1] = {{0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}}In[2]:= MatrixForm[%]Out[2] //MatrixForm=0 0 0 0 00 0 0 0 00 0 0 0 02) In[3]:= v=Table[Random[],{6}]Out[3]= {0.117907, 0.331022, 0.845968, 0.116702, 0.431217, 0.651793} 3) In[4]:= i=IdentityMatrix[4]Out[4]= {{1, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}}In[5]:= MatrixForm[i]Out[5]//MatrixForm=1 0 0 00 1 0 00 0 1 00 0 0 14) In[6]:= s=DiagonalMatrix[{a,b,c,d}]Out[6]= {{a,0,0,0},{0,b,0,0},{0,0,c,0}, {0,0,0,d}}In[7]:= MatrixForm[s]Out[7] //MatrixForm=a 0 0 00 b 0 00 0 c 00 0 0 d5) In[8]:= c=Table[Sin[i+j],{i,5},{j,3}];In[9]:= MatrixForm[c]Out[9]//MatrixForm=Sin[2] Sin[3] Sin[4]Sin[3] Sin[4] Sin[5]Sin[4] Sin[5] Sin[6]Sin[5] Sin[6] Sin[7]Sin[6] Sin[7] Sin[8]2.In[1]:=a={{3,1,1},{2,1,2},{1,2,8}};b={{1,1,-1},{2,-1,0},{1,0,1}};v={1,4,7};u={-1,5,2};1) In[2]:= a+bOut[2]= {{4, 2, 0}, {4, 0, 2}, {2, 2, 9}}In[3]:= MatrixForm[%]Out[3]//MatrixForm=4 2 04 0 22 2 92) In[4]:= a-bOut[4]= {{2, 0, 2}, {0, 2, 2}, {0, 2, 7}}3) In[5]:= 5aOut[5]= {{15, 5, 5}, {10, 5, 10}, {5, 10, 40}} 4) In[6]:= a.bOut[6]= {{6, 2, -2}, {6, 1, 0}, {13, -1, 7}} In[7]:= MatrixForm[%]Out[7]//MatrixForm=6 2 -26 1 013 -1 75) In[8]:= u+2vOut[8]= {1, 13, 16}6) In[9]:= u.vOut[9]= 337) In[10]:= a.vOut[10]= {14, 20, 65}8) In[11]:= v.aOut[11]= {18, 19, 65}9) In[12]:= Transpose[a]Out[12]= {{3, 2, 1}, {1, 1, 2}, {1, 2, 8}}In[13]:= MatrixForm[%]Out[13]//MatrixForm=3 2 11 1 21 2 810) In[14]:= Inverse[a]Out[14]= {{4, -6, 1}, {-14, 23, -4}, {3, -5, 1}}In[15]:= MatrixForm[%]Out[15]//MatrixForm=4 -6 1-14 23 -43 -5 111) In[16]:= Det[b]Out[16]= -43.1) In[1]:=a={{1,2,3,4},{2,3,1,2},{1,1,1,-1},{1,0,-2,-6}}Out[1]= {{1, 2, 3, 4}, {2, 3, 1, 2}, {1, 1, 1, -1}, {1, 0, -2, -6}} In[2]:= a[[3,4]]=6;aOut[2]= {{1, 2, 3, 4}, {2, 3, 1, 2}, {1, 1, 1, 6}, {1, 0, -2, -6}} 2) In[3]:= a={{1,2,3,4},{2,3,1,2},{1,1,1,-1},{1,0,-2,-6}};a[[2]]={2,-1,3,8};aOut[3]= {{1, 2, 3, 4}, {2, -1, 3, 8}, {1, 1, 1, 6}, {1, 0, -2, -6}} 3) In[4]:= a={{1,2,3,4},{2,3,1,2},{1,1,1,-1},{1,0,-2,-6}};b=Transpose[a]Out[4]= {{1, 2, 1, 1}, {2, -1, 1, 0}, {3, 3, 1, -2}, {4, 8, 6, -6}} In[5]:= b[[4]]={2,-1,3,8};a=Transpose[b]Out[5]= {{1, 2, 3, 2}, {2, -1, 3, -1}, {1, 1, 1, 3}, {1, 0, -2, 8}} 4) In[4]:= a={{1,2,3,4},{2,3,1,2},{1,1,1,-1},{1,0,-2,-6}};a[[2]]=a[[2]]-2a[[1]];aOut[4]= {{1, 2, 3, 4}, {0, -1, -5, -6}, {1, 1, 1, -1}, {1, 0, -2, -6}} 4.In[1]:= a={{2,1,-5,1},{1,4,-7,6},{1,-3,0,-6},{0,2,-1,2}};b={8,0,9,-5};MatrixForm[a]Out[1]//MatrixForm=In[2]:= dd=Det[a]Out[2]=27In[3]:= d=Transpose[a];d1=d; d2=d;d3=d; d4=d;In[4]:= d1[[1]]=b;d2[[2]]=b; (*d2[[k]]=b表示把矩阵第k行改为向量b*)d3[[3]]=b;d4[[4]]=b;In[4]:= d1=Det[d1];d2=Det[d2];d3=Det[d3];d4=Det[d4];In[5]:= x1=d1/dd;x2=d2/dd;x3=d3/dd;x4=d4/dd;In[6]:= {x1,x2,x3,x4}Out[6]= {3, -4, -1, 1}因此所求的解为x1=3,x2=-4,x3=-1,x4=1。

相关文档
最新文档