Я продолжал получать «ModuleNotFoundError: нет модуля с именем «ошибка»»

#python

#python

Вопрос:

Мне дали краткое изложение этого кода от моего учителя, однако я продолжал получать ModuleNotFoundError: No module named 'error' . Я знаю, что мне нужен модуль с именем error , однако, когда я не смог найти код для модуля с именем error .

Я пытаюсь решить этот вопрос:

 Solve the tridiagonal equations Ax = b by Doolittle’s decomposition method, where:

A = [6 2 0 0 01 7 2 0 0
     02 8 2 0    
     0 0 3 72    
     0 0 0 3 5]

b = [23    
     43    
     1].
  

Вот код, который я использовал:

 from numpy import argmax, dot, zeros, array, asarray, tril, triu

def swapRows(v,i,j):
    if len(v.shape) == 1: v[i],v[j] = v[j],v[i]
    else:
        temp = v[i].copy()
        v[i] = v[j]
        v[j] = temp
    def swapCols(v,i,j):
    temp = v[:,j].copy()
    v[:,j] = v[:,i]
    v[:,i] = temp
     import error

def LUdecomp(a,tol=1.0e-9):
    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:
            swapRows(s,k,p)
            swapRows(a,k,p)
            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

def LUsolve(a,b,seq):
    n = len(a)
       # Rearrange constant vector; store it in [x]
    x = b.copy()
    for i in range(n):
        x[i] = b[seq[i]]
           # Solution
    for k in range(1,n):
        x[k] = x[k] - dot(a[k,0:k],x[0:k])
    x[n-1] = x[n-1]/a[n-1,n-1]    
    for k in range(n-2,-1,-1):
       x[k] = (x[k] - dot(a[k,k 1:n],x[k 1:n]))/a[k,k]
    return x

A = asarray( [ [ 6, 2, 0, 0, 0 ], 
               [ -1, 7, 2, 0, 0 ], 
               [ 0, -2, 8, 2, 0 ], 
               [ 0, 0, 3, 7, -2 ], 
               [ 0, 0, 0, 3, 5 ] ], dtype=float ) A_orig = A.copy() b = asarray( [ 2, -3, 4, -3, 1 ], dtype=float )  b_orig = b.copy() 

A,seq = LUdecomp(A) # A is overwritten as LU L = tril( A, -1 ) # extract L  for ii in range(L.shape[0]): L[ii,ii] = 1.0 # add in 1's on the diagonal  U = triu( A,  0 ) # extract U  print ("L = ") print (L) print ("U = ") print (U)  if False:
    print ("A[seq,:]= ")
    print (A_orig[seq,:])
    print ("LU= ")
    print (dot(L,U)) 

x = LUsolve(A,b,seq)  print ("Solution= ", x)
  

Комментарии:

1. В какой строке возникает ошибка?

2. вы написали import error чуть ниже метод def swapCols(v,i,j)

3. Что error должно быть? Это модуль, который дал вам ваш учитель? Я не знаком ни с одним встроенным модулем, который называется error

4. извините, но я даже не могу запустить ваш код, который не определен.

5. Если это модуль, который дал вам ваш учитель, вам, возможно, придется включить свой код в каталог вашего проекта. Может быть, вы хотите вставить код модуля error.pyc ?

Ответ №1:

Если ваше намерение состоит в том, чтобы в какой-то момент выдать ошибку, то вы можете достичь этого без import error инструкции. Решением может быть создание исключения. Смотрите Документацию об ошибках и исключениях.

Вы можете удалять import error и редактировать

 if abs(a[p,k]) <  tol: error.err('Matrix is singular')
  

следующим LUdecomp() образом:

 if abs(a[p,k]) <  tol: 
    raise Exception('Matrix is singular')