#include <iostream>
int main(
int argc, 
char *argv[]){
     int sectionCnt=10;
    Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> B, A;
    B=Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>::Random(N,sectionCnt);
    A=Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>::Random(N-2,sectionCnt);
    B/=100.;
    A/=100.;
    A.row(0)=Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>::Ones(1,sectionCnt);
    N=1200;
    Eigen::Matrix<double, Eigen::Dynamic, 1> 
x, 
y;
    Eigen::Matrix<float, Eigen::Dynamic, 1> xf, yf;
    xf=Eigen::Matrix<float, Eigen::Dynamic, 1>::Random(N,1);
    x=xf.cast<double>();
    y.resize(x.rows(), x.cols());
    yf.resize(x.rows(), x.cols());
    
 
  
    vector<string> args(1); args[0]=string("");
    Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> yHat, tempOct;
    yHat.resize(x.rows(), x.cols());
    for (int i=0; i<sectionCnt; i++){
        vector<Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> > input, output; 
        input.push_back(B.col(i));
        input.push_back(A.col(i));
        input.push_back(x);
        octave.
runM(
"filter", input, output);
        x=output[0];
    }
    cout<<(y-yHat).array().abs().sum()/y.rows()/y.cols()<<endl;
    cout<<(yf-y.cast<float>()).array().abs().sum()/y.rows()/y.cols()<<endl;
    
    
    
    
    
    
    
    return 0;
}