MATLAB托马斯算法(追赶法)实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
function x= thomas(A,b)
%本函数用于解三对角方程,采用托马斯算法(追赶法)
%对于Ax=b的矩阵,有三种输入方式
%1.输入参数A,b,其中A为完全矩阵;2.输入参数A,b,其中A为N*3的矩阵,分别存储三条对角线;3.只输入增广矩阵A;
[m,n]=size(A);
%%检查输入参数
end
return
else
if A(1,1)~=0
error('第一行输入应为[0,d1,a1]');
end
for i=2:m
A(i,2)=A(i,2)-A(i-1,3)*A(i,1)/A(i-1,2);
b(i)=b(i)-b(i-1)*A(i,1)/A(i-1,2);
end
x(m)=b(m)/A(m,2);
if m==n
for i=2:m
A(i,i)=A(i,i)-A(i-1,i)*A(i,i-1)/A(i-1,i-1);
b(i)=b(i)-b(i-1)*A(i,i-1)/A(i-1,i-1);
end
x(m)=b(m)/A(m,m);
for i=m-1:-1:1
x(i)=(b(i)-x(i+1)*A(i,i+1))/A(i,i);
for i=m-1:-1:1
x(i)=(b(i)-x(i+1)*A(i,3))/A(i,2);
end
return
end
end
if nargin==1
if n~=m+1
error('请检查输入的增广矩阵维数');
end
b=A(:,end);
A(:,end)=[];
else
l=length(b);
if n~=3&&(m~=n||m~=l)
error('请检查A,b的维数');
end
Βιβλιοθήκη Baiduend
[m,n]=size(A);
%%追赶法解方程
%本函数用于解三对角方程,采用托马斯算法(追赶法)
%对于Ax=b的矩阵,有三种输入方式
%1.输入参数A,b,其中A为完全矩阵;2.输入参数A,b,其中A为N*3的矩阵,分别存储三条对角线;3.只输入增广矩阵A;
[m,n]=size(A);
%%检查输入参数
end
return
else
if A(1,1)~=0
error('第一行输入应为[0,d1,a1]');
end
for i=2:m
A(i,2)=A(i,2)-A(i-1,3)*A(i,1)/A(i-1,2);
b(i)=b(i)-b(i-1)*A(i,1)/A(i-1,2);
end
x(m)=b(m)/A(m,2);
if m==n
for i=2:m
A(i,i)=A(i,i)-A(i-1,i)*A(i,i-1)/A(i-1,i-1);
b(i)=b(i)-b(i-1)*A(i,i-1)/A(i-1,i-1);
end
x(m)=b(m)/A(m,m);
for i=m-1:-1:1
x(i)=(b(i)-x(i+1)*A(i,i+1))/A(i,i);
for i=m-1:-1:1
x(i)=(b(i)-x(i+1)*A(i,3))/A(i,2);
end
return
end
end
if nargin==1
if n~=m+1
error('请检查输入的增广矩阵维数');
end
b=A(:,end);
A(:,end)=[];
else
l=length(b);
if n~=3&&(m~=n||m~=l)
error('请检查A,b的维数');
end
Βιβλιοθήκη Baiduend
[m,n]=size(A);
%%追赶法解方程