Contenu principal

Propriétés matlab.ode.options.ODE45

R2026b

Options du solveur ODE45

Depuis R2023b

Les objets matlab.ode.options.ODE45 s’utilisent avec les objets ode pour spécifier les options de résolution des équations différentielles ordinaires (ODE). Les objets ode renseignent automatiquement la propriété SolverOptions avec un objet options propre au solveur sélectionné. Par conséquent, vous n’avez généralement pas besoin de créer les objets matlab.ode.options.ODE45 de manière explicite.

Spécifiez les options du problème ODE en modifiant les valeurs de propriété de l’objet matlab.ode.options.ODE45 avec la notation pointée. Par exemple, si F est un objet ode, alors F.SolverOptions.OutputFcn = @odeplot spécifie une fonction de sortie que le solveur appelle après chaque pas de temps réussi.

Taille de pas

développer tout

Taille de pas initiale suggérée, spécifiée sous forme de scalaire positif. InitialStep définit une limite supérieure pour la taille du premier pas qu’essaie le solveur.

Si vous ne spécifiez pas de taille de pas initiale, le solveur la choisit en fonction de la pente de la solution au premier point dans le temps de l’intégration. Si la pente de toutes les composantes de la solution est nulle, il se peut que le solveur essaie une trop grande taille de pas. Si vous savez que la taille de pas initiale est trop grande ou si vous souhaitez avoir la certitude que le solveur résoudra les comportements importants au début de l’intégration, utilisez InitialStep pour indiquer une taille de pas initiale appropriée.

Exemple : F.SolverOptions.InitialStep = 1e-3, où F est un objet ode, définit une limite supérieure de 1e-3 pour la taille de pas initiale.

Taille de pas maximale, spécifiée sous forme de scalaire positif. MaxStep définit une limite supérieure pour la taille de tous les pas que traite le solveur. Par exemple, si l’équation a un comportement périodique, vous pouvez définir MaxStep comme une fraction de la période pour que le solveur n’ignore pas une zone d’intérêt.

  • N’utilisez pas MaxStep dans le seul but d’obtenir un plus grand nombre de points en sortie, car cela peut considérablement ralentir l’intégration. Utilisez plutôt l’option Refine de la méthode solve pour calculer des points supplémentaires avec un coût de calcul réduit.

  • N’utilisez pas MaxStep pour augmenter la précision de la solution. Si la solution manque de précision, diminuez la valeur de RelativeTolerance et utilisez la solution afin de déterminer une valeur appropriée pour AbsoluteTolerance.

  • Évitez d’utiliser MaxStep pour vous assurer que le solveur n’ignore pas un comportement qui ne se produit qu’une fois dans l’intervalle d’intégration. Si vous savez à quel moment se produit ce comportement, divisez l’intervalle en deux parties et résolvez chacune d’elles séparément. Si vous ne savez pas à quel moment il se produit, essayez de réduire RelativeTolerance et AbsoluteTolerance. Utilisez MaxStep seulement en dernier recours dans ce cas.

Exemple : F.SolverOptions.MaxStep = 1e-2, où F est un objet ode, définit une limite supérieure de 1e-2 pour la taille de pas.

Depuis R2024b

Taille de pas minimale, spécifiée sous forme de scalaire positif. MinStep définit une limite inférieure pour la taille de tous les pas que traite le solveur. MinStep doit être inférieur à MaxStep.

Les pas du solveur sont limités par la précision en virgule flottante quelle que soit la valeur de MinStep.

Exemple : F.SolverOptions.MinStep = 1e-10, où F est un objet ode, définit une limite inférieure de 1e-10 pour la taille de pas.

Contrôle d’erreur

développer tout

Contrôle d’erreur par rapport à la norme de la solution, spécifié comme "off" ou "on". Si NormControl est défini sur "on", le solveur contrôle l’erreur e à chaque pas en utilisant la norme de la solution y plutôt que sa valeur absolue :

norm(e(i)) <= max(RelativeTolerance*norm(y(i)),AbsoluteTolerance(i))

Exemple : F.SolverOptions.NormControl = "on", où F est un objet ode, contrôle l’erreur de pas en utilisant la norme de la solution.

Sortie du solveur

développer tout

Fonction de sortie, spécifiée sous forme de handle de fonction. solve appelle la fonction de sortie après chaque pas de temps réussi. Si vous utilisez solutionFcn pour résoudre le problème ODE, OutputFcn est ignoré. Utilisez plutôt la fonction solve ou spécifiez des événements de rappel pour implémenter des critères d’arrêt dynamiques.

Le tableau suivant décrit les fonctions de sortie prédéfinies que vous pouvez spécifier pour OutputFcn.

Nom de la fonctionDescription
odeplotTrace toutes les composantes de la solution en fonction du temps.
odephas2Crée un tracé 2D du plan de phase des deux premières composantes de la solution.
odephas3Crée un tracé 3D du plan de phase des trois premières composantes de la solution.
odeprintAffiche la solution et le pas de temps dans la fenêtre de commande.

Si vous écrivez une fonction de sortie personnalisée, elle doit utiliser la signature de fonction suivante :

status = myOutputFcn(t,y,flag)

La fonction de sortie que vous écrivez doit également réagir de manière appropriée aux indicateurs suivants.

IndicateurDescription
"init"

Le solveur appelle myOutputFcn([tspan(1) tspan(end)],y0,"init") avant le début de l’intégration pour permettre à la fonction de sortie de s’initialiser. tspan et y0 sont les arguments en entrée du solveur ODE.

[]

Le solveur appelle status = myOutputFcn(t,y,[]) après chaque pas d’intégration pour lequel une sortie est demandée. t contient les points où une sortie a été générée au cours du pas. y est la solution numérique aux points de t. Si t est un vecteur, l’i-ième colonne de y correspond à l’i-ième élément de t.

  • Si length(tspan) > 2, la sortie est générée à chaque point de tspan.

  • Si length(tspan) = 2, la sortie est générée en fonction de l’option Refine de la méthode solve.

myOutputFcn doit renvoyer l’état 0 ou 1. Si status = 1, le solveur arrête l’intégration. Vous pouvez utiliser ce mécanisme pour implémenter un bouton Stop, par exemple.

"done"

Le solveur appelle myOutputFcn([],[],"done") une fois l’intégration terminée pour permettre à la fonction de sortie d’effectuer des tâches de nettoyage.

Exemple : F.SolverOptions.OutputFcn = @odeplot, où F est un objet ode, spécifie odeplot comme fonction de sortie appelée par le solveur après chaque pas de temps réussi.

Types de données : function_handle

Sélection de composantes pour la fonction de sortie, spécifiée sous forme de vecteur d’indices. Le vecteur indique les composantes de la solution à passer à la fonction de sortie. Le nombre de composantes de la solution est égal au nombre d’éléments du vecteur en sortie de la fonction ODE (qui est stockée dans la propriété ODEFcn de l’objet ode).

Exemple : F.SolverOptions.OutputSelection = [1 3], où F est un objet ode, passe les première et troisième composantes de la solution à la fonction de sortie.

Historique des versions

Introduit dans R2023b

développer tout