gpt4 book ai didi

c++ - 在 dxdt 函数中使用 Eigen 和 Odeint 进行矩阵* vector 乘法

转载 作者:行者123 更新时间:2023-11-30 01:47:03 36 4
gpt4 key购买 nike

我正在尝试用 C++ 编写一些代码,否则使用 E​​igen 和 Odeint 在 MatLab 中编写这些代码会非常容易。但是,我对 Eigen 和 Odeint 库都不熟悉,而且我并没有走得太远。如果外面有人能给我指出正确的方向(就如何编码而言),我应该能够从那里开始。

这大致是我想做的,但无法开始工作(在伪代码中;所有大写字母都是常量):

typedef Eigen::Matrix<double, Dynamic, 1> state_type_1d;
typedef Eigen::Matrix<double, Dynamic, Dynamic> state_type_2d;

state_type Q(N*N,N*N) = ... // initialize Q

void dxdt_fun( state_type_1d &x , state_type_1d &dxdt , double t )
{

static state_type_2d v(N,N);

v = (0.5 * (1 + tanh((x-0.5) * GAIN)));
dxdt = -x*LAMBDA + v.colwise.sum() + v.rowwise.sum(); // needs bsxfun??
dxdt = dxdt + Q * x; // matrix times vector
}

void main(int argc, char **argv)
{
state_type_1d u(N,N);
srand((unsigned int) time(0));
u.setRandom(); // picks random numbers from -1 to 1
runge_kutta_dopri5<state_type_1d,double,state_type_1d,double,vector_space_algebra>stepper;

integrate_adaptive(stepper, dxdt_fun, u, 0.0, 100.0, 0.01, write_dxdt);
}

非常感谢任何可以提供帮助的人。

最佳答案

您的代码的 (Eigen) 语法问题如下:

  1. v.colwise.sum() 应该是 v.colwise().sum()
  2. 同样,v.rowwise.sum() 应该是 v.rowwise().sum()
  3. state_type_1d u(N,N); 是混合 vector 类型,矩阵构造函数。
  4. v = (0.5 * (1 + tanh((x-0.5) * GAIN))); 似乎是矩阵变量的系数明智的 vector 乘积。而且我不认为 Eigen 有内置的 tanh 但我可能是错的。即使是这样,语法错误。它应该是 (x-0.5).tanh() 如果它存在。

关于c++ - 在 dxdt 函数中使用 Eigen 和 Odeint 进行矩阵* vector 乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32169279/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com