- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一个用于在整个实数线上求积的库,即 (-inf,inf),然后我找到了 boost(版本 1.70.0)。我想使用的函数是 boost::math::quadrature:sinh_sinh。为了测试它,我从文档中复制了示例代码:
并想出了这段代码:
#include <iostream>
#include <boost/math/quadrature/sinh_sinh.hpp>
using namespace boost::math::quadrature;
int main()
{
sinh_sinh<double> integrator;
auto f = [](double x) { return exp(-x*x); };
double error;
double L1;
double Q = integrator.integrate(f, &error, &L1);
std::cout << Q << "\t" << error << "\t" << L1 << std::endl;
int i = 0;
std::cin >> i; // Just to make sure the console does not close automatically
}
不幸的是,这不会编译,因为在文档中,“集成”的第二个参数不是指向实数的指针,而是一个普通的实数。所以我不得不改变这一行:
double Q = integrator.integrate(f, &error, &L1);
进入这个:
double Q = integrator.integrate(f , boost::math::tools::root_epsilon<double>() , &error, &L1);
这编译并给出了良好的结果。但是我很好奇我是否可以写
double Q = integrator.integrate(f);
因为除了第一个参数之外的所有参数都有默认值(因此对于我对 c++ 的理解来说是可选的)。不幸的是,这不会用 Visual-Studio-2013 编译。错误是:
错误 C2783:“T boost::math::tools::root_epsilon(void)”:模板参数用于“T” konnte nicht hergeleitet werden。 (英文:它无法导出“T”的模板参数)
出现在pathTo\boost_1_70_0\boost\math\quadrature\sinh_sinh.hpp的第33行
因为我不确定这个错误是否只与 Visual-Studio 有关,所以想问问大家。
现在我想在我感兴趣的函数上使用工作代码,它是:
auto f = [](double x) {return pow(abs(x), 3) / cosh(x); };
这个函数看起来像这样:
https://www.wolframalpha.com/input/?i=plot+abs(x)%5E3%2Fcosh(x)
求积的结果应该是大约。 23.7:
https://www.wolframalpha.com/input/?i=integrate+abs(x)%5E3%2Fcosh(x)+from+-+inf+to+inf
此程序使用此函数编译但崩溃,即我从 Windows 收到“程序已停止工作”消息。当我在 Debug模式下编译并运行它时,我收到以下错误消息:
所以我的问题基本上是为什么 boost::math::quadrature::sinh_sinh 不能集成这个函数。它在正负无穷大时衰减为零,并且没有奇点。
是否有可能因为我使用的是 Visual-Studio 而发生所有这些错误?
最佳答案
不幸的是,Visual Studio 对你不好。在你的第二个例子中,我得到了更容易理解的错误信息:
terminate called after throwing an instance of 'boost::wrapexcept<boost::math::evaluation_error>'
what(): Error in function boost::math::quadrature::sinh_sinh<double>::integrate: The sinh_sinh quadrature evaluated your function at a singular point, leading to the value nan.
sinh_sinh quadrature cannot handle singularities in the domain.
If you are sure your function has no singularities, please submit a bug against boost.math
我添加了一些诊断代码来提供帮助:
auto f = [](double x) {
double y = pow(abs(x), 3) / cosh(x);
if (!std::isfinite(y)) {
std::cout << "f(" << x << ") = " << y << "\n";
}
return y;
};
我得到:
f(1.79769e+308) = nan
f(-1.79769e+308) = nan
f(2.01977e+137) = nan
f(-2.01977e+137) = nan
f(7.35294e+106) = nan
f(-7.35294e+106) = nan
大多数人都非常惊讶地发现 sinh-sinh 正交在如此巨大的争论中评估他们的功能。它还迫使他们考虑通常不需要考虑的事情,即:
IEEE 算法不能取限制。
例如,您可能知道 $x\to\infty$、$x^2/(1+x^4)\to 0$。但是在IEEE浮点运算中,对于足够大的$x$,分子和分母都溢出了,怎么办?唯一明智的解决方案是将 inf/inf 设为 nan。
在你的例子中,你知道 cosh(x)
比 pow(|x|, 3)
增长得更快,但 IEEE 不知道't。所以你需要通过 $x->\infty$ 显式地告诉函数关于限制行为:
#include <iostream>
#include <cmath>
#include <boost/math/quadrature/sinh_sinh.hpp>
using namespace boost::math::quadrature;
int main()
{
sinh_sinh<double> integrator;
auto f = [](double x) {
double numerator = pow(abs(x), 3);
if (!std::isfinite(numerator)) {
return double(0);
}
return numerator / cosh(x);
};
double error;
double L1;
double tolerance = std::sqrt(std::numeric_limits<double>::epsilon());
double Q = integrator.integrate(f, tolerance, &error, &L1);
std::cout << Q << "\t" << error << "\t" << L1 << std::endl;
}
最后一条评论:您的被积函数是偶数,因此您可以对 [0, inf]
使用 exp_sinh
求积并将结果加倍。
关于c++ - boost::math:quadrature::sinh_sinh 中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56415960/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!