带有特征库的C ++中的运行时错误,有什么建议吗?

时间:2014-08-16 21:53:25

标签: c++ eigen

我是C ++和特征库的新手。我想编写一些简单的东西,但不知道我哪里出错了。这是我的代码:

#include<iostream>
#include<Eigen\Dense>
#include<cmath>
#include<fstream>

  using namespace std;
  using namespace Eigen;

  int main (int argc, char* argv[])
  {
      int n = 200;

      Matrix<double, Dynamic,1> u_n;
      u_n.setZero(n,1);

      Matrix<double, Dynamic,1> u_n_minus_one;
      u_n_minus_one.setZero(n,1);

      Matrix<double, Dynamic,1> u_n_plus_one;
      u_n_plus_one.setZero(n,1);

      std::ofstream fileWriter ("Values.txt");
      assert(fileWriter.is_open());

      float r=2;
      float F=100;

      for (int t=0;t<=5;t=t+1)
      {


                u_n_plus_one (0,0) =0;
//source of error
                u_n_plus_one.block(1,0,n-1,0) = pow(r,2)*( u_n.block(1,0,n-2,0)+ u_n.block(3,0,n,0)) + 2*(1-pow(r,2))*u_n.block(1,0,n-1,0)-u_n_minus_one.block(1,0,n-1,0);
//source of error
                u_n_plus_one (floor(n/2),0)=F;
                u_n_plus_one (n-1,0) =0 ;    //corrected from (n,0) to (n-1,0)


    u_n_minus_one = u_n ;
    u_n = u_n_plus_one ;

    //writing values to file
    if (remainder(t, 10) == 0)
    {
        fileWriter<<u_n.transpose()<<std::endl;
    }

   }

      fileWriter.close();
  }

我试图声明一些矩阵(尽管它们是向量)。然后我正在对矩阵块进行操作,最后将结果写入文件。我没有得到任何编译时错误,但程序在运行期间崩溃。

我尝试调试代码,错误似乎位于 //错误源语句中。有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:2)

正如Block operations上的页面所述,matrix.block(i,j,p,q)表示从p条目开始的q行和(i,j)列的块。我认为程序中的u_n.block(3,0,n,0)应该引用从(3,0)条目开始并在(n,0)条目处开始的块,但实际上它指的是块从(3,0)条目开始,大小(n,0)。从(3,0)条目开始并在(n,0)条目处结束的块由u_n.block(3,0,n-2,1)u_n.segment(3,n-2)u_n.tail(n-2)表示;看到开头提到的链接。