如何在MATLAB中编写一个函数来运用高斯消元法求解线性方程组,并将解结果显示在增广矩阵的最后一列?
时间: 2024-11-04 17:15:27 浏览: 5
在MATLAB中,你可以通过编写一个名为`gauss_elim`的函数来应用高斯消元法求解线性方程组。以下是基本步骤:
```matlab
function [X, augmentedMatrix] = gauss_elim(A, b)
% A: 系数矩阵
% b: 右侧向量
% 验证输入矩阵是否有效
if ~(isnumeric(A) && isreal(A) && all(size(A) == size(b)))
error('Invalid input: both A and b should be real numeric matrices with the same dimensions.');
end
[n, m] = size(A); % 获取方程组的行数n和列数m
augmentedMatrix = [A; b]; % 创建增广矩阵,附加b到A的右侧
% 高斯消元过程
for i = 1:n
for j = i+1:m
if abs(augmentedMatrix(j,i)) > abs(augmentedMatrix(i,i))
temp = augmentedMatrix(i,:);
augmentedMatrix(i,:) = augmentedMatrix(j,:);
augmentedMatrix(j,:) = temp; % 比较元素大小并交换行
end
factor = augmentedMatrix(j,i);
augmentedMatrix(j,:) = augmentedMatrix(j,:) - factor * augmentedMatrix(i,:);
% 除以当前行主元素,得到行简化形式
augmentedMatrix(i,:) = augmentedMatrix(i,:) / augmentedMatrix(i,i);
end
% 如果当前行已经化简为单位行,则跳出内部循环
if augmentedMatrix(i,i) == 0
warning('Singular matrix detected. No unique solution exists.');
break;
end
end
% 从最后一行开始回代求解
X = zeros(n, 1);
for k = n:-1:1
X(k) = augmentedMatrix(k,n) / augmentedMatrix(k,k);
% 回带更新前面的未知数
for j = k-1:-1:1
augmentedMatrix(j,n) = augmentedMatrix(j,n) - augmentedMatrix(j,k) * X(k);
end
end
% 返回解和增广矩阵
augmentedMatrix(:, n) = X; % 将解添加到增广矩阵的最后一列
end
```
阅读全文