线性方程组数值求解目录
线性方程组数值求解题目
列主元高斯消去法计算问题 1
format short;
A=[4 2 -3 -1 2 1 0 0 0 0;8 6 -5 -3 6 5 0 1 0 0;...
4 2 -2 -1 3 2 -1 0 3 1;0 -2 1 5 -1 3 -1 1 9 4;...
-4 2 6 -1 6 7 -3 3 2 3;8 6 -8 5 7 17 2 6 -3 5;...
0 2 -1 3 -4 2 5 3 0 1;16 10 -11 -9 17 34 2 -1 2 2;...
4 6 2 -7 13 9 2 0 12 4;0 0 -1 8 -3 -24 -8 6 3 -1];
b=[5 12 3 2 3 46 13 38 19 -21]';
N=size(A);
n=N(1);
x=gauss_lieZY(A,b,n)
被调函数
function [x] = gauss_lieZY(A,b,n)
%列主元高斯消去法求线性方程组的解
m=zeros(n);
eps
for k=1:1:n-1 %要选 n-1 次主元
a(k)=A(k,k); %迭代来取主元
p(k)=k;
for i=k+1:1:n
if abs(A(i,k))>=abs(a(k))
a(k)=A(i,k)
p(k)=i %记录列主元所在列
end
end
if p(k)>k
z=A(k,:); %交换使得列主元居上
A(k,:)=A(p(k),:);
A(p(k),:)=z
z1=b(k,1); %同时要同步改变 b 向量
b(k,1)=b(p(k),1);
b(p(k),1)=z1
end
if abs(a(k))<eps %如果列主元为 0 时
fprintf('该矩阵奇异,不能以此法求唯一解');
return; end
for j=k+1:1:n
m(j,k)=A(j,k)/A(k,k); %m(j,k)表示线性变换时主列要乘以的系数
for h=k:1:n
A(j,h)=A(j,h)-m(j,k)*A(k,h);
if abs( A(j,h))<1e-15
A(j,h)=0;
end
end
b(j,1)=b(j,1)-m(j,k)*b(k,1);
end
A
b
end
S=0;
for t=n:-1:1
for s=t+1:1:n
S=S+A(t,s)*b(s,1);
end
x(t,1)=(b(t,1)-S)/A(t,t);
if abs(x(t,1))<1e-13
x(t,1)=0;
end
b(t,1)=x(t,1);
S=0;
end
x=vpa(x,2)
end
改进的平方根法计算问题 2
A=[4 2 -4 0 2 4 0 0;2 2 -1 -2 1 3 2 0;...
-4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3;...
2 1 -8 -1 22 4 -10 -3;4 3 -3 -4 4 11 1 -4;
0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];
b=[0 -6 6 23 11 -22 -15 45]';
N=size(A);
n=N(1);
GJ_pinfanggeng(A,b,n)
function [X,Y] = GJ_pinfanggeng(A,b,n)
%改进平方根法求线性方程组的解L=zeros(n);
E=eye(n);
s=0;
s1=0;
d(1)=A(1,1);
format short;
%************************ 根据公式写入L、D 、Lt矩阵**********************
for i=2:1:n
for j=1:1:i-1
if j==1
s=0;
else
for k=1:1:j-1
s=s+d(k)*L(i,k)*L(j,k);
end
end
L(i,j)=(A(i,j)-s)/d(j);
s=0;
end
for k=1:1:i-1
s1=s1+d(k)*L(i,k)*L(i,k);
end
d(i)=A(i,i)-s1;
s1=0;
end
L=L+E
LT=L'
D=diag(d)
Y=L\b;
X=(D*LT)\Y;
End
追赶法计算问题 3
a=[-1 -1 -1 -1 -1 -1 -1 -1 -1];
b=[4 4 4 4 4 4 4 4 4 4];
c=[-1 -1 -1 -1 -1 -1 -1 -1 -1];
d=[7 5 -13 2 6 -12 14 -4 5 -5]';
zhuiganfa(a,b,c,d);
function [L,U,x] = zhuiganfa(a,b,c,d)
%追赶法解三对角型线性方程组
%*************写出增广矩阵 Z***********************
A=diag(a,-1)+diag(b)+diag(c,1);
Z=[A d];
[n m]=size(Z);
E=eye(n);
%*************计算 L、U 矩阵***********************
l(1)=A(1,1);
y(1)=d(1)/l(1);
for i=2:1:n
u(i-1)=c(i-1)/l(i-1);
l(i)=b(i)-a(i-1)*u(i-1);
y(i)=(d(i)-a(i-1)*y(i-1))/l(i);
end
L=diag(l)+diag(a,-1)
U1=diag(u,1)+E;
U=[U1 y']
%**************计算方程组的解********************
x(n)=y(n);
for j=n-1:-1:1
x(j)=y(j)-u(j)*x(j+1);
end
x
end