bonjour,
merci encore pour votre reponse.
Je regarde un peu plus pres ce qui se passe.
lors du second passage de la boucle, je trouve que des 0 dans la matrice
du coup effectivement la matrice S qui suit ne s'inverse pas. Toutefois ce n'est pas normal qu'il trouve que des 0 ! lors de la premiere boucle, il trouve bien les bonnes valeurs ... c'est bizarre.
Concernant votre seconde remarque, c'est possible que le probleme viennent de cela. je ne suis pas expert en gestion de variables mais voici comment je procede :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| //declaration des variables qui vont se mettre a jour
float tx=0;
for (int m=0; m<20; m++) //iterations pour la convergence
{
.//la nouvelle valeur de tx sert a calculer s1, s2, s3, S
.
.
//calcul matriciel
Eigen::MatrixXd s1(24,12); s1.setZero();//matrice temporaire
s1=Qll*G.transpose();
Eigen::MatrixXd s2(12,12); s2.setZero();//matrice temporaire
s2=G*s1;
Eigen::MatrixXd id(12,12); id.setIdentity();
Eigen::MatrixXd s3(12,12); s3.setZero();
Eigen::HouseholderQR<Eigen::MatrixXd> qr(s2);
s3=qr.solve(id); //s3=s2^-1 * id
Eigen::MatrixXd S(24,12); S.setZero();
S=s1*s3;
.
.
.
//mise a jour de la valeur tx;
-----> tx prend une nouvelle valeur
} |
je ne sais pas si c'est la bonne méthode pour faire.
tx est modifiée dans la boucle for, mais déclarée a l’extérieure de la boucle.
toutes les matrices de calcules sont déclarées dans la boucle for, mais changent, car la valeur de tx change aussi...
merci encore pour votre aide.
Partager