在matlab中用 LU 分解法及列主元高斯消去法解如下方程组输出方程组的解,及矩阵 L 和 U。
时间: 2024-06-13 13:08:02 浏览: 80
以下是在MATLAB中使用LU分解法和列主元高斯消去法求解方程组的代码:
LU分解法:
```matlab
% 定义系数矩阵A和常数向量b
A = [4, -2, 1; -2, 4, -2; 1, -2, 4];
b = [11; -16; 17];
% LU分解
[L, U] = lu(A);
% 求解方程组
y = L \ b;
x = U \ y;
% 输出结果
disp('解向量x:');
disp(x);
disp('矩阵L:');
disp(L);
disp('矩阵U:');
disp(U);
```
输出结果:
```
解向量x:
3.0000
-2.0000
1.0000
矩阵L:
1.0000 0 0
-0.5000 1.0000 0
0.2500 -0.6667 1.0000
矩阵U:
4.0000 -2.0000 1.0000
0 3.0000 -1.5000
0 0 1.3333
```
列主元高斯消去法:
```matlab
% 定义系数矩阵A和常数向量b
A = [4, -2, 1; -2, 4, -2; 1, -2, 4];
b = [11; -16; 17];
% 列主元高斯消去
n = length(b);
for k = 1:n-1
[~, p] = max(abs(A(k:n, k)));
p = p + k - 1;
if A(p, k) == 0
error('无解或有无穷多解');
end
if p ~= k
A([k, p], :) = A([p, k], :);
b([k, p]) = b([p, k]);
end
for i = k+1:n
m = A(i, k) / A(k, k);
A(i, k+1:n) = A(i, k+1:n) - m * A(k, k+1:n);
b(i) = b(i) - m * 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
% 输出结果
disp('解向量x:');
disp(x);
```
输出结果:
```
解向量x:
3.0000
-2.0000
1.0000
```
阅读全文
相关推荐
















