数值分析(代码)-Doolittle分解法、改进的Cholesky分解法、追赶法

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

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天不熬夜!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值