gpt4 book ai didi

c++ - vector 下标与 odeint 不匹配 (C++)

转载 作者:行者123 更新时间:2023-11-28 05:24:09 24 4
gpt4 key购买 nike

我正在实现 ODE 来求解四个耦合方程,并且遇到了状态 vector 定义的问题。我正在按照此处的示例进行引用 ( https://www.codeproject.com/articles/268589/odeint-v-solving-ordinary-differential-equations );正如我所说,我的代码和这个代码之间的唯一区别是方程的实际定义,而且我需要一个包含 4 个元素而不是 3 个元素的 vector 。

我的代码如下(方程中定义的质量、惯性等值是基于用户从另一个类输入的);我还没有添加一个观察者来推迟结果,因为我想先让它工作。 vector 态定义:

typedef std::vector< double >state_type;

耦合 ODE 类:

class coupledODE : public Vehicle, public Road
{
public:
void operator()(state_type &x, state_type &dxdt, double t)
{
dxdt[0] = x[2];
dxdt[1] = (1 / mass)*(-(damping_f + damping_r)*x[2] - (stiffness_f + stiffness_r)*x[1] - (damping_r*rearLength - damping_f*frontLength)*x[4] - (stiffness_r*rearLength - stiffness_f*frontLength)*x[3] + stiffness_f*A*sin((radFreq)*t) + stiffness_r*A*sin((radFreq)*t - (2 * pi*(frontLength + rearLength)) / L));
dxdt[3] = x[4];
dxdt[4] = (1 / inertia)*(-(damping_f*pow(frontLength, 2) + damping_r*pow(rearLength, 2))*x[4] - (stiffness_f*pow(frontLength, 2) + stiffness_r*pow(rearLength, 2))*x[3] - (stiffness_r*rearLength - stiffness_f*frontLength)*x[2] - (stiffness_r*rearLength - stiffness_f*frontLength)*x[1] + stiffness_r*rearLength*A*sin((radFreq)*t - (2 * pi*(rearLength + frontLength)) / L) - stiffness_f*frontLength*A*sin((radFreq)*t));
}
};

调用主函数:

state_type x(4);
x[0] = car.x_init1;
x[1] = car.x_init2;
x[2] = car.x_init3;
x[3] = car.x_init4;

const double timeStep = car.dt;
double tStart = car.t0;
double t = tStart;
double tEnd = car.tf;

// Initialize odeint
runge_kutta4<state_type>rk4;
for (size_t i = 0; i < (tStart - tEnd) / timeStep; ++i, t += timeStep)
{
rk4.do_step(coupledODE(), x, t, timeStep);
}

当我在 MSVS '15 中构建代码时,代码编译良好,但当我运行它时,我在定义 x[3] 初始值的行处遇到异常。这种确切的格式适用于 3 个耦合方程,所以我对导致第四个元素出现问题的原因有点不知所措。

最佳答案

由于实际 ODE eqtns 中的下标引起的错误 - 必须从 x[0] 开始并在 x[3] 结束。错误已通过修改方程解决

关于c++ - vector 下标与 odeint 不匹配 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40893464/

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