matlab在科学计算中的应用 线性方程组的直接求解-分析方法-文档资料

合集下载

(完整word版)线性方程组的直接解法及matlab的实现

(完整word版)线性方程组的直接解法及matlab的实现

本科毕业论文(2010 届)题目线性方程组的直接解法及matlab的实现学院数学与信息工程学院专业数学与应用数学班级2006级数学1 班学号0604010127学生姓名胡婷婷指导教师王洁完成日期2010年5月摘要随着科技技术的发展及人类对自然界的不断探索模拟。

在自然科学和工程问题中的很多问题的解决常常归结为线性代数问题!本文的主要内容是对线性方程组求解方法的探讨,主要介绍了四种求解线性方程组的方法,第一种是教科书上常见的消元法,我们称之为基本法。

第二种方法是标准上三角形求解法,即将增广矩阵经过初等变换后化成标准上三角形,然后求解.它改进了一般教科书上的常见方法,与常见方法比较有如下优点:1)规范了自由未知量的选取;2)只用矩阵运算;3)减少了计算量.第三种方法是对特定的方程组(系数矩阵A为n阶对称正定矩阵,且A的顺序主子式均不为零。

)的求解方法进行描述,并且为这种线性方程的求解提供了固定的公式化的方法。

第四种方法是对现在实际问题中常常会遇到的系数矩阵为三对角矩阵的方程组的求解方法。

同时给出这几种方法的数值解法(matlab程序),由于运用电脑软件求解,所以必须考虑计算方法的时间、空间上的效率以及算法的数值稳定性问题,所以针对不同类型的线性方程组有不同的解法.但是,基本的方法可以归结为两大类,即直接法和迭代法.关键词高斯消去法;三角分解法;乔莱斯基分解法;追赶法AbstractSystems of linear equations are associated with many problems in engineering and scinence ,as well as with applications of mathematics to the social sciences and the quantitative study of business and economic problems.The main content of this article is the method for solving linear equations,we introduce four methods for solving linear equations in this paper。

用matlab求解线性方程组

用matlab求解线性方程组

用matlab 解线性方程组电子科技大学摘要:利用matlab 软件编写程序,分别利用雅克比迭代法和高斯赛德尔迭代法、列主元高斯消去法,改进平方根法求解不同方程组,其中对于雅克比迭代法和高斯赛德尔迭代法在收敛条件相同的情况下,比较两者的迭代次数,对于,列主元高斯消去法和改进平方根法,要求解出方程组的根。

关键词:雅克比迭代法;高斯赛德尔迭代法;列主元高斯消去法;改进平方根法引言:众所周知,在数学物理方程中,当涉及到解方程组的时候,按照常规的计算方法计算量很大,这样,就涉及到了计算方法的问题,算法里面,很多涉及到矩阵转换,经过处理,可以让我们简便的计算根,而matlab 是一个处理矩阵方程组很便利的软件,下面就是用几种不同的方法解方程组。

正文:一、雅克比迭代法和高斯赛德尔迭代法 1雅可比迭代法原理: 设线性方程组b Ax =的系数矩阵A 可逆且主对角元素nn a ,...,a ,a 2211均不为零,令()nn a ,...,a ,a diag D 2211=并将A 分解成()D D A A +-= 从而(1)可写成 ()b x A D Dx +-= 令 11f x B x +=其中b D f ,A D I B 1111--=-=. 以1B 为迭代矩阵的迭代法(公式)()()111f x B x k k +=+称为雅可比(Jacobi)迭代法(公式),用向量的分量来表示,则为⎩⎨⎧[],...,,k ,n ,...,i x a ba xnij j )k (j j i iii)k (i21021111==∑-=≠=+其中()()()()()Tn x ,...x ,x x 002010=为初始向量.由此看出,雅可比迭代法公式简单,每迭代一次只需计算一次矩阵和向量的乘法.在电算时需要两组存储单元,以存放()k x 及()1+k x . 2高斯赛德尔迭代法原理由雅可比迭代公式可知,在迭代的每一步计算过程中是用的全部分量来计算的所有分量,显然在计算第i 个分量时,已经算出最新的分量,但没被利用。

matlab在科学计算中的应用 线性方程组的直接求解-分析方法-文档资料

matlab在科学计算中的应用 线性方程组的直接求解-分析方法-文档资料

>> jacobi(a,b,[0;0;0])
n= 11
ans =
0.9958
0.9579 0.7916
4.3.2Байду номын сангаасGauss-Seidel迭代法
Jacobi迭代:x(k1) Bx(k) f
x(k+1)

1
x(k+1) 2

b21x1(k )
b12 x2(k )
b1n xn(k ) f1 b2n xn(k ) f2 ,
16 4 8
例:进行Cholesky分解。
A


4
5
4
8 4 22
>> A=[16 4 8; 4 5 -4; 8 -4 22];
>> D=chol(A)
D=
412
0 2 -3
003
●利用矩阵的LU、QR和cholesy分解求方程组的解
(1)LU分解:
A*X=b
变成 L*U*X=b
a1n xn b1 a2n xn b2
ann xn bn
其中det( A) det(aij ) 0,不妨设aii 0(i 1, 2,..., n)
x1


x2

b21x1
b12 x2
b1n xn f1 b2n xn f2 ,
迭代公式为: X(k+1)= (D-wL)-1((1-w)D+wU)x(k) + w(D-wL)-1 b 其中:w最佳值在[1, 2)之间,不易计
算得到,因此 w通常有经验给出。
function y=sor(a,b,w,x0) D=diag(diag(a));U=-triu(a,1);L=-tril(a,-1); M=(D-w*L)\((1-w)*D+w*U); f=(D-w*L)\b*w; y=M*x0+f; n=1; while norm(y-x0)>=1.0e-6

MATLAB实验一 解线性方程组的直接法

MATLAB实验一 解线性方程组的直接法
分量的有效位数如何随 变化,它与条件数有何关系?当 n 多大时 x 连一位有效数字也
没有了?
将每种情形的两个结果进行表格对比,如: n=6 时: GAUSS 列主消去法求得的 x
x 的有效数字
四、实验结果
五、讨论分析 (对上述算例的计算结果进行比较分析, 主要说清 matlab 的算符与消去法的适 用范围不同,自己补充)
A(index,:) = A(k,:); A(k,:) = temp; temp = b(index);b(index) = b(k); b(k) = temp; %消元过程 for i=k+1:n m=A(i,k)/A(k,k); %消除列元素 A(i,k+1:n)=A(i,k+1:n)-m*A(k,k+1:n); b(i)=b(i)-m*b(k); end end %回代过程 x(n)=b(n)/A(n,n); for k=n-1:-1:1; x(k)=(b(k)-A(k,k+1:n)*x(k+1:n)')/A(k,k); end x=x'; end 然后调用 gaussMethod 函数,来实现列主元的高斯消去法。在命令框中输入 下列命令:
输出结果如下:
利用 LU 分解法及 matlab 程序源代码: function [L,U]=myLU(A) %实现对矩阵 A 的 LU 分解,L 为下三角矩阵 A[n,n]=size(A);
L=zeros(n,n); U=zeros(n,n); for i=1:n L(i,i)=1; end for k=1:n for j=k:n U(k,j)=A(k,j)-sum(L(k,1:k-1).*U(1:k-1,j)'); end for i=k+1:n L(i,k)=(A(i,k)-sum(L(i,1:k-1).*U(1:k-1,k)'))/U(k,k); end end 在命令框中输入下列命令:

实验一用matlab求解线性方程组

实验一用matlab求解线性方程组

实验1.1 用matlab 求解线性方程组第一节 线性方程组的求解 一、齐次方程组的求解rref (A ) %将矩阵A 化为阶梯形的最简式null (A ) %求满足AX =0的解空间的一组基,即齐次线性方程组的基础解系【例1】 求下列齐次线性方程组的一个基础解系,并写出通解:我们可以通过两种方法来解: 解法1:>> A=[1 -1 1 -1;1 -1 -1 1;1 -1 -2 2]; >> rref(A) 执行后可得结果: ans=1 -1 0 0 0 0 -1 1 0 0 0 0 由最简行阶梯型矩阵,得化简后的方程⎪⎩⎪⎨⎧=+--=+--=-+-02200432143214321x x x x x x x x x x x x取x2,x4为自由未知量,扩充方程组为即提取自由未知量系数形成的列向量为基础解系,记所以齐次方程组的通解为解法2: clearA=[1 -1 1 -1;1 -1 -1 1;1 -1 -2 2];B=null(A, 'r') % help null 看看加个‘r ’是什么作用,若去掉r ,是什么结果?执行后可得结果: B=1 0 1 0 0 1 0 1⎩⎨⎧=-=-004321x x x x ⎪⎪⎩⎪⎪⎨⎧====44432221x x x x x x x x ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡+⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡11000011424321x x x x x x ,00111⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=ε,11002⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=ε2211εεk k x +=易见,可直接得基础解系所以齐次方程组的通解为二、非齐次线性方程组的求解 Matlab 命令的基本格式:X =A\b %系数阵A 满秩时,用左除法求线性方程组AX =b 的解注意:A/B 即为AB -1, 而A\B 即为A -1B.C =[A,b];D =rref(C) % 求线性方程组AX =b 的特解,即D 的最后一列元素【例2】 求下列非齐次线性方程组的解:,00111⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=ε,11002⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=ε⎪⎪⎪⎩⎪⎪⎪⎨⎧=+=++=++=++=+150650650651655454354332121x x x x x x x x x x x x x 2211εεk k x +=解: clearA=[5 6 0 0 0;1 5 6 0 0;0 1 5 6 0;0 0 1 5 6;0 0 0 1 5]; b=[1;0;0;0;1];format rational %采用有理数近似输出格式,比较format short 看看x=A\b执行后可得所求方程组的解. 作业:【第一题】 求下列非齐次线性方程组的通解.A=[1 2 3 1;1 4 6 2;2 9 8 3;3 7 7 2] B=[3;2;7;12] format rational x=A\B x =⎪⎪⎩⎪⎪⎨⎧=+++=+++=+++=+++1227737389222643324321432143214321x x x x x x x x x x x x x x x x42/31/2684838239393950-7/3【第二题】计算工资问题一个木工,一个电工,一个油漆工,三个人相互同意彼此装修他们自己的房子。

线性方程组的直接解法及matlab的实现

线性方程组的直接解法及matlab的实现

本科毕业论文( 2010 届)题目线性方程组的直接解法及matlab的实现学院数学与信息工程学院专业数学与应用数学班级2006级数学1 班学号**********学生姓名胡婷婷指导教师王洁完成日期2010年5月摘要随着科技技术的发展及人类对自然界的不断探索模拟.在自然科学和工程问题中的很多问题的解决常常归结为线性代数问题!本文的主要内容是对线性方程组求解方法的探讨,主要介绍了四种求解线性方程组的方法,第一种是教科书上常见的消元法,我们称之为基本法.第二种方法是标准上三角形求解法,即将增广矩阵经过初等变换后化成标准上三角形,然后求解.它改进了一般教科书上的常见方法,与常见方法比较有如下优点:1)规范了自由未知量的选取;2)只用矩阵运算;3)减少了计算量.第三种方法是对特定的方程组(系数矩阵A为n阶对称正定矩阵,且A的顺序主子式均不为零.)的求解方法进行描述,并且为这种线性方程的求解提供了固定的公式化的方法.第四种方法是对现在实际问题中常常会遇到的系数矩阵为三对角矩阵的方程组的求解方法.同时给出这几种方法的数值解法(matlab程序),由于运用电脑软件求解,所以必须考虑计算方法的时间、空间上的效率以及算法的数值稳定性问题,所以针对不同类型的线性方程组有不同的解法.但是,基本的方法可以归结为两大类,即直接法和迭代法.关键词高斯消去法;三角分解法;乔莱斯基分解法;追赶法AbstractSystems of linear equations are associated with many problems in engineering and scinence ,as well as with applications of mathematics to the social sciences and the quantitative study of business and economic problems.The main content of this article is the method for solving linear equations, we introduce four methods for solving linear equations in this paper. The first is the elimination method which is commonly found in textbooks, and we call the Basic Law. The second method is Standard on the triangle Solution, that first change Augmented matrix into standards in primary triangle, and then solving. It improves the general textbook on common methods, compared with the common method has the following advantages:1) Specification of the free choice of unknowns; 2)Only matrix operations;3) Reduce the computation. The third method describes a way to solve a Specific equations(N coefficient matrix A is symmetric positive definite matrix, and A are not zero-order principal minor), And for this linear equation provides a fixed formulaic approach. The fourth method is to present practical problems often encountered in the coefficient matrix is tridiagonal matrix method for solving the equations. These methods are given numerical solution of (matlab program), As the use of computer software to solve, it is necessary to consider ways of computing time and space efficiency and numerical stability of algorithms, Therefore, different types of linear equations have a different solution. However, the basic method can be classified into two categories, namely direct methods and iterative methods.Key wordsGaussian elimination; Triangular decomposition; Cholesky decomposition method;Thomas algorithm目录1. 引言 (1)2.相关知识 (2)2.1 向量和矩阵 (2)2.2 特殊矩阵 (3)3.问题叙述 (3)4.问题分析 (4)4.1高斯分解法 (4)4.2三角分解法 (6)4.3乔莱斯基分解法 (6)4.4追赶法 (7)5. 举例说明与总结 (9)5.1举例说明 (9)5.1.1高斯分解的matlab程序方法 (9)5.1.2三角分解法的matlab程序方法 (10)5.1.3乔莱斯基分解法的matlab程序方法 (11)5.1.4追赶法的matlab程序方法 (13)5.2总结 (14)参考文献 (16)谢辞 (17)线性方程组的直接解法及matlab的实现Direct solution of linear equations and matlab implementation数学与信息工程学院数学与应用数学专业胡婷婷指导教师:王洁1.引言随着科技技术的发展及人类对自然界的不断探索模拟.在自然科学和工程问题中的很多问题的解决常常归结为线性代数问题!例如电学中的网络问题,用最小二乘法求实验数据拟合问题(如大地测量数据处理),解非线性方程组问题,用差分法或有限元法解常微分方程、偏微分方程边值问题等最终都归结于解线性代数方程组.从实际数据来看,这些方程组的系数矩阵大致分为两种,一种是低阶稠密矩阵(阶数不超过150).另一种是大型稀疏矩阵(矩阵阶数高且零元素较多).所以,现在我们需要对求线性方程组的方法进行探究,以便能够找到一些简便的方法来加以应用!本文主要就线性方程组的直接解法予以讨论.线性方程组是线性代数的主要内容,包括线性方程组有解性的判定、消元法解线性方程组和线性方程组解的结构. 它与矩阵、向量的内容密切相关,与矩阵、向量组相关的许多重要结论都是线性方程组有关结论的应用和推广. 如:一个向量是否可以由一个向量组线性表示、表示形式是否唯一往往与非齐次线性方程组是否有解、有唯一解还是无穷多解是等价的;一个向量组是否线性相关与齐次线性方程组是否有非零解是等价的等等.而且随着现代工业的发展,线性方程组的应用出现在各个领域,伴随着大量方程和多未知数的出现, 例如电学中的网络问题,用最小二乘法求实验数据拟合问题(如大地测量数据处理),解非线性方程组问题,用差分法或有限元法解常微分方程、偏微分方程边值问题等最终都归结于解线性代数方程组。

MatLab解线性方程组

MatLab解线性方程组

MatLab解线性方程组MatLab解线性方程组当齐次线性方程AX=0,rank(A)=r<n时,该方程有无穷多个解,怎样用matlab求它的一个基本解呢?< p="">用matlab 中的命令 x=null(A, r )即可.其中:r=rank(A)A=[ 1 1 1 1 -3 -1 11 0 0 0 1 1 0-2 0 0 -1 0 -1 -2]用matlab 求解程序为:A=[1 1 1 1 -3 -1 1;1 0 0 0 1 1 0;-2 0 0 -1 0 -1 -2];r=rank(A);y=null(A, r )得到解为:y=[ 0 -1 -1 0-1 2 1 11 0 0 00 2 1 -20 1 0 00 0 1 00 0 0 1]其列向量为Ay=0的一个基本解一:基本概念1.N级行列式A:|A|等于所有取自不同行不同列的n个元素的积的代数和。

2.矩阵B:矩阵的概念是很直观的,可以说是一张表。

3.线性无关:一向量组(a ,a ,…. a )不线性相关,即没有不全为零的数k ,k ,……kn 使得:k1* a +k2* a +…..+kn*an=04. 秩:向量组的极在线性无关组所含向量的个数称为这个向量组的秩。

5.矩阵B的秩:行秩,指矩阵的行向量组的秩;列秩类似。

记:R(B)6.一般线性方程组是指形式: (1)其中x1,x2,…….xn为n个未知数,s为方程个数。

记:A*X=b7.性方程组的增广矩阵: =8. A*X=0 (2)二:基本理论三种基本变换:1,用一非零的数乘某一方程;2,把一个方程的倍数加到另一个方程;3互换两个方程的位置。

以上称初等变换。

消元法(理论上分析解的情况,一切矩阵计算的基础)首先用初等变换化线性方程组为阶梯形方程组,把最后的一些恒等式”0=0”(如果出现的话)去掉,1:如果剩下的方程当中最后的一个等式是零等于一非零数,那么方程组无解;否则有解,在有解的情况下,2:如果阶梯形方程组中方程的个数r等于未知量的个数,那么方程组有唯一的解,3:如果阶梯形方程组中方程的个数r小于是未知量的个数,那么方程组就有无穷个解。

解线性方程组直法Matlab实现

解线性方程组直法Matlab实现

解线性方程组的直接法的Matlab实现姓名**********摘要:给出用MATLAB解线性方程组的各种方法,用MATLAB直接操作,不用编程,便可立即求出线性方程组的解.方法直观、简便、速度快,具有较强的实用性,另外提供了Jacobi迭代法程序.关键字:线性方程组数值解程序设计MATLAB Jacobi迭代法数据结构1 引言线性方程组Ax=b是我们在科学和工程计算中经常出现的数学模型,大量的科技与工程实际问题,常常归结为解线性代数方程组,有关线性方程组解的存在性和唯一性在“线性代数”理论中已经作过详细介绍,本章的主要任务是讨论系数行列式不为零的n阶非齐次线性方程组Ax=b的两类主要求方法:直接法(精确法)和迭代法。

对它的解法我们最熟悉的就是主元消去法,但它只是适用于A是低价稠密的矩阵,对于由工程技术中产生的大型稀疏矩阵方程组(即A的阶数n很大,但零元素较多,例如求某些偏微分方程数值解所产生的线性方程组,n≥104),还需利用迭代法求解。

如在计算机内存和运算两方面,都可以根据A中有大量零元素的特点采用迭代法。

本文将介绍两种常见的迭代:Jacobi 迭代法和Gauss-Seidel迭代,并用迭代法在数学软件Matlab上实现线性方程组的解。

1迭代法的基本思想迭代法是按照某种规则构造一个向量序列{x(k)},使其极限向量x*是Ax=b的精确解。

因此,对迭代法来说一般有下面几个问题:(1)如何构造迭代序列?(2)构造的迭代法序列是否收敛?在什么情况下收敛?(3)如果收敛,收敛的速度如何?我们应该给予量的刻划,用以比较各种迭代法收敛的快慢。

2 相关知识线性方程组的概念及分类线性方程组的一般形式为a11x1+a12x2+…+a1nxn=b1a21x1+a22x2+…+a2nxn=b2am1x1+am2x2+…+amnxn=b{n(1)若记X=x1x2(…x n)T,b=b1 b2(…bn)TA=a11 a12…a1na21 a22…a2n…am1 am2…a mn则线性方程组(1)记为AX=b.(2)若b的元素不全为零,则称方程组(1)为非齐次线性方程组;若b的元素全为零,即b1=b2=…=bn=0,则AX=0.(3)并称方程组(3)为齐次线性方程组,也称作方程组(2)的导出方程组,称(A b)=a11 a12…a1n…b1a21 a22…a2n…b2…am1 am2…amn…b n为线性方程组(1)的增广矩阵,记作A.若在方程组(1)中,当mn,即方程的个数多于未知数的个数时,方程组称为超定方程组.3、算法用高斯消元法解线性方程组bAX的MATLAB程序输入的量:系数矩阵A和常系数向量b;输出的量:系数矩阵A和增广矩阵B的秩RA,RB, 方程组中未知量的个数n和有关方程组解X及其解的信息.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,所以此方程组无解.') returnend if RA==RB if RA==n disp('请注意:因为RA=RB=n,所以此方程组有唯一解.') X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1(1)LU分解法lu 分解法解线性方程组function x=luxiaoyuan(A,b)[m,n]=size(A);[l u]=lu(A);s=inv(l)*[A,b];x=ones(m,1);for i=m:-1:1h=s(i,m+1);for j=m:-1:1;if j~=ih=h-x(j)*s(i,j);endendx(i)=h/s(i,i)end(2)高斯消元法高斯消元法的基本思想:Ax=b其对应的增广矩阵为为(A,b)对线性方程组的增广矩阵进行以下一系列初等变换(1)对换(A,b)某两行的顺序(2)(A,b)中的某行乘以一个不为零的数。

MATLAB计算方法3解线性方程组计算解法ppt课件

MATLAB计算方法3解线性方程组计算解法ppt课件

1 c1
y1
2 c2
y2
n1
cn1
yn1
n yn
回代过程为 xi
xn yn / n
x2
d2
给定
an1
bn1
cn1
xn1
d
n1
an bn xn dn
(三对角方程组)
且按行对角占优:b 1 c1 , bi ai ci (aici 0), bn an (i 2, , n 1)
36
利用Gauss消元法得到同解的三角方程为
L ( LK L1 )1 ,则
A LU (下三角 上三角)
(三角因子分解) 18
定义3.1 A LU 叫 A 的三角(因子)分解,其中 L是
下三角, U是上三角。
定义3.2 若 L为单位下三角阵(对角元全为1),
U 为上三角阵,则称 A LU 为Doolittle分解;
若L是L 下三角,U 是单位上三角,则称 A LU
设方程组Ax b, 对其增广矩阵作LU分解时,为了避免
k 1
用小ukk作除数,引进量si aik liquqk (i k, k 1, , n) q1
于 是ukk
sk ,比较 |
si
| 的大小, 取 max kin
|
si
| (|
st
|)为ukk ,
并交换矩阵的第t行与第k行, 且元素的足码也相应改变。
l n1
l
n2
l
nn
30
由矩阵乘法
(1)
1)
l2 11
a11
l11
a11
(取正)
2) L第1行 LT第j列 (j 2, ,n)
l11l j1

MATLAB解代数方程

MATLAB解代数方程

例 用Jacobi迭代法求解下列线性方程组。设迭代初值为0, 迭代精度为10-6。 在命令中调用函数文件Jacobi.m,命令如下: A=[10,-1,0;-1,10,-2;0,-2,10]; b=[9,7,6]'; x= [x,n]=jacobi(A,b,[0,0,0]',1.0e-6) 0.9958
x= -66.5556 25.6667 -18.7778 26.5556
(2) QR分解 对矩阵X进行QR分解,就是把X分解为一个正交矩阵Q和一 个上三角矩阵R的乘积形式。QR分解只能对方阵进行。 MATLAB的函数qr可用于对矩阵进行QR分解,其调用格 式为: [Q,R]=qr(X):产生一个正交矩阵Q和一个上三角矩阵R,使 之满足X=QR。 [Q,R,E]=qr(X):产生一个一个正交矩阵Q、一个上三角矩阵 R以及一个置换矩阵E,使之满足XE=QR。 实现QR分解后,线性方程组Ax=b的解x=R\(Q\b)或 x=E(R\(Q\b))。
-1.7556 n= n1 =
4
1011
非线性方程数值求解
单变量非线性方程求解 在MATLAB中提供了一个fzero函数,可以用来求单变量 非线性方程的根。该函数的调用格式为: z=fzero('fname',x0,tol,trace) 其中fname是待求根的函数文件名,x0为搜索的起点。一个 函数可能有多个根,但fzero函数只给出离x0最近的那个 根。tol控制结果的相对精度,缺省时取tol=eps,trace• 指 定迭代信息是否在运算中显示,为1时显示,为0时不显示, 缺省时取trace=0。
例 用LU分解求解线性方程组。 命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; [L,U]=lu(A); x=U\(L\b) 采用LU分解的第2种格式,命令如下: [L,U ,P]=lu(A); x=U\(L\P*b)

用matlab解线性方程组

用matlab解线性方程组

用matlab解线性方程组2008-04-12 17:00一。

高斯消去法1.顺序高斯消去法直接编写命令文件a=[]d=[]'[n,n]=size(a);c=n+1a(:,c)=d;for k=1:n-1a(k+1:n, k:c)=a(k+1:n, k:c)-(a(k+1:n,k)/ a(k,k))*a(k, k:c); %消去endx=[0 0 0 0]' %回带x(n)=a(n,c)/a(n,n);for g=n-1:-1:1x(g)=(a(g,c)-a(g,g+1:n)*x(g+1:n))/a(g,g)end2.列主高斯消去法*由于“[r,m]=max(abs(a(k:n,k)))”返回的行是“k:n,k”内的第几行,所以要通过修正来把m 改成真正的行的值。

该程序只是演示程序,真正机器计算不需要算主元素所在列以下各行应为零的值。

直接编写命令文件a=[]d=[] '[n,n]=size(a);c=n+1a(:,c)=d; %(增广)for k=1:n-1[r,m]=max(abs(a(k:n,k))); %选主m=m+k-1; %(修正操作行的值)if(a(m,k)~=0)if(m~=k)a([k m],:)=a([m k],:); %换行enda(k+1:n, k:c)=a(k+1:n, k:c)-(a(k+1:n,k)/ a(k,k))*a(k, k:c); %消去endendx=[0 0 0 0]' %回带x(n)=a(n,c)/a(n,n);for g=n-1:-1:1x(g)=(a(g,c)-a(g,g+1:n)*x(g+1:n))/a(g,g)end3.分别用顺序高斯消去法和列主高斯消去法解方程组a*x=d,并比较结果a=[0 1 2 3;9 11 23 34;62.5 23.4 15.5 17.2;192.01 124 25.1 59.3] d=[1;1;1;1]顺序高斯消去法:提示“Warning: Divide by zero.” x =NaN NaN NaN NaN 列主高斯消去法:x =-1.2460 2.8796 5.5206 -4.3069由此可见列主高斯消去法可以解决顺序高斯消去法所不能解决的问题。

利用Matlab求解线性方程组

利用Matlab求解线性方程组

利⽤Matlab求解线性⽅程组利⽤⾼斯消元法编写了⼀个能够计算线性⽅程组,⽆解,有唯⼀解,⽆穷多解情况的matlab代码。

程序说明:变量n1表⽰系数矩阵或者增⼴矩阵的列数。

当增⼴矩阵的秩与系数矩阵的秩相等时(⽅程有唯⼀解时),n1表⽰系数矩阵的列数。

当⽅程组⽆解或者有⽆数多解时,n1表⽰增⼴矩阵的列数。

处理办法为:if sum(C)~=num1&&j==n1&&flag1==0%系数矩阵在消元过程中,若出现对⾓线及其⼀下元素均为0时,将n1变为增⼴矩阵的列数。

n1=n1+1;%在j等于系数矩阵的列时,n1增加1,变为增⼴矩阵的列。

flag1=1;%flag1保证if内的语句,只执⾏1次。

end当j执⾏到系数矩阵的列n1,且sum(C)~=num1(即系数消元过程中,出现了对⾓线及其⼀下元素均为0,如图1所⽰)时,将n1+1.图1function x=liner_equ_v2(A,b)%该函数⽤于求解线性⽅程组%输⼊参数,A:⽅程组的系数矩阵,b:⽅程组的常数向量(列向量)%输出参数,x:⽅程组的解%时间,2021.10.3%版权所有⼈,zsy%%使⽤实例% A=[1,1,-3,-1;% 3,-1,-3,4;% 1,5,-9,-8];% b=[1;4;0];B=[A,b];%增⼴矩阵[m,n]=size(B);num1=0;for i=1:mnum1=num1+i;endC=zeros(1,n);i=1;j=1;n1=n-1;%系数矩阵或增⼴矩阵的列数flag1=0;while j<=n1if B(i,j)~=0B(i,:)=B(i,:)/B(i,j);for k=i+1:mB(k,:)=B(k,:)-B(k,j)*B(i,:);endC(1,j)=i;if sum(C)~=num1&&j==n1&&flag1==0%系数矩阵在消元过程中,若出现对⾓线及其⼀下元素均为0时,将n1变为增⼴矩阵的列数。

matlab实验5 线性方程组的解法

matlab实验5  线性方程组的解法

马千里 热动71 970669实验5 线性方程组的解法实验目的1. 用MA TLAB 软件掌握线性方程组的解法,对迭代法的收敛性和解的稳定性作初步分析。

2. 通过实例练习用线性方程组求解实际问题。

实验内容预备:编写雅可比迭代和高斯—塞得尔迭代的程序 雅可比迭代的程序:function xxx=ykb(A,b) D=diag(diag(A)); U=-triu(A,1); L=-tril(A,-1); B1=inv(D)*(L+U); f=inv(D)*b;x(1:length(b),1)=0; xx=x+1;while norm(x-xx)>1e-6 xx=x;x=B1*x+f; end xxx=x;1. 用MA TLAB 软件的“lu ”(LU 分解),“ \ ”,以及雅可比迭代和高斯—塞德尔迭代解方程组Ax=b (A 如下,b 任意,比较分析其结果包括迭代法收敛或不收敛的原因)。

a. A=[1,2,-1;1,1,1;2,2,1]; 设b=[1; 2; 1]在MA TLAB 下运行:》A=[1,2,-1;1,1,1;2,2,1];b=[1; 2; 1]; 用LU 分解方法: 》[L U p]=lu(A)L =1.0000 0 00.5000 1.0000 00.5000 0 1.0000》x=(L*U\p*b)’ x =-9 8 3 用除号“\”: 》x=(A\b)’ x =-9 8 3 用雅可比迭代法: 》x=ykb(A,b) x =高斯—塞得尔迭代的程序:function xxx=guass(A,b) D=diag(diag(A)); U=-triu(A,1); L=-tril(A,-1); B1=inv(D-L)*U; f=inv(D-L)*b;x(1:length(b),1)=0; xx=x+1;while norm(x-xx)>1e-8 xx=x;x=B1*x+f; end xxx=x;U = 2.0000 2.0000 1.0000 0 1.0000 -2.5000 0 0 0.5000 p = 0 0 1 1 0 0 0 1 0-9 8 3迭代公式中B1 = f=0 -2 2 1-1 0 -1 2-2 -2 0 1 因为ρ(B1)=0.126<1所以是收敛的用高斯—塞德尔迭代法:因为迭代公式中B1= f=0 -2 2 10 2 -3 10 0 2 3因为ρ(B1)=2>1所以迭代是不收敛的b.A为n阶Hilbert矩阵,n=3~10。

数值分析MATLAB科学计算—线性方程组

数值分析MATLAB科学计算—线性方程组

科学计算—理论、方法及其基于MATLAB的程序实现与分析 三、 解线性方程组(线性矩阵方程)解线性方程组是科学计算中最常见的问题。

所说的“最常见”有两方面的含义:1) 问题的本身是求解线性方程组;2) 许多问题的求解需要或归结为线性方程组的求解。

关于线性方程组B A x B Ax 1-=⇒=(1)其求解方法有两类:1) 直接法:高斯消去法(Gaussian Elimination ); 2) 间接法:各种迭代法(Iteration )。

1、高斯消去法1) 引例考虑如下(梯形)线性方程组:()⎪⎩⎪⎨⎧==+==+-=⇒⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--⇔⎪⎩⎪⎨⎧==-=+-5.0141315.3221122004301211214322332321321332321x x x x x x x x x x x x x x x 高斯消去法的求解思路:把一般的线性方程组(1)化成(上或下)梯形的形式。

2)高斯消去法——示例考虑如下线性方程组:⎪⎪⎪⎭⎫ ⎝⎛-=⎪⎪⎪⎭⎫ ⎝⎛⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡---⇔⎪⎩⎪⎨⎧=++-=-+-=+-306015129101.2001.221113060129501.2001.221321321321321x x x x x x x x x x x x 1) 第一个方程的两端乘12加到第二个方程的两端,第一个方程的两端乘-1加到第三个方程的两端,得⎪⎪⎪⎭⎫⎝⎛-=⎪⎪⎪⎭⎫ ⎝⎛⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--3060031110001.0001.00111321x x x2) 第二个方程的两端乘001.010-加到第三个方程的两端,得 ⎪⎪⎪⎭⎫⎝⎛-=⎪⎪⎪⎭⎫ ⎝⎛⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--60600311010001.0001.00111321x x x3) 从上述方程组的第三个方程依此求解,得()⎪⎩⎪⎨⎧==+-==+-=600300001.03100024011332321x x x x x x 3)高斯消去法的不足及其改进——高斯(全、列)主元素消去法在上例中,由于建模、计算等原因,系数2.001而产生0.0005的误差,实际求解的方程组为⎪⎪⎪⎭⎫⎝⎛-=⎪⎪⎪⎭⎫ ⎝⎛⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡---306015129101.20005.22111321x x x ⎪⎩⎪⎨⎧===⇒70.4509.30142.2565321x x x注:数值稳定的算法高斯列主元素消去法就是在消元的每一步选取(列)主元素—一列中绝对值最大的元取做主元素,高斯列主元素消去法是数值稳定的方法。

matlab求线性方程组的解

matlab求线性方程组的解

matlab求线性方程组的解求解线性方程分为两种方法–直接法和迭代法常见的方法一共有8种直接法Gauss消去法Cholesky分解法迭代法Jacobi迭代法Gauss-Seidel迭代法超松弛迭代法共轭梯度法Bicg迭代法Bicgstab迭代法这里我从计算代码的角度来解释一下,代码按以下顺序给出。

把方程组直接带入已知条件,就可以得到答案。

适用条件Gauss消去法:求解中小规模线性方程(阶数不过1000),一般用于求系数矩阵稠密而且没有任何特殊结构的线性方程组Cholesky分解法:对称正定方程优先使用,系数矩阵A是n 阶对称正定矩阵Jacobi迭代法非奇异线性方程组,分量的计算顺序没有关系Gauss-Seidel迭代法与Jacobi迭代法相似,但计算的分量不能改变超松弛迭代法Jacobi迭代法和Gauss-Seidel迭代法的加速版,由Gauss-Seidel迭代法改进而来,速度较快共轭梯度法需要确定松弛参数w,只有系数矩阵具有较好的性质时才可以找到最佳松弛因子。

但好处是不用确定任何参数,他是对称正定线性方程组的方法也是求解大型稀疏线性方程组最热门的方法Bicg迭代法本质是用双共轭梯度求解线性方程组的方法,对求解的方程没有正定性要求Bicgstab迭代法本质是用稳定双共轭梯度求解线性方程组的方法,对求解的方程没有正定性要求Gauss消去法第一、二个函数ltri、utri是一定要掌握的,后面的几乎每个函数都要用到ltri简单来说,当Ly=bb,L(非奇异下三角矩阵)已知求yfunction y =ltri(L,b)n=size(b,1);y=zeros(n,1);for j =1:n-1y(j)=b(j)/L(j,j);b(j+1:n)=b(j+1:n)-y(j)*L(j+1:n,j); endy(n)=b(n)/L(n,n);utri简单来说,当Ux=yy,U(非奇异上三角矩阵)已知求xfunction x =utri(U,y)n=size(y,1);x=zeros(n,1);for j = n:-1:2x(j)=y(j)/U(j,j);y(1:j-1)=y(1:j-1)-x(j)*U(1:j-1,j);endx(1)=y(1)/U(1,1);gauss算法,计算时粘贴过去就好function[L,U]=gauss(A)n=size(A,1);for k =1:n-1A(k+1:n,k)=A(k+1:n,k)/A(k,k);A(k+1:n,k+1:n)=A(k+1:n,k +1:n)-A(k+1:n,k)*A(k,k+1:n);endL=tril(A,-1)+eye(n);U=triu(A);使用例子已经知道一个线性方程组,这里我就不写出数学形式了,A是系数矩阵,直接把上面写好的函数复制过来在运算就可以。

MATLAB线性方程组求解方法

MATLAB线性方程组求解方法
下面把该线性方程组问题用矩阵形式来表达,从而方便 MATLAB 7.0 计算。首先把 x 和 y 用列向量来表示,具体代码如下: x=(0:0.1:1)’; y=([-0.01 0.045 0.12 0.2 0.33 0.52 0.67 0.95 1.2 1.45 1.78])’; 然后构造系数矩阵 A,具体代码如下: A(:,1)=x’; A(:,2)=x’.^2; 此时方程组可以写成:A*[c1 c2]’=y,然后用反斜杠’\’来求系数 c1 和 c2,具体代 码如下: c=A\y 由上述语句得到如下代码: c= 0.2420 1.5407 最后,拟合得到 y=0.242*x+1.5407*x 2 。具体代码如下: y_fit=c(1)*x+c(2)*x.^2; plot(x,y_fit,’-’,x,y,’o’) 由上述语句得到如图 3-1 所示的拟合结果和原始数据的对比图。 图 3-1 拟合结果和原始数据对比 由图 3-1 可见,虽然拟合得到的结果与原始数据并不严格重合,但其差别比原始数据
——GW318 物联网实验室学术活动
MATLAB 线性方程组求解方法
1.线性方程组的问题 在工程计算中,一个重要的问题是线性方程组的求解。在矩阵表示法中,上述问题可以 表述为给定两个矩阵 A 和 B,是否存在惟一的解 X 使得 AX=B 或 XA=B。 例如,求解方程 3x=6 就可以将矩阵 A 和 B 看成是标量的一种情况,最后得出该方 程的 解为 x=6/3=2。 尽管在标准的数学中并没有矩阵除法的概念,但 MATLAB 7.0 采用了与解标量方程中 类 似的约定,用除号来表示求解线性方程的解。MATLAB 7.0 采用第 2 章介绍过的运算 符斜杠 ’/’和运算符反斜杠’\ ’来表示求线性方程的解,其具体含义如下: • X=A\B 表示求矩阵方程 AX=B 的解; • X=B/A 表示求矩阵方程 XA=B 的解。 对于 X=A\B,要求矩阵 A 和矩阵 B 有相同的行数,X 和 B 有相同的列数,X 的行 数等于 矩阵 A 的列数。X=B\A 行和列的性质则与之相反。 在实际情况中,形式 AX=B 的线性方程组比形式 XA=B 的线性方程组要常见得多。 因此 反斜杠’\’用得更多。本小节的内容也主要针对反斜杠’\’除法进行介绍。斜杠’/’ 除法的性质可以 由恒等变换式得到(B/A)’=(A’\B’)。 系数矩阵 A 不一定要求是方阵,矩阵 A 可以是 m×n 的矩阵,有如下 3 种情况: • m=n 恰定方程组,MATLAB7.0 会寻求精确解; • m>n 超定方程组,MATLAB7.0 会寻求最小二乘解; • m<n 欠定方程组,MATLAB7.0 会寻求基本解,该解最多有 m 个非零元素。 值得注意的是用 MATLAB 7.0 求解这种问题时,并不采用计算矩阵的逆的方法。针对 不 同的情况,MATLAB7.0 会采用不同的算法来解线性方程组。 2.线性方程组的一般解 线性方程组 AX=B 的一般解给出了满足 AX=B 的所有解。线性方程组的一般解可以通 过 下面的步骤得到。 • 解相应的齐次方程组 AX=0, 求得基础解。 可以使用函数 null()来得到基础解。 语 句 null(A) 返回齐次方程组 AX=0 的一个基础解,其他基础解与 null(A)是线性关系。 • 求非齐次线性方程组 AX=B,得到一个特殊解。 • 非齐次线性方程组 AX=B 的一般解等于基础解的线性组合加上特殊解。 在后面的章节将介绍求非齐次线性方程组 AX=B 特殊解的方法。 3.恰定方程组的求解

matlab解方程组

matlab解方程组
end
x
计算结果:
输入增广矩阵A=[10 -7 0 1 8;-3 2.099999 6 2 5.900001;5 -1 5 -1 5;2 1 0 2 1]
A = 10 -7 0 18
-3 21/10 6 2 59/10
5 -1 5 -1 5
2 1 0 2 1
第1次选列主元后的增广矩阵
A = 10 -7 01 8
-3 21/10 6 2 59/10
5 -1 5 -1 5
2 1 0 2 1
第1次消元后的增广矩阵
A = 10-7 0 1 8
0 * 6 23/10 83/10
0 5/2 5 -3/2 1
0 12/5 0 9/5-3/5
第2次选列主元后的增广矩阵
A = 10 -7 0 1 8
0 5/2 5 -3/21
第3次消元后的增广矩阵
A = 10 -7 0 1 8
0* 6 23/10 83/10
0 0 * * *
0 0 0 127/25 127/25
回代求解x = * -1 1 1
2列主元消去法以及相应的Matlab实现
从上述结果告诉我们,在采用高斯消去法解方程组时,消主元可能产生麻烦,故在这里我们介绍一种对高斯消去法的改进列主元消去法。首先在A的第1列中选取绝对值最大的元素作为主元素,例如 ,然后交换A的增广矩阵第1行与第 行,经第1次消元计算得 .重复上述过程,设计完成第k-1步的选主元素,交换两行及消元计算, 约化为
for i=k:n
C=L(i,1:k-1).*(U(1:k-1,k))';
L(i,k)=A(i,k)-sum(C);
end
for j=k+1:n
D=L(k,1:k-1).*(U(1:k-1,j))';
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

格式:
[Q,R] = qr(A)
求得正交矩阵Q和上三角阵R,Q和R满足 A=QR。
• 例:
>> A =[ 1 2 3;4 5 6; 7 8 9; 10 11 12];
>> [Q,R] = qr(A)
Q=
-0.0776 -0.8331 0.5456 -0.0478
-0.3105 -0.4512 -0.6919 0.4704
所以
X=R\(Q\b)
这三种分解,在求解大型方程组时很有用。其优点 是运算速度快、可以节省磁盘空间、节省内存。
• 三个变换
在线性方程组的迭代求解中,要用到系数
矩阵A的上三角矩阵、对角阵和下三角矩阵。 此三个变换在MATLAB中可由以下函数实现。
– 上三角变换:
格式 triu(A,1)
– 对角变换:
A


2
4
1

4 6 7
>> A=[1 2 3; 2 4 1; 4 6 7];
>> [l,u]=lu(A) % l=P-1 L
l=
0.2500 0.5000 1.0000
0.5000 1.0000 0
1.0000 0
0
u=
4.0000 6.0000 7.0000
0 1.0000 -2.5000
所以 X=U\(L\b) 这样可以大大提高运算速度。
例:求方程组
34xx11x22x2
x3 2x3
2 10
解:
11x1 3x2 x3 8
的一个特解。
>> A=[4 2 -1;3 -1 2;11 3 -1];
>> B=[2 10 8]';
>> D=det(A)
D=
aii1 l ik uki1 u ii1
i 1
aii l u ik ki u ii


k 1
k 1


i 1
ai1i l ik uki u i1i


k 1

•格式
L是一个单位下三角矩阵,u是一个上三角矩阵
1 2 3
例:用两种方法对A进行LU分解
-0.5433 -0.0694 -0.2531 -0.7975
-0.7762 0.3124 0.3994 0.3748
R=
-12.8841 -14.5916 -16.2992
0 -1.0413 -2.0826
0
0 -0.0000
0
0
0
• Cholesky(乔里斯基 )分解
格式: D=chol(A)
0
0 2.5000
>> [l,u,p]=lu(A)
l=
1.0000 0 0
0.5000 1.0000 0
0.2500 0.5000 1.0000
u=
4.0000 6.0000 7.0000
0 1.0000 -2.5000
00
2.5000
p=
001
010
100
-QR分解
将矩阵A分解成一个正交矩阵与一个上三角 矩阵的乘积。
格式 diag(A)
– 下三角变换:
格式 tril(A,-1)
1 2 2
例:对此矩阵做三种变换。
A


1
1
1

2 2 1
>> A=[1 2 -2;1 1 1;2 2 1]; %
1 2 2
>> triu(A,1) ans =
0 2 -2
A


1 2
1 2
10
>>[L,U]=lu(A) L=
0.3636 -0.5000 1.0000 0.2727 1.0000 0 1.0000 0 0 U= 11.0000 3.0000 -1.0000
0 -1.8182 2.2727 0 0 0.5000
>> X=U\(L\B) X=
0.4000 3.2000 6.0000 >> A*X ans = 2.0000 10.0000 8.0000
x Mx g 由此得迭代公式:
x(k1) Mx(k) g, k 0,1, 2,...... 其中x(0) n为任取的初始向量.
当k充分大时,x( k )即为原方程的近似解.
4.3.1 Jacobi迭代法
方程组:
a11x1 a12 x2 a21x1 a22 x2 an1x1 an2 x2
4.2.3 线性方程组的直接求解-分析方法
• 矩阵的三角分解: -LU分
u11 u12
AF

L U
I


l21
u22

ln1 ln2
u1n
u2
n


unn

a2ni2 ai1i l i1k uki u i1i


k 1


i2
1 1

001
000
>> tril(A,-1)
ans =
000
100
220
>> b=diag(A); b'
ans =
111
4.3 线性方程组的迭代解法
• 迭代法的一般形式 线性方程组:
Ax b 其中A (aij )为n阶非奇异方阵,b (b1,b2, ,bn )T . 构造同解方程组:

xn bn1x1 bn2 x2 bnn1xn1 fn
bij
aij aii
(i
j)
fi

bi aii
• 方程组
Ax=b
可写成
x=Bx+f
由此可构造迭代法:
x(k+1)=Bx(k)+f
16 4 8
例:进行Cholesky分解。
A


4
5
4
8 4 22
>> A=[16 4 8; 4 5 -4; 8 -4 22];
>> D=chol(A)
D=
412
0 2 -3
003
●利用矩阵的LU、QR和cholesy分解求方程组的解
(1)LU分解:
A*X=b
变成 L*U*X=b
(2)Cholesky分解
若A为对称正定矩阵,则Cholesky分解可将矩阵A 分解成上三角矩阵和其转置的乘积,
方程 A*X=b 变成 R’*R*X=b
所以 X=R\(R’\b)
(3)QR分解
对于任何长方矩阵A,都可以进行QR分解,其中Q 为正交矩阵,R为上三角矩阵的初等变换形式,即:
A=QR
方程 A*X=b 变形成 QRX=b
a1n xn b1 a2n xn b2
ann xn bn
其中det( A) det(aij ) 0,不妨设aii 0(i 1, 2,..., n)
x1


x2

b21x1
b12 x2
b1n xn f1 b2n xn f2 ,
相关文档
最新文档