Skip to content

Instantly share code, notes, and snippets.

@MatlabMaster
Last active March 11, 2020 13:04
Show Gist options
  • Save MatlabMaster/200a7a737432fc67c3158b1eefbb9e65 to your computer and use it in GitHub Desktop.
Save MatlabMaster/200a7a737432fc67c3158b1eefbb9e65 to your computer and use it in GitHub Desktop.
Gauss_elimination
## 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")
@enshahar
Copy link

$ 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