我有以下有效的 for 回圈:
static const int ny = 10;
std::vector<double> ygl(ny 1);
double *dVGL;
dVGL = (double*) fftw_malloc(((ny 1)*(ny 1))*sizeof(double));
memset(dVGL, 42, ((ny 1)*(ny 1))* sizeof(double));
double *dummy1;
dummy1 = (double*) fftw_malloc(((ny 1)*(ny 1))*sizeof(double));
memset(dummy1, 42, ((ny 1)*(ny 1))* sizeof(double));
double *dummy2;
dummy2 = (double*) fftw_malloc(((ny 1)*(ny 1))*sizeof(double));
memset(dummy2, 42, ((ny 1)*(ny 1))* sizeof(double));
for (int i = 0; i < ny 1; i ){
for (int j = 0; j < ny 1; j ){
ygl[j] = -1. * cos(((j) * EIGEN_PI )/ny);
dummy1[j ny*i] = 1./(sqrt(1-pow(ygl[j],2)));
dummy2[j ny*i] = 1. * (i);
dVGL[j ny*i] = dummy1[j ny*i] * sin(acos(ygl[j]) * (i)) * dummy2[j ny*i];
}
}
以上作業正常,現在我轉換為 Eigen,我得到了結果:
Eigen::Matrix< double, 1, ny 1> v1;
v1.setZero();
std::iota(v1.begin(), v1.end(), 0);
Eigen::Matrix< double, ny 1, ny 1> dummy1;
dummy1.setZero();
Eigen::Matrix< double, ny 1, ny 1> dummy2;
dummy2.setZero();
for (int j = 0; j < ny 1; j ){
v[j] = 1./(sqrt(1-pow(ygl[j],2)));
}
dummy1 = v.array().matrix().asDiagonal(); //this is correct
dummy2 = v1.array().matrix().asDiagonal(); //this is correct
Eigen::Matrix< double, ny 1, ny 1> dVGL;
dVGL.setZero();
for (int i = 0; i < ny 1; i ){
for (int j = 0; j < ny 1; j ){
ygl[j] = -1. * cos(((j) * EIGEN_PI )/ny);
dVGL(j ny*i) = sin(acos(ygl[j]) * (i)); //this is correct
}
}
//##################################
dv1 = (dummy1) * (dVGL) * (dummy2); //this is incorrect, dVGL outside for loop is different from inside for loop!!
我已經為此絞盡腦汁一個星期了,我似乎無法解決它。為什么dVGL外面的for回圈不同??(好像我的行和列的長度為 ny 1,但是當我展平陣列時,我只使用 ny。)這是為什么?
我覺得這應該是一個簡單的問題。
uj5u.com熱心網友回復:
感謝評論中的@chtz,我只需更改索引即可解決此問題:
dVGL(j (ny 1)*i) = sin(acos(ygl[j]) * (i));
dv1 = (dummy1) * (dVGL) * (dummy2); //Then this is correct
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/494102.html
上一篇:特征替換矩陣錯誤中的第一行:不匹配的型別'constEigen::ArrayBase<ExponentDerived>'和'int'
下一篇:具有相同鍵的物件的總和值
