编写matlab程序,用以下方法求解线性方程 (1)Gauss消元法; (2)列主元Gauss消元法; (3)Doolittle分解法; (4)列主元Doolittle分解法 (5)Crout分解法.
时间: 2023-06-08 07:07:43 浏览: 75
非常感谢您的提问。作为一个AI语言模型,我可以为您提供一些基本的MATLAB程序。以下是各个方法的MATLAB程序:
1. Gauss消元法
function [L, U, x] = GaussElimination(A,b)
[m,n] = size(A);
U = [A,b];
for i=1:m-1
for j = i+1:m
a = U(j,i)/U(i,i);
U(j,:) = U(j,:) - a*U(i,:);
L(j,i) = a;
end
end
x(m) = U(m,n+1)/U(m,m)
for i = m-1:-1:1
x(i) = (U(i,n+1) - U(i,i+1:m)*x(i+1:m))/U(i,i);
end
2. 列主元Gauss消元法
function [L, U, x] = ColumnPivotGaussElimination(A,b)
[m,n] = size(A);
U = [A,b];
for i=1:m-1
pivot = i;
for j = i+1:m
if abs(U(j,i)) > abs(U(pivot,i))
pivot = j;
end
end
U([i,pivot],:) = U([pivot,i],:);
for j = i+1:m
a = U(j,i)/U(i,i);
U(j,:) = U(j,:) - a*U(i,:);
L(j,i) = a;
end
end
x(m) = U(m,n+1)/U(m,m)
for i = m-1:-1:1
x(i) = (U(i,n+1) - U(i,i+1:m)*x(i+1:m))/U(i,i);
end
3. Doolittle分解法
function [L, U, x] = DoolittleDecomposition(A,b)
[m,n] = size(A);
U = A;
L = eye(m);
for i=1:m-1
for j = i+1:m
a = U(j,i)/U(i,i);
U(j,:) = U(j,:) - a*U(i,:);
L(j,i) = a;
end
end
y(1) = b(1)/L(1,1)
for i = 2:m
y(i) = (b(i) - L(i,1:i-1) * y(1:i-1)')/L(i,i);
end
x(m) = y(m)/U(m,m)
for i = m-1:-1:1
x(i) = (y(i) - U(i,i+1:m)*x(i+1:m))/U(i,i);
end
4. 列主元Doolittle分解法
function [L, U, x] = ColumnPivotDoolittleDecomposition(A,b)
[m,n] = size(A);
U = A;
L = eye(m);
for i=1:m-1
pivot = i;
for j = i+1:m
if abs(U(j,i)) > abs(U(pivot,i))
pivot = j;
end
end
U([i,pivot],:) = U([pivot,i],:);
L([i,pivot],1:i-1) = L([pivot,i],1:i-1);
for j = i+1:m
a = U(j,i)/U(i,i);
U(j,:) = U(j,:) - a*U(i,:);
L(j,i) = a;
end
end
y(1) = b(1)/L(1,1)
for i = 2:m
y(i) = (b(i) - L(i,1:i-1) * y(1:i-1)')/L(i,i);
end
x(m) = y(m)/U(m,m)
for i = m-1:-1:1
x(i) = (y(i) - U(i,i+1:m)*x(i+1:m))/U(i,i);
end
5. Crout分解法
function [L, U, x] = CroutDecomposition(A,b)
[m,n] = size(A);
U = zeros(m);
L = zeros(m);
for i = 1:m
L(i,i) = 1;
end
for i=1:m
U(i,i:m) = A(i,i:m) - L(i,1:i-1)*U(1:i-1,i:m);
L(i+1:m,i) = (A(i+1:m,i) - L(i+1:m,1:i-1)*U(1:i-1,i))/U(i,i);
end
y(1) = b(1)/L(1,1);
for i = 2:m
y(i) = (b(i) - L(i,1:i-1) * y(1:i-1)')/L(i,i);
end
x(m) = y(m)/U(m,m);
for i = m-1:-1:1
x(i) = (y(i) - U(i,i+1:m)*x(i+1:m))/U(i,i);
end
希望这些程序能够帮助您解决问题。如果您有其他问题,请继续提问。