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

Matlab自定义类filter函数异常:仅前9个输出元素正确问题排查

问题排查:自定义差分方程求解函数偏差原因

核心错误原因

循环内修改输入数组x是导致后续结果偏差的根本问题:

  • 代码中if n < Nx; x=[x(2:end),0]; end这行逻辑,会在每次循环时把x左移一位并补0。这会导致后续n对应的x(n)不再是原始输入序列的第n个元素,而是经过多次移位后的错误值。比如当n=10时,x已经被移位9次,此时x(10)对应的是原始x的第1个元素后补的0,而非原始输入的第10个元素(若原始x长度足够)。

修正方案

不要修改原始x数组,通过索引直接访问原始x的对应位置,超出原始长度的位置视为0:

function y = difference_equation_solver(x,a,b,N)
    b = b(:)';
    a = a(:)';
    nb = length(b);
    na = length(a);
    Nx = length(x);
    y = zeros(1, N);
    for n = 1:N
        % 计算前向项(b与x的卷积)
        y(n) = b(1) * (n <= Nx ? x(n) : 0);
        for k = 2:nb
            idx = n - k + 1;
            if idx >= 1
                y(n) = y(n) + b(k) * (idx <= Nx ? x(idx) : 0);
            end
         end
        % 计算反馈项(a与y的递归)
        for k = 2:na
            idx = n - k + 1;
            if idx >= 1
                y(n) = y(n) - a(k) * y(idx);
            end
        end
    end
end

修正说明

  1. 移除了对x数组的移位操作,所有x的访问都通过索引判断:索引在原始x长度范围内时取对应值,否则取0,符合线性系统对输入序列的零填充规则。
  2. 统一用idx = n - k + 1计算偏移索引,逻辑更清晰,避免因数组移位导致的索引混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:25:11