gpt4 book ai didi

c++ - 将 boost 间隔扩展到标量乘法

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

我确信这个问题的答案很简单,但我还没有理解 c++ 的要点,如果这很愚蠢或已经得到解答,我深表歉意。

我有 Boost 区间的 Eigen vector ,由

给出
#include <eigen3/Eigen/Dense>
#include <boost/numeric/interval.hpp>

namespace bn = boost::numeric;
namespace bi = bn::interval_lib;

using Interval = bn::interval<
double,
bi::policies<
bi::save_state<bi::rounded_transc_std<double> >,
bi::checking_base<double>
>
>;
using Matrix = Eigen::Matrix<Interval, 3, 3>;
using Vector = Eigen::Matrix<Interval, 3, 1>;

我希望能够将这些 vector 的通常矩阵/vector 乘积与通常的 double vector 相乘。最终我也想要一个内积。但是现在,boost intervals 似乎不支持 interval 和 double 的操作数乘法。我的问题是,我将如何继续重载所述乘法?以下解决方案有效

Interval operator* (double x, const Interval& y)
{
double lower;
double upper;
lower = x*y.lower();
upper = x*y.upper();
if(upper>lower){ return Interval(lower,upper);}
else{ return Interval(upper,lower); }
}

但我担心性能,想听听关于可能更好方法的意见。此外,要定义标量和区间 vector 的乘法,我会选择只循环遍历区间元素并使用上面的区间乘以标量乘法,这似乎不是很有效。有没有更自然、更快、更像 c++ 的方法来做到这一点?我是否必须重载更多运算符才能在具有区间和双项的两个 vector 上使用 std::inner_product 等方法?

提前致谢

最佳答案

您的函数重新定义了库运算符:

Interval operator*(double x, const Interval &y) {
return x * y;
}

Live On Coliru

#include <boost/numeric/interval.hpp>

namespace bi = boost::numeric::interval_lib;

using Interval = boost::numeric::interval<
double, bi::policies<
bi::save_state<bi::rounded_transc_std<double> >, bi::checking_base<double>
> >;

#include <boost/numeric/interval/io.hpp>
#include <iostream>
int main() {
Interval i{1.9, 2.1};
std::cout << (2.0 * i) << "\n";
std::cout << (i * 2.0) << "\n";
}

打印

[3.8,4.2]
[3.8,4.2]

关于c++ - 将 boost 间隔扩展到标量乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48457478/

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