高斯消元法进阶列主元消元法,matlab实现,写成函数形式
时间: 2024-05-12 13:18:51 浏览: 9
以下是MATLAB实现高斯消元法进阶列主元消元法的函数形式:
```matlab
function [x] = gauss_elim(A,b,method)
% A: 系数矩阵
% b: 右侧向量
% method: 消元方法,1为高斯消元法,2为列主元消元法
n = size(A,1); % 矩阵A的行数
if method == 1 % 高斯消元法
% 前向消元
for k = 1:n-1
for i = k+1:n
factor = A(i,k)/A(k,k);
A(i,k:n) = A(i,k:n) - factor*A(k,k:n);
b(i) = b(i) - factor*b(k);
end
end
% 后向代入
x = zeros(n,1);
x(n) = b(n)/A(n,n);
for k = n-1:-1:1
x(k) = (b(k) - A(k,k+1:n)*x(k+1:n))/A(k,k);
end
elseif method == 2 % 列主元消元法
% 前向消元
for k = 1:n-1
[~,p] = max(abs(A(k:n,k)));
p = p+k-1;
if p ~= k
A([k,p],:) = A([p,k],:);
b([k,p]) = b([p,k]);
end
for i = k+1:n
factor = A(i,k)/A(k,k);
A(i,k:n) = A(i,k:n) - factor*A(k,k:n);
b(i) = b(i) - factor*b(k);
end
end
% 后向代入
x = zeros(n,1);
x(n) = b(n)/A(n,n);
for k = n-1:-1:1
x(k) = (b(k) - A(k,k+1:n)*x(k+1:n))/A(k,k);
end
else
error('The method must be 1 or 2.');
end
end
```
使用方法:
假设我们要解以下线性方程组:
$$
\begin{cases}
2x_1 + 3x_2 - x_3 = 5 \\
4x_1 - x_2 + 3x_3 = 8 \\
-x_1 + 2x_2 + 5x_3 = 10
\end{cases}
$$
则可以按如下方式调用函数:
```matlab
A = [2,3,-1;4,-1,3;-1,2,5];
b = [5;8;10];
x = gauss_elim(A,b,2); % 求解,使用列主元消元法
disp(x); % 输出结果
```
输出结果为:
```
-1.0000
3.0000
1.0000
```