如何写出形式为 x'=f(x,t) 的方程式,其中 t 明确出现在 odeint 中
How to write equation of the form x'=f(x,t) where t appears explicitly in odeint
我正在尝试使用 odeint 求解以下形式的微分方程:
y[0]'(r)=y1,
y[1]'(r)=f(y,r)
明确出现 t 的地方。如何在等式的代码中写 "r"?
参见下面的示例
typedef std::vector< double > state_type;
class phieq{
double lambda, mu, g, sigma, rv;
public:
phieq(double mlambda, double mmu, double mg, double msigma, double mrv) : lambda(mlambda), mu(mmu), g(mg), sigma(msigma), rv(mrv) {}
void operator() (const state_type &y , state_type &dydr , const double /* t */)
{ dydr[0] = y[1];
dydr[1] = -((2.0*y[1])/r)+lambda*y[0]*y[0]*y[0]-(mu*mu)*y[0];
}
};
在这种情况下,r 是您的自变量。 odeint 源自动力系统,因此在其示例中使用 t(表示时间)。在你的情况下你应该写
void operator() (const state_type &y , state_type &dydr , const double r)
然后你可以在下面的表达式中使用 r。
我正在尝试使用 odeint 求解以下形式的微分方程:
y[0]'(r)=y1,
y[1]'(r)=f(y,r)
明确出现 t 的地方。如何在等式的代码中写 "r"?
参见下面的示例
typedef std::vector< double > state_type;
class phieq{
double lambda, mu, g, sigma, rv;
public:
phieq(double mlambda, double mmu, double mg, double msigma, double mrv) : lambda(mlambda), mu(mmu), g(mg), sigma(msigma), rv(mrv) {}
void operator() (const state_type &y , state_type &dydr , const double /* t */)
{ dydr[0] = y[1];
dydr[1] = -((2.0*y[1])/r)+lambda*y[0]*y[0]*y[0]-(mu*mu)*y[0];
}
};
r 是您的自变量。 odeint 源自动力系统,因此在其示例中使用 t(表示时间)。在你的情况下你应该写
void operator() (const state_type &y , state_type &dydr , const double r)
然后你可以在下面的表达式中使用 r。