level 1
我有一个实数值列表,形如 {{a1,b1}, {a2,b2}, ...}。其中,a1, a2, ... 按增加顺序排列。
我需要一个函数f[t],满足:f在t充分小时是零,在每个t = ak处,f[t]的值增加bk。
我可以用先Select再Sum的方式写这个f。但是,这个f将被反复调用极多次,我必须采取一种非常快速的方法。
有什么办法能利用ak的递增性质吗?
2024年07月02日 04点07分
1
level 9
没怎么看明白你的问题, 我觉得
list = {{a1, b1}, {a2, b2}, {a3, b3}};
newlist =
Transpose@{First@Transpose[list],
FoldList[Plus, Last@Transpose[list]]};
f = Interpolation[Join[{{0, 0}}, newlist]]
newlist是{{a1, b1}, {a2, b1+b2}, {a3, b1+b2+b3}}, 再使用Interpolation得到插值函数f
2024年07月03日 06点07分
3
感谢!我的意思是,对于t属于[a_k, a_(k+1)),f[t]应该是b1+b2+...+bk。
2024年07月03日 06点07分
@畦哇硅 你可以在Interpolation设定InterpolationOrder -> 0来实现这样的阶梯函数
2024年07月03日 07点07分