엑셀 VBA로 역행렬을 계산하여 값을 찾는 코드를 작성해 보았습니다. 엑셀 함수 중 MINVERSE, MMULT를 통해 역행렬 계산을 할수 있으나 행렬크기가 제한이 있어 크기가 큰 행렬은 계산이 안됩니다. 그래서 VBA로 만들어 보았습니다.
위 링크된 엑셀을 받으시고 6Mat 쉬트를 보시면
빨간색 6이 적혀 있고 B행렬(6x1)과 A행렬(6X6)을 만들어 두었습니다. 좌측 노란색 셀은역행렬을 풀어서 값이 산정되는 곳입니다. [X] = [A]^(-1) [B]
Alt-F11을 누르고 코드창에서 F5로 실행을 시키면 노란색 셀(X행렬)의 값이 계산됩니다.
타이머를 기록해 두었는데 1초도 안되는 짧은 시간에 계산이 되는 것을 볼수 있을 겁니다.
그리고 아래에 엑셀 함수(MMULT, MINVERSE)로 계산한 값과 일치하네요.
그러면 큰 행렬은 어떻게 될지 한번 보겠습니다.
1780Mat 쉬트로 가시면 B행렬(1780x1)과 A행렬(1780X1780)을 만들어 두었습니다.
마찬가지로 코드창에서 F5로 실행을 시키면 이..이백..사..사십일초가 걸리네요. ㅎㅎ
4분이 걸리니 너무 오래걸립니다.
그래서 c언어로 동일하게 만들어서 시간을 재어 보았습니다.
직접해 보실분은 아래 2개 파일을 받아서 동일폴더에서 "cmd"상태에서 실행하면 됩니다.
폰 스톱워치로 쟀는데 18초가 나오네요. 상당히 빨라졌습니다. 엑셀값과 동일한 값이 산출되었습니다. VBA에서 큰 행렬을 계산할려면 C언어로 계산을 수행하게 해야할 것 같습니다.
Fortran이 C보다 수치계산에 빠르다는 말이 있어 포트란으로 C와 같은 동일 코드를 짜서 행렬계산을 수행해 보았습니다. (gfortran compiler)
실행시간도 나오네요. 15초 정도 걸립니다. c보다 3초 빨라졌네요 너무 기대를 했었는지 3초에 큰 감흥이 없네요
'Excel' 카테고리의 다른 글
엑셀 스타일 지우기 소개(VBA이용) (0) | 2021.04.11 |
---|---|
엑셀) 추가기능(Addin) 넣기 소개 (0) | 2021.04.04 |
[엑셀] 유용한 기능/ 바로 전 작업 실행 - F4, 수식창 계산 - F9 (0) | 2020.03.10 |
Torsion constant using excel (0) | 2020.03.09 |
Inverse matrix calculation [ Excel VBA / c language / VBA using c DLL ] (0) | 2020.03.09 |