高斯消去法matlab代码

高斯消去法是一种线性代数中常用的方法,用于解线性方程组。

matlab
function x = gauss_elimination(A, b) % 输入参数: % A 是系数矩阵 % b 是右侧常数向量 % 获取矩阵的行数和列数 [m, n] = size(A); % 合并系数矩阵和右侧常数向量 augmented_matrix = [A, b]; % 高斯消去法的主循环 for k = 1:m % 部分主元素消去 for i = k+1:m factor = augmented_matrix(i, k) / augmented_matrix(k, k); augmented_matrix(i, k:n+1) = augmented_matrix(i, k:n+1) - factor * augmented_matrix(k, k:n+1); end end % 回代求解 x = zeros(m, 1); for i = m:-1:1 x(i) = (augmented_matrix(i, n+1) - augmented_matrix(i, i+1:n) * x(i+1:n)) / augmented_matrix(i, i); end end

要使用这个函数,你只需提供系数矩阵 A 和右侧常数向量 b,然后调用函数 gauss_elimination,如下所示:

matlab
A = [2, -1, 1; -3, 3, 9; -2, 5, 3]; b = [8; 0; 3]; x = gauss_elimination(A, b); disp('解向量 x:'); disp(x);

当使用高斯消去法时,还需要考虑一些特殊情况,比如主元素为零、奇异矩阵等。

matlab
function x = gauss_elimination(A, b) % 输入参数: % A 是系数矩阵 % b 是右侧常数向量 % 获取矩阵的行数和列数 [m, n] = size(A); % 检查矩阵是否为方阵 if m ~= n error('系数矩阵必须是方阵。'); end % 检查矩阵是否是奇异矩阵 if det(A) == 0 error('矩阵是奇异矩阵,无法使用高斯消去法求解。'); end % 合并系数矩阵和右侧常数向量 augmented_matrix = [A, b]; % 高斯消去法的主循环 for k = 1:m % 查找主元素不为零的行 nonzero_row = find(augmented_matrix(k:m, k), 1) + k - 1; % 交换行,确保主元素不为零 augmented_matrix([k, nonzero_row], :) = augmented_matrix([nonzero_row, k], :); % 部分主元素消去 for i = k+1:m factor = augmented_matrix(i, k) / augmented_matrix(k, k); augmented_matrix(i, k:n+1) = augmented_matrix(i, k:n+1) - factor * augmented_matrix(k, k:n+1); end end % 回代求解 x = zeros(m, 1); for i = m:-1:1 x(i) = (augmented_matrix(i, n+1) - augmented_matrix(i, i+1:n) * x(i+1:n)) / augmented_matrix(i, i); end end

这个改进的代码在进行消元之前会检查矩阵是否为方阵,以及是否为奇异矩阵。如果不满足这些条件,将抛出相应的错误信息。此外,还添加了交换行的步骤,以确保主元素不为零。

使用这个改进后的代码,你可以更安全地解决一些特殊情况下的线性方程组。

标签