列主元高斯消去法解线性方程组matlab代码
时间: 2024-09-29 18:02:50 浏览: 109
数值分析习题大作业(20210708105055).pdf
列主元高斯消元法是一种常用的方法来求解线性方程组,在MATLAB中可以使用内置函数如`inv()`、`*`(矩阵乘法)以及`eye()`来实现。下面是一个简单的例子,假设我们有一个系数矩阵 `A` 和常数向量 `b`,并想要找到对应的解 `x`:
```Matlab
% 创建一个示例线性方程组系数矩阵 A 和常数项 b
A = [2 1; 3 4]; % 2x2 矩阵
b = [5; 9]; % 目标向量
% 使用列主元高斯消元法
[n, m] = size(A); % 获取矩阵维度
P = eye(n); % 初始化交换矩阵,对角线元素为1
L = eye(n); % 上三角矩阵,初始全为1
U = A; % 等价上三角矩阵,初始等于原矩阵
for i = 1:n-1
% 找到当前列的最大主元
max_idx = find(abs(U(i:end,i)) == max(abs(U(i:end,i))));
% 如果最大主元不在第一个位置,交换行
if max_idx ~= i
swap_rows(P, L, U, i, max_idx);
end
% 消元操作
scale_factor = U(i,max_idx) / U(max_idx,max_idx);
U(i:end,:) = U(i:end,:) - scale_factor * U(max_idx,:);
L(i:end,:) = L(i:end,:) -1:1
U(i,:) = U(i,:) ./ U(i,i);
end
% 通过回代求解
x = P \ (L \ b);
% 验证解是否正确
solution = U*x;
disp(['解为:', num2str(x)])
disp(['计算结果:', num2str(solution)])
% 函数swap_rows用于交换行
function swap_rows(P, L, U, row1, row2)
temp_P = P(row1,:);
P(row1,:) = P(row2,:);
P(row2,:) = temp_P;
temp_L = L(row1,:);
L(row1,:) = L(row2,:);
L(row2,:) = temp_L;
temp_U = U(row1,:);
U(row1,:) = U(row2,:);
U(row2,:) = temp_U;
end
```
阅读全文