1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
digits(9); A = vpa([3.01,6.03,1.96; 1.348,6.65,0.002; 1.47, -4.81,9.34]) disp('detA=') disp(det(A)) b = [11,8,6]' [m,n]=size(A);
if m~=n error('矩阵A的行数和列数必须相同'); return; end if m~=size(b) error('b的大小必须和A的行数或A的列数相同'); return; end
if rank(A)~=rank([A,b]) error('A矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解'); return; end
c=n+1; A(:,c)=b;
for i=1:n disp(['第',num2str(i),'次交换列主元前:']) disp(A); [max_col,position_to_i]= max(abs(A(i:end,i))); if max_col == 0 error('主对角元是0,无唯一解,无法用高斯主列消元法解'); end max_col_rowposition = position_to_i+i-1; if max_col_rowposition ~= i temp = A(i,:); A(i,:) = A(max_col_rowposition,:); A(max_col_rowposition,:) = temp; end disp(['第',num2str(i),'次交换列主元后:']) disp(A); for j = (i+1):n A(j,:) = A(j,:) - A(j,i) / A(i,i) * A(i,:); end disp(['第',num2str(i),'次消元后:']) disp(A); end
x=zeros(length(b),1); x(n)=A(n,c)/A(n,n); for k=n-1:-1:1 x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n))/A(k,k); end
disp('x='); disp(x);
|