Comment correctement utiliser la Récursivité dans MATLAB?
J'ai un simple m fichier que j'ai créé comme une fonction récursive:
function[velocity] = terminal(m,c,t,vi)
%inputs:
% m = mass
% c = coeffcient of drag
% t = time
% vi = initial velocity
if t==18, velocity = vi+(9.8-c/m*(vi))*2;
return
end
velocity = vi+(9.8-c/m*(vi))*2;
velocity %used to print out velocity for debugging
terminal(m,c,t+2,velocity);
end
Le calcul de la vitesse est effectué correctement comme il imprime à chaque récursion. Cependant, la "ans" qui est retourné à la fin est la première valeur calculée de la récursivité. Ma question est comment puis-je correctement l'installation d'un matlab fonction récursive? Ou peut-il être fait, et est-il mieux utiliser une boucle?
Dans Matlab, une boucle serait probablement plus efficace.
OriginalL'auteur James Mertz | 2011-01-21
Vous devez vous connecter pour publier un commentaire.
Garder avec moi, n'ont pas fait beaucoup de Matlab pour un certain temps maintenant.
Mais je voudrais simplement appeler votre fonction de manière itérative:
Ensuite, pour chaque instance de t, il serait de calculer la vitesse pour une vitesse initiale et la mise à jour de la valeur avec la nouvelle vitesse.
Pour l'avoir à prendre des mesures progressives avec une taille de 2, ajoutez simplement votre taille de pas de.
Mis à jour en réponse aux commentaires
que la deuxième partie de mon commentaire.
Merci @Clément! J'ai mis à jour ma réponse en conséquence
Si l'idée est pour la valeur finale de
velocity
pour représenter la somme des effets supplémentaires que l'accélération gravitationnelle et faites-le glisser pour chaque pas de temps donné une vitesse initialevi
, alors vous devez changervi
àvelocity
dans la boucle et ajouter l'initialisationvelocity = vi;
avant la boucle est entré.OriginalL'auteur Ivo Flipse
Bien que ma réponse ne vous éloignez de la programmation et dans le domaine de calcul, il convient de noter que vous pouvez résoudre votre problème à la fois, sans récursivité ou une boucle puisque vous pouvez exactement résoudre une équation
v(t)
à l'aide de l'intégration. Il semble que vous êtes la modélisation Stokes a glisser sur un corps en chute, de sorte que vous pouvez utiliser le quatrième formule à partir de cette intégration de table pour calculer une vitesse finalevFinal
que l'on atteint après une chute pendant un tempstDelta
donnée de départ de la vitessevInitial
. Voici la formule obtenue, vous obtenez:Ce sera une réponse plus précise que l'approximation
vFinal
en faisant des étapes séquentielles de l'avant dans le temps (c'est à dire la La méthode d'Euler, qui permet l'affichage des erreurs ou des instabilités lorsque le temps des mesures qui sont prises sont trop grands).alors que ça fait un moment quand j'ai travaillé sur ce, je crois que la programmation a été l'aspect le plus important de la question à portée de main. Je n'étais pas en mesure de trouver des questions sur la façon de pratiquer correctement la récursivité dans matlab, et je croyais que j'avais l'utiliser comme un exemple. Cependant, vous avez raison c'est plus exact.
OriginalL'auteur gnovice
devrait fonctionner.
OriginalL'auteur George
Le problème avec la récursion est-il ajoute la fonction d'appel de surcharge pour chaque fois. Cela rendra votre code beaucoup plus lent et moins efficace dans matlab. Utiliser une boucle à la place et vous serez bien en avance de choses. Oui, il y a des cas où la récursivité est un outil précieux. Mais dans de nombreux cas, rédigée avec soin une boucle est la meilleure solution.
Enfin, lorsque vous FAITES usage de la récursivité, apprendre à appliquer des outils comme memoization pour améliorer le comportement de l'algorithme. Memoization signifie simplement de ne pas recalculer qui vous l'ont déjà fait. Par exemple, il est possible d'utiliser la récursivité pour une séquence de fibonacci, mais c'est terriblement inefficace façon de le faire.
OriginalL'auteur