J'ai quelques équations différentielles que je dois résoudre en utilisant les solveurs ODE de MATLAB. Alors que les équations différentielles elles-mêmes sont assez simples, elles dépendent de beaucoup de «constantes». Ces constantes ne sont pas universelles et doivent être fournies par l'appelant.Comment puis-je résoudre un ODE sans utiliser de fonctions imbriquées?
Un exemple ODE de ce type serait:
dx/dt = -j * (k + x) ./ (l + x)
j, k et l sont des constantes et x est une variable. La façon dont j'ai résolu ces problèmes jusqu'ici est d'utiliser une fonction qui prend en compte toutes les valeurs initiales et toutes les valeurs des constantes (il y en a environ 10), puis appelle un "pas" interne fonction qui prend un vecteur de la forme que MATLAB attend pour ses solveurs ODE. Alors ...
function [outputVector] = someFunction(x, y, j, k, l, m, n, o)
function [output] = someFunctionStep(t, inputVector)
x = inputVector(1);
y = inputVector(2);
dx = -j .* (k + x) ./ (l + x);
dy = -m .* (n + y) ./ (o + y);
output = [dx;dy]
end
outputVector = ode15s(@someFunctionStep, [0, endTime], [x,y]);
end
Cependant, comme le nombre de variables et la taille du code augmente, cela devient de moins en moins élégant et des résultats dans un désordre sacrément-près illisible de code. Donc, ce que je voudrais faire est de déplacer la fonction d'étape pour chaque système dans un fichier qui lui est propre sans avoir a) passer les constantes à la fonction d'étape dans le vecteur d'entrée ou b) utiliser des variables globales. Y a-t-il un moyen raisonnable de le faire, ou devrais-je juste le sucer et écrire le code laid?
Cela ressemble beaucoup mieux! Merci! –