-
Notifications
You must be signed in to change notification settings - Fork 4
/
gausspivot.sci
45 lines (37 loc) · 972 Bytes
/
gausspivot.sci
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
exec('plates.sci')
//funcion intercambia filas
function sol = intercambiarFilas(A, i, j)
temp = A(i,:)
A(i,:) = A(j,:)
A(j,:) = temp
sol = A
endfunction
function sol = gausspivot(A, b)
[m,n] = size(A) // Dimesiones de la matriz de entrada
if (m <> n) then // Comprueba si la matriz es cuadrada
error("La matriz no es cuadrada.")
end
// Inicia el algoritmo
for i = 1:n-1
// Pivotacion parcial
[q,p] = max(A(i:n,i))
p = p+i-1
A = intercambiarFilas(A, i, p)
b = intercambiarFilas(b, i, p)
// Triangularizacion
for j = i+1:n
r = A(j,i)/A(i,i)
A(j,:) = A(j,:) - r*A(i,:)
b(j,:) = b(j,:) - r*b(i,:)
end
end
// Sustitucion inversa
for j = n:-1:1
suma = 0
for k = j+1:n
suma = suma + A(j,k)*x(k)
end
x(j) = ( b(j) - suma ) / A(j,j)
end
sol = x
endfunction