Windows 7 x64에서 Microsoft Visual Studio 2008을 사용하고 있습니다. 나는 A
이 양수인 csparse을 사용하여 다음 선형 시스템 Ax=b
을 풀려고합니다.csparse : cs_cholsol을 사용하여 간단한 희소 선형 방정식 시스템을 해결합니다.
| 1 0 0 1 |
A = | 0 3 1 0 |
| 0 1 2 1 |
| 1 0 1 2 |
| 1 |
b = | 1 |
| 1 |
| 1 |
나는 다음과 같은 코드
내가 제대로 스파 스 변수를 만들 었는지 확인하기 위해int Ncols = 4, Nrows = 4, nnz = 10;
int cols[] = {0, 3, 1, 2, 1, 2, 3, 0, 2, 3};
int rows[] = {0, 0, 1, 1, 2, 2, 2, 3, 3, 3};
double vals[] = {1, 1, 3, 1, 1, 2, 1, 1, 1, 2};
cs *Operator = cs_spalloc(Ncols,Nrows,nnz,1,1);
int j;
for(j = 0; j < nnz; j++)
{
Operator->i[j] = rows[j];
Operator->p[j] = cols[j];
Operator->x[j] = vals[j];
Operator->nz++;
}
for(j = 0; j < nnz; j++)
cout << Operator->i[j] << " " << Operator->p[j] << " " << Operator->x[j] << endl;
Operator = cs_compress(Operator);
for(j = 0; j < nnz; j++)
cout << Operator->i[j] << " " << Operator->p[j] << " " << Operator->x[j] << endl;
// Right hand side
double b[] = {1, 1, 1, 1};
// Solving Ax = b
int status = cs_cholsol(0, Operator, &b[0]); // status = 0 means error.
를 사용하고, 나는 행과 열 인덱스를 인쇄뿐만 아니라 값으로 시도 앞뒤 콘솔 cs_compress
. 다음은이 인쇄 결과입니다.
하기 전에 :
0 0 1
0 3 1
1 1 3
1 2 1
2 1 1
2 2 2
2 3 1
3 0 1
3 2 1
3 3 2
후 : 때문에 cs_compress
를 호출 한 후 위의 관찰 할 수있는 쓰레기 값의
0 0 1
3 2 1
1 4 3
2 7 1
1 10 1
2 -6076574517017313795 2
3 -6076574518398440533 1
0 -76843842582893653 1
2 0 1
3 0 2
, Ax=b
의 솔루션은 내가 계산 한 하나와 일치하지 않습니다 MATLAB으로. MATLAB의 결과는 다음과 같습니다.
| 2.0000 |
x = | 0.0000 |
| 1.0000 |
|-1.0000 |
흥미롭게도, 나는 A
가 3×3
행렬이다 Ax=b
해결 다음과 같은 코드,이 문제가 없습니다.
int Ncols = 3, Nrows = 3, nnz = Nrows;
cs *Operator = cs_spalloc(Ncols,Nrows,nnz,1,1);
int j;
for(j = 0; j < nnz; j++) {
Operator->i[j] = j;
Operator->p[j] = j;
Operator->x[j] = 1.0;
Operator->nz++;
}
Operator = cs_compress(Operator);
double b[] = {1, 2, 3};
int status = cs_cholsol(0, Operator, &b[0]); // status = 1 means no error.
사람은 제가 cs_compress
와 함께이 문제를 해결하는 데 도움을 주시겠습니까?
실제 시스템이 4x4보다 훨씬 커지거나 코드에 대해 배우는 것보다 희소 매트릭스로 시간을 낭비하기를 바랍니다. 문제의 매트릭스는 50 % 이상 (이상적으로) 이상이어야하며 저장 용량을 거의 얻지 못할 경우 성능 저하를 지불해야합니다. – horchler
@horchler : 실제 시스템이 훨씬 큽니다. 방금 코드를 배우고 싶었습니다. – AFP