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

第n阶Walsh函数生成问题:用于sinx傅里叶近似及区间适配

用Walsh函数近似[-π,π]区间sinx的解决方案

Walsh函数基础回顾

  • 是[0,1]上的标准正交基,由Rademacher系统构造,依赖Gray二进制编码(例如n=4时,Gray码顺序为0000→0001→0011→0010→0110→0111→0101→0100→1100→1101→1111→1110→1010→1011→1001→1000)。
  • 标准Walsh函数wal(k,t)中,k为阶数,t∈[0,1],取值仅为±1。

问题1:Hadamard矩阵实现Walsh函数结果错误

Hadamard矩阵构造Walsh函数的核心是阶数与Gray码的映射:

  • 若使用N阶Hadamard矩阵(N=2^m),矩阵的第k行(从0开始计数)对应Gray码排序后的第k阶Walsh函数。
  • 常见错误是直接用十进制阶数作为矩阵行索引,忽略Gray码转换。

Matlab修正实现示例:

function w = walsh(k, t)
    m = nextpow2(k);
    N = 2^m;
    % 十进制转Gray码
    gray_k = bitxor(k, floor(k/2));
    % 生成Hadamard矩阵
    H = hadamard(N);
    % 线性插值适配任意t∈[0,1]
    w = interp1(linspace(0,1,N), H(gray_k+1,:), t, 'linear');
end

问题2:将Walsh函数从[0,1]扩展到[-π,π]

通过线性区间映射实现扩展:
设x∈[-π,π],对应[0,1]区间的t值为 t=(x+π)/(2π)(x=-π时t=0,x=π时t=1)。
扩展后的Walsh函数为:walsh_extended(k, x) = walsh(k, (x+π)/(2π))

注意:扩展后内积变为∫_{-π}^π wal(k,(x+π)/(2π))wal(j,(x+π)/(2π))dx = 2πδ(k,j),后续计算系数需除以2π。

问题3:转为匿名函数处理数组输入

先修改walsh函数支持数组输入,再转为匿名函数:

function w = walsh(k, t)
    m = nextpow2(k);
    N = 2^m;
    gray_k = bitxor(k, floor(k/2));
    H = hadamard(N);
    % 适配数组输入的插值计算
    w = arrayfun(@(x) interp1(linspace(0,1,N), H(gray_k+1,:), x, 'linear'), t);
end

生成处理[-π,π]数组的匿名函数:

k = 4; % 示例阶数
walsh_anon = @(x) walsh(k, (x+π)/(2π));
% 测试数组输入
x = linspace(-π, π, 100);
y = walsh_anon(x);

计算近似系数(Walsh展开)

sinx在[-π,π]上的Walsh展开式为:sinx ≈ Σ_{k=0}^n c_k * walsh_extended(k,x)
其中系数 c_k = (1/(2π)) * ∫_{-π}^π sinx * walsh_extended(k,x) dx

Matlab数值积分计算示例:

n = 8; % 展开到第8阶
c = zeros(n+1, 1);
for k = 0:n
    f = @(x) sin(x) .* walsh(k, (x+π)/(2π));
    c(k+1) = integral(f, -π, π) / (2π);
end
% 生成近似曲线
x = linspace(-π, π, 1000);
approx = 0;
for k = 0:n
    approx = approx + c(k+1) .* walsh(k, (x+π)/(2π));
end
plot(x, sin(x), x, approx, 'LineWidth', 1.5);
legend('sinx', 'Walsh近似');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:10:22