RE:eliminacion de gauss en scilab
Publicado por
catalina (1 intervención) el 28/08/2008 03:20:55
function escrVect(x, titulo)
// escribe un vector en la pantalla
//*********************
formato = '%10.4f'
numNumerosPorLinea = 5
//*********************
nnl = numNumerosPorLinea
[n1, n2]= size(x)
n = max(n1,n2)
m = min(n1,n2)
if m > 1
printf('ESCRVECT: x no es un vector.
')
end
x = x(:)
if argn(2) == 2
printf('%s :
', titulo)
end
for i=1:n
printf(formato, x(i))
if modulo(i, nnl) == 0 | i == n
printf('
')
end
end
endfunction
//-------------------------------------------------------
function escrMatr(A, titulo)
// escribe una matriz en la pantalla
if argn(2) == 2
printf('%s :
', titulo)
end
[m, n] = size(A)
for i=1:m
escrVect(A(i,:))
end
endfunction
//--------------------------------------------------
function a = merf(A, eps0, IRP)
// Matriz escalonada reducida por filas.
// Se hace pivoteo parcial para buscar para
// disminuir los errores numericos.
// Si |t| <= eps0, se considera nulo.
// Si IRP = 1 se escriben resultados parciales.
// 0 no se escriben los resultados parciales
if argn(2) == 1
eps0 = 1.0e-12
IRP = 0
end
if argn(2) == 2
IRP = 0
end
if IRP == 1, escrMatr(a, 'matriz inicial'), end
[m, n] = size(a)
eps0 = eps0*max(abs(A))
a = A
i = 1
j = 1
while i <= m & j <= n
[vmax, i0] = max(abs(a(i:m,j)))
if vmax > eps0
imax = i+i0-1
if imax ~= i
t = a(i,j:n)
a(i,j:n) = a(imax,j:n)
a(imax,j:n) = t
if IRP == 1
printf('interc. filas %d y %d
', i, imax)
escrMatr(a)
end
end
aij0 = a(i,j)
a(i,j+1:n) = a(i,j+1:n)/a(i,j)
a(i,j) = 1
if IRP == 1
printf('dividir fila %d por el pivote: %f
', i, aij0)
escrMatr(a)
end
for k = 1:m
if k ~= i
a(k,j+1:n) = a(k,j+1:n) - a(k,j)*a(i,j+1:n)
a(k,j) = 0.0
end
end
if IRP == 1
printf('buscar ceros en la columna %d
', j)
escrMatr(a)
end
i = i+1
else
a(i:m,j) = zeros(m+1-i,1)
end
j = j+1
end
endfunction