Exemplo n.º 1
0
def sortJacobi(lam, x):
    n = len(lam)
    for i in range(n - 1):
        index = i
        val = lam[i]
        for j in range(i + 1, n):
            if lam[j] < val:
                index = j
                val = lam[j]
        if index != i:
            swap.swapRows(lam, i, index)
            swap.swapCols(x, i, index)
Exemplo n.º 2
0
def sortJacobi(lam,x):
    n = len(lam)
    for i in range(n-1):
        index = i
        val = lam[i]
        for j in range(i+1,n):
            if lam[j] < val:
                index = j
                val = lam[j]
        if index != i:
            swap.swapRows(lam,i,index)
            swap.swapCols(x,i,index)
Exemplo n.º 3
0
def gaussJordanPivot(a, tol=1.0e-9):
    n = len(a)
    seq = array(range(n))

    # Set up scale factors
    s = zeros((n), type=Float64)
    for i in range(n):
        s[i] = max(abs(a[i, :]))

    for i in range(n):

        # Row interchange, if needed
        p = int(argmax(abs(a[i:n, i]) / s[i:n])) + i
        if abs(a[p, i]) < tol: error.err('Matrix is singular')
        if p != i:
            swap.swapRows(s, i, p)
            swap.swapRows(a, i, p)
            swap.swapRows(seq, i, p)

    # Elimination phase
        temp = a[i, i]
        a[i, i] = 1.0
        a[i, 0:n] = a[i, 0:n] / temp
        for k in range(n):
            if k != i:
                temp = a[k, i]
                a[k, i] = 0.0
                a[k, 0:n] = a[k, 0:n] - a[i, 0:n] * temp

# Rearrange columns in the right sequence
    for i in range(n):
        swap.swapCols(a, i, seq[i])
        swap.swapRows(seq, i, seq[i])
    return a
Exemplo n.º 4
0
def gaussJordanPivot(a,tol=1.0e-9):
    n = len(a)
    seq = array(range(n))
    
  # Set up scale factors
    s = zeros((n),type=Float64)
    for i in range(n):
        s[i] = max(abs(a[i,:]))      
    
    for i in range(n):

      # Row interchange, if needed
        p = int(argmax(abs(a[i:n,i])/s[i:n])) + i
        if abs(a[p,i]) <  tol: error.err('Matrix is singular')
        if p != i:
            swap.swapRows(s,i,p)
            swap.swapRows(a,i,p)
            swap.swapRows(seq,i,p)
            
      # Elimination phase
        temp = a[i,i]
        a[i,i] = 1.0
        a[i,0:n] = a[i,0:n]/temp
        for k in range(n):
            if k != i: 
                temp = a[k,i]
                a[k,i] = 0.0
                a[k,0:n] = a[k,0:n] - a[i,0:n]*temp

  # Rearrange columns in the right sequence
    for i in range(n):
        swap.swapCols(a,i,seq[i])
        swap.swapRows(seq,i,seq[i])
    return a
Exemplo n.º 5
0
def LUdecomp(a, tol=1.0e-9):
    n = len(a)
    seq = array(range(n))

    # Set up scale factors
    s = zeros((n), dtype=float64)
    for i in range(n):
        s[i] = max(abs(a[i, :]))

    for k in range(0, n - 1):

        # Row interchange, if needed
        p = int(argmax(abs(a[k:n, k]) / s[k:n])) + k
        if abs(a[p, k]) < tol: error.err('Matrix is singular')
        if p != k:
            swap.swapRows(s, k, p)
            swap.swapRows(a, k, p)
            swap.swapRows(seq, k, p)

    # Elimination
        for i in range(k + 1, n):
            if a[i, k] != 0.0:
                lam = a[i, k] / a[k, k]
                a[i, k + 1:n] = a[i, k + 1:n] - lam * a[k, k + 1:n]
                a[i, k] = lam
    return a, seq
Exemplo n.º 6
0
def gaussPivot(a, b, tol=1.0e-12):
    n = len(b)

    # Set up scale factors
    s = zeros((n), dtype=float64)
    for i in range(n):
        s[i] = max(abs(a[i, :]))

    for k in range(0, n - 1):

        # Row interchange, if needed
        p = int(argmax(abs(a[k:n, k]) / s[k:n])) + k
        if abs(a[p, k]) < tol: error.err('Matrix is singular')
        if p != k:
            swap.swapRows(b, k, p)
            swap.swapRows(s, k, p)
            swap.swapRows(a, k, p)

    # Elimination
        for i in range(k + 1, n):
            if a[i, k] != 0.0:
                lam = a[i, k] / a[k, k]
                a[i, k + 1:n] = a[i, k + 1:n] - lam * a[k, k + 1:n]
                b[i] = b[i] - lam * b[k]
    if abs(a[n - 1, n - 1]) < tol: error.err('Matrix is singular')

    # Back substitution
    for k in range(n - 1, -1, -1):
        b[k] = (b[k] - dot(a[k, k + 1:n], b[k + 1:n])) / a[k, k]
    return b
Exemplo n.º 7
0
def gaussPivot(a,b,tol=1.0e-12):
    n = len(b)
    
  # Set up scale factors
    s = zeros((n),type=Float64)
    for i in range(n):
        s[i] = max(abs(a[i,:]))
            
    for k in range(0,n-1):
        
      # Row interchange, if needed
        p = int(argmax(abs(a[k:n,k])/s[k:n])) + k
        if abs(a[p,k]) < tol: error.err('Matrix is singular')
        if p != k:
            swap.swapRows(b,k,p)
            swap.swapRows(s,k,p)
            swap.swapRows(a,k,p)
            
      # Elimination
        for i in range(k+1,n):
            if a[i,k] != 0.0:
                lam = a[i,k]/a[k,k]
                a[i,k+1:n] = a [i,k+1:n] - lam*a[k,k+1:n]
                b[i] = b[i] - lam*b[k]
    if abs(a[n-1,n-1]) < tol: error.err('Matrix is singular')
                   
  # Back substitution
    for k in range(n-1,-1,-1):
        b[k] = (b[k] - dot(a[k,k+1:n],b[k+1:n]))/a[k,k]
    return b
Exemplo n.º 8
0
def LUdecomp(a, tol=1.0e-9):
    n = len(a)
    seq = array(range(n))

    # Set up scale factors
    s = zeros((n), type=Float64)
    for i in range(n):
        s[i] = max(abs(a[i, :]))

    for k in range(0, n - 1):

        # Row interchange, if needed
        p = int(argmax(abs(a[k:n, k]) / s[k:n])) + k
        if abs(a[p, k]) < tol:
            error.err("Matrix is singular")
        if p != k:
            swap.swapRows(s, k, p)
            swap.swapRows(a, k, p)
            swap.swapRows(seq, k, p)

        # Elimination
        for i in range(k + 1, n):
            if a[i, k] != 0.0:
                lam = a[i, k] / a[k, k]
                a[i, k + 1 : n] = a[i, k + 1 : n] - lam * a[k, k + 1 : n]
                a[i, k] = lam
    return a, seq
Exemplo n.º 9
0
def guassPivot(a,b,tol=1.0e-12):
    n = len(b)
    
    s = np.zeros(n)
    for i in range(n):
        s[i] = max(np.abs(a[i,:]))

    for k in range(0,n-1):
        p = np.argmax(np.abs(a[k:n,k]) / s[k:n]) + k
        if abs(a[p,k]) < tol: error.err('Matrix is Singular'):
        if p != k:
            swap.swapRows(b, k, p)
            swap.swapRows(s, k, p)
            swap.swapRows(a, k, p)
         
    for i in range(k+1,n):
        if a[i,k] != 0.0:
            lam = a[i,k]/a[k,k]
            a[i,k+1:n] = a[i, k+1:n] - lam*a[k, k+1:n]
            b[i] = b[i] - lam*b[k]
            
    if abs(a[n-1,n-1)]) < tol: error.err('Matrix is Singular'):
        
    b[n-1] = b[n-1]/a[n-1,n-1]
    for k in range(n-1, -1,-1):
        b[k] = (b[k]- np.dot(a[k,k+1:n], b[k+1:n]))/a[k,k]
Exemplo n.º 10
0
def gaussPivot(a,b,tol=1.0e-12):
    n = len(b)
# Mengatur faktor skala
    s = np.zeros(n)
    for i in range(n):
        s[i] = max(np.abs(a[i,:]))
    for k in range(0,n-1):
# menukar baris
        p = np.argmax(np.abs(a[k:n,k])/s[k:n]) + k
        if abs(a[p,k]) < tol: error.err('Tidak dapat dihitung : matriks singular')
        if p != k:
            swap.swapRows(b,k,p)
            swap.swapRows(s,k,p)
            swap.swapRows(a,k,p)
# Eliminasi
        for i in range(k+1,n):
            if a[i,k] != 0.0:
                lam = a[i,k]/a[k,k]
                a[i,k+1:n] = a[i,k+1:n] - lam*a[k,k+1:n]
                b[i] = b[i] - lam*b[k]
    if abs(a[n-1,n-1]) < tol: error.err('Tidak dapat dihitung : matriks singular')
# Substutisi kembali untuk mencari nilai variabel
    b[n-1] = b[n-1]/a[n-1,n-1]
    for k in range(n-2,-1,-1):
        b[k] = (b[k] - np.dot(a[k,k+1:n],b[k+1:n]))/a[k,k]
    return b
Exemplo n.º 11
0
        def LUpivotdecomp(a, tol=1.0e-9):
            n = len(a)
            seq = np.array(range(n))

            # Set up scale factors
            s = np.zeros(n)
            for i in range(n):
                s[i] = max(abs(a[i, :]))

            for k in range(0, n - 1):

                # Row interchange, if needed
                p = np.argmax(abs(a[k:n, k]) / s[k:n]) + k
                if abs(a[p, k]) < tol:
                    print('matrix is singular')
                    sys.exit()
                if p != k:
                    swap.swapRows(s, k, p)
                    swap.swapRows(a, k, p)
                    swap.swapRows(seq, k, p)

            # Elimination
                for i in range(k + 1, n):
                    if a[i, k] != 0.0:
                        lam = a[i, k] / a[k, k]
                        a[i, k + 1:n] = a[i, k + 1:n] - lam * a[k, k + 1:n]
                        a[i, k] = lam
            return a, seq
Exemplo n.º 12
0
        def gausspivot(a, b, tol=1.0e-12):
            n = len(b)
            # Set up scale factors
            s = np.zeros(n)
            for i in range(n):
                s[i] = max(np.abs(a[i, :]))
            for k in range(0, n - 1):
                # Row interchange, if needed
                p = np.argmax(np.abs(a[k:n, k]) / s[k:n]) + k
                if abs(a[p, k]) < tol:
                    print('matrix is singular')
                    sys.exit()
                if p != k:
                    swap.swapRows(b, k, p)
                    swap.swapRows(s, k, p)
                    swap.swapRows(a, k, p)
        # Elimination
                for i in range(k + 1, n):
                    if a[i, k] != 0.0:
                        lam = a[i, k] / a[k, k]
                        a[i, k + 1:n] = a[i, k + 1:n] - lam * a[k, k + 1:n]
                        b[i] = b[i] - lam * b[k]

            if abs(a[n - 1, n - 1]) < tol:
                print('matrix is singular')
                sys.exit()

        # Back substitution
            b[n - 1] = b[n - 1] / a[n - 1, n - 1]
            for k in range(n - 2, -1, -1):
                b[k] = (b[k] - np.dot(a[k, k + 1:n], b[k + 1:n])) / a[k, k]
            return b
def LUdecomp(a,tol=1.0e-9):
    n = len(a)
    seq = np.array(range(n))
    
  # Set up scale factors
    s = np.zeros((n))
    for i in range(n):
        s[i] = max(abs(a[i,:]))        
    
    for k in range(0,n-1):
        
      # Row interchange, if needed
        p = np.argmax(np.abs(a[k:n,k])/s[k:n]) + k
        if abs(a[p,k]) <  tol: error.err('Matrix is singular')
        if p != k:
            swap.swapRows(s,k,p)
            swap.swapRows(a,k,p)
            swap.swapRows(seq,k,p)
      # Elimination using outer product       
        a[k+1:,k] /=a[k,k]
        a[k+1:,k+1:] -=  np.outer(a[k+1:,k],a[k,k+1:])
    return a,seq
Exemplo n.º 14
0
def gaussPivot(a, b, tol=1.0e-12):
    n = len(b)

    # Set up scale factors
    s = np.zeros(n)
    for i in range(n):
        s[i] = max(np.abs(a[i, :]))

    for k in range(0, n - 1):

        # Row interchange, if needed
        p = np.argmax(np.abs(a[k:n, k]) / s[k:n]) + k
        if abs(a[p, k]) < tol: error.err('Matrix is singular')
        if p != k:
            swap.swapRows(b, k, p)
            swap.swapRows(s, k, p)
            swap.swapRows(a, k, p)

        # Elimination
        for i in range(k + 1, n):
            if a[i, k] != 0.0:
                lam = a[i, k] / a[k, k]
                a[i, k + 1:n] = a[i, k + 1:n] - lam * a[k, k + 1:n]
                b[i] = b[i] - lam * b[k]
    if abs(a[n - 1, n - 1]) < tol: error.err('Matrix is singular')

    # Back substitution
    b[n - 1] = b[n - 1] / a[n - 1, n - 1]
    for k in range(n - 2, -1, -1):
        b[k] = (b[k] - np.dot(a[k, k + 1:n], b[k + 1:n])) / a[k, k]
    return b


#A = np.array([[2.,-2.,6.],[-2.,4.,3.],[-1.,8.,4.]])
#B = np.array([16.,0.,-1.])

#X = gaussPivot(A,B)
#print('X = {0}'.format(X))
Exemplo n.º 15
0
def LUpivot(a1, b1, tol=1.0e-9, modifyOriginal=True):
##def LUpivot(a1, modifyOriginal=True):
    if modifyOriginal:
        a = a1
    else:
        a = a1.copy()
        
    n = len(a)
    seq = array(range(n))
    
  # Set up scale factors
    s = zeros(n)
    for i in range(n):
        s[i] = max(abs(a[i,:]))        
    
    for k in range(0,n-1):
        
      # Row interchange, if needed
        p = argmax(abs(a[k:n,k])/s[k:n]) + k
        if abs(a[p,k]) < tol: error.err('Matrix is singular')
        if p != k:
            swap.swapRows(s,k,p)
            swap.swapRows(a,k,p)
            swap.swapRows(seq,k,p)
            
      # Elimination            
        for i in range(k+1,n):
            if a[i,k] != 0.0:
                lam = a[i,k]/a[k,k]
                a[i,k+1:n] = a[i,k+1:n] - lam*a[k,k+1:n]
                a[i,k] = lam
                
    b = b1.copy()
    for i in range(n):
        b[i] = b1[seq[i]]
    return a,b,seq