function [l,u,x,y]=doolittle(a,b)
n=length(a); %计算A矩阵的维数
for i=1:n %判断A矩阵的顺序主子式是否为非零
w=det(a(1:i,1:i));
if(w==0)
error('Matrix must be positive!');
return;
end
end
u(1,1:n)=a(1,1:n); %计算u的第一行元素
l(2:n,1)=a(2:n,1)/u(1,1); %计算l的第一列元素
for i=1:n %计算l的对角元素
l(i,i)=1;
end
for k=2:n
for j=k:n
sum=0;
for s=1:(k-1)
sum=sum+l(k,s)*u(s,j);
end
u(k,j)=a(k,j)-sum; %计算u的其余元素
end
for i=(k+1):n
sum=0;
for s=1:(k-1)
sum=sum+l(i,s)*u(s,k);
end
l(i,k)=(a(i,k)-sum)/u(k,k); %计算l的其余元素
end
end
y(1,1)=b(1); %计算y的第一个元素
for i=2:n
sumy=0;
for j=1:i-1
sumy=sumy+l(i,j)*y(j,1);
end
y(i,1)=b(i)-sumy; %计算y的其余元素
end
x(n,1)=y(n,1)/u(n,n); %计算x的最后一个元素
for i=(n-1):(-1):1
sumx=0;
for j=i+1:n
sumx=sumx+u(i,j)*x(j,1);
end
x(i,1)=(y(i,1)-sumx)/u(i,i); %计算x的其余元素
end
温馨提示:答案为网友推荐,仅供参考