choix solveur EDO
Choisir un solveur EDO.
📄Description

Utilisez ode45 d'abord pour les problemes non raides lisses. Utilisez ode23 pour une precision moderee ou des essais rapides.

Type de probleme Premiers choix Notes
Non raide ode45, ode23, ode113 Point de depart pour les problemes de valeur initiale lisses.
Raide ou matrice de masse ode15s, ode23s, ode23t, ode23tb Utiliser les options jacobien ou matrice de masse si disponibles.
Totalement implicite ode15i, idas optionnel Utiliser la forme residuelle F(t,y,yp)=0.
Workflow objet automatique 'auto', 'autoswitch' Selectionne ou bascule entre solveurs internes disponibles.

Utilisez les entrees raides ode15s, ode23s, ode23t ou ode23tb quand la solution contient des modes rapides, une matrice de masse ou un jacobien utile. Ces entrees utilisent un noyau lineairement implicite leger inclus dans le module.

Utilisez ode15i quand l'equation est ecrite comme un residu F(t,y,yp)=0.

Quand Nelson est construit avec le backend optionnel SUNDIALS, cvodesnonstiff utilise CVODES Adams pour les problemes non raides, cvodesstiff utilise CVODES BDF pour les problemes raides ou avec matrice de masse, et idas utilise IDAS BDF pour les problemes residuels totalement implicites. Une demande explicite d'une de ces valeurs de solveur signale une erreur quand le backend n'est pas disponible. Si un JPattern creux est fourni et que la bibliotheque SPGMR est disponible, le backend utilise un solveur lineaire iteratif; sinon il utilise le solveur lineaire dense. Les matrices JPattern creuses et les valeurs Jacobian double creuses sont consommees directement par ce chemin de selection et de preconditionnement. Les objets d'options SUNDIALS peuvent aussi demander les valeurs LinearSolver'dense', 'spgmr', 'spfgmr', 'spbcgs', 'sptfqmr', 'pcg' ou 'klu', et les valeurs Preconditioner'none', 'jacobi', 'banded' ou 'ilu0'. Le preconditionneur 'auto' choisit 'jacobi' pour les motifs creux diagonaux, 'banded' pour les bandes etroites et 'ilu0' pour les motifs creux plus larges. La valeur 'banded' construit un preconditionneur par differences finies limite a une bande et utilise JPattern pour restreindre cette bande quand il est disponible. La valeur 'ilu0' construit un preconditionneur LU incomplet compact sur le meme motif creux. La valeur 'klu' est conditionnelle et n'est pas fournie par les binaires Windows actuels. Les stats SUNDIALS renseignent linearSolver, preconditioner, sensitivityMethod, linearSetupCount, linearIterations, linearConvergenceFailures, preconditionerSetupCount et preconditionerSolveCount.

Le workflow objet actuel prend en charge les sensibilites directes avant, les gradients adjoints CVODES pour objectifs scalaires, les gradients adjoints IDAS natifs pour objectifs scalaires et les gradients adjoints scalaires projetes pour les equations avec retard. Les adjoints IDAS natifs indiquent sensitivityBackend avec la valeur 'idasAdjoint'. Les equations avec retard prennent en charge les retards de valeur et de pente positifs, y compris les retards fonctions causaux; les retards dependants de l'etat recalculent des chunks internes de methode des pas depuis le retard courant et reessaient avec des chunks plus petits quand un chunk d'essai demande un historique futur. Les stats de retard indiquent le nombre de chunks via nchunks. Les residus avec retard totalement implicites sont pris en charge avec ode15i et, quand le backend optionnel est disponible, idas. 'autoswitch' fonctionne dans la boucle de pas adaptative et peut basculer entre ode45 et ode15s quand la pression de raideur apparait ou disparait, tout en conservant la sortie solution, les evenements et les statistiques. Les stats autoswitch incluent autoSwitchInitialSolver, autoSwitchSelectedSolver, autoSwitchSwitched, autoSwitchReason, autoSwitchLastReason, autoSwitchMode, autoSwitchSwitchTime, autoSwitchSwitchCount, autoSwitchStiffnessIndicator, autoSwitchReleaseIndicator et autoSwitchStiffnessCriterion.

💡Exemples
Probleme non raide.
options = odeset('RelTol', 1e-5);
[t, y] = ode45(@(t,y) -y, [0 1], 1, options)
Probleme raide avec jacobien.
f = @(t,y) -1000 * (y - cos(t)) - sin(t);
options = odeset('Jacobian', -1000);
[t, y] = ode23s(f, [0 0.5], 1, options)
🔗Voir aussi
ode45ode23ode15sode15inelson.ode.options.CVODESNonstiffnelson.ode.options.CVODESStiffnelson.ode.options.IDAS
🕔Historique des versions
Version Description
2.0.0 version initiale
Modifier cette page sur GitHub