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. 그나저나 영어로 쓴 열확산방정식 왜 금칙어지?