线性方程组求解matlab实现

合集下载

MATLAB计算方法3解线性方程组计算解法

MATLAB计算方法3解线性方程组计算解法

直到(n-1) 原方程组化为
a11 x1 a12 x2 a1n xn a1,n1 a22 x2 a2 n xn a2 ,n1

ann xn an ,n1
(上三角方程组) (3.2) 以上为消元过程。
(n) 回代求解公式
a n ,n1 xn a nn n x k 1 [a k ,n1 a kj x j ] a kk j k 1 ( k n 1, n 2,...,1)
由矩阵乘法 (1) 1) l11 a11 l11
umj 1 ukj a kj ukj a kj l km umj
m 1
k 1
2 求L的第k列:用L的第i行 u的第k列
(i k 1, , n),即 ( l i 1 , , l ik , l kk , 0 0) ( u1k , u2 k , , ukk , 0 0)' a ik
( 2) 1)求u的第2行:用L的第2行 u的第j列 (j 2, , n) l 21 u1 j 1 u2 j a 2 j u2 j a 2 j l 21u1 j 2)求L的第2列:用L的第i行 u的第2列 (i 3,4, , n) l i 1 u12 l i 2 u22 a i 2 l i 2 (a i 2 l i 1 u12 ) / u22
m 1
l
k 1
im
umk l ik ukk a ik
k 1
l ik a ik l im umk ukk m 1
LU分解式: u1 j a1 j ( j 1,2, n) l i 1 a i 1 u11 ( i 2,3, , n) k 1 ukj a kj l km umj a kj m 1 ( j k , k 1, , n) k 1 l ik a ik l im umk ukk a ik m 1 ( i k 1, , n) ( k 2, 3, , n )

MATLAB计算方法3解线性方程组计算解法

MATLAB计算方法3解线性方程组计算解法

MATLAB计算方法3解线性方程组计算解法线性方程组是数学中的一个重要问题,解线性方程组是计算数学中的一个基本计算,有着广泛的应用。

MATLAB是一种功能强大的数学软件,提供了多种解线性方程组的计算方法。

本文将介绍MATLAB中的三种解线性方程组的计算方法。

第一种方法是用MATLAB函数“linsolve”解线性方程组。

该函数使用高斯消元法和LU分解法求解线性方程组,可以处理单个方程组以及多个方程组的情况。

使用该函数的语法如下:X = linsolve(A, B)其中A是系数矩阵,B是常数向量,X是解向量。

该函数会根据A的形式自动选择求解方法,返回解向量X。

下面是一个使用“linsolve”函数解线性方程组的例子:A=[12;34];B=[5;6];X = linsolve(A, B);上述代码中,A是一个2×2的系数矩阵,B是一个2×1的常数向量,X是一个2×1的解向量。

运行代码后,X的值为[-4.0000;4.5000]。

第二种方法是用MATLAB函数“inv”求解逆矩阵来解线性方程组。

当系数矩阵A非奇异(可逆)时,可以使用逆矩阵求解线性方程组。

使用“inv”函数的语法如下:X = inv(A) * B其中A是系数矩阵,B是常数向量,X是解向量。

该方法先计算A的逆矩阵,然后将逆矩阵与B相乘得到解向量X。

下面是一个使用“inv”函数解线性方程组的例子:A=[12;34];B=[5;6];X = inv(A) * B;上述代码中,A是一个2×2的系数矩阵,B是一个2×1的常数向量,X是一个2×1的解向量。

运行代码后,X的值为[-4.0000;4.5000]。

第三种方法是用MATLAB函数“mldivide”(或“\”)求解线性方程组。

该函数使用最小二乘法求解非方阵的线性方程组。

使用“mldivide”函数的语法如下:X=A\B其中A是系数矩阵,B是常数向量,X是解向量。

求线性方程组AX=b通解的Matlab实现程序

求线性方程组AX=b通解的Matlab实现程序
而得 到 齐次线 性 方 程组 A X= 0 的所有 解 所构 成 的空 间 ,也就 是齐次 线性方 程组 的一 个基础解 系 。 对齐 次 线性 方 程 组Ax = 0 ,Ma t l a b 命 令 如下 :( 1 )  ̄ l f 果 A
[ n 1 】 [ 2 n 2 】
的通解加 上其 自身 的一个 特解 。在理 论基础 上 ,我们 利用下 面 的例子说 明Ma t 1 a b 实现 程序 。
解 :Ma t l a b 实现程序如下:
> > A = [ 1 1 0— 3 - 1 ; 1— 1 2— 1

7 ] ;
> > f o r ma t r a t

下面是 其简化形 式
[一 n l +7 n 2 ]
[n 1 +5 n 2 ]
C1 1 +C2 ( z 2+… +C


0 【

, ,
在这里 C , C 2 , …, C ~ 设为任 意 的常数 。 利用Ma t l a b ,我 们要 求零 空 间 ,可 以调用 函数n u l l ,从
%限定 输 出格式 为有理 式
I 2 十 X 2 一 x 3 + x 4 = 1 I 3 一 2 + 2 一 3 = 2
> >P=n u l l ( A , ' r ’ ) % 求线性方程组的解空间的有理形式
的基
> > s y ms n l ,n 2
例 2 求 方 程 组 : 1 5 + 一 X 3 + 2 X 4 : 一 1 的 通 解。
关键 词 :齐次线性 方程 组 ;非齐次线性 方程组 ;通解
引 言
求 解 线性 方 程 组 的 问题 是 数 值线 性 代 数 的三 大 问 题之

matlab 方程组 解

matlab 方程组 解

matlab 方程组解一、概述Matlab是一种强大的数学计算软件,它可以用来解决各种数学问题,包括解方程组。

在Matlab中,求解方程组是一个非常重要的功能,因为很多实际问题都可以转化为方程组的形式。

本文将详细介绍如何使用Matlab求解线性方程组和非线性方程组。

二、线性方程组1. 线性方程组的定义线性方程组是指各个未知量的次数都不超过1次的代数方程组。

例如:2x + 3y = 54x - 5y = 6就是一个包含两个未知量x和y的线性方程组。

2. Matlab中求解线性方程组方法在Matlab中,可以使用“\”或者“inv()”函数来求解线性方程组。

其中,“\”表示矩阵左除,即Ax=b时,求解x=A\b;“inv()”函数表示矩阵求逆,即Ax=b时,求解x=inv(A)*b。

例如,在Matlab中求解以下线性方程组:2x + 3y = 54x - 5y = 6可以使用以下代码:A=[2,3;4,-5];b=[5;6];x=A\b输出结果为:x =1.00001.0000其中,“A”为系数矩阵,“b”为常数矩阵,“x”为未知量的解。

三、非线性方程组1. 非线性方程组的定义非线性方程组是指各个未知量的次数超过1次或者存在乘积项、幂项等非线性因素的代数方程组。

例如:x^2 + y^2 = 25x*y - 3 = 0就是一个包含两个未知量x和y的非线性方程组。

2. Matlab中求解非线性方程组方法在Matlab中,可以使用“fsolve()”函数来求解非线性方程组。

该函数需要输入一个函数句柄和初始值向量,输出未知量的解向量。

例如,在Matlab中求解以下非线性方程组:x^2 + y^2 = 25x*y - 3 = 0可以使用以下代码:fun=@(x)[x(1)^2+x(2)^2-25;x(1)*x(2)-3];x0=[1;1];[x,fval]=fsolve(fun,x0)输出结果为:Local minimum found.Optimization completed because the size of the gradient is less thanthe default value of the function tolerance.<stopping criteria details>ans =1.60561.8708其中,“fun”为函数句柄,表示要求解的非线性方程组,“x0”为初始值向量,“[x,fval]”为输出结果,其中“x”表示未知量的解向量,“fval”为函数值。

利用Matlab进行线性代数问题求解的方法与案例

利用Matlab进行线性代数问题求解的方法与案例

利用Matlab进行线性代数问题求解的方法与案例引言线性代数是数学的一个重要分支,广泛应用于工程、物理、计算机科学等领域。

而Matlab作为一种功能强大的数值计算软件,提供了各种实用的工具和函数,可以方便地解决线性代数问题。

本文将介绍一些常用的线性代数问题求解方法,并通过具体的案例来展示Matlab在实际应用中的效果。

一、线性方程组的求解线性方程组是线性代数中最基础的问题之一。

Matlab提供了多种求解线性方程组的函数,如“backslash”操作符(\)和“linsolve”函数等。

下面通过一个实例来说明Matlab的线性方程组求解功能。

案例:假设有以下线性方程组需要求解:2x + 3y - 4z = 53x - 2y + z = 8x + 5y - 3z = 7在Matlab中输入以下代码:A = [2 3 -4; 3 -2 1; 1 5 -3];b = [5; 8; 7];x = A\b;通过以上代码,我们可以得到线性方程组的解x=[1; -2; 3]。

这表明在满足以上方程组的条件下,x=1,y=-2,z=3。

可以看出,Matlab在求解线性方程组时,使用简单且高效。

二、矩阵的特征值和特征向量求解矩阵的特征值和特征向量也是线性代数中的重要概念。

利用特征值和特征向量可以得到矩阵的许多性质和信息。

在Matlab中,我们可以通过“eig”函数来求解矩阵的特征值和特征向量。

案例:假设有一个2x2矩阵A,需要求解其特征值和特征向量。

在Matlab中输入以下代码:A = [2 3; 1 4];[V, D] = eig(A);通过以上代码,我们可以得到矩阵A的特征向量矩阵V和特征值矩阵D。

具体结果如下:特征向量矩阵V = [0.8507 -0.5257; 0.5257 0.8507]特征值矩阵D = [1.5858 0; 0 4.4142]由结果可知,矩阵A的特征向量矩阵V和特征值矩阵D可以提供有关该矩阵的很多信息,如相关线性变换、对称性等。

基于Matlab的解线性方程组的几种迭代法的实现及比较

基于Matlab的解线性方程组的几种迭代法的实现及比较

基于Matlab的解线性方程组的几种迭代法的实现及比较线性方程组的解法有很多种,其中一类常用的方法是迭代法。

迭代法根据一个初值逐步逼近方程组的解,在每一次迭代中利用现有的信息产生新的近似值,并不断地修正。

下面介绍基于Matlab的三种迭代法:雅可比迭代法、高斯-赛德尔迭代法和超松弛迭代法,并进行比较。

1. 雅可比迭代法雅可比迭代法是迭代法中最简单的一种方法。

对于线性方程组Ax=b,雅可比迭代法的迭代公式为:x_{i+1}(j)=1/a_{jj}(b_j-\\sum_{k=1,k\eq j}^n a_{jk}x_i(k))其中,i表示迭代次数,j表示未知数的下标,x_i表示第i次迭代的近似解,a_{jk}表示系数矩阵A的第j行第k列元素,b_j 表示方程组的常数项第j项。

在Matlab中,可以使用以下代码实现雅可比迭代:function [x,flag]=jacobi(A,b,X0,tol,kmax)n=length(b);x=X0;for k=1:kmaxfor i=1:nx(i)=(b(i)-A(i,:)*x+A(i,i)*x(i))/A(i,i);endif norm(A*x-b)<tolflag=1;returnendendflag=0;return其中,参数A为系数矩阵,b为常数项列向量,X0为初值列向量,tol为迭代误差容许值(默认为1e-6),kmax为最大迭代次数(默认为1000)。

函数返回值x为近似解列向量,flag表示是否满足容许误差要求。

2. 高斯-赛德尔迭代法高斯-赛德尔迭代法是雅可比迭代法的改进。

其基本思想是,每次迭代时,利用已经求出的新解中的信息来更新其他未知数的值。

迭代公式为:x_{i+1}(j)=(1/a_{jj})(b_j-\\sum_{k=1}^{j-1}a_{jk}x_{i+1}(k)-\\sum_{k=j+1}^n a_{jk}x_i(k))与雅可比迭代法相比,高斯-赛德尔迭代法的每一次迭代都利用了前面已求得的近似解,因此可以更快地收敛。

matlab中快速求解xa=b的方法

matlab中快速求解xa=b的方法在Matlab中,要快速求解线性方程组xa=b,可以使用以下几种方法:1. 直接求解法(\):直接使用斜杠操作符(\)可以求解线性方程组。

例如,对于方程组xa=b,可以直接使用x = A\b来解决,其中A是系数矩阵,b是常数向量。

这种方法使用了高效的LU分解算法,并且能够自动适应方程组的类型(如稀疏矩阵或密集矩阵),因此是一种快速求解线性方程组的常用方法。

2. QR分解法:QR分解是一种将矩阵分解为正交矩阵和上三角矩阵的方法。

在Matlab中,可以使用qr函数对系数矩阵进行QR分解,然后使用这个分解求解线性方程组。

具体而言,可以使用[q,r] = qr(A)将系数矩阵A分解为正交矩阵q和上三角矩阵r,然后使用x = r\(q'*b)求解方程组。

这种方法通常适用于方程组的系数矩阵具有较大的条件数或者方程组数目较多的情况。

3. Cholesky分解法:如果线性方程组的系数矩阵是对称正定的,那么可以使用Cholesky分解来求解方程组。

在Matlab中,可以使用chol函数对系数矩阵进行Cholesky分解,然后使用这个分解求解线性方程组。

具体而言,可以使用R = chol(A)将系数矩阵A分解为上三角矩阵R,然后使用x = R'\(R\b)求解方程组。

Cholesky分解法通常适用于系数矩阵具有良好的性质(如对称正定)的情况。

4. 迭代法:如果线性方程组的系数矩阵是稀疏的,那么可以使用迭代法来求解方程组。

迭代法的基本思想是通过迭代改进解的逼近值。

在Matlab中,可以使用pcg函数(预处理共轭梯度法)或者bicg函数(双共轭梯度法)来求解稀疏线性方程组。

这些函数需要提供一个预处理矩阵,用于加速迭代过程。

预处理矩阵可以根据具体问题进行选择,常见的预处理方法包括不完全LU分解(ilu)和代数多重网格(amg)等。

通过使用上述方法,可以在Matlab中快速求解线性方程组xa=b。

利用matlab解线性方程组

数值计算实验——解线性方程组西南交通大学2012级茅7班20123257 陈鼎摘要本报告主要介绍了基于求解线性方程组的高斯消元法和列主消元法两种数值分析方法的算法原理及实现方法。

运用matlab数学软件辅助求解。

实验内容1.编写用高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证。

2.编写用列主消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证。

给定方程组如下:①0.325x1+2.564x2+3.888x3+5x4=1.521②-1.548x1+3.648x2+4.214x3-4.214x4=2.614③-2.154x1+1.647x2+5.364x3+x4=3.978④0x1+2.141x2-2.354x3-2x4=4.214A.高斯消元法一、算法介绍高斯消元法是一种规则化的加减消元法。

基本思想是通过逐次消元计算把需要求解的线性方程组转化成为上三角方程组,即把现形方程组的系数矩阵转化为上三角矩阵,从而使一般线性方程组的求解转化为等价的上三角方程组的求解。

二、matlab程序function [RA,RB,n,X]=gaus(A,b)B=[A b]; n=length(b); RA=rank(A);RB=rank(B);zhica=RB-RA;if zhica>0,disp(‘因为RA~=RB,所以此方程组无解.')returnendif RA==RBif RA==ndisp(‘因为RA=RB=n,所以此方程组有唯一解.')X=zeros(n,1); C=zeros(1,n+1);for p= 1:n-1for k=p+1:nm= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);endendb=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n);for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);endelsedisp(‘因为RA=RB<n,所以此方程组有无穷多解.')endend三、实验过程与结果输入的量:系数矩阵A和常系数向量b;输出的量:系数矩阵A和增广矩阵B的秩RA、RB,方程中未知量的个数n和有关方程组解X及其解的信息。

matlab超松弛迭代法求方程组

一、介绍MATLAB(Matrix Laboratory)是一种用于数值计算和数据可视化的专业软件。

在MATLAB中,超松弛迭代法是解决线性方程组的一种有效算法。

本文将介绍MATLAB中超松弛迭代法的基本原理和实现方法,并给出一个具体的例子进行演示。

二、超松弛迭代法的基本原理超松弛迭代法是一种逐步迭代的算法,用于求解线性方程组。

它的基本原理是通过不断迭代更新方程组的解,直到达到满足精度要求的解。

超松弛迭代法的公式如下:X(k+1) = (1-w)X(k) + w*(D-L)⁻¹*(b+U*X(k))其中,X(k)代表第k次迭代的解向量,X(k+1)代表第k+1次迭代的解向量,D、L和U分别代表方程组的对角线元素、下三角元素和上三角元素构成的矩阵,b代表方程组的右端向量,w代表松弛因子。

超松弛迭代法的关键在于选择合适的松弛因子w,一般情况下,可以通过试验选取一个合适的值。

在MATLAB中,可以使用sor函数来实现超松弛迭代法。

三、MATLAB中超松弛迭代法的实现方法在MATLAB中,可以通过调用sor函数来实现超松弛迭代法。

sor 函数的语法格式如下:[X,flag,relres,iter,resvec] = sor(A,b,w,tol,maxit)其中,A代表线性方程组的系数矩阵,b代表右端向量,w代表松弛因子,tol代表迭代的精度要求,maxit代表最大迭代次数,X代表迭代求解得到的解向量,flag代表迭代的结果标志,relres代表相对残差的大小,iter代表迭代次数,resvec代表迭代过程中的残差向量。

以下是一个使用sor函数求解线性方程组的示例:A = [4 -1 0 -1 0 0; -1 4 -1 0 -1 0; 0 -1 4 0 0 -1; -1 0 0 4 -1 0; 0 -1 0 -1 4 -1; 0 0 -1 0 -1 4];b = [1; 0; -1; 0; 1; 0];w = 1.25;tol = 1e-6;maxit = 100;[X,flag,relres,iter,resvec] = sor(A,b,w,tol,maxit);通过调用sor函数,可以得到方程组的解向量X,迭代的结果标志flag,相对残余resrel和迭代次数iter。

线性代数的MATLAB软件实验报告

线性代数的MATLAB 软件实验一、实验目的1.熟悉矩阵代数主要MATLAB 指令。

2.掌握矩阵的转置、加、减、乘、除、乘方、除法等MATLAB 运算。

3.掌握特殊矩阵的MATLAB 生成。

4.掌握MATLAB 的矩阵处理方法。

5.掌握MATLAB 的矩阵分析方法。

6.掌握矩阵的特征值与标准形的MATLAB 验算。

7.掌握线性方程组的MATLAB 求解算法。

二、实验原理1.线性方程组 【基本观点】自然科学和工程实践很多问题的解决都涉及线性代数方程组的求解和矩阵运算.一方面,许多问题的数学模型本身就是一个线性方程组,例如结构应力分析问题、电子传输网分析问题和投入产出分析问题;另一方面,有些数值计算方法导致线性方程组求解,如数据拟合,非线性方程组求解和偏微分方程组数值解等.n 个未知量m 个方程的线性方程组一般形式为⎪⎪⎩⎪⎪⎨⎧=+++=+++=+++.,,22112222212111212111m n mn m m n n n n b x a x a x a b x a x a x a b x a x a x a (3.1) 令,,,2121212222111211⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫⎝⎛=m n mn m m n n b b b b x x x x a a a a a aa a a A则得矩阵形式Ax=b. (3.2)若右端b=0,即Ax=0, (3.3)则称方程组为齐次的.方程组(3.1)可能有唯一解,可能有无穷多解,也可能无解,主要取决于系数矩阵A 及增广矩阵(A,b )的秩.若秩(A )=秩(A,b )=n,存在唯一解,其解理论上用Cramer 法则求出,但由于这种方法要计算n+1个n 阶行列式,计算量太大通常并不采用;若秩(A )=秩(A,b )<n,存在无穷多解,其通解可表示为对应齐次方程组(3.3)的一个基础解系与(3.2)的一个特解的叠加;若秩(A )≠秩(A,b ),则无解,这时一般寻求最小二乘近似解,即求x 使向量Ax-b 模最小.P50矩阵左除的数学思维:恒等变形Ax=b 方程两边的左边同时除以A ,得:b AAx A11=,即:b A b Ax 11-==MATLAB 的实现(左除):x=A\b 2.逆矩阵 【基本观点】方阵A 称为可逆的,如果存在方阵B ,使 AB=BA=E,这里E 表示单位阵.并称B 为A 的逆矩阵,记B=1-A .方阵A 可逆的充分必要条件是A 的行列式det A ≠0.求逆矩阵理论上的公式为*1det 1A AA =-, (3.4)这里*A 为A 的伴随矩阵.利用逆矩阵,当A 可逆时,(3.2)的解可表示为b A x 1-=.由于公式(3.4)涉及大量行列式计算,数值计算不采用.求逆矩阵的数值算法一般是基于矩阵分解的方法.3.特征值与特征向量 【基本观点】对于方阵A ,若存在数λ和非零向量x ,使,x Ax λ= (3.5) 则称λ为A 的一个特征值,x 为A 的一个对应于特征值λ的特征向量.特征值计算归结为特征多项式的求根.对于n 阶实数方阵,特征多项式在复数范围内总有n 个根。

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

3.1 方程组的逆矩阵解法及其MATLAB 程序3.1.3 线性方程组有解的判定条件及其MATLAB 程序 判定线性方程组A n m ⨯b X =是否有解的MATLAB 程序function [RA,RB,n]=jiepb(A,b)B=[A b];n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0,disp('请注意:因为RA~=RB ,所以此方程组无解.') return endif RA==RB if RA==ndisp('请注意:因为RA=RB=n ,所以此方程组有唯一解.') elsedisp('请注意:因为RA=RB<n ,所以此方程组有无穷多解.') end end例3.1.4 判断下列线性方程组解的情况.如果有唯一解,则用表 3-2方法求解.(1) ⎪⎪⎩⎪⎪⎨⎧=-+-=+-+=-++=+-+;0742,0634,0723,05324321432143214321x x x x x x x x x x x x x x x x (2) ⎪⎪⎩⎪⎪⎨⎧=++-=+-+=-+-=+-+;0327,01613114,02332,075434321432143214321x x x x x x x x x x x x x x x x (3) ⎪⎩⎪⎨⎧=+=+-=-+;8311,1023,22421321321x x x x x x x x (4) ⎪⎩⎪⎨⎧=--+=+-+=+-+.12,2224,12w z y x w z y x w z y x解 在MATLAB 工作窗口输入程序>> A=[2 3 -1 5;3 1 2 -7;4 1 -3 6;1 -2 4 -7]; b=[ 0; 0; 0; 0]; [RA,RB,n]=jiepb(A,b)运行后输出结果为请注意:因为RA=RB=n ,所以此方程组有唯一解. RA = 4,RB =4,n =4 在MATLAB 工作窗口输入>>X=A\b,运行后输出结果为 X =(0 0 0 0)’.(2) 在MATLAB 工作窗口输入程序>> A=[3 4 -5 7;2 -3 3 -2;4 11 -13 16;7 -2 1 3];b=[ 0; 0; 0; 0];[RA,RB,n]=jiepb(A,b)运行后输出结果请注意:因为RA=RB<n ,所以此方程组有无穷多解. RA =2,RB =2,n =4(3) 在MATLAB 工作窗口输入程序>> A=[4 2 -1;3 -1 2;11 3 0]; b=[2;10;8]; [RA,RB,n]=jiepb(A,B)运行后输出结果请注意:因为RA~=RB ,所以此方程组无解. RA =2,RB =3,n =3(4)在MATLAB 工作窗口输入程序>> A=[2 1 -1 1;4 2 -2 1;2 1 -1 -1]; b=[1; 2; 1]; [RA,RB,n]=jiepb(A,b)运行后输出结果请注意:因为RA=RB<n ,所以此方程组有无穷多解. RA =2,RB =2,n =33.2 三角形方程组的解法及其MATLAB 程序3.2.2 解三角形方程组的MATLAB 程序 解上三角形线性方程组b AX =的MATLAB 程序function [RA,RB,n,X]=shangsan(A,b)B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0,disp('请注意:因为RA~=RB ,所以此方程组无解.') return endif RA==RB if RA==ndisp('请注意:因为RA=RB=n ,所以此方程组有唯一解.') X=zeros(n,1); X(n)=b(n)/A(n,n); for k=n-1:-1:1X(k)=(b(k)-sum(A(k,k+1:n)*X(k+1:n)))/A(k,k);end elsedisp('请注意:因为RA=RB<n ,所以此方程组有无穷多解.')end end例3.2.2 用解上三角形线性方程组的MATLAB 程序解方程组⎪⎪⎩⎪⎪⎨⎧==+-=-+-=++-.63,456,7472,203254434324321x x x x x x x x x x . 解 在MATLAB 工作窗口输入程序>>A=[5 -1 2 3;0 -2 7 -4;0 0 6 5;0 0 0 3]; b=[20; -7; 4;6];[RA,RB,n,X]=shangsan(A,b)运行后输出结果请注意:因为RA=RB=n ,所以此方程组有唯一解. RA = RB =4, 4, n =4,X =[2.4 -4.0 -1.0 2.0]’3.3 高斯(Gauss )消元法和列主元消元法及其MATLAB 程序3.3.1 高斯消元法及其MATLAB 程序用高斯消元法解线性方程组b AX =的MATLAB 程序f unction [RA,RB,n,X]=gaus(A,b)B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0,disp('请注意:因为RA~=RB ,所以此方程组无解.') return endif RA==RB if RA==ndisp('请注意:因为RA=RB=n ,所以此方程组有唯一解.') X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1for k=p+1:nm= B(k,p)/ B(p,p);B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1); end endb=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n); for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q); endelsedisp('请注意:因为RA=RB<n ,所以此方程组有无穷多解.') end end例3.3.2 用高斯消元法和MATLAB 程序求解下面的非齐次线性方程组,并且用逆矩阵解方程组的方法验证.⎪⎪⎩⎪⎪⎨⎧-=+---=+--=+--=-+-.142,16422,0,13432143214324321x x x x x x x x x x x x x x x 解 在MATLAB 工作窗口输入程序>> A=[1 -1 1 -3; 0 -1 -1 1;2 -2 -4 6;1 -2 -4 1]; b=[1;0; -1;-1]; [RA,RB,n,X] =gaus (A,b)运行后输出结果请注意:因为RA=RB=n ,所以此方程组有唯一解. RA =4RB =4n =43.3.2 列主元消元法及其MATLAB 程序用列主元消元法解线性方程组b AX =的MATLAB 程序function [RA,RB,n,X]=liezhu(A,b)B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0,disp('请注意:因为RA~=RB ,所以此方程组无解.') return endif RA==RB if RA==ndisp('请注意:因为RA=RB=n ,所以此方程组有唯一解.') X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1X = 0 -0.5000 0.5000 0[Y,j]=max(abs(B(p:n,p))); C=B(p,:); B(p,:)= B(j+p-1,:); B(j+p-1,:)=C; for k=p+1:nm= B(k,p)/ B(p,p);B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1); end endb=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n); for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q); endelsedisp('请注意:因为RA=RB<n ,所以此方程组有无穷多解.') end end例3.3.3 用列主元消元法解线性方程组的MATLAB 程序解方程组⎪⎪⎩⎪⎪⎨⎧-=+---=+--=-+-=+--.142,16422,13,0432143214321432x x x x x x x x x x x x x x x . 解 在MATLAB 工作窗口输入程序>> A=[0 -1 -1 1;1 -1 1 -3;2 -2 -4 6;1 -2 -4 1]; b=[0;1;-1;-1]; [RA,RB,n,X]=liezhu(A,b)运行后输出结果请注意:因为RA=RB=n ,所以此方程组有唯一解. RA = 4,RB = 4,n = 4,X =[0 -0.5 0.5 0]’3.4 LU 分解法及其MATLAB 程序3.4.1判断矩阵LU 分解的充要条件及其MATLAB 程序 判断矩阵A 能否进行LU 分解的MATLAB 程序function hl=pdLUfj(A)[n n] =size(A); RA=rank(A); if RA~=ndisp('请注意:因为A 的n 阶行列式hl 等于零,所以A 不能进行LU 分解.A 的秩RA 如下:'), RA,hl=det(A); returnendif RA==nfor p=1:n,h(p)=det(A(1:p, 1:p));, endhl=h(1:n); for i=1:nif h(1,i)==0disp('请注意:因为A 的r 阶主子式等于零,所以A 不能进行LU 分解.A的秩RA 和各阶顺序主子式值hl 依次如下:'),hl;RA,returnend endif h(1,i)~=0disp('请注意:因为A 的各阶主子式都不等于零,所以A 能进行LU 分解.A的秩RA 和各阶顺序主子式值hl 依次如下:')hl;RA end end例3.4.1 判断下列矩阵能否进行LU 分解,并求矩阵的秩.(1)⎪⎪⎪⎭⎫ ⎝⎛6547121321;(2)⎪⎪⎪⎭⎫ ⎝⎛654721321;(3)⎪⎪⎪⎭⎫⎝⎛654321321. 解 (1)在MATLAB 工作窗口输入程序>> A=[1 2 3;1 12 7;4 5 6];hl=pdLUfj(A)运行后输出结果为请注意:因为A 的各阶主子式都不等于零,所以A 能进行LU 分解.A 的秩RA 和各阶顺序主子式值hl 依次如下:RA = 3, hl = 1 10 -48(2)在MATLAB 工作窗口输入程序>> A=[1 2 3;1 2 7;4 5 6];hl=pdLUfj(A)运行后输出结果为请注意:因为A 的r 阶主子式等于零,所以A 不能进行LU 分解.A 的秩RA 和各阶顺序主子式值hl 依次如下:RA = 3, hl =1 0 12(3)在MATLAB 工作窗口输入程序>> A=[1 2 3;1 2 3;4 5 6];hl=pdLUfj(A)运行后输出结果为请注意:因为A 的n 阶行列式hl 等于零,所以A 不能进行LU 分解.A 的秩RA 如下RA = 2, hl = 03.4.2 直接LU 分解法及其MATLAB 程序 将矩阵A 进行直接LU 分解的MATLAB 程序function hl=zhjLU(A)[n n] =size(A); RA=rank(A); if RA~=ndisp('请注意:因为A 的n 阶行列式hl 等于零,所以A 不能进行LU 分解.A的秩RA 如下:'), RA,hl=det(A);return endif RA==n for p=1:nh(p)=det(A(1:p, 1:p)); endhl=h(1:n); for i=1:nif h(1,i)==0disp('请注意:因为A 的r 阶主子式等于零,所以A 不能进行LU 分解.A的秩RA 和各阶顺序主子式值hl 依次如下:'), hl;RAreturn end endif h(1,i)~=0disp('请注意:因为A 的各阶主子式都不等于零,所以A 能进行LU 分解.A 的秩RA 和各阶顺序主子式值hl 依次如下:')for j=1:nU(1,j)=A(1,j); endfor k=2:n for i=2:n for j=2:nL(1,1)=1;L(i,i)=1; if i>jL(1,1)=1;L(2,1)=A(2,1)/U(1,1);L(i,1)=A(i,1)/U(1,1);L(i,k)=(A(i,k)- L(i,1:k-1)*U(1:k-1,k))/U(k,k); elseU(k,j)=A(k,j)-L(k,1:k-1)*U(1:k-1,j); end end end endhl;RA,U,L end end例3.4.3 用矩阵进行直接LU 分解的MA TLAB 程序分解矩阵⎪⎪⎪⎪⎪⎭⎫⎝⎛=3010342110100201A . 解 在MATLAB 工作窗口输入程序>> A=[1 0 2 0;0 1 0 1;1 2 4 3;0 1 0 3]; hl=zhjLU(A)运行后输出结果请注意:因为A 的各阶主子式都不等于零,所以A 能进行LU 分解.A 的秩RA和各阶顺序主子式值hl 依次如下:RA = 4U = 1 0 2 00 1 0 10 0 2 10 0 0 2 3.4.4 判断正定对称矩阵的方法及其MATLAB 程序 判断矩阵A 是否是正定对称矩阵的MATLAB 程序function hl=zddc(A) [n n] =size(A); for p=1:nh(p)=det(A(1:p, 1:p)); endhl=h(1:n);zA=A'; for i=1:nif h(1,i)<=0disp('请注意:因为A 的各阶顺序主子式hl 不全大于零,所以A 不是正定的.A 的转置矩阵zA 和各阶顺序主子式值hl 依次如下:'), hl;zA,returnend endif h(1,i)>0disp('请注意:因为A 的各阶顺序主子式hl 都大于零,所以A 是正定的.A 的转置矩阵zA 和各阶顺序主子式值hl 依次如下:')hl;zA end例3.4.5 判断下列矩阵是否是正定对称矩阵:L = 1 0 0 0 0 1 0 0 1 2 1 0 0 1 0 1 hl = 1 1 2 4(1)⎪⎪⎪⎪⎪⎭⎫ ⎝⎛--98754113211143214321.0;(2) ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛------19631690230311211; (3) ⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛----212100212100002121002121;(4)⎪⎪⎪⎭⎫⎝⎛---401061112. 解 (1)在MATLAB 工作窗口输入程序>> A=[0.1 2 3 4;-1 2 -3 4;11 21 13 41;5 7 8 9];hl=zddc (A)运行后输出结果请注意: A 不是对称矩阵请注意:因为A 的各阶顺序主子式hl 不全大于零,所以A 不是正定的.A 的转置矩阵zA 和各阶顺序主子式值hl 依次如下:zA = 1/10 -1 11 5 2 2 21 7 3 -3 13 8 4 4 41 9 hl = 1/10 11/5 -1601/10 3696/5因此,A 即不是正定矩阵,也不是对称矩阵.(2)在MATLAB 工作窗口输入程序>> A=[1 -1 2 1;-1 3 0 -3;2 0 9 -6;1 -3 -6 19],hl=zddc(A)运行后输出结果A = 1 -1 2 1 -1 3 0 -3 2 0 9 -6 1 -3 -6 19 请注意: A 是对称矩阵请注意:因为A 的各阶顺序主子式hl 都大于零,所以A 是正定的.A 的转置矩阵zA 和各阶顺序主子式值hl 依次如下:zA = 1 -1 2 1 -1 3 0 -3 2 0 9 -6 1 -3 -6 19 hl = 1 2 6 24 (3)在MATLAB 工作窗口输入程序>> A=[1/sqrt(2) -1/sqrt(2) 0 0; -1/sqrt(2) 1/sqrt(2) 0 0; 0 01/sqrt(2) -1/sqrt(2); 0 0 -1/sqrt(2) 1/sqrt(2)], hl=zddc (A) 运行后输出结果A= 985/1393 -985/1393 0 0 -985/1393 985/1393 0 0 0 0 985/1393 -985/1393 0 0 -985/1393 985/1393 请注意: A 是对称矩阵请注意:因为A 的各阶顺序主子式hl 不全大于零,所以A 不是正定的.A 的转置矩阵zA 和各阶顺序主子式值hl 依次如下:zA = 985/1393 -985/1393 0 0 -985/1393 985/1393 0 0 0 0 985/1393 -985/1393 0 0 -985/1393 985/1393 hl = 985/1393 0 0 0可见,A 不是正定矩阵,是半正定矩阵;因为A = A T因此,A 是对称矩阵.(4)在MATLAB 工作窗口输入程序>> A=[-2 1 1;1 -6 0;1 0 -4];hl=zddc (A)运行后输出结果A = -2 1 11 -6 01 0 -4请注意:A是对称矩阵请注意:因为A的各阶顺序主子式hl不全大于零,所以A不是正定的.A的转置矩阵zA和各阶顺序主子式值hl依次如下:zA = -2 1 1 hl = -2 11 -381 -6 01 0 -4可见A不是正定矩阵,是负定矩阵;因为A= A T因此,A是对称矩阵.。

相关文档
最新文档