You are on page 1of 6

Formato para documentar un programa de métodos numéricos de propósito general

Algoritmo Número (Valor 5 Puntos)

(B) det (A) =a1,1 , para n=1


(R) det (A) =j=1n-1i+jai,j Mi,j , para i=1 (renglon)

Descripción del problema (Valor 15 Puntos)

Descripción de la solución del problema en un modelo matemático.

Algoritmo (Valor 20 Puntos)

Descripción de la solución del problema en un algoritmo utilizando notación de


matemáticas discretas (lenguaje universal).

Algoritmo en Pseudocódigo (Valor 20 Puntos)

function detA∈R = recursivedet(input AMn×mR)


// PhD. Juan R. Castro
// Pseudocode: Evaluate determinant using cofactor expansion
// along the first row (i=1)
i,j,n,m ∈N
sumVal ∈R
[n,m] ← card(A)
if n≠m then
    error(‘Matrix must be square’)
end
i ← 1 % first row
idx ← 1…n  // index i-th row of a matrix A
sumVal ← 0   // initializes the summation for j = 1, ..., n
for j←1 to n do  // j-th column of a matrix A
if card(A,1) = 1 then  // size matriz 1x1
       sumVal ← A
else
       // delete row i=1 and column j in A to get the minor A(idrow,idcol)
      idrow ← idx(idx ≠ i)  // i-th (i=2,...,n) row of a matrix A
      idcol ← idx(idx ≠ j)    // j-th column of a matrix A
      sumVal⟵sumVal+-1i+jai,j recursivedet(Arow,col)
end
end
detA ← sumVal
end function

Codificación del algoritmo en pseudocódigo a un lenguaje de programación (Valor 20 Puntos)


function [X,A,NROW] = alg62(A,b)
% GAUSSIAN ELIMINATION WITH PARTIAL PIVOTING ALGORITHM 6.2
%
% To solve the n by n linear system
%
% E1: A(1,1) X(1) + A(1,2) X(2) +...+ A(1,n) X(n) = A(1,n+1)
% E2: A(2,1) X(1) + A(2,2) X(2) +...+ A(2,n) X(n) = A(2,n+1)
% :
% .
% EN: A(n,1) X(1) + A(n,2) X(2) +...+ A(n,n) X(n) = A(n,n+1)
%
% INPUT: number of unknowns and equations n; augmented
% matrix A = A(I,J) where 1<=I<=n and 1<=J<=n+1.
%
% OUTPUT: solution x(1), x(2),...,x(n) or a message that the
% linear system has no unique solution.
%
A = [A,b]; % augmented matrix
[N,M] = size(A);
OK = true;
% STEP 1
for I = 1:N
NROW(I) = I;
end
% initialize row pointer
NN = N-1;
ICHG = 0;
I = 1;
% STEP 2
while (OK == true & I <= NN)
% STEP 3
IMAX = NROW(I);
AMAX = abs(A(IMAX,I));
IMAX = I;
JJ = I+1;
for IP = JJ:N
JP = NROW(IP);
if abs(A(JP,I)) > AMAX
AMAX = abs(A(JP,I));
IMAX = IP;
end
end
% STEP 4
if (AMAX <= eps)
OK = false;
else
% STEP 5. Simulate row interchange
if NROW(I) ~= NROW(IMAX)
ICHG = ICHG+1;
NCOPY = NROW(I);
NROW(I) = NROW(IMAX);
NROW(IMAX) = NCOPY;
end;
I1 = NROW(I);
% STEP 6
for J = JJ:N
J1 = NROW(J);
% STEP 7
XM = A(J1,I)/A(I1,I);
% STEP 8
for K = JJ:M
A(J1,K) = A(J1,K)-XM*A(I1,K);
end
% Multiplier XM could be saved in A(J1,I)
A(J1,I) = 0.0;
end
end
I = I+1;
end

if (OK == true)
% STEP 9
N1 = NROW(N);
if (abs(A(N1,N)) <= eps)
OK = false;
% system has no unique solution
else
% STEP 10. Start backward substitution
X(N,1) = A(N1,M) / A(N1,N);
% STEP 11
for K = 1:NN
I = NN - K + 1;
JJ = I + 1;
N2 = NROW(I);
SUM = 0;
for KK = JJ:N
SUM = SUM-A(N2,KK)*X(KK);
end
X(I,1) = (A(N2,M) + SUM) / A(N2,I);
end
% STEP 12. Procedure completed successfully
fprintf('\nProcedure completed successfully\n');
fprintf ('with %d row interchange(s)\n', ICHG);
fprintf('\nThe rows have been logically re-ordered to:\n');
NROW
end
if OK == false
fprintf('System has no unique solution\n');
end
end
Prueba del Algoritmo (Valor 20 Puntos)

You might also like