数值分析编程及运行结果(高斯顺序消元法)

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

高斯消元法1.程序:

clear

format rat

A=input('输入增广矩阵A=')

[m,n]=size(A);

for i=1:(m-1)

numb=int2str(i);

disp(['第',numb,'次消元后的增广矩阵']) for j=(i+1):m

A(j,:)=A(j,:)-A(i,:)*A(j,i)/A(i,i);

end

A

end

%回代过程

disp('回代求解')

x(m)=A(m,n)/A(m,m);

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

x(i)=(A(i,n)-A(i,i+1:m)*x(i+1:m)')/A(i,i); end

x

2.运行结果:

高斯选列主元消元法1.程序:

clear

format rat

A=input('输入增广矩阵A=')

[m,n]=size(A);

for i=1:(m-1)

numb=int2str(i);

disp(['第',numb,'次选列主元后的增广矩阵']) temp=max(abs(A(i:m,i)));

[a,b]=find(abs(A(i:m,i))==temp);

tempo=A(a(1)+i-1,:);

A(a(1)+i-1,:)=A(i,:);

A(i,:)=tempo

disp(['第',numb,'次消元后的增广矩阵'])

for j=(i+1):m

A(j,:)=A(j,:)-A(i,:)*A(j,i)/A(i,i);

end

A

end

%回代过程

disp('回代求解')

x(m)=A(m,n)/A(m,m);

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

x(i)=(A(i,n)-A(i,i+1:m)*x(i+1:m)')/A(i,i); end

x

2.运行结果:

追赶法1.程序:

function [x,L,U]=zhuiganfa(a,b,c,f)

a=input('输入矩阵-1对角元素a=');

b=input('输入矩阵对角元素b=');

c=input('输入矩阵+1对角元素c=');

f=input('输入增广矩阵最后一列元素f='); n=length(b);

% 对A进行分解

u(1)=b(1);

for i=2:n

if(u(i-1)~=0)

l(i-1)=a(i-1)/u(i-1);

u(i)=b(i)-l(i-1)*c(i-1);

else

break;

end

end

L=eye(n)+diag(l,-1);

U=diag(u)+diag(c,1);

x=zeros(n,1);

y=x;

% 求解Ly=b

y(1)=f(1);

for i=2:n

y(i)=f(i)-l(i-1)*y(i-1); end

% 求解Ux=y

if(u(n)~=0)

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

end

for i=n-1:-1:1

x(i)=(y(i)-c(i)*x(i+1))/u(i); end

2.运行结果:

高斯-塞德尔迭代格式

1.程序:

function x=Gauss_Seidel(a,b)

a=input('输入系数矩阵a=')

b=input('输入增广矩阵最后一列b=');

e=0.5e-7;

n=length(b);

N=50;

x=zeros(n,1);

t=zeros(n,1);

for k=1:N

sum=0;

E=0;

t(1:n)=x(1:n);

for i=1:n

x(i)=(b(i)-a(i,1:(i-1))*x(1:(i-1))-a(i,(i+1):n)*t((i+1):n))/a(i,i);

end

if norm(x-t)

k

break;

end

end

2.运行结果:

雅戈比迭代格式1.程序:

function x=Jocabi(a,b)

a=input('输入系数矩阵a=');

b=input('输入增广矩阵最后一列b=');

e=0.5e-7;

n=length(b);

N=100;

x=zeros(n,1);

y=zeros(n,1);

for k=1:N

sum=0;

for i=1:n

y(i)=(b(i)-a(i,1:n)*x(1:n)+a(i,i)*x(i))/a(i,i);

end

for i=1:n

sum=sum+(y(i)-x(i))^2;

end

if sqrt(sum)

k

break;

else

for i=1:n

x(i)=y(i);

end

end

end

if k==N warning('未能找到近似解'); end

2.运行结果:

相关文档
最新文档