2010-11-23 1 views
2

행 연산을 사용하는 nxn 행렬 A의 역함을 결정하는 코드가 필요합니다. 이 코드를 작성하는 데 어리 초한 시간을 보내고 있습니다. 아무 것도 도움이됩니다, 나는 대학원생이고 havent는 수년간 프로그래밍 수업을 들었습니다. 감사.매트릭스 역 코드 (c, C++, fortran 또는 tksolver)

+0

(라이브러리에서 하나를 사용해야 할 필요없이) 인버터를 작성하라는 요청을 받았다고 가정하면 첫 번째 질문은 : 수동으로 반전을 수행 할 수 있습니까? 그렇다면 프로 시저를 코딩 해보고 나서 * 붙박이가되는 곳을 알려주십시오 * ... – dmckee

+0

프로젝트의 코드가 필요합니다 – user517851

+0

반전을 nxn 행렬에 코딩해야하므로 문제가 발생합니다. – user517851

답변

1

수년 내에 프로그래밍 수업을 듣지 않았다면 매트릭스 작업을 위해 Scilab 또는 MATLAB을 제안합니다.

한 번 계산하는 경우 WolframAlpha를 확인하십시오.

라이브러리를 사용하는 것이 C++의 옵션 인 경우 Armadillo을 확인하십시오.

+0

이 이상적으로 내가 티카을 사용하지만이 코드에 허용되는 유일한 프로그램입니다 : C C++ 포트란 tksolver – user517851

2

반전을 원하지 않을 수도 있습니다. 방정식 시스템을 풀려고한다면 LU 분해를 사용하는 것이 더 낫습니다.

당신은이 응용 프로그램을 쓰고 싶은 언어를 말하지 않습니다. Java에는 Apache Commons Math; 파이썬에는 NumPy가 있습니다. FORTRAN에는 LinPack이 있습니다. 언어를 선택하고 라이브러리를 사용하십시오. 직접 쓰지 마라.

+0

정확히, http://www.johndcook.com/blog/2010/01/19/dont-invert 참조 매트릭스/그 이상. 비록 이것이 숙제 문제라면, 아마도 그 반대의 질문을받을 것입니다. – ustun

0

Numerical Recipies Online을 살펴보십시오. Fortran 77, Ansi C 및 Fortran 90 코드는 무료이며 최상의 진행 방법에 대한 단서를 얻을 수 있습니다.

1
SUBROUTINE MATINV(A,N) 
    DIMENSION A(N,N) 
    DO 1 I=1,N 
    Z=A(I,I) 
    A(I,I)=1.0 
    DO 2 J=1,N 
2  A(I,J)=A(1,J)/Z 
    DO 1 K=1,N 
     IF (K-I) 3,1,3 
3   Z=A(K,I) 
     A(K,I)=0.0 
     DO 4 J=1,N 
4   A(K,J)=A(K,J)-Z*A(I,J) 
1 CONTINUE 
    RETURN 
    END