gauss.m

来自「LU decomposition routines in matlab」· M 代码 · 共 73 行

M
73
字号
function [A,b,iflag] = gauss( A, b)%% Usage:%        [A,b,iflag] = gauss( A, b)%% Given an N by N matrix A and an N vector b,% apply Gaussian elimination with column pivoting% to transform the augmented matrix (A:b) into upper % triangular form%% input:%        A:     the N by N matrix A%%        b:     the N vector b%% output:%        A:     the transformed N by N matrix A%%        b:     the transformed N vector b (matrix b)%%        iflag: error flag%               iflag = 0  Row reductions could be performed,%                          A is upper triangular%               iflag = 1  dimension of A or of b is not correct%%% Matthias Heinkenschloss% Sept. 22, 1995iflag = 0;% get size of A and check dimensions[m,n]    = size(A);if ( m ~= n | n ~= size(b,1) )   iflag = 1;   returnend% Start Gaussian eliminationfor k = 1:n-1%   find row index containing the element in column%   k that has largest absolut value    [amax,i] = max(abs(A(k:n,k)));    i = i + k - 1; %   perform row interchange if necessary    if( i ~= k )         atmp = A(k,k:n);        A(k,k:n) = A(i,k:n);        A(i,k:n) = atmp;        btmp   = b(k,:);        b(k,:) = b(i,:);        b(i,:) = btmp;    end     if( A(k,k) ~= 0)%       perform row elimination        for i = k+1:n    %           compute multiplier            l = A(i,k)/A(k,k);            A(i,k:n) = A(i,k:n) - l * A(k,k:n);             b(i,:) = b(i,:) - l * b(k,:);            A(i,k) = 0;        end    endend

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?