Как преобразовать LaGenMatDouble в LaSymmBandMatDouble Matrix и обратно?
Я пытаюсь преобразовать плотную матрицу в матрицу Band и обратно, со ссылкой на http://www.netlib.org/lapack/lug/node124.html
Но когда я проверяю вывод матрицы, используя cout<<matrix<<endl,
это не кажется правильным.
int n = 5;
int kl = 2;//subdiag(klower)
int ku = 1;//superdiag(kupper)
int p = kl+ku+1;
LaSymmBandMatDouble A(n,p);
double arrA[]={ 10, 1, 0, 0, 0,
1, 10, 1, 0, 0,
1, 1, 10, 1, 0,
0, 1, 1, 10, 1,
0, 0, 1, 1, 10};
LaGenMatDouble mA(arrA,n,n);
Mat_to_SymmBandMat(mA,A,n,kl,ku);
где
void Mat_to_SymmBandMat(LaGenMatDouble &A, LaSymmBandMatDouble &AB, int n, int subdiag, int superdiag)
{
int u,v,ku,kl;
ku=superdiag;
kl=subdiag;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i>max(1,j-ku) && i<min(n,j+kl)){
u = ku+1+i-j;
v = j;
AB(u,v)=A(i,j);
}
}
}
}
void SymmBandMat_to_Mat(LaSymmBandMatDouble &AB, LaGenMatDouble &A, int n, int subdiag, int superdiag)
{
int u,v,ku,kl;
ku=superdiag;
kl=subdiag;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i>max(1,j-ku) && i<min(n,j+kl)){
u = ku+1+i-j;
v = j;
A(i,j)=AB(u,v);
}
}
}
}
выход:
A= //the original matrix
10 1 1 0 0
1 10 1 1 0
0 1 10 1 1
0 0 1 10 1
0 0 0 1 10
AB= //reading directly from AB
0 0 0 0 0
0 0 0 1 0
0 0 10 10 10
0 1 10 1 0
0 0 10 0 0
A= //converting AB back to A
0 0 0 0 0
0 0 0 0 0
0 1 10 0 0
0 0 10 10 0
0 0 0 1 10
Что может быть не так?