gpt4 book ai didi

haskell - 如何将两个生成级数相乘?

转载 作者:行者123 更新时间:2023-12-02 16:50:19 24 4
gpt4 key购买 nike

如果这更适合 MathOverflow,请原谅我,但我的问题可能太简单了,无法放在那里。

我正在阅读 S.K Lando 的生成函数讲座,其中给出了两个生成函数 AB 的乘积的定义:

A(s)*B(s) = a0*b0 + (a0*b1 + a1*b0)*s + (a0*b2 + a1*b1 + a2*b0)*s^2 。 ..

据我所知,s只是正式的。但是 - 我知道我很迟钝 - 我无法理解码合系数的项模式应该如何继续。如果有人可以将定义扩展到一两个以上的术语,那可能会对我有很大帮助。非常感谢!

对于奖励积分,Haskell 中用于乘以两个级数(表示为系数列表)的算法也将非常受欢迎 - 但这对我来说只需理解上述定义就足够了。

最佳答案

请注意,每一项的系数索引之和都是恒定的。例如a0*b0 -> 0+0=0,而a0*b1 -> 0+1=1a1*b0 -> 1+0 =1.

回想一下story of young Gauss ,他发现通过将连续数字列表与其倒数相加,我们可以获得一个常量列表。同样的技巧也适用于此。我们只需获取前 k 个 a_ib_i 系数,反转 b_i 系数列表,然后获取列表。

这里有一些 Haskell 代码,用于生成 i>=0s^i 系数,给定 i 列表>as=[a0,a1,...]bs=[b0,b1,...]:

genCoeff :: [Double] -> [Double] -> Int -> Double
genCoeff as bs i = sum $ zipWith (*) (take (i+1) as) (reverse (take (i+1) bs))

要生成所有系数,我们只需将部分应用的函数 genCoeff as bs 映射到列表 [0,1,...],即

genAllCeoffs :: [Double] -> [Double] -> [Double]
genAllCoeffs as bs = map (genCoeff as bs) [0..]

关于haskell - 如何将两个生成级数相乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31684142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com