Doolittle分解法-习题3.2
习题代码:
main.h:
clc;clear;format long;
A=[3,2,-1,2;1,4,0,2;2,1,2,-1;1,1,-1,3];
b=[-2;1;3;4];
lux(A,b)
lux.m:
function x=lux(A,b)
[n,n]=size(A);L=zeros(n); U=zeros(n);x=zeros(n,1); y=zeros(n,1);
for r=1:n
for i=r:n
U(r,i)=A(r,i)-sum(L(r,1:r-1).*U(1:r-1,i)’);
L(i,r)=(A(i,r)-sum(L(i,1:r-1).*U(1:r-1,r)’))/U(r,r);
end
end;
L,U
for i=1:n
y(i)=b(i)-sum(L(i,1:i-1).*y(1:i-1)’);
end
for j=n:- 1:1
x(j)=(y(j)-sum(U(j,j+1:n).*x(j+1:n)’))/U(j,j);
end
运行结果:
改进的Cholesky分解法-习题3.3
习题代码:
main.h:
clc;clear;
a=[5,-4,1,0;-4,6,-4,1;1,-4,6,-4;0,1,-4,5];
b=[2;-1;-1;2];
cholesky(a,b)
Cholesky.h:
function x=cholesky(a, b)
n=length(b);
v=zeros(n);
x=zeros(n,1);
y=zeros(n,1);
for j=1:n
for i=1:j-1
v(j,i)=a(j , i)*a(i,i);
end
a(j,j)=a(j,j)-a(j,1:j-1)*v(j,1:j-1)’;
a(j+1:n,j)=(a(j+1:n,j)-a(j+1:n,1:j-1)*v(j,1:j-1)’)/a(j,j);
end
L=tril(a,-1)+eye(n),U=diag(diag(a))*L’
for i=1:n
y(i)=b(i)-sum(L(i,1:i-1).*y(1:i-1)’);
end
for j=n:- 1:1
x(j)=(y(j)-sum(U(j,j+1:n).*x(j+1:n)’))/U(j,j);
end
运行结果:
追赶法-习题3.4
习题代码:
main.h:
clc;clear;
a=[-1,-1,-1,-1]’;
b=[2,2,2,2,2]’;
c=[-1,-1,-1,-1]’;
d=[1,0,0,0,0]’;
chase(a,b,c,d);
chase.m:
function x=chase(a,b,c,d)
n=length(b); f(1)=c(1)/b(1); g(1)=d(1)/b(1);
for i=2:n-1
h(i)=b(i)-f(i-1)*a(i-1); f(i)=c(i)/h(i);
g(i)=(d(i)-g(i-1)*a(i-1))/h(i);
end
g(n)=(d(n)-g(n-1)*a(n-1))/(b(n)-f(n-1)*a(n-1));
x(n)=g(n);
for i=n-1:- 1:1
x(i)=g(i)-f(i)*x(i+1);
end
运行结果: