这是一个滤波的差分方程:
y(n)=x(n)-x(n-2)+Ay(n-1)-By(n-2)
x(1) ,x(2)...x(400)已知,但怎么代入原方程呢?y(1)=x(1)-x(-1)+Ay(0)-By(-1)
y(2)=x(2)-x(0)+Ay(1)-By(0)
...
...
y(n)=x(n)-x(n-2)+Ay(n-1)-By(n-2)我的数字怎么代进去呢?用循环吗?

解决方案 »

  1.   

    x(1)~x(n)用数组
    方程用一个迭代可能是最简单的。
    你的a,b是常数吧。
      

  2.   

    我可以给你算法,不过首先你要告诉我几个条件:
    1、酸Y(1)的时候,X(1)可知道,但是X(-1)的数值是多少?
    2、算Y(1)的时候,需要知道Y(0)和Y(-1)的数值,它们我想应该是确定的数字吧,是多少?
    3、算Y(2)的时候,用了X(0),它的数值是多少?综合:
      X(-1)、X(0)、Y(-1)、Y(0)都应该是已经知道的常量,是多少。我准备用低归函数实现,现在就这几个常量被卡了,需要证实。
      

  3.   

    a,b 是常数1,       -50000,           
    2,       -49000,      
    3,       -48000,    
    4,       -47000,     
    5,       -460,      
    6,       -450,      
    7,       -440,      
    8,       -430,               
    9,       -420,     
    10,       -410,      
    ...
    ...     
    435,       3840,   x(n)是这组数据。从文本中以数组形式读入数据后,我怎么样实现这个循环呢?
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    const
      A = 3;
      B = 5;
      ArraySize = 400;  function funcY(N: integer; arrayA: array of integer): integer;
      begin
        case N of
          1: Result := arrayA[N];
          2: Result := arrayA[N] + A*funcY(N-1, arrayA);
        else
          Result := arrayA[N] - arrayA[N-2] + A*funcY(N-1, arrayA) - B*funcY(N-2, arrayA);
        end;
      end;var
      arrayX: array[1..ArraySize] of integer;
      i, y: integer;
    begin
      for i := 1 to ArraySize do
        arrayX[i] := i+10;
      y := funcY(5, arrayX);
      ShowMessage(IntToStr(y));
    end;我的这些代码其实也只是一种思路 具体还要你自己实现