function solution =Gauss(A,b) %高斯消去法function solution =Gauss(A,b) % A为方程组的系数矩阵 b为方程组的右端项; n = length(b); for k=1:n-1 for i=k+1:n mik=A(i,k)/A(k,k);%消元因子 for j=k+1:n A(i,j)=A(i,j)-mik*A(k,j); end b(i)=b(i)-mik*b(k); end end solution(n)=b(n)/A(n,n); for i=n-1:-1:1 for j=i+1:n solution(i)=solution(i)+A(i,j)*solution(j); end solution(i)=(b(i)-solution(i))/A(i,i); end end
function solution=GaussFunmethod(gauss, Presion)
% gauss为用户输入的增广矩阵
% Precision为用户所输入的精度要求
if nargin==2
try
digits(Precision);
cath
disp('你输入的精度有误');
digits(10);
end
else
digits(10);
end
Ab=vpa(gauss)%显示输入的增广矩阵
row=size(Ab,1);
col=size(Ab,2);
if ndims(Ab)~=2|(col-row)~=1
disp('矩阵的大小有误');
return
end
if det(gauss(:,1:row))==0
disp('该方程的系数矩阵行列式为零');
return
end
% 消元法
for i=1:row
j=i;
while Ab(j,i)==0
j=j+1;
end
temp=Ab(i,:);
Ab(i,:)=Ab(j,:);
Ab(j,:)=temp;
for k=i+1:row
Ab(k,:)=vpa(Ab(k,:)-Ab(i,:)*Ab(k,i)/Ab(i,i));
end
end
%% 回代过程
for i=row:-1:1
temp=Ab(i,col);
for k=i+1:row
temp=vpa(temp-solution(k)*Ab(i,k));
end
solution(i)=vpa(temp/Ab(i,i));
end
endfunction X=Gauss_Mainmethod(A,b)
%列主元方法 计算线性方程组
%A为方程组的系数矩阵 b为方程组的右端项;
zengguang=[A b];
Ab = [A,b]
n=length(b);
ra=rank(A);
rz=rank(zengguang);
temp1=rz-ra;
if temp1>0
disp('方程组无一般意义下的解,系数矩阵与增广矩阵秩不同.')
return
end
if (ra==rz)
if (ra==n)
X=zeros(n,1); C=zeros(1,n+1);
for p= 1:n-1
[Y,j]=max(abs(zengguang(p:n,p))); C=zengguang(p,:);
zengguang(p,:)= zengguang(j+p-1,:); zengguang(j+p-1,:)=C;
for k=p+1:n
m= zengguang(k,p)/ zengguang(p,p);
zengguang(k,p:n+1)= zengguang(k,p:n+1)-m* zengguang(p,p:n+1);
end
end
b=zengguang(1:n,n+1);A=zengguang(1:n,1:n); X(n)=b(n)/A(n,n);
for q=n-1:-1:1
X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);
end
else
disp('方程组为欠定方程组')
end
X = X';
endfunction x=principal_element(A,b) %列主元方法 计算线性方程组 %A为方程组的系数矩阵 b为方程组的右端项; [rows,~]=size(A); aug_mat=[A,b];Ab= [A,b] for i=1:rows temp_list=aug_mat(:,i); temp_list(1:max(1,i-1))=0; [~,exchange_pos]=max(abs(temp_list)); aug_mat([i,exchange_pos],:)=aug_mat([exchange_pos,i],:); coefficient=aug_mat(:,i); coefficient=-coefficient./coefficient(i); coefficient(i)=0; aug_mat=coefficient*aug_mat(i,:)+aug_mat; end divisor=aug_mat((1:rows)+(0:rows:(rows*(rows-1))))'; aug_mat=aug_mat./divisor; x=aug_mat(:,rows+1:end); x =x'; end
function x = GaussJordan(A, b)%function x = GaussJordan(A, b)%GaussJordan消去法%A为方程组的系数矩阵 b为方程组的右端项;n = length(b);if size(A, 1) ~= n || size(A, 2) ~= nerror('Matrix-vector size mismatch.');end
Ab = [A, b]% Perform Gauss-Jordan elimination% augmented matrix
A = [A, b];for k = 1 : nA(k, :) = A(k, :) / A(k, k);for i = k + 1 : n
m = A(i, k) / A(k, k);A(i, :) = A(i, :) - m * A(k, :);end
endfor k = n : -1 : 1for i = k - 1 : -1 : 1m = A(i, k) / A(k, k);A(i, :) = A(i, :) - m * A(k, :);end
end
x = A(:, n + 1);x =x';end Copyright © 2023 leiyu.cn. All Rights Reserved. 磊宇云计算 版权所有 许可证编号:B1-20233142/B2-20230630 山东磊宇云计算有限公司 鲁ICP备2020045424号
磊宇云计算致力于以最 “绿色节能” 的方式,让每一位上云的客户成为全球绿色节能和降低碳排放的贡献者