Commune de façon à générer fini série géométrique dans MATLAB
Supposons que j'ai un certain nombre a, et je veux obtenir le vecteur [ 1 , a , a^2 , ... , a^N ]. J'utilise [ 1 , cumprod( a * ones( 1 , N - 1 ) ) ] code. Quel est le meilleur (et probablement efficace) moyen de le faire?
J'ai peur qu'il aura besoin de O(N^2) produits, tout en cumprod besoins en seulement O(N) produits Certainement le plus compact Essayez les deux méthodes de profilage. Mais oui, c'est lié à être plus lent. Mon chemin est d'environ. 2x plus rapide. Néanmoins, il est acceptable en raison de la grande lisibilité de l'amélioration. Merci. Un couple de choses à noter... 1) je ne m'attends pas a.^(0:N) avoir O(N^2) la dépendance, probablement plus comme O(NlogN) car j'imagine que l'exponentiation est fait avec un algorithme plus efficace. 2) Ne soyez pas trop surpris si les résultats des deux méthodes ne sont pas *exactement de l'égalité lors de l'utilisation de valeurs à virgule flottante pour a. Depuis qu'ils utilisent deux algorithmes sous-jacents, avec les différents ordres d'opérations mathématiques, vous pouvez voir des petites différences de l'ordre de la virgule flottante de précision.
ThibThib la réponse est absolument correct, mais il n'a pas généraliser très facilement si a arrive à un vecteur. Donc, en tant que point de départ:
>a=2a=2>n=3n=3>a.^[0:n]ans=1248
Maintenant, vous pouvez également utiliser la fonction intégrée vander (même si l'ordre est différent, mais c'est facilement résolu si nécessaire), pour produire de l':
Ce sujet
a.^[0:N]
?Certainement le plus compact
Essayez les deux méthodes de profilage. Mais oui, c'est lié à être plus lent.
Mon chemin est d'environ. 2x plus rapide. Néanmoins, il est acceptable en raison de la grande lisibilité de l'amélioration. Merci.
Un couple de choses à noter... 1) je ne m'attends pas
a.^(0:N)
avoir O(N^2) la dépendance, probablement plus comme O(NlogN) car j'imagine que l'exponentiation est fait avec un algorithme plus efficace. 2) Ne soyez pas trop surpris si les résultats des deux méthodes ne sont pas *exactement de l'égalité lors de l'utilisation de valeurs à virgule flottante poura
. Depuis qu'ils utilisent deux algorithmes sous-jacents, avec les différents ordres d'opérations mathématiques, vous pouvez voir des petites différences de l'ordre de la virgule flottante de précision.OriginalL'auteur ThibThib
ThibThib la réponse est absolument correct, mais il n'a pas généraliser très facilement si
a
arrive à un vecteur. Donc, en tant que point de départ:Maintenant, vous pouvez également utiliser la fonction intégrée
vander
(même si l'ordre est différent, mais c'est facilement résolu si nécessaire), pour produire de l':Et avec un vecteur évalués
a
:OriginalL'auteur eat