DISCLAIMER: 스택오버플로우에 있는 글은 다 훑어봤고 nuget 패키지도 대충은 다 검색해봤음.
SO에 새로 글 싸려면 ID 파야하니 귀찮아서 여기에 일단 올려봄.
===============================================================================
현재 문제:
1) 기본부분 코드는 이미 전부 C#으로 작성 끝난 상황임.
여기에 소행렬 푸는 루틴 추가해야 해서 C# 용 라이브러리를 찾고 있음.
2) 푸는 소행렬은 NxN, N=128x128x128 임.
열확산방정식과 Poisson 문제이고,
경계조건이 나쁘지 않아서 반복해법 할 필요없이 행렬분해 후 직접해법으로 돌릴 수 있음.
numpy+scipy로 실험결과 singular 성분 없이 분해 가능함.
시도 이력:
1. Math.NET Numerics
C# 수치해석 라이브러리하면 이거라고 하고, 소행렬도 있는 것 같아서 써봄.
문제는 행렬 분해가 더럽게 느리고, 소행렬 규모가 커지면 분해를 제대로 못함.
행렬분해는 내부적으로는 밀행렬을 베이스로 작성되어 있기에 수치오차가 쌓여서 그렇게 되는 것 같음.
2. alglib
다음 시도는 alglib 라는 라이브러리임.
문제는 두가지, 버그인지 비상용판의 제약사항인지 몰라도 행렬분해가 제대로 작동 안한다는 점.
그리고 GPL 이라 향후 라이선스 문제가 생길것 같다는 점 (큰 문제는 아님) 정도임.
역시 Math.NET 처럼 행렬 규모가 커지면 에러뿜고 안 풀리는 것도 있고,
버그란 건 Ax=b 를 풀때와 (-A)x=(-b)를 풀때 A 분해 결과가 다르게 나온다는 점 (당연히 답도 다르게 나옴).
3. 그 외의 C# 라이브러리
쭉 살펴봤으나 거의 상용임.
===============================================================================
여기서 내가 묻고자 하는건 아래의 두가지 임.
I. 상기 2가지 라이브러리 외에 C# 용 무료 수치 라이브러리가 있는가?
물론 상기의 문제규모를 제대로 다룰 수 있어야 함.
II. 혹시, python - C# 코드간 브릿지가 가능한가?
위에서 시험용으로 numpy+scipy 로 구현했다는 루틴 정도만 돌아가도 사실 충분함.
C# 에서 위의 것을 그대로 재사용 가능하면 큰 고민없이 끝날 내용 같은데.
p.s. 그나저나 영어로 쓴 열확산방정식 왜 금칙어지?
heat diffusion 영어로 썼더만 자꾸 금칙어 걸려서 홧병에 돌아버리는 줄 알았음
R은 닷넷 연결하는거 있던데
R ← .NET 임, R → .NET 임, 아니면 양방향임? 어찌되었건 그것도 크게 쓸모 없을 듯 하긴 한데...
둘다됨 R안에서 닷넷 사용하는건 잘 사용안하는 것 같인한데 닷넷F#안에서 R쓰는건 튜토리얼도 꽤 있더라
당장의 문제해결에는 도움이 안 되었지만, 새로운 정보 고맙수...
비슷한거 검색해본 바 IronPython 이란게 있긴 하던데, 아무리 봐도 작업을 많이 해야 할 것 같아서 더 스마트하고 덜 삽질 하는 방법이 없는가 찾는것임...
아이언파이썬은 걍 구현체라 파이썬 라이브러리 거의 못 쓰는걸로 알고있고
흠... 역시 IronPython은 손 안대길 잘 했군.
뭐 이리저리 안될 것 같으면 그냥 C++ 에서 eigen 으로 소행렬 하는 부분만 만든 다음에 DLL 로 뽑아내는 방법도 있긴한데, 이거 정말 하고싶지 않은데 ㅠㅠ
씨플플이면 아르마딜로 쓰면 좀 쉽지 않을까 싶네
C++ 였으면 선택지와 해법이 워낙 많은데다, 나는 이미 eigen 잘 쓰기 때문에 여기 굳이 질문하러 오지도 않쥬...