- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 boost odeint 来演化微分方程。时间和值由围绕普通数字的包装类给出(进行高斯误差传播)。
using Time = Number<double>;
using Value = Number<double>;
状态及其派生由带有声明的自定义类给出
class State : boost::addable<State>, boost::multipliable<State, Time>, boost::dividable<State>
{
public:
void Add(Group const& group, Value alpha);
Value Get(Group const& group) const;
State& operator*=(Time const& time);
State& operator+=(State const& state);
State& operator/=(State const& state);
State abs() const;
Value norm_inf() const;
private:
std::map<Group, Value> map_;
};
State abs(State const& state);
namespace boost
{
namespace numeric
{
namespace odeint
{
template<>
struct boost::numeric::odeint::vector_space_norm_inf<State> {
using result_type = Value;
result_type operator()(State const& state) const;
};
}
}
}
using Derivative = State;
我使用 Runge-Kutta-Dopri-5 步进器和 vector 空间代数
using Stepper = boost::numeric::odeint::runge_kutta_dopri5<State, Value, Derivative, Time, boost::numeric::odeint::vector_space_algebra>;
我使用整个思考方式
auto start_state = GetStart();
auto system = GetSystem();
auto min = GetMin();
auto max = GetMax();
auto dt = GetDt;
auto observer = GetObserver();
auto stepper = boost::numeric::odeint::make_controlled<Stepper>(1e-6, 1e-6);
boost::numeric::odeint::integrate_adaptive(Stepper(), system, start_state, min, max, dt, observer);
这就像一个魅力。但您可能会注意到,我不使用在倒数第二行中定义的受控步进器,而是使用默认步进器。当我尝试使用stepper
时变量而不是默认值 Stepper()
在最后一行我得到以下编译错误:
In file included from /home/me/Integrate.cpp:2:
In file included from /usr/include/boost/numeric/odeint.hpp:35:
/usr/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:85:17: error: no matching constructor for initialization of 'typename operations_type::rel_error<value_type>' (aka 'rel_error<me::Number<double> >')
typename operations_type::template rel_error< value_type >( m_eps_abs , m_eps_rel , m_a_x , m_a_dxdt * abs(get_unit_value( dt )) ) );
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:768:50: note: in instantiation of function template specialization 'odeint::default_error_checker<me::Number<double>, odeint::vector_space_algebra, odeint::default_operations>::error<me::State, me::State, me::State, me::Number<double> >' requested here
value_type max_rel_err = m_error_checker.error( m_stepper.algebra() , in , dxdt_in , m_xerr.m_v , dt );
^
/usr/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:716:38: note: in instantiation of function template specialization 'odeint::controlled_runge_kutta<odeint::runge_kutta_dopri5<me::State, me::Number<double>, me::State, me::Number<double>, odeint::vector_space_algebra, odeint::default_operations, odeint::initially_resizer>, odeint::default_error_checker<me::Number<double>, odeint::vector_space_algebra, odeint::default_operations>, odeint::default_step_adjuster<me::Number<double>, me::Number<double> >, odeint::initially_resizer, odeint::explicit_error_stepper_fsal_tag>::try_step<(lambda at /home/me/Integrate.cpp:28:19), me::State, me::State, me::State, me::State>' requested here
controlled_step_result res = try_step( system , x , dxdt , t , m_xnew.m_v , m_dxdtnew.m_v , dt );
^
/usr/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:899:16: note: in instantiation of function template specialization 'odeint::controlled_runge_kutta<odeint::runge_kutta_dopri5<me::State, me::Number<double>, me::State, me::Number<double>, odeint::vector_space_algebra, odeint::default_operations, odeint::initially_resizer>, odeint::default_error_checker<me::Number<double>, odeint::vector_space_algebra, odeint::default_operations>, odeint::default_step_adjuster<me::Number<double>, me::Number<double> >, odeint::initially_resizer, odeint::explicit_error_stepper_fsal_tag>::try_step<(lambda at /home/me/Integrate.cpp:28:19), me::State, me::State>' requested here
return try_step( system , x , m_dxdt.m_v , t , dt );
^
/usr/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp:617:16: note: in instantiation of function template specialization 'odeint::controlled_runge_kutta<odeint::runge_kutta_dopri5<me::State, me::Number<double>, me::State, me::Number<double>, odeint::vector_space_algebra, odeint::default_operations, odeint::initially_resizer>, odeint::default_error_checker<me::Number<double>, odeint::vector_space_algebra, odeint::default_operations>, odeint::default_step_adjuster<me::Number<double>, me::Number<double> >, odeint::initially_resizer, odeint::explicit_error_stepper_fsal_tag>::try_step_v1<(lambda at /home/me/Integrate.cpp:28:19), me::State>' requested here
return try_step_v1( system , x , t , dt );
^
/usr/include/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp:103:22: note: in instantiation of function template specialization 'odeint::controlled_runge_kutta<odeint::runge_kutta_dopri5<me::State, me::Number<double>, me::State, me::Number<double>, odeint::vector_space_algebra, odeint::default_operations, odeint::initially_resizer>, odeint::default_error_checker<me::Number<double>, odeint::vector_space_algebra, odeint::default_operations>, odeint::default_step_adjuster<me::Number<double>, me::Number<double> >, odeint::initially_resizer, odeint::explicit_error_stepper_fsal_tag>::try_step<(lambda at /home/me/Integrate.cpp:28:19), me::State>' requested here
res = st.try_step( system , start_state , start_time , dt );
^
/usr/include/boost/numeric/odeint/integrate/integrate_adaptive.hpp:42:20: note: in instantiation of function template specialization 'odeint::detail::integrate_adaptive<odeint::controlled_runge_kutta<odeint::runge_kutta_dopri5<me::State, me::Number<double>, me::State, me::Number<double>, odeint::vector_space_algebra, odeint::default_operations, odeint::initially_resizer>, odeint::default_error_checker<me::Number<double>, odeint::vector_space_algebra, odeint::default_operations>, odeint::default_step_adjuster<me::Number<double>, me::Number<double> >, odeint::initially_resizer, odeint::explicit_error_stepper_fsal_tag>, (lambda at /home/me/Integrate.cpp:28:19), me::State, me::Number<double>, (lambda at /home/me/Integrate.cpp:48:21)>' requested here
return detail::integrate_adaptive(
^
/usr/include/boost/numeric/odeint/algebra/default_operations.hpp:435:9: note: candidate constructor not viable: no known conversion from 'me::State' to 'me::Number<double>' for 4th argument
rel_error( Fac1 eps_abs , Fac1 eps_rel , Fac1 a_x , Fac1 a_dxdt )
^
/usr/include/boost/numeric/odeint/algebra/default_operations.hpp:431:12: note: candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 4 were provided
struct rel_error
^
/usr/include/boost/numeric/odeint/algebra/default_operations.hpp:431:12: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 4 were provided
我可以看到odeint::rel_error<me::Number<double>>
应该是Number
类型,但产品m_a_dxdt * abs(get_unit_value( dt ))
,用作 rel_error
的第四个参数构造函数为 State
类型。我假设我在实现 State
的 vector 空间代数时犯了一个错误。类,但我找不到我哪里做错了。
如果我用普通的 double
替换时间和值类型',错误检查器再次工作。
最佳答案
odeint 的指令似乎有错误。如果 abs
函数的返回类型是 Value
而不是人们天真地期望的 State
,编译错误就会消失。
关于c++ - boost odeint : controlled stepper with custom class and vector space algebra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44566641/
有谁知道如何获得像“ÁlgeBra”这样的 NSString 到“Algebra”,没有重音,并且只大写第一个字母? 谢谢 RL 最佳答案 dreamlax has already mentioned
显然,Alexander Stepanov在interview中声明了以下内容: “I find OOP [object-oriented programming] technically unsou
当我学习 Scala/Haskell 时,我看到了 Algebraic data type 的概念。我已经阅读了维基百科的解释,但我仍然有一个问题: 为什么它的名字中使用“代数”这个词?它与“代数”有
我正在尝试像 this page 中那样编写 F 代数.不同之处在于,不是用元组组合,而是像这样: type FAlgebra[F[_], A] = F[A] => A def algebraZip[
我一直在寻找这个问题,但我无法理解这个问题的含义。 问题: Write a program in any language to determine how your computer handles
我正在 Inside Microsoft SQL Server 2008: T-SQL Querying by Itzik Ben-Gan, Lubor Kollar, Dejan Sarka, an
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 10年前关闭。 Improve this
对于大型稀疏迭代(共轭梯度、MINRES、GMRES 等)线性代数系统求解,有哪些更好的库?我经常编写自己的程序,但我很想知道人们更喜欢哪种“现成的”软件包。我听说过 PETSc、TAUCS、IML+
换句话说,是否真的:r1 ⋈ (r2 - r3) = r1 ⋈ r2 - r1 ⋈ r3 其中 r1 r2 和 r3 是关系 如果不是,示例是什么? 最佳答案 是的。 取一个元组 t,具有 JOIN
我不知道如何解决关系代数问题。 Deposit (Branch, Acc-No, Cust-Name, Balance) Loan (Branch, Loan-No, Cust-Name, Balan
密集线性代数在现实世界中的常见应用是什么? 使用线性代数作为人机之间的通用语言,可以轻松描述和高效计算许多问题。尽管这些系统通常需要稀疏矩阵的解,而不是稠密矩阵。违反此规则的常见应用有哪些? 我很好奇
我如何找到 广义特征值、向量 使用 Eigen3 图书馆? 在 Octave ,matlab,特征值函数的形式是:[V, lambda] = eig (A, B) . 我只能找到 this 类(cla
考虑一个关系 Human(name, age, height, weight) .更新属性,例如整个关系的年龄,我可以写Human <- π name,age*2,height,weight (Hum
我在 n 个变量中有 k 个线性不等式 (0 < k < n)。我并不特别关心解决方案集是什么,我只想测试它是否为空 - 即对我的 n 个变量的任何赋值是否满足系统。有人知道解决这个问题的方法吗? 谢
SQL中有一个DISTINCT运算符。但是,我有一个作业,需要从表中获取一些不同的值,并且我只能使用关系代数。有办法吗? 最佳答案 关系运算符总是返回不同的元组,因此永远不需要 DISTINCT。 R
我是关系代数的初学者,我无法完全理解笛卡尔积的工作原理。 我想知道当我的两个表具有共同属性时笛卡尔积会发生什么。当两个表没有任何共同属性时,我可以毫无疑问地理解。 例如,我试图理解我自己制作的示例。
在求两个平面相交的直线时,需要计算两个平面法线的叉积。这个叉积只是取矩阵的行列式: i j k x1 y1 z1 x2 y2 z2 其中(x,y,z)是每个平面的法向量。结果是平行于交线的向量。从
似乎有许多有用的矩阵数学应用程序,其中给定矩阵中的并非所有条目都共享相同的单位。我想研究可以跟踪这些单位的类型系统,并确保我们不会犯错误(类似于已经对标量算术进行维检查的许多库和语言)。我将举一个我正
当 A 是对称半正定时,我正在研究共轭梯度来求解 Ax=b。 当 A 是对称半正定矩阵时,(A+λ I) 是否总是正定矩阵?既然(A+λ I) 是对称正定的,那么我们可以用(A+λ I) 代替CG 中
有人可以向我解释这里发生了什么以及如何解决这个问题吗? 假设关系 R(A,B) 有元组: A B1 23 45 6 并且关系 S(B,C,D) 有元组: B C D2 4 64 6 84 7 9 计算
我是一名优秀的程序员,十分优秀!