matlab编写程序,用追赶法求解n阶三对角方程组Ax=f,其中n=100,200,500

matlab编写程序,用追赶法求解n阶三对角方程组Ax=f,其中n=100,200,500,第1张

主程序

clcclear

n =100

a = [0,ones(1,n-1)]

b = ones(1,n)*(-4)

c = [2*ones(1,n-1),0]

A = -4*eye(n) + diag(ones(n-1,1),-1)+diag(2*ones(n-1,1),1)

f = [3,ones(1,n-2),3]

tic

x = chase(a,b,c,f)

toc

err = norm(A*x'-f')%误差

函数程序

function x=chase(a,b,c,f)

%求解线性方程组Ax=f,其中A是三对角阵

%a是矩阵A的下对角线元素a(1)=0

%b是矩阵A的对角线元素

%c是矩阵A的上对角线元素c(N)=0

%f是方程组的右端向量

N=length(f)

x=zeros(1,N)y=zeros(1,N)

d=zeros(1,N)u= zeros(1,N)

%预处理

d(1)=b(1)

for i=1:N-1

u(i)=c(i)/d(i)

d(i+1)=b(i+1)-a(i+1)*u(i)

end

%追的过程

y(1)=f(1)/d(1)

for i=2:N

    y(i)=(f(i)-a(i)*y(i-1))/d(i)

end

%赶的过程

x(N)=y(N)

for i=N-1:-1:1

x(i)=y(i)-u(i)*x(i+1)

end

结果n=100时

时间已过 0.000547 秒。

err =

     1.948433500629703e-15

function x=zhuiganfa

%首先说明:追赶法是适用于三对角矩阵的线性方程组求解的方法,并不适用于其他类型矩阵。

%定义三对角矩阵A的各组成单元。方程为Ax=d

%b为A的对角线元素(1~n),a为-1对角线元素(2~n),c为+1对角线元素(1~n-1)。

%A=[2 -1 00

% -1 3 -2 0

% 0 -2 4 -3

% 0 0 -3 5]

a=[0 -1 -2 -3]c=[-1 -2 -3]b=[2 3 4 5]d=[6 1 -2 1]

n=length(b)

u0=0y0=0a(1)=0

%“追”的过程

L(1)=b(1)-a(1)*u0

y(1)=(d(1)-y0*a(1))/L(1)

u(1)=c(1)/L(1)

for i=2:(n-1)

L(i)=b(i)-a(i)*u(i-1)

y(i)=(d(i)-y(i-1)*a(i))/L(i)

u(i)=c(i)/L(i)

end

L(n)=b(n)-a(n)*u(n-1)

y(n)=(d(n)-y(n-1)*a(n))/L(n)

%“赶”的过程

x(n)=y(n)

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

x(i)=y(i)-u(i)*x(i+1)

end


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11142049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存