主程序
clcclearn =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是三对角阵
%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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)