计算方法上机作业 下载本文

线性方程组的直接解法

一、目的和意义

在科学和工程技术中,很多问题可归结为求解大型线性方程组。很多非线性问题也可通过局部线性化而转化为线性问题。因此,线性问题的求解构成了解决各类计算问题的基础。

线性方程组的数值解法分为直接解法和间接解法两大类。直接解法是指通过有限步运算后,将方程组加工为某个三角方程组或者对角方程组。直接法常用于求解中小型的线性方程组及某些特殊的大型方程组。

二、计算公式

1.LU分解法(doolittle分解)

三、结构程序设计代码 1.LU分解法

题1

%初始化,矩阵A,4阶,列向量b,L为单位对角矩阵

A = [4 2 1 5;8 7 2 10;4 8 3 6;12 6 11 20]; n=4; b = [-2 -7 -7 -3]'; L = eye(n); U(1,:) = A(1,:); for k = 2:n

%判断U矩阵的对角线上是否有0,如果有0,则不能分解 if U(k-1,k-1) == 0 disp('分解失败');return end

%具体分解过程

L(k:n, k-1) = A(k:n, k-1)/U(k-1, k-1);

U(k, k:n) = A(k, k:n) - L(k, 1:k-1) * U(1:k-1, k:n); if k < n

A(k+1:n, k) = A(k+1:n, k) - L(k+1:n, 1:k-1) * U(1:k-1,k); end end

%利用Ly=b,算出y向量 y = (L^-1) * b; %利用Ux=y,算出解向量x x = (U^-1) * y

题2-1

%初始化,矩阵A,n阶,列向量b,L为单位对角矩阵 n=5; A = zeros(n,n); b = zeros(n,1); %循环构建矩阵A和向量b for i = 1:n A(i,i) = 2; if i < n

A(i,i+1) = 1; A(i+1,i) = 1; end if i == 1 b(i,1) = -7; else

b(i,1) = -5; end end

L = eye(n); U(1,:) = A(1,:); for k = 2:n

%判断U矩阵的对角线上是否有0,如果有0,则不能分解 if U(k-1,k-1) == 0 disp('分解失败');return end

%具体分解过程

L(k:n, k-1) = A(k:n, k-1)/U(k-1, k-1);

U(k, k:n) = A(k, k:n) - L(k, 1:k-1) * U(1:k-1, k:n); if k < n

A(k+1:n, k) = A(k+1:n, k) - L(k+1:n, 1:k-1) * U(1:k-1,k); end end L U

%利用Ly=b,算出y向量 y = (L^-1) * b; %利用Ux=y,算出解向量x x = (U^-1) * y

题2-2、2-3

这两个程序与2-1的程序几乎一模一样,只是将n的值变为10和100,再进行计算,为了节省篇幅,这里就不再列出程序了。

四、结果及其讨论 1.LU分解法结果

题1

题2-1

题2-2