2011-04-11 2 views
3

선형 시스템을 해결하기 위해 반복적 인 Gauss-Seidel을 구현하는 선형 대수 라이브러리가 있습니까? 아니면 사전 컨디셔닝 된 그래디언트 솔버입니까?Gauss-Seidel 반복 해법을위한 Python 라이브러리?

감사

편집 : 결국 내가 그것을 해결하기 위해 원유하지만 올바른 방법의 종류를 사용했다. 난 (도끼 = B 용) 어쨌든, D는 대각선

M = (D + L) and N = -U 

으로

A = M - N 

같이 매트릭스 분할 행렬 A를 만드는 한 바와 같이, L은 하 삼각 부분이며 U는 위 삼각형 부분입니다. 그런 다음

Pinv = scipy.linalg.inv(M) 
x_k_1 = np.dot(Pinv,np.dot(N,x_k)) + np.dot(Pinv,b) 

일부 수렴 테스트도 수행했습니다. 그것은 작동합니다. 그들이 여기에 다양한 구현을 통해 이동하는 위치를

답변

3

는 예를 구현 있습니다 :

http://www.scipy.org/PerformancePython

여기에 또 다른 예 :

http://www.dur.ac.uk/physics.astrolab/py_source/kiusalaas/v1_with_numpy/gaussSeidel.py

당신은 또한에 대한 파이썬 바인딩을 확인 할 수 있습니다 petsc :

http://code.google.com/p/petsc4py/

+0

입력 해 주셔서 감사합니다. 결국 내 자신의 해결사 않았다. – Ivan

+1

불행히도 처음 두 링크는 ​​끊어졌고 마지막 링크는 오래된 것입니다. – cfh

0
from sage.all import * 

a=matrix(QQ,[[12,3,-5],[1,5,3],[3,7,13]]) 

b=matrix(QQ,[[1],[28],[76]]) 


x=[] 
r=len(a[0]) 
i=0 
while(i<r): 
    li=raw_input('give approximate solution :') 
    h=eval(li) 
    x.append(h) 
    i=i+1 


def gausseidel(): 
    tol=0.00001;l=0;itern=10 
    fnd=0 

    while(l<itern and fnd==0): 
     j=0 
     while(j<r): 
      temp=b[j,0] 
      k=0 
      while(k<r): 
       if (j!=k): 
        temp-=a[j,k]*x[k] 
       k=k+1 
      c=temp/a[j,j] 

      if (abs(x[j]-c)<=tol): 
       fnd=1 
       break 
      x[j]=c 
      j=j+1 
     l=l+1 
     if l==itern: 
      print "Iterations are over" 

    for p in range(r): 
     print 'x',p,'=',float(x[p]) 


gausseidel() 
+2

{}} 버튼을 사용하여 코드를 포맷했습니다. 'sage.all'이 오는 곳과 왜 그것을 사용했는지에 대한 설명을 편집하십시오. – Johnsyweb

+0

sage는 일반적인 과학 패키지입니다 : http://www.sagemath.org/. 답변 해주셔서 감사합니다. – Ivan

관련 문제