Thursday, 19 January 2017

Recursive Moving Average Matlab

J'essaie de compléter un projet d'affectation matlab avec la question suivante: Écrire une fonction appelée movingaverage qui prend un scalaire appelé x comme argument d'entrée et retourne un scalaire. La fonction utilise un tampon pour contenir les entrées précédentes, et le tampon peut contenir un maximum de 25 entrées. Plus précisément, la fonction doit enregistrer les 25 entrées les plus récentes dans un vecteur (le tampon). Chaque fois que la fonction est appelée, elle copie l'argument d'entrée dans un élément du tampon. S'il ya déjà 25 entrées mémorisées dans la mémoire tampon, elle rejette l'élément le plus ancien et sauvegarde celui qui est en cours dans la mémoire tampon. Après avoir enregistré l'entrée dans le tampon, il retourne la moyenne de tous les éléments dans le tampon. La solution que je fournis est la suivante: Selon le niveleur automatique, ma fonction fonctionne correctement lorsque les valeurs 1 à 50 passent consécutivement, mais échoue lorsque les valeurs d'une onde sinusoïdale bruyante passent de façon consécutive (ce qui m'a été expliqué Sorte d'une erreur d'arrondi). Je serais reconnaissant si l'un de vous pourrait me fournir quelques conseils concernant les étapes d'erreur possible dans mon code (ci-dessus). Merci d'avanceRecursion signifie définir un problème en termes d'elle-même. Cela peut être un outil très puissant dans l'écriture d'algorithmes. La récursion vient directement des mathématiques, où il ya beaucoup d'exemples d'expressions écrites en termes d'eux-mêmes. Par exemple, la séquence de Fibonacci est définie comme: F (i) F (i-1) F (i-2) La récursivité est le processus de définition d'un problème (ou la solution à un problème) en termes de (une version plus simple de ) Elle-même. Par exemple, nous pouvons définir l'opération de trouver votre chemin à la maison comme: Si vous êtes à la maison, arrêtez de bouger. Faites un pas vers la maison. Trouvez votre chemin à la maison. Voici la solution pour trouver votre chemin à la maison est de deux étapes (trois étapes). D'abord, nous ne rentrons pas chez nous si nous sommes déjà à la maison. Deuxièmement, nous faisons une action très simple qui rend notre situation plus simple à résoudre. Enfin, nous refaisons l'algorithme entier. L'exemple ci-dessus est appelé récursion de queue. C'est là que la dernière instruction appelle l'algorithme récursif. La recursion de queue peut être directement traduite en boucles. Comment écririez-vous un algorithme récursif pour trouver Temple Square Un autre exemple de récursivité serait de trouver la valeur maximale dans une liste de nombres. La valeur maximale dans une liste est soit le premier nombre soit le plus grand des nombres restants. Voici comment nous écrire le pseudocode de l'algorithme: Parties d'un algorithme récursif Tous les algorithmes récursifs doivent avoir les éléments suivants: Cas de base (c'est-à-dire quand arrêter) Travailler vers Base Case Appel récursif (c.-à-d. Où nous rendons le problème plus simple. L'appel récursif, c'est là que nous utilisons le même algorithme pour résoudre une version plus simple du problème. Le cas de base est la solution au problème le plus simple possible (Par exemple, le cas de base à l'ajout d'une liste de nombres serait si la liste avait un seul nombre. Ainsi, la réponse est le nombre). Exemple simple: Ajouter trois numéros L'ajout de trois nombres équivaut à ajouter les deux premiers chiffres, puis à ajouter ces deux nombres à nouveau. Identifier les 3 parties de l'algorithme récursif: Tout algorithme récursif doit avoir les trois étapes suivantes: Cas de base: if (nargin () 2) résultat ab Travailler vers le cas de base: ab devient le premier paramètre Ceci réduit le nombre de paramètres à la fonction De 3 à 2 et 2 est le cas de base Appel récursif: addnumbers (ab, c) Pourquoi fonctionne la récursion Dans un algorithme récursif, l'ordinateur se souvient de chaque état précédent du problème. Ces informations sont conservées par l'ordinateur sur la pile d'activation (c'est-à-dire à l'intérieur de chaque espace de travail des fonctions). Chaque fonction possède son propre espace de travail PAR APPEL de la fonction. Exemple de labyrinthe: Considérez une grille rectangulaire de pièces, où chaque pièce peut ou ne peut pas avoir des portes sur les côtés nord, sud, est, et ouest. Comment trouver le moyen de sortir d'un labyrinthe Voici un algorithme possible pour trouver la réponse: Pour chaque porte dans la salle actuelle, si la porte mène à la sortie, prenez cette porte. L'astuce ici est bien sûr, comment savons-nous si la porte mène à une pièce qui mène à la sortie La réponse est que nous n'avons pas, mais nous pouvons laisser l'ordinateur figure it out pour nous. Quelle est la partie récursive sur l'algorithme ci-dessus Sa porte mène hors du labyrinthe. Comment pouvons-nous savoir si une porte sort du labyrinthe Nous savons parce que dans la pièce voisine (en passant par la porte), nous posons la même question, comment sortir du labyrinthe Qu'est-ce qui se passe est l'ordinateur se souvient de tout ce que ifs . Que se passe-t-il si je prends la première porte, que se passe-t-il si je prends la deuxième porte, que se passe-t-il si je prends la porte suivante, etc. Et pour chaque porte possible, Et après cela, etc, jusqu'à ce que la fin soit trouvée. Voici une approche proche de la mise en œuvre du code. La récursivité peut être aussi bien appliquée aux algorithmes informatiques: Certains exemples liés à l'ordinateur incluent: Ajouter une liste de nombres, calculer la séquence de Fibonacci, calculer un facteuraire et Sudoku. Somme d'une liste de nombres: Question: Qu'est-ce qu'une solution récursive pour résumer une liste de nombres? Il faut d'abord noter que la somme de 1 2 3 4 5 6 7 8 9) est égale à 1 somme de 2 3 4 5 6 7 8 9)


No comments:

Post a Comment