Les équations peuvent être trouvées here. Comme vous pouvez le voir, il s'agit d'un ensemble de 8 équations scalaires fermées à 3 matrices. Afin de laisser Matlab savoir que les équations sont matrice - sage, je déclare les fonctions de temps variable de vecteur dépendant comme:Résoudre le système DAE matriciel dans matlab
syms t p1(t) p2(t) p3(t)
p(t) = symfun([p1(t);p2(t);p3(t)], t);
p = formula(p(t)); % allows indexing for vector p
% same goes for w(t) and m(t)...
matrices connues sont déclarées comme suit:
A = sym('A%d%d',[3 3]);
Fq = sym('Fq%d%d',[2 3]);
Im = diag(sym('Im%d%d',[1 3]));
Le système est maintenant prêt à être modélisé selon guide:
eqs = [diff(p) == A*w + Fq'*m,...
diff(w) == -Im*p,...
Fq*w == 0];
vars = [p; w; m];
A ce moment, lorsque je tente de réduire l'indice (puisqu'il est égal à 2), je reçois l'erreur suivante:
[DAEs,DAEvars] = reduceDAEIndex(eqs,vars);
Error using sym/reduceDAEIndex (line 95)
Expecting as many equations as variables.
L'erreur ne se poserait pas si nous avions déclaré toutes les variables comme scalaires:
syms A Im Fq real p(t) w(t) m(t)
Citant symfun
documentation (section Conseils):
Symbolic functions are always scalars, therefore, you cannot index into a function.
Cependant, il est difficile pour moi de croire qu'il n'est pas possible de résoudre ces équations matricielles. Évidemment, on peut l'étendre à 8 équations scalaires, mais le système multi-corps concerné ici est très simple et le but est de pouvoir résoudre des équations complexes - d'où la question: est-il possible de résoudre la matrice DAE dans Matlab, et si oui - Qu'est-ce qui doit être réparé pour que cela fonctionne?
Ps. J'ai un autre problème avec le solveur Matlab DAE: les variables d'entrée (fonctions de coefficients connues) pour mon modèle sont des variantes temporelles. En ce qui concerne example, ils sont constants dans tous les domaines, mais pour mon problème, ils changent dans le temps. Ce problème a été mis en évidence here. Je vous serais reconnaissant si vous en parliez, si vous aviez une solution.