방정식의 풀이 방정식 시스템을 풀 필요가 있습니다. 여기에서 A는 n 행 x 행렬이고 B는 n 행 n 행렬입니다. 1 벡터입니다. 2D 포아송 문제에 대한 이산화 (discretization) 행렬이므로, 5 개의 대각선 만이 널이 될 수 없다는 것을 알고 있습니다. Lapack은이 특정 문제를 해결하는 함수를 제공하지 않지만 방정식의 밴드 매트릭스 시스템, 즉 DGBTRF (LU 분해) 및 DGBTRS를 해결하는 기능을 제공합니다. 이제 5 개의 대각선은 주 대각선, 첫 번째 대각선 위 및 아래의 주 대각선 및 두 개의 대각선 위와 아래 대각선 대각선 wrt 주 대각선. 밴드 스토리지에 관한 lapack 문서를 읽은 후에 A를 밴드 저장 포맷으로 저장하기 위해 (3 * m + 1) -by-n 매트릭스를 만들어야한다는 것을 배웠다.이 매트릭스 AB를 호출하자. 이제 질문 :방정식의 줄무늬 행렬 시스템을 해결하십시오.
1) dgbtrs와 dgbtrs_의 차이점은 무엇입니까? 인텔 MKL은 둘 다 제공하지만 이유를 이해할 수 없습니다.
2) dgbtrf는 밴드 스토리지 매트릭스가 어레이가되도록 요구합니다. 행이나 열로 AB를 선형화해야합니까?
3)이 두 함수를 호출하는 올바른 방법입니까?
int n, m;
double *AB;
/*... fill n, m, AB, with appropriate numbers */
int *pivots;
int nrows = 3 * m + 1, info, rhs = 1;
dgbtrf_(&n, &n, &m, &m, AB, &nrows, pivots, &info);
char trans = 'N';
dgbtrs_(&trans, &n, &m, &m, &rhs, AB, &nrows, pivots, B, &n, &info);
약 # 2, LU 분해를 망치지 않습니까? 내 말은, AB가 행 주요임을 dgbtrf에게 알리는 옵션이 없다는 것입니다. 게다가 두 가지 경우의 주요 치수를 어떻게 설정해야합니까? – Patrik
예, 당신은 A'x = B를 풀 수 있습니다. 이것에 대한 답을 정정하겠습니다. 당신이 펑키 한 일을하지 않는다면 (인자로 서브 매트릭스를 전달하는 것과 같은) 선행 차원의 경우, 보통 행 수와 같습니다. 다시 말하지만, LAPACK 문제를 해결하는 가장 좋은 방법은 손으로 해결할 수있는 작은 문제를 시도하는 것입니다. –