Gauss列主元消去法、QR(MATLAB)

更新时间:2023-03-20 23:53:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

例:用Gauss 列主元消去法、QR 方法求解如下方程组:

12342212141

312.4201123230x x x x ?????? ? ? ?- ? ? ?= ? ? ?-- ? ? ???????

1. 1)Gauss 列主元法源程序:

function x=Gauss(A,b)

[m,n]=size(A);

if m~=n

error('矩阵不是方阵')

return

end

B=[A,b];

n=length(A);

for j=1:n-1

q=[zeros(j-1,1);B(j:n,j)];

[c,r]=max(abs(q)); %c 为列主元,r 为所在行

if r~=j

temp=B(j,:); %交换两行

B(j,:)=B(r,:);

B(r,:)=temp;

end

for i=j+1:n

B(i,:)=B(i,:)-B(j,:)*(B(i,j)/c);

end

end

x(n)=B(n,n+1)/B(n,n);

for i=n-1:-1:1

for j=i:n-1

B(i,n+1)=B(i,n+1)-B(i,j+1)*x(j+1);

end

x(i)=B(i,n+1)/B(i,i);

end

2)在命令窗口输入A ,b,得到x 的近似解:

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

>> b=[1;2;1;0];

>> x=Gauss(A,b)

x =

1.5417

-2.7500

0.0833

1.6667

2. 1)QR方法源程序:

function [Q,R,X]=qrfj(A,b)

[m,n]=size(A);

if m

error('A不符合规则')

return

end

R=A;

Q=eye(n);

for i=1:n-1

a=R(i:n,i);

e=[1;zeros(n-i,1)];

w=a-norm(a)*e;

Hw=eye(n-i+1)-(2/(w'*w))*(w*w');

H=blkdiag(eye(i-1),Hw); %块对角矩阵 Q=Q*H;

R=H*R;

end

Y=Q'*b;

X(n)=Y(n)/R(n,n);

for i=n-1:-1:1

for j=i:n-1

Y(i)=Y(i)-R(i,j+1)*X(j+1);

end

X(i)=Y(i)/R(i,i);

end

2)在命令窗口输入A,b,得到x的近似解:

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

>> b=[1;2;1;0];

>> [Q,R,X]=qrfj(A,b)

Q =

0.3162 0.3705 -0.0284 -0.8729

0.6325 -0.4940 0.5966 -0.0000

-0.6325 0.0823 0.7386 -0.2182

0.3162 0.7822 0.3125 0.4364

R =

6.3246 3.4785 2.8460 0.3162

0.0000 2.4290 0.4529 3.6641

0.0000 0.0000 2.3864 1.0227

-0.0000 -0.0000 -0.0000 -0.6547

X =

1.5417 -

2.7500 0.0833 1.6667

(资料素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)

本文来源:https://www.bwwdw.com/article/24le.html

Top