Last active
March 11, 2020 13:04
-
-
Save MatlabMaster/200a7a737432fc67c3158b1eefbb9e65 to your computer and use it in GitHub Desktop.
Gauss_elimination
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## module gaussElimin | |
''' x = gaussElimin(a,b). | |
Solve[a]{b} = {x} by gauss elimination. | |
''' | |
import numpy as np | |
def gaussElimin(a,b): | |
n = len(b) | |
#Elmination Phase | |
for k in range(0,n-1): | |
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] | |
#Back substitution | |
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] | |
return b | |
#!/user/bin/python | |
## example2_4 | |
def vandermode(v): | |
n = len(v) | |
a = np.zeros((n,n)) | |
for j in range(n): | |
a[:,j] = v**(n-j-1) | |
return a | |
v = np.array([1.0,1.2,1.4,1.6,1.8,2.0]) | |
b = np.array([0.0,1.0,0.0,1.0,0.0,1.0]) | |
a = vandermode(v) | |
aOrig = a.copy() # Save original matrix | |
bOrig = b.copy() # and the constant vector | |
x = gaussElimin(a,b) | |
det = np.prod(n.diagonal(a)) | |
print('x=\n',x) | |
print('\ndet=',x) | |
print('\nCheck result: [a]{x}-b =\n',np.dot(aOrig.x)-bOrig) | |
input("\nPress return to exit") | |
$ python3 gaussElimin.py
x=
[ 416.66666667 -3125.00000004 9250.00000012 -13500.00000017
9709.33333345 -2751.00000003]
det= [ 416.66666667 -3125.00000004 9250.00000012 -13500.00000017
9709.33333345 -2751.00000003]
Traceback (most recent call last):
File "gaussElimin.py", line 41, in
print('\nCheck result: [a]{x}-b =\n',np.dot(aOrig.x)-bOrig)
AttributeError: 'numpy.ndarray' object has no attribute 'x'
print('\nCheck result: [a]{x}-b =\n',np.dot(aOrig.x)-bOrig) 에서 numpy.ndarray에는 x라는 애트리뷰트가 없답니다.
print('\nCheck result: [a]{x}-b =\n',np.dot(aOrig.x)-bOrig) 코드에서 x라는 애트리뷰트가 쓰인데가 어디 있나요?
' ' 안은 문자열이니 아닐꺼고 그럼 남는건 np.dot(aOrig.x)-bOrig 인데 x는 하나밖에 없네요. dot product를 계산해야 하는데 aOrig, x 두 벡터 사이겠죠.
np.dot(aOrig, x)-bOrig 처럼 고쳐주면 되겠죠.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
$ python3 gaussElimin.py
Traceback (most recent call last):
File "gaussElimin.py", line 38, in
det = np.prod(n.diagonal(a))
NameError: name 'n' is not defined
=> 38번줄에서 n이라는 이름이 없답니다. 아래 보면 det = np.prod(n.diagonal(a)) 에서 n은 어디에서 튀어나온건가요? np를 잘못 적으신거죠.
이제 이거 수정하면...