當前位置:編程學習大全網 - 編程軟體 - 怎樣算高斯煙團模型的算法,編程的代碼

怎樣算高斯煙團模型的算法,編程的代碼

% gauss.m

function x = gauss(A,B)

%The sizes of matrices A,B are supposed to be NA x NA and NA x NB.

%This function solves Ax = B by Gauss elimination algorithm.

NA = size(A,2); [NB1,NB] = size(B);

if NB1 ~= NA, error('A and B must have compatible dimensions'); end

N = NA + NB; AB = [A(1:NA,1:NA) B(1:NA,1:NB)]; % Augmented matrix

epss = eps*ones(NA,1);

for k = 1:NA

%Scaled Partial Pivoting at AB(k,k) by Eq.(2.2.20)

[akx,kx] = max(abs(AB(k:NA,k))./max(abs([AB(k:NA,k + 1:NA) epss(1:NA - k + 1)]'))');

if akx < eps, error('Singular matrix and No unique solution'); end

mx = k + kx - 1;

if kx > 1 % Row change if necessary

tmp_row = AB(k,k:N);

AB(k,k:N) = AB(mx,k:N);

AB(mx,k:N) = tmp_row;

end

% Gauss forward elimination

AB(k,k + 1:N) = AB(k,k+1:N)/AB(k,k);

AB(k,k) = 1; %make each diagonal element one

for m = k + 1: NA

AB(m,k+1:N) = AB(m,k+1:N) - AB(m,k)*AB(k,k+1:N); %Eq.(2.2.5)

AB(m,k) = 0;

end

end

%backward substitution for a upper-triangular matrix eqation

% having all the diagonal elements equal to one

x(NA,:) = AB(NA,NA+1:N);

for m = NA-1: -1:1

x(m,:) = AB(m,NA + 1:N)-AB(m,m + 1:NA)*x(m + 1:NA,:); %Eq.(2.2.7)

end

例:

>> A = [0 1 1;2 -1 -1;1 1 -1]; b = [2 0 1]';

>> x = gauss(A,b)

x =

1.00000000000000

1.00000000000000

1.00000000000000

  • 上一篇:編程實現。定義壹個類Dog類,含有以下成員。
  • 下一篇:壹系列手工編織的玫瑰
  • copyright 2024編程學習大全網