搜档网
当前位置:搜档网 › 解线性方程组的直接方法(matlab)

解线性方程组的直接方法(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

例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

(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

3.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 end

if RA==RB if RA==n

disp('请注意:因为RA=RB=n ,所以此方程组有唯一解.') X=zeros(n,1); X(n)=b(n)/A(n,n); for k=n-1:-1:1

X(k)=(b(k)-sum(A(k,k+1:n)*X(k+1:n)))/A(k,k);

end else

disp('请注意:因为RA=RB

end end

例3.2.2 用解上三角形线性方程组的MATLAB 程序解方程组

⎪⎪

⎪⎪⎨

⎧==+-=-+-=++-.63,456,7472,203254434

324321x 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 end

if RA==RB if RA==n

disp('请注意:因为RA=RB=n ,所以此方程组有唯一解.') X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1

for k=p+1:n

m= B(k,p)/ B(p,p);

B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1); end end

b=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n); for q=n-1:-1:1

X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q); end

else

disp('请注意:因为RA=RB

例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 =

4

RB =

4

n =

4

3.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;

X = 0 -0.5000 0.5000 0

if zhica>0,

disp('请注意:因为RA~=RB ,所以此方程组无解.') return end

if RA==RB if RA==n

disp('请注意:因为RA=RB=n ,所以此方程组有唯一解.') X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1

[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:n

m= B(k,p)/ B(p,p);

B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1); end end

b=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n); for q=n-1:-1:1

X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q); end

else

disp('请注意:因为RA=RB

例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~=n

disp('请注意:因为A 的n 阶行列式hl 等于零,所以A 不能进行LU 分解.A

的秩RA 如下:'), RA,hl=det(A); return

end

if RA==n

for p=1:n,h(p)=det(A(1:p, 1:p));, end

hl=h(1:n); for i=1:n

if h(1,i)==0

disp('请注意:因为A 的r 阶主子式等于零,所以A 不能进行LU 分

解.A 的秩RA 和各阶顺序主子式值hl 依次如下:'),hl;RA,return

end

end

if h(1,i)~=0

disp('请注意:因为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 = 0

3.4.2 直接LU 分解法及其MATLAB 程序 将矩阵A 进行直接LU 分解的MATLAB 程序

function hl=zhjLU(A)

[n n] =size(A); RA=rank(A); if RA~=n

disp('请注意:因为A 的n 阶行列式hl 等于零,所以A 不能进行LU 分解.A

的秩RA 如下:'), RA,hl=det(A);

return end

if RA==n for p=1:n

h(p)=det(A(1:p, 1:p)); end

hl=h(1:n); for i=1:n

if h(1,i)==0

disp('请注意:因为A 的r 阶主子式等于零,所以A 不能进行LU 分解.A

的秩RA 和各阶顺序主子式值hl 依次如下:'), hl;RA

return end end

if h(1,i)~=0

disp('请注意:因为A 的各阶主子式都不等于零,所以A 能进行LU 分解.A

的秩RA 和各阶顺序主子式值hl 依次如下:')

for j=1:n

U(1,j)=A(1,j); end

for k=2:n for i=2:n for j=2:n

L(1,1)=1;L(i,i)=1; if i>j

L(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); else

U(k,j)=A(k,j)-L(k,1:k-1)*U(1:k-1,j); end end end end

hl;RA,U,L end end

例3.4.3 用矩阵进行直接LU 分解的MA TLAB 程序分解矩阵

⎪⎪⎪⎪⎪⎭

⎛=30

1

0342110100201A . 解 在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 = 4

U = 1 0 2 0

0 1 0 1

0 0 2 1

0 0 0 2 3.4.4 判断正定对称矩阵的方法及其MATLAB 程序 判断矩阵A 是否是正定对称矩阵的MATLAB 程序

function hl=zddc(A) [n n] =size(A); for p=1:n

h(p)=det(A(1:p, 1:p)); end

hl=h(1:n);zA=A'; for i=1:n

if h(1,i)<=0

disp('请注意:因为A 的各阶顺序主子式hl 不全大于零,所以A 不是正

定的.A 的转置矩阵zA 和各阶顺序主子式值hl 依次如下:'), hl;zA,return

end end

if h(1,i)>0

disp('请注意:因为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)⎪⎪⎪⎪⎪

⎭⎫ ⎝

⎛--98

75411321114321

4321.0;(2) ⎪⎪⎪⎪⎪

⎫ ⎝

⎛------196

31690230311211

; (3) ⎪

⎪⎪

⎪⎪⎪

⎪⎪

⎪⎪⎭⎫

⎛--

--212100212100002121002121;(4)⎪⎪⎪⎭

⎝⎛---40106111

2. 解 (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

0 1/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 1

1 -6 0

1 0 -4 请注意: A 是对称矩阵

请注意:因为A 的各阶顺序主子式hl 不全大于零,所以A 不是正定的.A 的转置

矩阵zA 和各阶顺序主子式值hl 依次如下:

zA = -2 1 1 hl = -2 11 -38 1 -6 0 1 0 -4

可见A 不是正定矩阵,是负定矩阵;因为A = A T

因此,A 是对称矩阵.

3.5 求解线性方程组的LU 方法及其MATLAB 程序

3.5.1 解线性方程组的楚列斯基(Cholesky )分解法及其MATLAB 程序

例3.5.1 先将矩阵A 进行楚列斯基分解,然后解矩阵方程b AX =,并用其他方法验证.

⎪⎪⎪⎪⎪⎭

⎝⎛=⎪⎪⎪

⎪⎪⎭⎫ ⎝⎛------=7531,19631690230311211b A . 解 在工作窗口输入

>>A=[1 -1 2 1;-1 3 0 -3; 2 0 9 -6;1 -3 -6 19];

b1=1:2:7; b=b1'; R=chol(A);C=A-R'*R,R1=inv(R);R2=R1'; x=R1*R2*b,Rx=A\b-x

运行后输出方程组的解和验证结果

x = Rx = 1.0e-014 * C = 1.0e-015 * -8.0000 -0.7105 0 0 0 0 0.3333 -0.0833 0 -0.4441 0 0 3.6667 0.2220 0 0 0 0 2.0000 0.1332 0 0 0 0

3.5.2 解线性方程组的直接LU 分解法及其MATLAB 程序

例3.5.2 首先将矩阵A 直接进行LU 分解,然后解矩阵方程b AX =

⎪⎪⎪⎪

⎫ ⎝⎛=3010342110100201A ,⎪⎪⎪

⎪⎪⎭⎫ ⎝⎛-=

5121b . 解 (1) 首先将矩阵A 直接进行LU 分解.在MATLAB 工作窗口输入程序

>> A=[1 0 2 0;0 1 0 1;1 2 4 3;0 1 0 3];b=[1;2;-1;5];

hl=zhjLU(A),A-L*U 运行后输出LU 分解

请注意:因为A 的各阶主子式都不等于零,所以A 能进行LU 分解.A 的秩RA

和各阶顺序主子式值hl 依次如下:

RA = 4

U = 1 0 2 0

0 1 0 1

0 0 2 1

0 0 0 2

A 分解为一个单位下三角形矩阵L 和一个上三角形矩阵U 的积 LU A =.

(2)在工作窗口输入

>> U=[1 0 2 0;0 1 0 1;0 0 2 1;0 0 0 2]; L=[1 0 0 0;0 1 0 0;1

2 1 0;0 1 0 1];

L = 1 0 0 0 0 1 0 0 1 2 1 0 0 1 0 1 hl = 1 1 2 4

b=[1;2;-1;5];U1=inv(U); L1=inv(L); X=U1*L1*b,x=A\b

运行后输出方程组的解

X = 8.50000000000000 0.50000000000000 -3.75000000000000 1.50000000000000

3.5.3 解线性方程组的选主元的LU 方法及其MATLAB 程序

例3.5.3 先将矩阵A 进行LU 分解,然后解矩阵方程b AX = 其中

⎪⎪⎪

⎪⎪

⎫ ⎝⎛--=9875411321114321432

1.0A ,⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-=5121b . 解 方法1 根据(3.28)式编写MATLAB 程序,然后在工作窗口输入

>> A=[0.1 2 3 4;-1 2 -3 4;11 21 13 41;5 7 8 9];

b=[1;2;-1;5]; [L U P]=LU(A), U1=inv(U); L1=inv(L); X=U1*

L1*P*b

运行后输出结果

L = 1.0000 0 0 0 -0.0909 1.0000 0 0 0.0091 0.4628 1.0000 0 0.4545 -0.6512 0.2436 1.0000 U =11.0000 21.0000 13.0000 41.0000 0 3.9091 -1.8182 7.7273

0 0 3.7233 0.0512

0 0 0 -4.6171

方法2 根据(3.29)式编写MATLAB 程序,然后在工作窗口输入

>> A=[0.1 2 3 4;-1 2 -3 4;11 21 13 41;5 7 8 9];

b=[1;2;-1;5]; [F U]=LU(A), U1=inv(U); F1=inv(F); X=U1*F1*b

运行后输出结果

F=0.0091 0.4628 1.0000 0 -0.0909 1.0000 0 0 1.0000 0 0 0 0.4545 -0.6512 0.2436 1.0000 X =[-1.2013 3.3677 0.0536 -1.4440]’ 用LU 分解法解线性方程组A n m ⨯b X =的MATLAB 程序

function [RA,RB,n,X,Y]=LUjfcz(A,b)

[n n] =size(A);B=[A b]; RA=rank(A); RB=rank(B); for p=1:n

h(p)=det(A(1:p, 1:p)); end

hl=h(1:n); for i=1:n

if h(1,i)==0

disp('请注意:因为A 的r 阶主子式等于零,所以A 不能进行LU 分解.A

的秩RA 和各阶顺序主子式值hl 依次如下:')

hl;RA return end end

if h(1,i)~=0

disp('请注意:因为A 的各阶主子式都不等于零,所以A 能进行LU 分

解.A 的秩RA 和各阶顺序主子式值hl 依次如下:')

X=zeros(n,1); Y=zeros(n,1); C=zeros(1,n);r=1:1;

P = 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 1 X =[-1.2013 3.3677 0.0536 -1.4440]’ U=11.0000 21.0000 13.0000 41.0000 0 3.9091 -1.8182 7.7273 0 0 3.7233 0.0512 0 0 0 -4.6171

for p=1:n-1

[max1,j]=max(abs(A(p:n,p))); C=A(p,:); A(p,:)= A(j+P1,:); C= A(j+P1,:); g=r(p); r(p)= r(j+P1); r(j+P1)=g; for k=p+1:n

H= A(k,p)/A(p,p); A(k,p) = H; A(k,p+1:n)=A(k,p+1:n)-

H* A(p,p+1:n);

end end

Y(1)=B(r(1)); for k=2:n

Y(k)= B(r(k))- A(k,1:k-1)* Y(1:k-1); end

X(n)= Y(n)/ A(n,n); for i=n-1:-1:1

X(i)= (Y(i)- A(i, i+1:n) * X (i+1:n))/ A(i,i); end end

[RA,RB,n,X,Y]’;

3.6 误差分析及其两种MATLAB 程序

3.6.1 用MATLAB 软件作误差分析

例3.6.2 解下列矩阵方程b AX =,并比较方程(1)和(2)有何区别,它们的解有何变化.其中

,13/112/111/110/19/18/17/112/111/110/19/18/17/16/111/110/19/18/17/16/15/110/19/18/17/16/15/14/19

/18/17/16/15/14/13/18/17/16/15/14/13/12/17/16/15/14/13/12/11)

1(⎪

⎪⎪⎪

⎪⎪

⎝⎛=A ;

2222221⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=b ,13/112/111/110/19/18/17/112

/111/110/19/18/17/16/111/110/19/18/17/16/15/110/19/18/17/16/15/14/19/18/17/16/15/14/13/18/17/16/15/14/13/12/17/16/15/14/13/12/1001.1)

2(⎪

⎪⎪

⎪⎪⎪

⎪⎪

⎫ ⎝⎛=A .

2222221⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=b 解 (1) 矩阵方程b AX =的系数矩阵A 为7阶希尔伯特(Hilbert )矩阵,我们可

以用下列命令计算n 阶希尔伯特矩阵

>>h=hilb(n) % 输出h 为n 阶Hilbert 矩阵 在MATLAB 工作窗口输入程序

>> A=hilb(7);b=[1;2;2;2;2;2;2];X=A\b 运行后输出b AX =的解为 X =(-35 504 -1260 -4200 20790 -27720 12012T

).

(2)在MATLAB 工作窗口输入程序

>> B =[0.001,zeros(1,6);zeros(6,1),zeros(6,6)]; A=(B+hilb(7)); b=[1;2;2;2;2;2;2];X=A\b 运行后输出方程的解为 X=(-33 465 -966 -5181 22409 -29015 12413T

).

在MATLAB 工作窗口输入程序

>> X =[-33, 465,-966,-5181,22409,-29015,12413]';

X1 =[-35,504,-1260,-4200,20790,-27720,12012]'; wu=X1'- X' 运行后输出方程(1)和(2)的解的误差为

=δX 401- 1295 1619- 981 294- 39 -2(T ).

方程(1)和(2)的系数矩阵的差为⎪⎪⎭

⎫ ⎝⎛=δ⨯⨯⨯661661001.0O O O A ,常数向量相同,则b Ax =的解的差为=δX 40112951619981294392(----T ).A 的微小变化,引起X 的很大变化,即X 对A 的扰动是敏感的.

3.6.2 求P 条件数和讨论b AX =解的性态的MATLAB 程序

求P 条件数和讨论b AX =解的性态的MATLAB 程序

function Acp=zpjxpb(A)

Acw = cond (A, inf);Ac1= cond (A,1);

Ac2= cond (A,2);Acf = cond (A,'fro');dA=det(A);

if (Acw>50)&(dA<0.1)

disp('请注意:AX=b 是病态的,A 的∞条件数,1条件数,2条件数, 弗罗贝

尼乌斯条件数和A 的行列式的值依次如下:')

Acp=[Acw Ac1 Ac2 Acf dA]';

else

disp(' AX=b 是良态的,A 的∞条件数,1条件数,2条件数,弗罗贝尼乌斯条

件数和A 的行列式的值依次如下:')

Acp=[Acw Ac1 Ac2 Acf dA]';

end

例3.6.3 根据定理3.10,讨论线性方程组b AX =解的性态,并且求出A 的4种条件数.其中

(1)A 为7阶希尔伯特矩阵;(2)⎪⎪⎪⎪⎪⎭

⎫ ⎝⎛-----=7421631472135132A . 解 (1)首先将求P 条件数和讨论b AX =解的性态的MATLAB 程序保存名为zpjxpb.m 的M 文件,然后在MATLAB 工作窗口输入程序

>> Acp =zpjxpb(hilb(7)); Acp',det(hilb(7))

运行后输出结果

请注意:AX=b 是病态的,A 的∞条件数,1条件数,2条件数, 弗罗贝尼乌斯条

件数和A 的行列式的值依次如下:

ans = 1.0e+008 *

9.8519 9.8519 4.7537 4.8175 0.0000

ans = 4.8358e-025

(2)在MATLAB 工作窗口输入程序

>> A=[2 3 -1 5;3 1 2 -7;4 1 -3 6;1 -2 4 -7];Acp=zpjxpb(A); Acp' 运行后输出结果 AX=b 是良态的,A 的∞条件数,1条件数,2条件数, 弗罗贝尼乌斯条件数和A 的行列式的值依次如下:

ans =

14.1713 19.4954 8.2085 11.4203 327.0000

3.6.3 用P 范数讨论b AX =解和A 的性态的MATLAB 程序

用P 范数讨论b AX =解和A 的性态的MATLAB 程序

function Acp=zpjwc(A,jA,b,jb,P)

Acp = cond (A,P);dA=det(A); X=A\b;

dertaA=A-jA;

PndA=norm(dertaA, P);dertab=b-jb;Pndb=norm(dertab, P);

if Pndb>0

jX=A\jb; Pnb= norm(b, P);PnjX = norm(jX,P); dertaX=X-jX;

PnjdX= norm(dertaX, P);jxX= PnjdX/PnjX; PnjX =

norm(jX,P);

PnX = norm(X,P); jxX= PnjdX/PnjX; xX= PnjdX/PnX;

Pndb=norm(dertab,P);

xAb=Pndb/Pnb;Pnbj=norm(jb,P); xAbj=Pndb/Pnbj;

Xgxx= Acp*xAb;

end if PndA>0

jX=jA\b; dertaX=X-jX;PnX = norm(X,P);

PnjdX= norm(dertaX, P);

PnjX = norm(jX,P); jxX= PnjdX/PnjX;xX= PnjdX/PnX;

PnjA=norm(jA,P); PnA=norm(A,P);

PndA=norm(dertaA,P);xAbj= PndA/PnjA;xAb= PndA/PnA;

Xgxx= Acp*xAb;

end

if (Acp >50)&(dA<0.1)

disp('请注意:AX=b 是病态的,A 的P 条件数Acp,A 的行列式值dA ,解

X ,近似解jX ,解的相对误差jxX ,解的相对误差估计值Xgxx ,b 或A 的相对误差xAb 依次如下:')

Acp,dA,X',jX',xX',jxX',Xgxx',xAb',xAbj'

else

disp('请注意: AX=b 是良态的,A 的P 条件数Acp,A 的行列式值dA ,

解X ,近似解jX ,解的相对误差jxX ,解的相对误差估计值Xgxx ,b 或A 的相对误差xAb 依次如下:')

Acp,dA,X',jX',xX',jxX',Xgxx',xAb',xAbj'

end

例3.6.4 根据定理3.10,讨论线性方程组b AX =解的性态,并利用(3.32)式讨论当A 的每个元都取4位有效数字时,其解的相对误差.其中A 为7阶希尔伯特矩阵,()22224311=b T .

解 (1)取∞范数和∞条件数,线性方程组b AX =的b 不变时,取∞范数和∞条件数,系数矩阵A 为7阶希尔伯特矩阵,A 中的每个元素取4位有效数字.

用P 范数讨论b AX =解和A 的性态的MATLAB 程序保存名为zpjwc.m 的文件,然后在工作窗口输入MATLAB 程序

>> jA =[1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429

0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250

0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111

0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000

0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0.0909

0.1667 0.1429 0.1250 0.1111 0.1000 0.0909 0.0833

0.1429 0.1250 0.1111 0.1000 0.0909 0.0833 0.0769];

A=hilb(7);b=[1;1/3;4;2;2;2;2];

jb=[1;0.3333;4;2;2;2;2]; Acp=zpjwc(A,jA,b,jb,inf)

运行后输出结果

请注意:AX=b 是病态的,A 的P 条件数Acp,A 的行列式值dA ,解X ,近似

解jX ,解的相对误差jxX ,解的相对误差估计值Xgxx ,b 或A 的相对误差xAb 依次如下:

Acp = dA =

9.8519e+008 4.8358e-025

ans =

1.0e+007 *

0.0020 -0.0697 0.6243 -2.3054 4.0677 -3.4123

1.0943

ans =

1.0e+004 *

0.0349 -0.4807 2.1126 -5.1087 7.6557 -6.3239

2.1112 xX = jxX = Xgxx =

0.9981 530.3248 4.9291e+004

xAb = xAbj =

5.0032e-005 5.0031e-005

由此可见,因为∞条件数(Cond ≈∞)A 985 194 889.719 848 31>>,所以此方程组为病态的b AX =的解

T 932)94210320,12334-790,676380,402.305-300,2436 256,697- 565,19( =X , b X jA =)(的解为

T )11221239,63-,55767087,51-126,21 079,48- ,493( =jX 解的相对误差

120.998≈∞∞

X X

δ,291.2749≤+∞∞X X X δδ , 530.32≈+∞∞X X X δδ,

,1025.0035-∞∞

⨯≈A A

δ

即相对误差放大了约985 194 889.72倍.

(2) 如果取2范数和2条件数计算,在MATLAB 工作窗口输入程序

>> Acp =zpjwc(A,jA,b,jb,2)

运行后输出结果

请注意:AX=b 是病态的,A 的P 条件数Acp,A 的行列式值dA ,解X ,近似

解jX ,解的相对误差jxX ,解的相对误差估计值Xgxx ,b 或A 的相对误差xAb 依次如下:

Acp = dA =

4.7537e+008 4.8358e-025

ans = 1.0e+007 *

0.0020 -0.0697 0.6243 -2.3054 4.0677 -3.4123

1.0943

ans =

1.0e+004 *

0.0349 -0.4807 2.1126 -5.1087 7.6557 -6.3239

2.1112

xX = jxX = Xgxx=

0.9981 511.0640 2.9951e+004

xAb = xAbj =

6.3006e-005 6.3005e-005

因为2条件数Cond ≈2)(A 475 367 356.591>>,所以此方程组为病态的.解的相对误差

10.998 22≈X X δ,,105300.6522-⨯≈A A δ,06.5112

2≈+X X X δδ.85.9502922≤+A A A δδ 即相对误差放大了约475 367 356.59倍.

MatLab解线性方程组

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

MatLab解线性方程组一文通! -------------------作者:liguoy(2005-2-3) 写在阅读本文前的引子。 一:读者对线性代数与Matlab 要有基本的了解; 二:文中的通用exp.m文件,你须把具体的A和b代进去。 一:基本概念 1.N级行列式A:|A|等于所有取自不同行不同列的n个元素的积的代数和。 2.矩阵B:矩阵的概念是很直观的,可以说是一张表。 3.线性无关:一向量组(a ,a ,…. a )不线性相关,即没有不全为零的数k ,k ,……kn 使得:k1* a +k2* a +…..+kn*an=0 4. 秩:向量组的极在线性无关组所含向量的个数称为这个向量组的秩。 5.矩阵B的秩:行秩,指矩阵的行向量组的秩;列秩类似。记:R(B) 6.一般线性方程组是指形式: (1) 其中x1,x2,…….xn为n个未知数,s为方程个数。记:A*X=b 7.性方程组的增广矩阵:= 8. A*X=0 (2) 二:基本理论 三种基本变换:1,用一非零的数乘某一方程;2,把一个方程的倍数加到另一个方程;3互换两个方程的位置。以上称初等变换。 消元法(理论上分析解的情况,一切矩阵计算的基础) 首先用初等变换化线性方程组为阶梯形方程组,把最后的一些恒等式”0=0”(如果出现的话)去掉,1:如果剩下的方程当中最后的一个等式是零等于一非零数,那么方程组无解;否则有解,在有解的情况下,2:如果阶梯形方程组中方程的个数r等于未知量的个数,那么方程组有唯一的解,3:如果阶梯形方程组中方程的个数r小于是未知量的个数,那么方程组就有无穷个解。

matlab已知系数矩阵求方程组解

一、概述 在数学和工程领域,解决线性方程组是一项基本且常见的任务。而MATLAB作为一种高级的数学软件工具,可以帮助我们轻松地求解已知系数矩阵的方程组。本文将介绍如何在MATLAB中利用已知系数矩阵求解方程组的方法和步骤。 二、系数矩阵的输入 在MATLAB中,我们可以利用矩阵的形式输入已知系数矩阵,假设我们有一个形如Ax=b的线性方程组,其中A为系数矩阵,b为常数向量。我们可以使用MATLAB的矩阵表示来输入A和b,例如: A = [1 2 3; 4 5 6; 7 8 10]; b = [3; 6; 10]; 这样,我们就完成了系数矩阵A和常数向量b的输入。 三、方程组的求解 接下来,我们可以使用MATLAB的求解函数来求解方程组。MATLAB 提供了几种不同的函数来求解线性方程组,常用的有inv函数、"\ "操作符和linsolve函数。具体使用方法如下:1. inv函数 inv函数可以用来求解矩阵的逆,从而得到线性方程组的解。我们可以通过以下代码实现: x = inv(A) * b;

其中x即为方程组的解。但需要注意的是,当系数矩阵A为奇异矩阵时,inv函数会出现错误。2. "\ "操作符 "\ "操作符是MATLAB中的一个快捷操作符,可以直接求解线性方程组。具体使用方法如下: x = A \ b; 这样就可以得到方程组的解x。3. linsolve函数 linsolve函数是MATLAB中专门用来求解线性方程组的函数,使用方法如下: x = linsolve(A,b); 通过上述三种方法,我们可以轻松地求解已知系数矩阵的线性方程组。 四、结果的验证 在求解完方程组后,为了验证结果的准确性,我们可以将求得的解代 入原方程组中,看是否满足原方程。如果满足,则说明求解结果正确,否则需要重新检查。对于方程组Ax=b,我们可以通过以下方法验证结果的准确性: Ax_result = A * x; 误差 = norm(Ax_result - b); 当误差足够小(通常小于一个很小的阈值,如1e-10)时,我们可以 认为求解结果是准确的。

解线性方程组的直接方法(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作为一种功能强大的数值计算软件,提供了各种实用的工具和函数,可 以方便地解决线性代数问题。本文将介绍一些常用的线性代数问题求解方法,并通过具体的案例来展示Matlab在实际应用中的效果。 一、线性方程组的求解 线性方程组是线性代数中最基础的问题之一。Matlab提供了多种求解线性方程 组的函数,如“backslash”操作符(\)和“linsolve”函数等。下面通过一个实例来说 明Matlab的线性方程组求解功能。 案例:假设有以下线性方程组需要求解: 2x + 3y - 4z = 5 3x - 2y + z = 8 x + 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可以提供有关该矩阵的很多信息,如相关线性变换、对称性等。 三、矩阵的奇异值分解 奇异值分解(SVD)是线性代数中的一个重要分解方法,可以将一个矩阵分解为三个矩阵的乘积形式。Matlab提供了“svd”函数用于求解矩阵的奇异值分解。下面通过一个案例来演示Matlab中对矩阵进行奇异值分解的方法。 案例:假设有一个3x2矩阵A,需要对其进行奇异值分解。

matlab解方程组的函数

matlab解方程组的函数 在科学和工程计算中,解方程组是一项非常常见且重要的任务。方程组是由多个方程组成的集合,其中每个方程都包含有待求解的未知变量。解方程组的目标是找到一组满足所有方程的未知变量的值。 Matlab是一种功能强大的数值计算软件,它提供了许多用于解方程组的函数。本文将介绍一些常用的Matlab解方程组函数,并使用实例演示它们的用法。 一、Matlab解方程组的函数概述 Matlab提供了多种解方程组的函数,包括直接法和迭代法。这些函数可以帮助我们高效地求解线性方程组和非线性方程组。 以下是一些常用的Matlab解方程组函数: 1.linsolve函数:用于求解线性方程组。它可以使用直接法(LU分解、 Cholesky分解)或迭代法(Jacobi、Gauss-Seidel)来解线性方程组。2.fsolve函数:用于求解非线性方程组。它使用迭代法来逐步逼近非线性方程 组的解。 3.ode45函数:用于求解常微分方程组。它使用Runge-Kutta方法来数值求解 微分方程组。 4.vpasolve函数:用于求解符号方程组。它可以求解包含符号未知变量的方程 组。 接下来,我们将详细介绍每个函数的用法,并给出相关的实例。 二、linsolve函数 2.1 求解线性方程组 linsolve函数用于求解线性方程组,语法如下: X = linsolve(A, B) 其中,A是系数矩阵,B是常数向量。函数将返回未知变量的解向量X。

2.2 示例 考虑以下线性方程组: 2x + 3y = 7 4x - 5y = 2 我们可以使用linsolve函数求解: A = [2, 3; 4, -5]; B = [7; 2]; X = linsolve(A, B); 结果X将包含未知变量x和y的解。 三、fsolve函数 3.1 求解非线性方程组 fsolve函数用于求解非线性方程组,语法如下: X = fsolve(fun, X0) 其中,fun是一个函数句柄,表示非线性方程组的函数,X0是初始解向量。 3.2 示例 考虑以下非线性方程组: x^2 + y^2 = 25 x^2 - y = 7 我们可以使用fsolve函数求解: fun = @(x) [x(1)^2 + x(2)^2 - 25; x(1)^2 - x(2) - 7]; X0 = [0; 0]; X = fsolve(fun, X0); 结果X将包含未知变量x和y的解。

利用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.214 A.高斯消元法 一、算法介绍 高斯消元法是一种规则化的加减消元法。基本思想是通过逐次消元计算把需要求解的线性方程组转化成为上三角方程组,即把现形方程组的系数矩阵转化为上三角矩阵,从而使一般线性方程组的求解转化为等价的上三角方程组的求解。 二、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,所以此方程组无解.') return end if RA==RB if RA==n disp(‘因为RA=RB=n,所以此方程组有唯一解.')

matlab解方程组方法

matlab解方程组方法 在MATLAB中,有多种方法可以解方程组。以下是其中几种常用的方法:1. solve函数: 这是最直接的方法,适用于解线性方程组。假设你有以下线性方程组:(Ax = b) 你可以使用solve函数来求解。例如: 2. matlab复制代码 A = [1, 2; 3, 4]; b = [5; 6]; x = solve(A, b); 3. \和/运算符: 这两个运算符也可以用于解线性方程组。例如: 4. matlab复制代码 A = [1, 2; 3, 4]; b = [5; 6]; x = A\b; % 使用左除运 算符 或者 matlab复制代码 x = b/A; % 使用右除运 算符 5. gaussj函数: 这个函数使用高斯-约当消元法来解方程组。使用方法如下: 6.

matlab复制代码 A = [1, 2; 3, 4]; b = [5; 6]; x = gaussj(A, b); 7. mldivide函数: 这个函数与\运算符相同,也是用于解线性方程组。例如: 8. matlab复制代码 A = [1, 2; 3, 4]; b = [5; 6]; x = mldivide(A, b); % 等价于 A\b 9. lyap函数: 对于非线性方程组,可以使用lyap函数来求解。这个函数用于解决Lyapunov方程,通常用于控制系统和稳定性分析。使用方法如下: 10. matlab复制代码 A = [1, 2; 3, 4]; lyap(A); % 对于给定的A矩阵,求解Lyapunov方 程。 11. fzero和root函数: 这两个函数用于求解非线性方程的根。例如,如果你有一个非线性方程(f(x) = 0),你可以使 用fzero或root来找到这个方程的根。使用方法如下: 12. matlab复制代码 f = @(x) x^2 - 4; % 非线性方程 f(x) = x^2 - 4

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(非奇异下三角矩阵)已知求y function 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); end y(n)=b(n)/L(n,n); utri简单来说,当Ux=yy,U(非奇异上三角矩阵)已知求x function 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); end x(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); end L=tril(A,-1)+eye(n);U=triu(A); 使用例子已经知道一个线性方程组,这里我就不写出数学形式了,A是系数矩阵,直接把上面写好的函数复制过来在运算就

matlab解方程组的函数

matlab解方程组的函数 Matlab是一种强大的数学软件,它提供了许多函数来解决各种数学问题,其中包括解方程组的函数。Matlab解方程组的函数可以帮助用户快速准确地解决线性和非线性方程组,从而节省时间和精力。 Matlab解方程组的函数主要有两种:一种是用于解线性方程组的函数,另一种是用于解非线性方程组的函数。下面分别介绍这两种函数的使 用方法。 解线性方程组的函数 Matlab提供了几种函数来解线性方程组,其中最常用的是“\”运算 符和“inv”函数。使用“\”运算符可以直接求解线性方程组,而使用“inv”函数则需要先求出系数矩阵的逆矩阵,然后再将其与常数向量相乘。 例如,要解以下线性方程组: 2x + 3y = 8 4x + 5y = 14

可以使用“\”运算符进行求解,代码如下: A = [2 3; 4 5]; B = [8; 14]; X = A \ B; 其中,A是系数矩阵,B是常数向量,X是未知数向量。运行代码后,Matlab会自动计算出X的值,即X = [1; 2],表示x = 1,y = 2。 如果使用“inv”函数来求解,则需要先计算出系数矩阵的逆矩阵,代码如下: A = [2 3; 4 5]; B = [8; 14]; X = inv(A) * B; 其中,inv(A)表示A的逆矩阵,*表示矩阵乘法。运行代码后,Matlab 会自动计算出X的值,与使用“\”运算符求解的结果相同。 除了“\”运算符和“inv”函数外,Matlab还提供了其他一些函数来解线性方程组,如“linsolve”函数和“mldivide”函数。这些函数的使用方法与“\”运算符类似,具体可以参考Matlab的帮助文档。

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是解向量。该方法会自动选择 合适的求解方法,返回解向量X。下面是一个使用“mldivide”函数解线 性方程组的例子: A=[12;34]; B=[5;6]; X=A\B; 上述代码中,A是一个2×2的系数矩阵,B是一个2×1的常数向量,X是一个2×1的解向量。运行代码后,X的值为[-4.0000;4.5000]。

matlab中解方程组

MATLAB中解方程组 1. 引言 在科学计算和工程领域,解方程组是一个常见的任务。MATLAB作为一种强大的数值计算软件,提供了多种方法来解决方程组问题。本文将介绍MATLAB中解方程组的基本方法和技巧。 2. 方程组的表示 在MATLAB中,我们可以使用矩阵和向量的形式表示线性方程组。例如,考虑以下线性方程组: 2x + 3y = 7 4x - y = -1 可以将其表示为矩阵和向量的形式: A = [2, 3; 4, -1] B = [7; -1] 其中A是系数矩阵,B是常数向量。 3. 使用反斜杠运算符求解方程组 MATLAB提供了一个简单而强大的运算符\来求解线性方程组。例如,我们可以使用以下代码求解上述方程组: A = [2, 3; 4, -1]; B = [7; -1]; X = A \ B; 运行以上代码后,变量X将包含方程组的解。通过命令disp(X)可以打印出结果。 4. 解非线性方程组 除了线性方程组外,MATLAB还可以用于求解非线性方程组。非线性方程组的求解更加复杂,通常需要使用数值方法来逼近解。 MATLAB提供了多种函数和工具箱来求解非线性方程组。其中最常用的是fsolve函数,它可以通过迭代方法求解非线性方程组。 例如,考虑以下非线性方程组: x^2 + y^2 = 1 x + y = 1

我们可以使用fsolve函数求解该方程组: fun = @(x) [x(1)^2 + x(2)^2 - 1; x(1) + x(2) - 1]; x0 = [0; 0]; options = optimoptions('fsolve', 'Display', 'iter'); [x, fval] = fsolve(fun, x0, options); 在以上代码中,fun是一个匿名函数,表示要求解的非线性方程组。x0是初始猜测值,options是优化选项。 运行以上代码后,变量x将包含方程组的解,fval将包含目标函数的值。 5. 解常微分方程组 除了线性和非线性代数方程组外,MATLAB还可以用于求解常微分方程组。常微分方程描述了物理、生物和工程问题中的动态系统。 MATLAB提供了多种函数和工具箱来求解常微分方程组。其中最常用的是ode45函数,它使用常规的Runge-Kutta方法求解常微分方程。 例如,考虑以下常微分方程组: dy/dt = -y dz/dt = y^2 - z 我们可以使用ode45函数求解该方程组: fun = @(t, y) [-y(1); y(1)^2 - y(2)]; tspan = [0, 10]; y0 = [1; 0]; [t, y] = ode45(fun, tspan, y0); 在以上代码中,fun是一个匿名函数,表示要求解的常微分方程组。tspan是时间范围,y0是初始条件。 运行以上代码后,变量t将包含时间点,变量y将包含方程组的解。 6. 结论 本文介绍了MATLAB中解线性方程组、非线性方程组和常微分方程组的基本方法和技巧。通过使用MATLAB提供的函数和工具箱,我们可以快速、高效地求解各种类型的方程组问题。 MATLAB在科学计算和工程领域有着广泛的应用,并且不断更新和改进。掌握MATLAB中解方程组的方法对于科学研究和工程设计都非常重要。希望本文对读者有所帮助。

用cholesky方法求解方程matlab

题目: 用Cholesky方法求解方程Matlab Cholesky分解是一种常用的矩阵分解方法,可以用于求解线性方程组。在Matlab中,可以使用Cholesky方法求解方程,这种方法具有计算速度快、精度高的特点。本文将介绍Cholesky分解的原理和在Matlab中应用Cholesky方法求解方程的具体步骤。 一、Cholesky方法介绍 1. Cholesky分解原理 Cholesky分解是将对称正定矩阵分解为下三角矩阵和其转置相乘的形式。对于对称正定矩阵A,可以表示为A=LL^T,其中L是下三角矩阵,^T代表转置。 2. Cholesky方法求解方程 对于线性方程组Ax=b,其中A是对称正定矩阵。可以利用Cholesky 分解将方程组转化为Ly=b和L^Tx=y两个方程组,然后使用前代法 和回代法求解得到x的解。 二、Matlab中的Cholesky方法 在Matlab中,可以利用chol函数实现对对称正定矩阵的Cholesky 分解。chol函数的调用格式为L=chol(A),其中A是对称正定矩阵, L是返回的下三角矩阵。

三、在Matlab中使用Cholesky方法求解方程的具体步骤 1. 输入方程系数矩阵和右端项向量 假设给定线性方程组Ax=b,首先需要在Matlab中定义方程系数矩阵A和右端项向量b。 2. 判断方程系数矩阵是否为对称正定矩阵 使用Matlab中的issymmetric和ishermitian函数判断方程系数矩阵A是否为对称矩阵,并使用chol函数判断是否为正定矩阵。如果不是对称正定矩阵,则无法使用Cholesky方法求解。 3. 进行Cholesky分解 若方程系数矩阵A为对称正定矩阵,则使用chol函数进行Cholesky 分解,得到下三角矩阵L。调用格式为L=chol(A)。 4. 使用前代法和回代法求解方程 将方程组Ax=b转化为Ly=b和L^Tx=y两个方程组,然后分别使用Matlab中的方程linsolve和backslash求解得到y和x的解。 5. 输出方程的解 将得到的解x输出显示,即可得到方程的解。 四、实例演示 为了更直观地理解在Matlab中使用Cholesky方法求解方程的具体步

数值分析中求解线性方程组的MATLAB程序(6种)

数值分析中求解线性方程组的MATLAB程序(6种) 1.回溯法(系数矩阵为上三角) function X=uptrbk(A,B) %求解方程组,首先化为上三角,再调用函数求解 [N,N]=size(A); X=zeros(N,1); C=zeros(1,N+1); Aug=[A B]; for p=1:N-1 [Y,j]=max(abs(Aug(p:N,p))); C=Aug(p,:); Aug(p,:)=Aug(j+p-1,:); Aug(j+p-1,:)=C; if Aug(p,p)==0 'A was singular.No unique solution.' break; end for k=p+1:N m=Aug(k,p)/Aug(p,p); Aug(k,p:N+1)=Aug(k,p:N+1)-m*Aug(p,p:N+1); end end D=Aug; X=backsub(Aug(1:N,1:N),Aug(1:N,N+1)); 2.系数矩阵为下三角 function x=matrix_down(A,b) %求解系数矩阵是下三角的方程组 n=length(b); x=zeros(n,1); x(1)=b(1)/A(1,1); for k=2:1:n x(k)=(b(k)-A(k,1:k-1)*x(1:k-1))/A(k,k); end 3.普通系数矩阵(先化为上三角,在用回溯法) function X=uptrbk(A,B) %求解方程组,首先化为上三角,再调用函数求解 [N,N]=size(A); X=zeros(N,1); C=zeros(1,N+1); Aug=[A B]; for p=1:N-1

matlab计算方程组

matlab计算方程组 Matlab作为一款试用范围广泛的科学计算软件,其计算方程组的能力也是非常强大的。在Matlab中,可以通过多种方式计算方程组, 比如使用直接法、迭代法、线性方程组求解器等等。下面将分步骤阐 述使用Matlab计算方程组的方法。 一、使用直接法求解 直接法是一种将系数矩阵直接求逆再与常数向量相乘的方法,通 常在方程组的规模较小时使用。下面是使用Matlab求解线性方程组的 示例代码: ```matlab % 定义系数矩阵和常数向量 A = [1 2 3; 4 5 6; 7 8 9]; b = [3; 6; 9]; % 求解方程组 x = A\b; disp(x); ``` 这段代码首先定义了一个3x3的系数矩阵A和一个3x1的常数向 量b,然后使用反斜线符号来求解方程组。该符号将A的逆矩阵乘上b,得到解向量x。 二、使用迭代法求解 当方程组的规模较大时,直接法的计算量可能会非常大,在这种 情况下可以使用迭代法来求解方程组。迭代法的主要思想是通过反复 迭代求解来逼近方程组的解。常见的迭代法有Jacobi迭代法、Gauss-Seidel迭代法等。 以Jacobi迭代法为例,下面是使用Matlab求解线性方程组的示 例代码: ```matlab

% 定义系数矩阵和常数向量 A = [1 2 3; 4 5 6; 7 8 9]; b = [3; 6; 9]; % 定义Jacobi迭代法函数 function [x, k] = jacobi(A, b, x0, tol, max_iter) D = diag(diag(A)); L = -tril(A, -1); U = -triu(A, 1); x = x0; for k = 1:max_iter x = inv(D)*(b + L*x + U*x); if norm(A*x - b) < tol return end end end % 求解方程组 x0 = [0; 0; 0]; tol = 1e-6; max_iter = 1000; [x, k] = jacobi(A, b, x0, tol, max_iter); disp(x); ``` 这段代码首先定义了一个3x3的系数矩阵A和一个3x1的常数向量b,然后定义了一个Jacobi迭代法的函数来求解方程组。该函数首先将A分解为对角矩阵D、严格下三角矩阵L和严格上三角矩阵U,然后使用反复迭代的方式逼近方程组的解。在每一次迭代过程中,都会计算出一个新的解x,并判断该解与上一次的解之间的误差是否小于某个阈值tol。如果误差小于阈值,则认为已经找到了方程组的解并返回结果。否则就继续迭代,直到达到最大迭代次数max_iter为止。 三、使用线性方程组求解器

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求解线性方程组、非线性方程组

求解线性方程组 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程序

线性方程组求解 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=[ ; ; ]; >> b=[1 0 1]'; >> x=DelGauss(A,b) x = 列主元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

相关主题