【问题标题】:Common way to generate finite geometric series in MATLABMATLAB中生成有限几何级数的常用方法
【发布时间】:2011-09-12 12:32:10
【问题描述】:

假设我有一些数字a,我想得到向量[ 1 , a , a^2 , ... , a^N ]。我使用[ 1 , cumprod( a * ones( 1 , N - 1 ) ) ] 代码。最好的(并且可能是有效的)方法是什么?

【问题讨论】:

    标签: matlab series


    【解决方案1】:

    a.^[0:N] 呢?

    【讨论】:

    • 恐怕需要O(N^2)个产品,而cumprod只需要O(N)个产品
    • 绝对是最紧凑的方式
    • @UncleAli:尝试分析这两种方法。但是,是的,它一定会更慢。
    • @Jacob:我的方式大约是。快 2 倍。尽管如此,它还是可以接受的,因为可读性有了很大的提高。谢谢。
    • @UncleAli: 有几点需要注意... 1) 我不希望a.^(0:N) 有 O(N^2) 依赖,可能更像 O(NlogN ) 因为我想求幂是用a more efficient algorithm 完成的。 2) 当使用a 的浮点值时,如果两种不同方法的结果不*完全 相等,请不要过于措手不及。由于它们使用两种不同的底层算法,具有不同的数学运算顺序,因此您可能会看到浮点精度顺序上的微小差异。
    【解决方案2】:

    ThibThib 的回答是绝对正确的,但如果a 发生在一个向量上,它就不会很容易概括。所以作为一个起点:

    > a= 2
    a =  2
    > n= 3
    n =  3
    > a.^[0: n]
    ans =
       1   2   4   8
    

    现在您还可以利用内置函数vander(虽然顺序不同,但如果需要,很容易修复),来生成:

    > vander(a, n+ 1)
    ans =
       8   4   2   1
    

    向量值为a:

    > a= [2; 3; 4];
    > vander(a, n+ 1)
    ans =
       8    4    2    1
      27    9    3    1
      64   16    4    1
    

    【讨论】:

      猜你喜欢
      • 2019-06-30
      • 1970-01-01
      • 2020-02-07
      • 2020-01-19
      • 2016-11-09
      • 1970-01-01
      • 2015-10-01
      • 2014-07-07
      • 2011-01-10
      相关资源
      最近更新 更多