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

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

本科毕业论文

( 2010 届)

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

学院数学与信息工程学院

专业数学与应用数学

班级2006级数学1 班

学号0604010127

学生姓名胡婷婷

指导教师王洁

完成日期2010年5月

摘要

随着科技技术的发展及人类对自然界的不断探索模拟.在自然科学和工程问题中的很多问题的解决常常归结为线性代数问题!

本文的主要内容是对线性方程组求解方法的探讨,主要介绍了四种求解线性方程组的方法,第一种是教科书上常见的消元法,我们称之为基本法.第二种方法是标准上三角形求解法,即将增广矩阵经过初等变换后化成标准上三角形,然后求解.它改进了一般教科书上的常见方法,与常见方法比较有如下优点:1)规范了自由未知量的选取;2)只用矩阵运算;3)减少了计算量.第三种方法是对特定的方程组(系数矩阵A为n阶对称正定矩阵,且A的顺序主子式均不为零.)的求解方法进行描述,并且为这种线性方程的求解提供了固定的公式化的方法.第四种方法是对现在实际问题中常常会遇到的系数矩阵为三对角矩阵的方程组的求解方法.同时给出这几种方法的数值解法(matlab程序),由于运用电脑软件求解,所以必须考虑计算方法的时间、空间上的效率以及算法的数值稳定性问题,所以针对不同类型的线性方程组有不同的解法.但是,基本的方法可以归结为两大类,即直接法和迭代法.

关键词

高斯消去法;三角分解法;乔莱斯基分解法;追赶法

Abstract

Systems 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 words

Gaussian 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).另一种是大型稀疏矩阵(矩阵阶数高且零元素较多).

所以,现在我们需要对求线性方程组的方法进行探究,以便能够找到一些简便的方法来加以应用!本文主要就线性方程组的直接解法予以讨论.

线性方程组是线性代数的主要内容,包括线性方程组有解性的判定、消元法解线性方程组和线性方程组解的结构. 它与矩阵、向量的内容密切相关,与矩阵、向量组相关的许多重要结论都是线性方程组有关结论的应用和推广. 如:一个向量是否可以由一个向量组线性表示、表示形式是否唯一往往与非齐次线性方程组是否有解、有唯一解还是无穷多解是等价的;一个向量组是否线性相关与齐次线性方程组是否有非零解是等价的等等.而且随着现代工业的发展,线性方程组的应用出现在各个领域,伴随着大量方程和多未知数的出现, 例如电学中的网络问题,用最小二乘法求实验数据拟合问题(如大地测量数据处理),解非线性方程组问题,用差分法或有限元法解常微分方程、偏微分方程边值问题等最终都归结于解线性代数方程组。所以寻找简便而且准确的求解方法就显得十分重要而且具有现实意义.因此对线性方程组解法的研究就显得十分必要.

从实际数据来看,这些方程组的系数矩阵大致分为两种,一种是低阶稠密矩阵(阶数不超过150).另一种是大型稀疏矩阵(矩阵阶数高且零元素较多).

本论文的主要内容是对线性方程组求解方法的探讨,主要介绍了四种求解线性方程组的方法,第一种是教科书上常见的消元法,我们称之为基本法.第二种方法是标准上三角形求解法,即将增广矩阵经过初等变换后化成标准上三角形,然后求解.它改进了一般教科书上的常见方法,与常见方法比较有如下优点:1)规范了自由未知量的选取;2)只用矩阵运算;3)减少了计算量.第三种方法是对特定的方程组(系数矩阵A 为n 阶对称正定矩阵,且A 的顺序主子式均不为零.)的求解方法进行描述,并且为这种线性方程的求解提供了固定的公式化的方法.第四种方法是对现在实际问题中常常会遇到的系数矩阵为三对角矩阵的方程组的求解方法.同时给出这几种方法的数值解法(matlab 程序),由于运用电脑软件求解,所以必须考虑方法的计算时间和空间效率以及算法的数值稳定性问题,所以针对不同类型的线性方程组有不同的解法.但是,基本的方法可以归结为两大类,即直接法和迭代法.

本文主要介绍的直接法,包括Gauss 消去法和它的变形——直接三角形法.以及特定方程组的解法乔莱斯基分解法、追赶法.和这几种方法运用计算机求解线性方程组的数值计算方法.

2.相关知识

2.1 向量和矩阵

用R

n

m ?表示全部n m ?实矩阵的向量空间,

C

n

m ?表示全部n m ?复矩阵的向量空

间.

?

????

????

???==?∈?mn m m n n ij n m a a a a a a

a a a a A A R 2

1

22221

11211)((称为m 行n 列矩阵).

[]

T

n n

x x x x R x 21

=?∈(称为n 维列向量)

[

]

n a a a A

21= ,其中

i

a 为A 的第i 列.

同理

??????

????????=T m T T b b b A 21,其中T i b 为A 的第i 行. 矩阵基本运算: (1)矩阵加法

)),,.(,n m n m n m ij ij ij R C R B R A b a c B A C ???∈∈∈+=+=其中.

(2)矩阵与标量的乘法

ij ij a c A C αα==

,.

(3)矩阵与矩阵的乘法

)

,,(,1

p m p n n m n

k kj ik ij R C R B R A b a c AB C ???=∈∈∈==∑.

(4)单位矩阵

[]n

n n R e e e I ?∈= 2

1

,其中

[]

.

,,2,1,0,,0,1,0,0n k e T

k ==

2.2 特殊矩阵

设n

n ij R

a A ?∈=][,则有 A 为:

(1)对角矩阵 如果当j i ≠时,0=ij a ; (2)三对角矩阵 如果当01=>-ij a j i 时,; (3)上三角矩阵 如果当0=>ij a j i 时,; (4)对称矩阵 如果T

A A =;

(5)正定矩阵 如果设A 是n 阶实系数对称矩阵, 如果对任何非零向量

[]n x x X ,,1 =都有0>AX X T

,就称A 正定.

3.问题叙述

比较下列用直接法解线性代数方程组的方法.设有线性代数方程组

m

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 =+++=+++=+++ 2211222221211

1212111

或写成矩阵形式

?????

???????=?????????????

?

???????

???m n mn m m n n b b b x x x a a a a a a a a a 21212

1

22221

11211,简记为 b AX =. 分别用高斯消元法,三角分解法,乔莱斯基分解法,追赶法来对方程b AX =进行求解.

4.问题分析

该方程组(例)的矩阵系数A 为非奇异矩阵.因此我们可以通过,高斯消元法,三角分解法,乔来斯基分解法,追赶法来进行求解.下面我就对该问题非别使用这几种方法来解决问题.

4.1.高斯消元法

对方程组

m

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 =+++=+++=+++ 22112212221211

1212111 (1)

首先检查1x 的系数,如果1x 的系数12111,,,m a a a 全为零,那么方程组(1)对1x 的系数没有任何限制,1x 就可以任意取,而方程组(1)可看作

m

x x ,,2 的方程组来解。如果1x 的系

数不全为零,那么利用矩阵的初等变换,分别把第一个方程的11

1

a a i -倍加到第i 个方程(i =2,…,m ).于是方程(1)就变成

m

n mn m n n n n b x a x a b x a x a b x a x a x a ''22'2

'21'222'1

1212111=++=++=+++ (2)

其中

.,,2;,,2,111

1

'

n j m i a a a a a

j i ij ij

==?-=

对(2)再按照上面的考虑进行变换,并且这样一步步做下去,最后就得到一个阶梯形方程组,不妨设所得的方程组为

000012

222221

11212111====++=++++=++++++

r r

n rn r rr n n r r n n r r d d x c x c d x c x c x c d x c x c x c x c (3)

其中.,,2,1,0r i c ii =≠方程组(3)中的“0=0”这样的恒等式可能不出现,也可能出现,这样去掉它们也不影响(3)的解,而且(1)与(3)是同解的.

如(3)中有方程10+=r d ,而01≠+r d 。这时不管n x x ,,1 取什么值都不能使它成为等式.故(3)无解,因而(1)无解.

当1+r d 是零或(3)中根本没有“0=0”的方程时,分两种情况: 1)r=n.这时阶梯性方程组为

n

n nn n n r r n n r r d x c d x c x c x c d x c x c x c x c ==++++=+++++

2

222221

11212111 (4)

其中n i c ii ,,2,1,0 =≠.由最后一个方程开始,11,,,x x x n n -的值就可以逐个地唯一地决定了.在这个情形,方程组(4),也就是方程组(1)有唯一的解.

2) r

r

n rn r r r r rr n n r r r r n n r r r r d x c x c x c d x c x c x c x c d x c x c x c x c x c =++=++++=+++++++++++

11,2

211,222221

111,11212111

其中r i c ii ,,2,1,0 =≠.把它改写成

n

rn r r r r r rr n

n r r r r n

n r r r r x c x c d x c x c x c d x c x c x c x c d x c x c x c --=--=++--=+++++++++

11,211,222222111,111212111 (5)

由此可见,任给n r x x ,,1 +一组值,就唯一地定出r x x x ,,,21 的值,也就是定出方程组(5)的一个解.一般地,由(5)我们可以把r x x x ,,,21 通过n r x x ,,1 +表示出来,这样一组表达式称为方程组(1)的一般解,而n r x x ,,1 +称为一组自由未知量.

3) 应该容易得到,n r >情形是不可能出现的.

4.2.三角分解法(LU 分解)

回顾高斯消元法的实质,是经过一系列的初等变换,将方阵A 分解为下三角矩阵L 与上三角矩阵U 的乘积

A=LU,

这里 , ??

???????

???=1112

21

m mi

l l l L ,??

???

?

???

???=mn n n u u u u u u U 22211211 .

对系数矩阵一旦实现了这种三角分解(称为LU 分解),那么此方程组就可写为等价形式

.,.b Ly y Ux b LUx ===则令于是,容易先解出y,再求出x.

4.3.乔莱斯基分解法

若A 为n 阶对称正定矩阵,切A 得顺序主子式均不为零.则A 可以唯一分解为 T

LDL A = 其中L 为单位下三角矩阵,D 为对角矩阵.

????

?

?????=n d d D 1 ,).,,3,2(,0/,0111

n i D D d D d i i i =>>>>-

于是 2

12

1

1

1

1D

D d d d d d d D n n n =?????????

????????

??

?=??????????=

则此时系数矩阵A 可写成

T T T

T

L L L D LD L D LD LDL A 1

12

1212

121

))((====

其中

2

11LD L = 为下三角矩阵,即:

??

???

??

??????????????

???=nn n n nn n n l l l l l l l l l l l l A

222121112

1

2221

11,其中).,,2,1(0n i l ii =>由矩阵乘法

及时),当k j l jk <=(0得ij jj jk j k ik jk n

k ik

ij l l l l l l

a +==

∑∑-==1

11

,

于是得到解对称正定方程组b Ax =的计算公式: 对于n j ,,2,1 =有

);

,,1.(/)(.,

)(.1

1

2

11

1

2

n j i l l l a l ②l a l ①jj j k jk ik ij ij j k jk jj jj +=-=-=∑∑-=-=

求解b Ax =,即求解两个三角形方程组: (1)Ly=b,求y; (2).,x y x L T

求=

).

1,,1,(/)(.).

,,2,1(/)(.1

1

1 -=-==-=∑∑+=-=n n i l x l

b x ④n i l y l b y ③ii

k n

i k ki

i i ii

i k k ik i i

4.4.追赶法

设三对角矩阵:

???????

?????

???

?=---n n

n n n b a c b a c b a c b A 111

222

1

1

. 考虑f Ax =,其中T n T n f f f f x x x x ][,][2

1

2

1

==.

且有:

.

0||||)();1,,3,2(0,|,|||||)(;

0||||)(11>>-=≠+≥>>n n i i i i i a b c n i c a c a b b c b a

将三角矩阵A 分解为LU A =(<1>),

其中??

?

????

?

????????=???????????

????

?=---1111,12

1

,

1

1

2

21

n n n

n n u u u U l a l a l a l L

比较<1>式两端的元素可得:

),,3,2(,,111111n i l u a b u l c l b i i i i i i i =+===----

于是有

)1,,2,1(,,11

1

111-=-==

=----n i u a b l l u u b l i i i i i i i i 求解方程组f Ax =可转变为先求解f Ly =,再求解y Ux =,其中

T n y y y y ),,,(21 =.

比较f Ly =和y Ux =的元素可得

)

,,3,2(11

11n i f y l y a f y l i

i i i i ==+=-

n

n i

i i i y x n i y x u x =-==++)

1,,2,1(1

由此可得解三对角方程组f Ax =的算法如下:

)

1,,2,1(,

),

,,3,2(/)(,

,/,

/,1

1111111111-=-===-=-====------n i x u y x y x n i l y a f y u a b l l c u l f y b l i i i i n n i i i i i i i i i i i i

5. 举例说明与总结

5.1举例说明

5.1.1高斯分解法的matlab 程序方法

高斯消去法求解方程组?????

???????=?????????????

?

???

????

???12344321

33212221

11114321x x x x . 根据高斯消去法,编制matlab 程序如下

首先建立一个M-file 文件,保存在work 中,文件名为magauss.m function x=magauss(A,b,flag)

%用途:Gauss 消去法解线性方程组Ax=b

%格式:x=guass(A,b,flag),A 为系数矩阵,b 为右端项,若flag=0,则不显示中间过程, %否则显示中间过程,默认为0,x 为解向量 if nargin<3,flag=0;end n=length(b); %消元 for k=1:(n-1)

m=A(k+1:n,k)/A(k,k);

A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n); b(k+1:n)=b(k+1:n)-m*b(k); A(k+1:n,k)=zeros(n-k,1); if flag~=0,Ab=[A,b],end end %回代

x=zeros(n,1);

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

再在工作窗口输入:

>> A=[1 1 1 1;1 2 2 2;1 2 3 3;1 2 3 4]; b=[4 3 2 1]';

>> x=magauss(A,b);x' 得计算结果 x =

5 0 0 -1

5.1.2三角分解法的matlab 程序方法

三角分解法解方程组??

?

??

???????????=???????

?????????????????????????------181641411441314231313324312111341254321x x x x x .

三角分解法的Matlab 程序 function [x,l,u]=maLU(A,b)

%用途:用LU 分解法解方程组Ax=b

%格式: [x,l,u]=maLU(A,b) A 为系数矩阵,b 为右端向量,返回解向量,l 返回下三角矩阵,u 返回上三角矩阵

%LU 分解

n=length(b);u=zeros(n,n) l=eye(n,n);u(1,:)=A(1,:); l(2:n,1)=A(2:n,1)/u(1,1); for k=2:n

u(k,k:n)=A(k,k:n)-l(k,1:k-1)*u(1:k-1,k:n);

l(k+1:n,k)=(A(k+1:n,k)-l(k+1:n,1:k-1)*u(1:k-1,k))/u(k,k);

end

%解下三角方程组Ly=b

y=zeros(n,1);

y(1)=b(1);

for k=2:n

y(k)=b(k)-l(k,1:k-1)*y(1:k-1);

end

%解上三角方程组Ux=y

x=zeros(n,1);

x(n)=y(n)/u(n,n);

for k=n-1:-1:1

x(k)=(y(k)-u(k,k+1:n)*x(k+1:n))/u(k,k);

end

在工作窗口输入

>> A=[2 -1 4 -3 1;-1 1 2 1 3;4 2 3 3 -1;-3 1 3 2 4;1 3 -1 4 4];

>> b=[11 14 4 16 18]';

>> [x,L,U]=maLU(A,b);x'

得计算结果

x =

1.0000

2.0000 1.0000 -1.0000 4.0000

5.1.3乔莱斯基分解法的matlab程序方法

5.1.2中的方程组的系数矩阵是对称正定的,所以可以运用乔莱斯基分解法来求解.

乔莱斯基分解法Matlab程序

function [x,l,d]=machol(A,b)

%用途:用cholesky分解法解方程组Ax=b

%LDL'分解

n=length(b);d=zeros(1,n);

l=eye(n,n);

d(1)=A(1,1);

l(2:n,1)=A(2:n,1)/d(1);

d(2)=A(2,2)-l(2,1)*l(2,1)*d(1);

for i=3:n

for j=2:(i-1)

s=0;

for k=1:(j-1) s=s+d(k)*l(i,k)*l(j,k);end

l(i,j)=(A(i,j)-s)/d(j);

end

s=0;

for j=1:(i-1) s=s+d(j)*l(i,j)*l(i,j)end

d(i)=A(i,i)-s

end

%求解下三角方程组Ly=b(向前消去法)

y=zeros(n,1);

y(1)=b(1);

for i=2:n

y(i)=b(i)-l(i,1:i-1)*y([1:i-1]);

end

%求解上三角方程组Dz=y

for i=1:n z(i)=y(i)/d(i);end

%求解上三角方程组L'x=z(回代法)

ll=l';x=zeros(n,1);x(n)=z(n);

for i=(n-1):-1:1

x(i)=z(i)-ll(i,i+1:n)*x(i+1:n);

end

x=x';

在工作窗口输入

>> A=[2 -1 4 -3 1;-1 1 2 1 3;4 2 3 3 -1;-3 1 3 2 4;1 3 -1 4 4]; >> b=[11 14 4 16 18]';

>> [x,l,d]=machol(A,b) 得计算结果 x =

1.0000

2.0000 1.0000 -1.0000 4.0000

5.1.4追赶法的matlab 程序方法

解方程组???

??

????

???????=????????????????????????????????--------0000121000121000121000121000

12543

21x x x x x ,

记??

?

??

??

?????????--------=21000121000121000121000

12A ,????????????????=00001f .

追赶法的Mtlab 程序 function x=machase(a,b,c,f)

%用途:追赶法解三对角方程组Ax=f

%格式:x=machase(a,b,c,f) a 为次下对角线元素向量,b 为主对角线元素向量, %c 为次上对角线元素向量,f 为右端向量,为返回向量 %追赶法 n=length(a); for k=2:n

b(k)=b(k)-a(k)/b(k-1)*c(k-1); f(k)=f(k)-a(k)/b(k)*f(k-1); end

x(n)=f(n)/b(n); for k=n-1:-1:1

x(k)=(f(k)-c(k)*x(k+1))/b(k) end

在工作窗口输入

>> a=-1*ones(5,1);b=2*ones(5,1);c=-1*ones(5,1); f=[1 0 0 0 0]'; >> x=machase(a,b,c,f) 输出结果 x =

0 0 0 0.5422 0.2778 x =

0 0 0.7817 0.5422 0.2778 x =

0 0.9656 0.7817 0.5422 0.2778

x =

0.9828 0.9656 0.7817 0.5422 0.2778 x =

0.9828 0.9656 0.7817 0.5422 0.2778

5.2.总结

通过对实际方程组的求解,我们可以很容易的用Gauss 消元法及LU 分解法的matlab 程序求解!由于该方程组的系数矩阵不是正定的,所以不能用乔莱斯基分解法求解!通过观察,很容易正定这个方程组的系数矩阵是是呈现带状分布的,而且0元素很多,这种形式的系数矩阵在科学与工程计算中会经常遇到.但在实际问题中的矩阵都非常的庞大,我们知道用gauss 消去法和LU 分解法求n 阶的方程组都需要大约3/3

n 个乘除法,若我们假定n=4

10,则需作12

1033.0 次乘除法,

10次乘除法的计算机求解,约费时一个小时,但是这样的时间也是不够快的.若用一台每秒作8

是用乔莱斯基分解法,则计算量约为6/3n,大约为前两种方法计算量的一半.但乔莱斯基分解法只能用于系数矩阵是对称正定的方程组!但对于系数矩阵为三对角的方程组来说,可以运用更简单的方法来求解,即追赶法,因为追赶法计算时忽略了除三对角线的元素外的其他零元素,从而使运算的时间大大缩短,运算效率也有显著的提高!所以在求解方程组时,我可以根据方程组系数矩阵的特点选用最有效的方法来进行求解.

参考文献

[1] 马昌凤,林伟川.现代数值计算方法MATLAB版 [M]北京:科学出版社,2008:79-88.

[2] 张凯院,徐仲.数值代数—2版[M]北京:科学出版社,2006.33-54.

[3] 李庆扬,王能超,易大义.数值分析—4版[M].北京:清华大学出版社,2008:161-193.

[4] 陈传淼.科学计算概论[M] 北京:科学出版社,2007:1-15 .

[5] 北京大学数学系几何与代数教研室前代数小组.高等代数-3版[M]北京高等教育出版

社,2003.9:61-83,105-111,226-231.

[6] 卢学飞,徐仲.求三对角方程组的新算法[J].西安:数学的实践与认识,2007 ,37(3):112-118.

[7] 宫野,王友年等.块三对角矩阵方程的追赶法及其应用[J]大连理工大学学报,1997,17(4):406-409.

[8] 马昌凤,林伟川.现代数值计算方法:matlab版[M].北京:科学出版社,2008:35-57,205-216.

[9] 同济大学数学教研室编.线性代数[M].北京:高等教育出版社,2000.

[10] [日]有马哲,浅枝阳著,胡师度,周世武译.线性代数讲解[M].成都:四川人民出版社,1985.

[11] 杨士俊. 线性方程组的解法[J].杭州师范学院学报(社会科学版),1994,(3):99-105.

[12] 姜建飞,胡良剑,唐俭.数值分析及其matlab实验[M].北京:科学出版社,2004.

[13] 蔡大用,白峰杉.高等数值分析[M].北京:清华大学出版社,1997.

[14] 弓爱芳,郭明月.线性方程组各种解法的讨论与思考[J].高等函授学报(自然科学版),2005,(5):41-44.

[15] 关治,陆金甫.数值分析基础[M].北京:高等教育出版社,1998.

[16] 徐成贤,徐宗本.矩阵分析[M].西安:西北工业大学出版社,1991

[17] 陈芳,陆全.求解分块三对角线性方程组的一种新算法[J].工程数学学报,2004,21(8):35-40.

[18] David Kincaid and Ward Cheney.Numerical Mathematics and Computing.Brooks/Cole Publishing Co.,

Pacific Grove,CA,fourth edition,1999. ISBN.0-534-35184-0.

[19] James F. Epperson. An Introduction to Numerical Methods and Analysis. Wiley, 2001. ISBN.

0-471-31647-4.

[20] Christian Rakotonirina Institut Sup′erieur de Technologie d’Antananarivo, ON THE CHOLESKY

METHODIST-T, BP 8122, MadagascarJune 9, 2009

[21] https://www.360docs.net/doc/2e12778951.html,/~spav/pub/numas.pdf

MatLab求解线性方程组

MatLab解线性方程组一文通 当齐次线性方程AX=0,rank(A)=r

MATLAB代码 解线性方程组的迭代法

解线性方程组的迭代法 1.rs里查森迭代法求线性方程组Ax=b的解 function[x,n]=rs(A,b,x0,eps,M) if(nargin==3) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值elseif(nargin==4) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-A)*x0+b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 2.crs里查森参数迭代法求线性方程组Ax=b的解 function[x,n]=crs(A,b,x0,w,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-w*A)*x0+w*b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;

if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 3.grs里查森迭代法求线性方程组Ax=b的解 function[x,n]=grs(A,b,x0,W,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1;%前后两次迭代结果误差 %迭代过程 while(tol>eps) x=(I-W*A)*x0+W*b;%迭代公式 n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 4.jacobi雅可比迭代法求线性方程组Ax=b的解 function[x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200; elseif nargin<3 error return elseif nargin==5 M=varargin{1}; end D=diag(diag(A));%求A的对角矩阵 L=-tril(A,-1);%求A的下三角阵

matlab解方程组

matlab解方程组 lnx表示成log(x) 而lgx表示成log10(x) 1-exp(((log(y))/x^0.5)/(x-1)) 1、解方程 最近有多人问如何用matlab解方程组的问题,其实在matlab中解方程组还是很方便的,例如,对于代数方程组Ax=b(A为系数矩阵,非奇异)的求解,MATLAB 中有两种方法: (1)x=inv(A)*b —采用求逆运算解方程组; (2)x=A\B —采用左除运算解方程组 PS:使用左除的运算效率要比求逆矩阵的效率高很多~ 例: x1+2x2=8 2x1+3x2=13 >>A=[1,2;2,3];b=[8;13]; >>x=inv(A)*b x = 2.00 3.00 >>x=A\B x = 2.00 3.00; 即二元一次方程组的解x1和x2分别是2和3。 对于同学问到的用matlab解多次的方程组,有符号解法,方法是:先解出符号解,然后用vpa(F,n)求出n位有效数字的数值解.具体步骤如下: 第一步:定义变量syms x y z ...; 第二步:求解[x,y,z,...]=solve('eqn1','eqn2',...,'eqnN','var1','var2',...'varN'); 第三步:求出n位有效数字的数值解x=vpa(x,n);y=vpa(y,n);z=vpa(z,n);...。 如:解二(多)元二(高)次方程组: x^2+3*y+1=0 y^2+4*x+1=0 解法如下: >>syms x y; >>[x,y]=solve('x^2+3*y+1=0','y^2+4*x+1=0'); >>x=vpa(x,4); >>y=vpa(y,4); 结果是:

MATLAB解线性方程组的直接方法

在这章中我们要学习线性方程组的直接法,特别是适合用数学软件在计算机上求解的方法. 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 end if RA==RB if RA==n disp('请注意:因为RA=RB=n ,所以此方程组有唯一解.') else disp('请注意:因为RA=RB> 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)

利用MATLAB求线性方程组

《MATLAB语言》课成论文 利用MATLAB求线性方程组 姓名:郭亚兰 学号:12010245331 专业:通信工程 班级:2010级通信工程一班 指导老师:汤全武 学院:物电学院 完成日期:2011年12月17日

利用MATLAB求解线性方程组 (郭亚兰 12010245331 2010 级通信一班) 【摘要】在高等数学及线性代数中涉及许多的数值问题,未知数的求解,微积分,不定积分,线性方程组的求解等对其手工求解都是比较复杂,而MATLAB语言正是处理线性方程组的求解的很好工具。线性代数是数学的一个分支,它的研究对象是向量,向量空间(或称线性空间),线性变换和有限维的线性方程组。因而,线性代数被广泛地应用于抽象代数和泛函分析中;由于科学研究中的非线性模型通常可以被近似为线性模型,使得线性代数被广泛地应用于自然科学和社会科学中。线性代数是数学的一个分支,它的研究对象是向量,向量空间(或称线性空间),线性变换和有限维的线性方程组。因而,线性代数被广泛地应用于抽象代数和泛函分析中;由于科学研究中的非线性模型通常可以被近似为线性模型,使得线性代数被广泛地应用于自然科学和社会科学中。线性代数是讨论矩阵理论、与矩阵结合的有限维向量空间及其线性变换理论的一门学科。 【关键字】线性代数MATLAB语言秩矩阵解 一、基本概念 1、N级行列式A:A等于所有取自不同性不同列的n个元素的积的代数和。 2、矩阵B:矩阵的概念是很直观的,可以说是一张表。 3、线性无关:一向量组(a1,a2,…,an)不线性相关,既没有不全为零的数 k1,k2,………kn使得:k1*a1+k2*a2+………+kn*an=0 4、秩:向量组的极在线性无关组所含向量的个数成为这个向量组的秩。 5、矩阵B的秩:行秩,指矩阵的行向量组的秩;列秩类似。记:R(B)

线性方程组求解matlab实现

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 end if RA==RB if RA==n disp('请注意:因为RA=RB=n ,所以此方程组有唯一解.') else disp('请注意:因为RA=RB> 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> 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 工作窗口输入程序

实验一用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 由最简行阶梯型矩阵,得化简后的方程 ??? ??=+--=+--=-+-0 22004321 43214321x x x x x x x x x x x x

取x2,x4为自由未知量,扩充方程组为 即 提取自由未知量系数形成的列向量为基础解系,记 所以齐次方程组的通解为 解法2: clear A=[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 ?? ?=-=-0 04321x x x x ?????? ?====4 4432221x x x x x x x x ??? ??? ??????+????????????=????? ???????1100001142 4321x x x x x x , 00111????? ? ??????=ε, 11002????? ???????=ε2 211εεk k x +=

Matlab线性方程组求解(Gauss消去法)

Matlab线性方程组求解 1. Gauss消元法: function x=DelGauss(a,b) % Gauss消去法 [n,m]=size(a); nb=length(b); det=1; %存储行列式值 x=zeros(n,1); for k=1:n-1 for i=k+1:n if a(k,k)==0 return end m=a(i,k)/a(k,k); for j=k+1:n a(i,j)=a(i,j)-m*a(k,j); end b(i)=b(i)-m*b(k); end det=det*a(k,k); %计算行列式 end det=det*a(n,n); for k=n:-1:1 %回代求解 for j=k+1:n b(k)=b(k)-a(k,j)*x(j); end x(k)=b(k)/a(k,k);

end Example: >> A=[1.0170 -0.0092 0.0095;-0.0092 0.9903 0.0136;0.0095 0.0136 0.9898]; >> b=[1 0 1]'; >> x=DelGauss(A,b) x = 0.9739 -0.0047 1.0010 2. 列主元Gauss消去法: function x=detGauss(a,b) % Gauss列主元消去法 [n,m]=size(a); nb=length(b); det=1; %存储行列式值 x=zeros(n,1); for k=1:n-1 amax=0; %选主元 for i=k:n if abs(a(i,k))>amax amax=abs(a(i,k));r=i; end end if amax<1e-10 return; end if r>k %交换两行 for j=k:n

Matlab求解线性方程组非线性方程组

求解线性方程组 solve,linsolve 例: A=[5 0 4 2;1 -1 2 1;4 1 2 0;1 1 1 1]; %矩阵的行之间用分号隔开,元素之间用逗号或空格 B=[3;1;1;0] X=zeros(4,1);%建立一个4元列向量 X=linsolve(A,B) diff(fun,var,n):对表达式fun中的变量var求n阶导数。 例如:F=sym('u(x,y)*v(x,y)'); %sym()用来定义一个符号表达式 diff(F); %matlab区分大小写 pretty(ans) %pretty():用习惯书写方式显示变量;ans是答案表达式 非线性方程求解 fsolve(fun,x0,options) 为待解方程或方程组的文件名;fun其中 x0位求解方程的初始向量或矩阵; option为设置命令参数 建立文件fun.m: function y=fun(x) y=[x(1)-0.5*sin(x(1))-0.3*cos(x(2)), ... x(2) - 0.5*cos(x(1))+0.3*sin(x(2))]; >>clear;x0=[0.1,0.1];fsolve(@fun,x0,optimset('fsolve')) 注: ...为续行符 m文件必须以function为文件头,调用符为@;文件名必须与定义的函数名相同;fsolve()主要求解复杂非线性方程和方程组,求解过程是一个逼近过程。Matlab求解线性方程组 AX=B或XA=B 在MATLAB中,求解线性方程组时,主要采用前面章节介绍的除法运算符“/”和“\”。如: X=A\B表示求矩阵方程AX=B的解; 的解。XA=B表示矩阵方程B/A=X. 对方程组X=A\B,要求A和B用相同的行数,X和B有相同的列数,它的行数等于矩阵A的列数,方程X=B/A同理。 如果矩阵A不是方阵,其维数是m×n,则有: m=n 恰定方程,求解精确解; m>n 超定方程,寻求最小二乘解; m

线性方程组求解Matlab程序(精.选)

线性方程组求解 1.直接法 Gauss消元法: function x=DelGauss(a,b) % Gauss消去法 [n,m]=size(a); nb=length(b); det=1;%存储行列式值 x=zeros(n,1); for k=1:n-1 for i=k+1:n if a(k,k)==0 return end m=a(i,k)/a(k,k); for j=k+1:n a(i,j)=a(i,j)-m*a(k,j); end b(i)=b(i)-m*b(k); end det=det*a(k,k); end

det=det*a(n,n); for k=n:-1:1 %回代 for j=k+1:n b(k)=b(k)-a(k,j)*x(j); end x(k)=b(k)/a(k,k); end Example: >> A=[1.0170 -0.0092 0.0095;-0.0092 0.9903 0.0136;0.0095 0.0136 0.9898]; >> b=[1 0 1]'; >> x=DelGauss(A,b) x = 0.9739 -0.0047 1.0010 列主元Gauss消去法: function x=detGauss(a,b) % Gauss列主元消去法

[n,m]=size(a); nb=length(b); det=1;%存储行列式值 x=zeros(n,1); for k=1:n-1 amax=0;% 选主元 for i=k:n if abs(a(i,k))>amax amax=abs(a(i,k));r=i; end end if amax<1e-10 return; end if r>k %交换两行 for j=k:n z=a(k,j);a(k,j)=a(r,j);a(r,j)=z; end z=b(k);b(k)=b(r);b(r)=z;det=-det; end

matlab常用解方程及方程组函数

1. roots 求解多项式的根 r=roots(c) 注意: c 为一维向量,者返回指定多项式的所有根( 包括复根),poly 和roots 是互为反运算,还有就是roots 只能求解多项式的解 还有下面几个函数poly2sym、sym2poly 、eig >>syms x >>y=x A5+3*x A3+3; >>c=sym2poly(y);%求解多项式系数 >>r=roots(c); >>poly(r) 2. residue 求留数 [r, p, k] = residue(b,a) >>b = [ 5 3 -2 7] >>a = [-4 0 8 3] >>[r, p, k] = residue(b,a) 3. solve 符号解方程(组)——使用最多的 g = solve(eq1,eq2,...,eqn,var1,var2,...,varn) 注意:eqn 和varn 可以是符号表达式,也可以是字符串表达式,但是使用符号表达式时不能有“=号”,假如说varn 没有给出,使用findsym 函数找出默认的求解变量。返回的g 是个结构体,以varn 为字段。由于符号求解的局限性,好多情况下可能得到空矩阵,此时只能用数值解法 解方程A=solve('a*xA2 + b*x + c') 解方程组B=solve('a*uA2 + vA2', 'u - v = 1', 'aA2 - 5*a + 6') 4. fzero 数值求零点 [x,fval,exitflag,output]=fzero(fun,x0,options,p1,p2...) fun 是目标函数,可以是句柄(@)、inline 函数或M 文件名 x0 是初值,可以是标量也可以是长度为2 的向量,前者给定一个位置,后者是给定一个范围options 是优化参数,通过optimset 设置,optimget 获取,一般使用默认的就可以了,具体参照帮助 p1,p2...为需要传递的其它参数 假如说(x/1446)A2+p/504.1+(t/330.9)*(log(1-x/1446)+(1-1 /5.3)*x/1446)=0 的根,其中p,t 是已知

用matlab解线性方程组

用matlab解线性方程组 2008-04-12 17:00 一。高斯消去法 1.顺序高斯消去法 直接编写命令文件 a=[] d=[]' [n,n]=size(a); c=n+1 a(:,c)=d; for k=1:n-1 a(k+1:n, k:c)=a(k+1:n, k:c)-(a(k+1:n,k)/ a(k,k))*a(k, k:c); %消去 end x=[0 0 0 0]' %回带 x(n)=a(n,c)/a(n,n); for g=n-1:-1:1 x(g)=(a(g,c)-a(g,g+1:n)*x(g+1:n))/a(g,g) end 2.列主高斯消去法 *由于“[r,m]=max(abs(a(k:n,k)))”返回的行是“k:n,k”内的第几行,所以要通过修正来把m 改成真正的行的值。该程序只是演示程序,真正机器计算不需要算主元素所在列以下各行应为零的值。 直接编写命令文件 a=[] d=[] ' [n,n]=size(a); c=n+1 a(:,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],:); %换行 end a(k+1:n, k:c)=a(k+1:n, k:c)-(a(k+1:n,k)/ a(k,k))*a(k, k:c); %消去end end x=[0 0 0 0]' %回带 x(n)=a(n,c)/a(n,n); for g=n-1:-1:1 x(g)=(a(g,c)-a(g,g+1:n)*x(g+1:n))/a(g,g) end

雅可比解线性方程组matlab

雅可比迭代 使用雅可比迭代法求解线性方程组的步骤 步骤1:输入系数矩阵A和方程组右端向量B; 步骤2:将矩阵A分解为下三角阵L对角阵D和上三角阵U 可分解为(D+L+U)X=B for o=1:n d(o,o)=a(o,o); u(o,o+1:n)=-a(o,o+1:n); end for p=2:n l(p,1:p-1)=-a(p,1:p-1); end; 步骤3:将上式化简为x=B0x+f,其中B0=-D-1(L+U),f=D-1B for i=1:n b0(i,i+1:n)=u(i,i+1:n)/a(i,i); f(i,:)=b(i,:)/a(i,i); end for p=2:n b0(p,1:p-1)=l(p,1:p-1)/a(p,p);;

步骤4:采用迭代公式在允许误差范围e=1e-7内求得解向量x x0=x; x=b0*x+f 雅可比迭代法matlab程序: function [x,k]=jacobi(a,b) n=length(a); e=1e-7; m=100; x0=zeros(n,1); x=x0; k=0; d=zeros(n); l=zeros(n); u=zeros(n); b0=zeros(n); f=zeros(n,1);

x0=x+2*e; for o=1:n d(o,o)=a(o,o); u(o,o+1:n)=-a(o,o+1:n); end for p=2:n l(p,1:p-1)=-a(p,1:p-1); end for i=1:n b0(i,i+1:n)=u(i,i+1:n)/a(i,i); f(i,:)=b(i,:)/a(i,i); end for p=2:n b0(p,1:p-1)=l(p,1:p-1)/a(p,p); end while max(abs(x0-x))>e&k

解线性方程组直接方法matlab用法

2.1 方程组地逆矩阵解法及其MATLAB 程序 2.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 end if RA==RB if RA==n disp('请注意:因为RA=RB=n ,所以此方 程组有唯一解.') else disp('请注意:因为RA=RB

Matlab求解线性方程组、非线性方程组

Matlab求解线性方程组、非线性方程组 姓名:罗宝晶学号:15 专业:材料学院高分子系 第一部分数值计算 Matlab求解线性方程组AX=B或XA=B 在MATLAB中,求解线性方程组时,主要采用除法运算符“/”和“\”。如:X=A\B表示求矩阵方程AX=B的解; X=B/A表示矩阵方程XA=B的解。 对方程组X=A\B,要求A和B用相同的行数,X和B有相同的列数,它的行数等于矩阵A的列数,方程X=B/A同理。 如果矩阵A不是方阵,其维数是m×n,则有: m=n 恰定方程,求解精确解; m>n 超定方程,寻求最小二乘解; mm。则方程组没有精确解,此时称方程组为超定方程组。线性超定方程组经常遇到的问题是数据的曲线拟合。对于超定方程,在MATLAB中,利用左除命令(x=A\b)来寻求它的最小二乘解;还可以用广义逆来求,即x=pinv(A),所得的解不一定满足Ax=b,x只是最小二乘意义上的解。左除的方法是建立在奇异值分解基础之上,由此获得的解最可靠;广义逆法是建立在对原超定方程直接进行householder变换的基础上,其算法可靠性稍逊与奇异值求解,但速度较快;

matlab常用解方程及方程组函数

matlab常用解方程及方程组函数 1.roots求解多项式的根 r=roots(c) 注意:c为一维向量,者返回指定多项式的所有根(包括复根),poly和roots是互为反运算,还有就是roots只能求解多项式的解 还有下面几个函数poly2sym、sym2poly、eig >>syms x >>y=x^5+3*x^3+3; >>c=sym2poly(y);%求解多项式系数 >>r=roots(c); >>poly(r) 2.residue求留数 [r, p, k] = residue(b,a) >>b = [ 5 3 -2 7] >>a = [-4 0 8 3] >>[r, p, k] = residue(b,a) 3.solve符号解方程(组)——使用最多的 g = solve(eq1,eq2,...,eqn,var1,var2,...,varn) 注意:eqn和varn可以是符号表达式,也可以是字符串表达式,但是使用符号表达式时不能有“=”号,假如说varn没有给出,使用findsym函数找出默认的求解变量。返回的g是一个结构体,以varn为字段。由于符号求解的局限性,好多情况下可能得到空矩阵,此时只能用数值解法 解方程A=solve('a*x^2 + b*x + c') 解方程组B=solve('a*u^2 + v^2', 'u - v = 1', 'a^2 - 5*a + 6') 4.fzero数值求零点 [x,fval,exitflag,output]=fzero(fun,x0,options,p1,p2...) fun是目标函数,可以是句柄(@)、inline函数或M文件名 x0是初值,可以是标量也可以是长度为2的向量,前者给定一个位置,后者是给定一个范围 options是优化参数,通过optimset设置,optimget获取,一般使用默认的就可以了,具体参照帮助 p1,p2...为需要传递的其它参数 假如说(x/1446)^2+p/504.1+(t/330.9)*(log(1-x/1446)+(1-1/5.3)*x/1446)=0的根,其中p,t是已知参数,但是每次都改变 那么目标函数如下三种书写格式,效果完全等效。注意参数列表中,未知数一定放第一位,其他参数放后面 (1)objfun=@(x,p,t)(x/1446).^2+p/504.1+(t/330.9).*(log(1-x/1446)+(1-1/5.3).*x/1446); (2)objfun=inline('(x/1446).^2+p/504.1+(t/330.9).*(log(1-x/1446)+(1-1/5.3).*x/1446)','x','p','t') 此时的调用格式如下 fzero(objfun,x0,options,p,t)%如果options使用的默认的话,那直接使用[],p和t就是我们需要传递的参数 fzero(@(x)objfun(x,p,t),x0,options)%这种格式与上面的等效 区别就是前者,将参数p和t作为fzero的参数进行传递,而后者是将p和t作为objfun的参数进行传递,没有本质区别 (3)function f=objfun(x,p,t)%以M文件格式书写目标函数 f=(x/1446).^2+p/504.1+(t/330.9).*(log(1-x/1446)+(1-1/5.3).*x/1446); 此时有三种调用格式

MATLAB之GAUSS消元法解线性方程组

Matlab之Gauss消元法解线性方程组 1.Gauss消元法 function x=DelGauss(a,b) %Gauss消去法 [n,m]=size(a); nb=length(b); det=1;%存储行列式值 x=zeros(n,1); for k=1:n-1 for i=k+1:n if a(k,k)==0 return end m=a(i,k)/a(k,k); for j=k+1:n a(i,j)=a(i,j)-m*a(k,j); end b(i)=b(i)-m*b(k); end det=det*a(k,k);%计算行列式 end det=det*a(n,n); for k=n:-1:1%回代求解 for j=k+1:n b(k)=b(k)-a(k,j)*x(j); end x(k)=b(k)/a(k,k);

end Example: >>A=[1.0170-0.00920.0095;-0.00920.99030.0136;0.00950.0136 0.9898]; >>b=[101]'; >>x=DelGauss(A,b) x= 0.9739 -0.0047 1.0010 2.列主元Gauss消去法: function x=detGauss(a,b) %Gauss列主元消去法 [n,m]=size(a); nb=length(b); det=1;%存储行列式值 x=zeros(n,1); for k=1:n-1 amax=0;%选主元 for i=k:n if abs(a(i,k))>amax amax=abs(a(i,k));r=i; end end if amax<1e-10 return;

Matlab求解线性方程组、非线性方程组.docx

求解线性方程组solve ,linsolve 例: A=[5 0 4 2;1 -1 2 1;4 1 2 0;1 1 1 1]; %矩阵的行之间用分号隔开,元素之间用逗号或空格 B=[3;1;1;0] X=zeros(4,1);% 建立一个4 元列向量 X=linsolve(A,B) diff (fun , Var, n):对表达式fun中的变量Var求n阶导数。 例如:F=sym('u(x,y)*v(x,y)' ) ; %sym ()用来定义一个符号表达式diff(F); %matlab 区分大小写 pretty(ans) %pretty ():用习惯书写方式显示变量;ans 是答案表达式非线性方程求解 fsolVe(fun,x0,options) 其中fun 为待解方程或方程组的文件名; x0 位求解方程的初始向量或矩阵; option 为设置命令参数 建立文件fun.m : function y=fun(x) y=[x(1)-0.5*sin(x(1))-0.3*cos(x(2)), ... x(2) - 0.5*cos(x(1))+0.3*sin(x(2))]; >>clear;x0=[0.1,0.1];fsolVe(@fun,x0,optimset('fsolVe')) 注: ...为续行符 m 文件必须以function 为文件头,调用符为@;文件名必须与定义的函数名相同;fsolVe ()主要求解复杂非线性方程和方程组,求解过程是一个逼近过程。 Matlab 求解线性方程组 AX=B 或XA=B

在MATLAB 中,求解线性方程组时,主要采用前面章节介绍的除法运算符“和/ ” “”。如: X=A?B表示求矩阵方程AX = B的解; X= B/A表示矩阵方程XA=B的解。 对方程组X = A?B ,要求A和B用相同的行数,X和B有相同的列数,它的行数等于矩阵A 的列数,方程X= B/A 同理。 如果矩阵A不是方阵,其维数是m× n,则有:m = n 恰定方程,求解精确解;m>n 超定方程,寻求最小二乘解; m

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

实验 用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 由最简行阶梯型矩阵,得化简后的方程 ??? ??=+--=+--=-+-0 22004321 43214321x x x x x x x x x x x x ?? ?=-=-0 04321x x x x

取x2,x4为自由未知量,扩充方程组为 即 提取自由未知量系数形成的列向量为基础解系,记 所以齐次方程组的通解为 解法2: clear A=[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 易见,可直接得基础解系 ?????? ?====4 4432221x x x x x x x x ??? ??? ??????+????????????=????? ???????1100001142 4321x x x x x x , 00111????? ? ??????=ε, 11002????? ???????=ε2 211εεk k x +=, 0111? ?????????=ε, 1002? ?????????=ε

线性代数方程组数值解法及MATLAB实现综述

线性代数方程组数值解法及MATLAB 实现综述 廖淑芳 20122090 数计学院 12计算机科学与技术1班(职教本科) 一、分析课题 随着科学技术的发展,提出了大量复杂的数值计算问题,在建立电子计算机成为数值计算的主要工具以后,它以数字计算机求解数学问题的理论和方法为研究对象。其数值计算中线性代数方程的求解问题就广泛应用于各种工程技术方面。因此在各种数据处理中,线性代数方程组的求解是最常见的问题之一。关于线性代数方程组的数值解法一般分为两大类:直接法和迭代法。 直接法就是经过有限步算术运算,可求的线性方程组精确解的方法(若计算过程没有舍入误差),但实际犹如舍入误差的存在和影响,这种方法也只能求得近似解,这类方法是解低阶稠密矩阵方程组级某些大型稀疏矩阵方程组的有效方法。直接法包括高斯消元法,矩阵三角分解法、追赶法、平方根法。 迭代法就是利用某种极限过程去逐步逼近线性方程组精确解的方法。迭代法具有需要计算机的存储单元少,程序设计简单,原始系数矩阵在计算过程始终不变等优点,但存在收敛性级收敛速度问题。迭代法是解大型稀疏矩阵方程组(尤其是微分方程离散后得到的大型方程组)的重要方法。迭代法包括Jacobi 法SOR 法、SSOR 法等多种方法。 二、研究课题-线性代数方程组数值解法 一、 直接法 1、 Gauss 消元法 通过一系列的加减消元运算,也就是代数中的加减消去法,以使A 对角线以下的元素化为零,将方程组化为上三角矩阵;然后,再逐一回代求解出x 向量。 1.1消元过程 1. 高斯消元法(加减消元):首先将A 化为上三角阵,再回代求解。 11121121222212n n n n nn n a a a b a a a b a a a b ?? ? ? ? ???L L M M O M M L (1)(1)(1)(1)(1)11121311(2)(2)(2)(2)222322(3)(3)(3)3333()()000000n n n n n nn n a a a a b a a a b a a b a b ?? ? ? ? ? ? ???L L L M M M O M M L 步骤如下:

相关文档
最新文档