You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何快速实现基于Chebyshev多项式的光滑函数级数展开?

切比雪夫级数展开的高效实现问题

我希望用类似泰勒级数的形式,通过切比雪夫多项式生成光滑函数的级数展开,但一直没找到给定系数下高效计算该展开的方法。实际测试发现,硬编码切比雪夫(或泰勒)多项式比调用现有库函数快得多,但当近似阶数较高时,硬编码显然不现实,因此想寻求更高效的代码实现方案。以下是我的尝试代码:

library(mpoly)
library(foreach)
library(microbenchmark) # 补充原代码缺失的依赖库

n=5

# 硬编码1到4阶切比雪夫多项式
cheb = function(x) {x} # 1阶切比雪夫多项式
cheb2 = function(x) {-1 + 2*x^2} # 2阶切比雪夫多项式
cheb3 = function(x) {-3*x+4*x^3} # 3阶切比雪夫多项式
cheb4 = function(x) {1-8*x^2+8*x^4} # 4阶切比雪夫多项式

# 用mpoly库的chebyshev()生成n-1阶以内的切比雪夫多项式,并转为可调用函数
cheb_funs = foreach(n_ind = 1:n) %do% as.function(chebyshev(n_ind-1)) 

# 基于硬编码多项式计算级数展开
Cheb_app1 = function(x)
{
  p = x$p
  v = x$v_cheb
  v[1] + v[2]*cheb(p) + v[3]*cheb2(p) + v[4]*cheb3(p) + v[5]*cheb4(p)
} 

# 基于foreach循环和动态生成的cheb_funs计算级数展开
Cheb_app2 = function(x)
{
  p = x$p;
  v = x$v_cheb;
  foreach(p_ind = p, .combine = "c") %do%
    (foreach(n_ind = 1:n, .combine = "sum") %do%
       (v[n_ind]*(cheb_funs[[n_ind]](p_ind))))
}

# 性能基准测试
z = list(p = runif(10, -1,1), v_cheb = runif(n, -1,1))
microbenchmark(Cheb_app1(z), Cheb_app2(z))

基准测试结果

Unit: microseconds
         expr       min        lq       mean    median        uq      max neval
 Cheb_app1(z)     3.473     4.011   120.6585     7.955    12.944 11217.96   100
 Cheb_app2(z) 30249.810 33243.943 35605.0237 34127.602 38195.954 47322.77   100

内容的提问来源于stack exchange,提问作者spellard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:58:13