山西大学计算机学院数值分析实验二
数值分析实验二:列主元素高斯消去法和列主元素高斯-约当消去法的比较研究
本实验的目的是使用列主元素高斯消去法和列主元素高斯-约当消去法解决线性方程组Ax=b,其中A为n阶非奇异方阵,x、b是n阶列向量。我们将对这两种方法进行比较研究,并分析选主元素的重要性。
一、实验目的:
在数值分析中,解决线性方程组是非常重要的一步骤。列主元素高斯消去法和列主元素高斯-约当消去法都是解决线性方程组的常用方法。本实验的目的是使用这两种方法解决线性方程组Ax=b,并比较它们的优缺点。
二、实验方法:
-
列主元素高斯消去法:在每步消元过程中,选列主元素。对k=1,2,…,n-1,逐次计算[l_{ik} = \frac{a_{ik}^{(k-1)}}{a_{kk}^{(k-1)}}],[a_{ij}^{(k)} = a_{ij}^{(k-1)} - l_{ik}a_{kj}^{(k-1)}],[b_{i}^{(k)} = b_{i}^{(k-1)} - l_{ik}b_{k}^{(k-1)}]。逐步回代求得原方程的解[x_{k} = \frac{b_{k}^{(k-1)} - \sum_{j=k+1}^{n}a_{kj}^{(k-1)}x_{j}}{a_{kk}^{(k-1)}}]。
-
列主元素高斯-约当消去法:在每步消元过程中,选列主元素。对k=1,2,…,n,逐次计算[a_{kj}^{(k)} = \frac{a_{kj}^{(k-1)}}{a_{kk}^{(k-1)}}],[a_{ij}^{(k)} = a_{ij}^{(k-1)} - a_{ik}^{(k-1)}a_{kj}^{(k)}]。逐步回代求得原方程的解[x_{k} = \frac{b_{k}^{(k-1)} - \sum_{j=k+1}^{n}a_{kj}^{(k-1)}x_{j}}{a_{kk}^{(k-1)}}]。
三、实验内容:
我们使用以下方程组进行实验:
[x_1 + 1.1348x_2 + 3.8326x_3 + 1.1651x_4 = 9.5342]
[0.5301x_1 + 1.7875x_2 + 2.5330x_3 + 1.5435x_4 = 6.3941]
[3.4129x_1 + 4.9317x_2 + 8.7643x_3 + 1.3142x_4 = 18.4231]
[1.2371x_1 + 4.9998x_2 + 10.6721x_3 + 0.0147x_4 = 16.9237]
四、实验程序:
我们使用MATLAB编程语言编写了两个函数:agui_gauss和agui_gaussJodon,分别实现列主元素高斯消去法和列主元素高斯-约当消去法。
- 列主元素高斯消去法:
function x = agui_gauss(a,b)
n = length(b);
a = [a,b];
for k = 1:(n-1)
[ar,r] = max(abs(a(k:n,k)));
r = r+k-1;
if r > k
t = a(k,:);
a(k,:) = a(r,:);
a(r,:) = t;
end
a((k+1):n,(k+1):(n+1)) = a((k+1):n,(k+1):(n+1))-a((k+1):n,k)/a(k,k)*a(k,(k+1):(n+1));
a((k+1):n,k) = zeros(n-k,1);
end
x = zeros(n,1);
x(n) = a(n,n+1)/a(n,n);
for k = n-1:-1:1
x(k,:) = (a(k,n+1)-a(k,(k+1):n)*x((k+1):n))/a(k,k);
end
end
- 列主元素高斯-约当消去法:
function x = agui_gaussJodon(a,b)
n = length(a);
a = [a,b];
for k = 1:n
m = a(k,k);
for j = k:n+1
a(k,j) = a(k,j)/m;
end
for i = 1:n
w = a(i,k);
for j = k:n+1
if(i~=k)
a(i,j) = a(i,j)-w*a(k,j);
end
end
end
end
x = zeros(n,1);
for i = 1:n
x(i) = a(i,n+1)/a(i,i);
end
end
五、实验结果:
通过实验,我们可以看到,列主元素高斯消去法和列主元素高斯-约当消去法都可以解决线性方程组Ax=b。但是,它们在计算效率和数值稳定性方面存在一定的差异。我们可以通过实验结果来比较这两种方法的优缺点。可以参考以下资源来了解更多细节:
你有没有发现这些方法的微妙差异?计算效率的不同究竟有多大影响?请点击上面的链接获取更多信息,揭开这些方法背后的秘密!