- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想将 Eigen::Spline
的样条插值包含到一个更大的公式中,并想在 Eigen::AutoDiff
的帮助下确定该公式的导数。
我尝试了以下代码:
#include <iostream>
#include <Eigen/Eigen>
#include <unsupported/Eigen/AutoDiff>
#include <unsupported/Eigen/Splines>
double array[] = {
1.0, 2.0,
3.0, 4.0,
5.0, 1.0,
6.0, 2.0
};
constexpr size_t nCols=2;
constexpr size_t rowSize=sizeof(array)/sizeof(double)/nCols;
constexpr size_t derOrder=1;
typedef Eigen::Map<Eigen::Matrix<double,1,rowSize>,Eigen::Unaligned,Eigen::InnerStride<nCols> > Map;
typedef const Eigen::Spline<double,nCols-1> Spline;
constexpr size_t interpolOrder=3;
constexpr double& xStop=array[nCols*(rowSize-1)];
Spline spline=Eigen::SplineFitting<Spline>::Interpolate(Map(array+1),interpolOrder,Map(static_cast<double*>(array))/xStop);
typedef Eigen::AutoDiffScalar<Eigen::Matrix<double,1,2> > DerType;
DerType f(const DerType& x){
DerType ret;
auto y = spline.derivatives<1>(x.value()/xStop);
//*** Compilation is okay if previous line is substituted with:
// Eigen::Array<double,1,2> y; y << 1.0, 2.0;
ret.value() = y(0,0);
ret.derivatives() = x.derivatives()*y(0,0);
return ret;
}
int main() {
DerType x(1.0,DerType::DerType(1.0,1.0));
auto y = f(x);
std::cout << "\nValue=" << y.value() << "\nDer=" << y.derivatives() << '\n';
return 0;
}
/*
Local Variables:
compile-command: "g++ -g -std=c++11 -I/usr/local/include/eigen3 eigenInterpolAD.cc -o a.exe && (echo \"Running\"; ./a.exe);"
End:
*/
遗憾的是,代码编译报错如下:
g++ -g -std=c++11 -I/usr/local/include/eigen3 eigenInterpolAD.cc -o a.exe && (echo "Running"; ./a.exe);
In file included from /usr/local/include/eigen3/Eigen/Core:254:0,
from /usr/local/include/eigen3/Eigen/Dense:1,
from /usr/local/include/eigen3/Eigen/Eigen:1,
from eigenInterpolAD.cc:5:
/usr/local/include/eigen3/Eigen/src/Core/PlainObjectBase.h: In instantiation of ‘static void Eigen::PlainObjectBase<Derived>::_check_template_params() [with Derived = Eigen::Array<double, 1, -1, 0, 1, 2>]’:
/usr/local/include/eigen3/Eigen/src/Core/Array.h:195:36: required from ‘Eigen::Array<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>::Array(const Eigen::Array<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>&) [with _Scalar = double; int _Rows = 1; int _Cols = -1; int _Options = 0; int _MaxRows = 1; int _MaxCols = 2]’
eigenInterpolAD.cc:33:48: required from here
/usr/local/include/eigen3/Eigen/src/Core/util/StaticAssert.h:32:40: error: static assertion failed: INVALID_MATRIX_TEMPLATE_PARAMETERS
#define EIGEN_STATIC_ASSERT(X,MSG) static_assert(X,#MSG);
^
/usr/local/include/eigen3/Eigen/src/Core/PlainObjectBase.h:657:7: note: in expansion of macro ‘EIGEN_STATIC_ASSERT’
EIGEN_STATIC_ASSERT((EIGEN_IMPLIES(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, (Options&RowMajor)==RowMajor)
^
如何避免错误?在此先感谢您提供任何有用的提示。
Eigen 版本为 3.2.1。对于 Eigen 3.1 和 3.0 版,编译也失败。
编译器版本为:
gcc 版本 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu9)
最佳答案
作为用户 Anycorn指出“老问题”部分的源代码在 Bitbucket 上使用最新版本的 Eigen 编译和运行:
$hg showconfig
bundle.mainreporoot=/usr/local/eigen
paths.default=https://bitbucket.org/eigen/eigen
/usr/local/eigen
$hg identify
fabd880592ac tip
/usr/local/eigen
我用下面的代码测试了这个原理:
/**
Spline interpolation with AD.
*/
#include <iostream>
#include <fstream>
#include <Eigen/Eigen>
#include <unsupported/Eigen/AutoDiff>
#include <unsupported/Eigen/Splines>
constexpr const double array[] = {
1.0, 2.0,
3.0, 4.0,
5.0, 1.0,
6.0, 2.0
};
constexpr size_t nCols=2;
constexpr size_t rowSize=sizeof(array)/sizeof(double)/nCols;
constexpr size_t derOrder=1;
typedef Eigen::Map<Eigen::Matrix<double,1,rowSize>,Eigen::Unaligned,Eigen::InnerStride<nCols> > Map;
typedef Eigen::Spline<double,nCols-1> Spline;
constexpr size_t interpolOrder=3;
constexpr double xStart=array[0];
constexpr double xStop=array[nCols*(rowSize-1)];
constexpr double xDelta=xStop-xStart;
const Spline spline=Eigen::SplineFitting<Spline>::Interpolate(Map(
const_cast<double*>(array)+1),
interpolOrder,
(Map(const_cast<double*>(array)).array()-xStart)/xDelta);
typedef Eigen::AutoDiffScalar<Eigen::Matrix<double,1,2> > DerType;
DerType f(const DerType& x){
DerType ret;
auto y = spline.derivatives<1>((x.value()-xStart)/xDelta);
ret.value() = y(0,0);
ret.derivatives() = x.derivatives()*y(0,1)/xDelta;
return ret;
}
int main() {
std::ofstream of("/temp/test.dat");
constexpr size_t n=101;
const double xStart=0.0;
const double xStop=6.0;
const double dx=(xStop-xStart)/(n-1);
double x=xStart;
for(size_t i=0; i!=n; i++, x+=dx) {
DerType xAD(x,DerType::DerType(1.0,1.0));
auto yAD = f(xAD);
of << x << ' ' << yAD.value() << ' ' << yAD.derivatives()[0] << '\n';
}
of.close();
return 0;
}
/*
Local Variables:
compile-command: "g++ -g -std=c++11 -I/usr/local/include/eigen3 eigenInterpolAD.cc -o a.exe && (echo \"Running\"; ./a.exe);"
End:
*/
下面生成的数据图表明代码现在可以在 hg 版本的 Eigen 上正常工作。红色曲线是插值样条曲线,绿色曲线是它的导数。
关于c++ - Eigen::AutoDiff 的 Eigen::Spline 的错误模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22851258/
我有几个数据点似乎适合于通过它们拟合样条曲线。当我这样做时,我得到了一个非常坎bump的拟合,例如过度拟合,这不是我所理解的平滑。 是否有特殊的选项/参数来恢复像here这样的非常平滑的样条曲线的功能
在生产环境中运行 Angular 6 时出现此错误。 91%额外的 Assets 处理脚本-webpack-plugin✖「wdm」: Error: ENOENT: no such file or d
张力与三次样条插值有何关系?我指的是this article用于三次样条插值。第一个结点的张力系数 t=0,最后一个结点的张力系数 t=1。但是我们可以在哪里替换三次样条中的其他张力值,例如 0.1、
我是 R 的新手,我正在尝试将 smooth.spline() 应用于大型数据帧。我查看了相关线程(“将 n 个函数的列表应用于数据帧的每一行”,“如何应用样条基矩阵”,...)。这是我的数据框以及我
我知道平滑参数(lambda)对于拟合平滑样条曲线非常重要,但是我在这里没有看到有关如何选择合理的lambda(spar =?)的任何文章,有人告诉我spar通常在0到1的范围内。当使用smooth.
我需要一个插值函数来插值一个点: var times = new List(); var offsets = new List(); .. .. ..//I fill times and offset
我尝试了几种不同的开箱即用选项来平滑我的数据中的一个步骤,但还没有完全找到我所追求的。在下面粘贴一个小的可复制示例。正如下面的屏幕截图中突出显示的,是否有一个 R 函数可以平滑步骤,类似于 smoot
我使用smooth.spline来估计我的数据的三次样条。但是当我使用方程计算 90% 逐点置信区间时,结果似乎有点偏差。有人可以告诉我我是否做错了吗?我只是想知道是否有一个函数可以自动计算与 smo
我想对一些数据进行平滑样条拟合,我注意到内部计算的 LOOCV 误差似乎取决于数据是否无序。具体来说,我只在订购数据时得到预期的结果。 我不明白为什么会出现这种情况?有帮助吗? set.seed(0)
我正在尝试在 Windows 中安装 Apache Spline。我的 Spark 版本是 2.4.0Scala 版本为 2.12.0我按照这里提到的步骤 https://absaoss.github
我正在准备一些代码来用样条插入一系列点。 有many kinds样条:二次,三次,许多边界条件...... 到目前为止,我已经尝试了最流行的:三次样条,边界条件: 自然:二阶导数在第一点和最后点为零。
下图中,Matlab中使用spap2函数来平滑噪声数据。结果非常好。 Eigen 库支持此功能 Splines 。我正在寻找 Eigen 中的示例以获得类似的结果。对于 Matlab,我使用了 spa
我想在 R 中平滑非常长、嘈杂的数据。但我发现对于高度周期性的数据,开箱即用的 smooth.spline() 很快就会崩溃,平滑后的数据开始出现振铃现象。 考虑一个余弦时间序列(有或没有噪声) t
我对它们之间的关系有点困惑。在我的课上,我的教授询问如何使用自动计算的切线将 C1 连续分段 Hermite 曲线拟合到 x 个点。有人可以解释这是如何工作的吗? 最佳答案 埃尔米特样条是 的一种方法
我找到了 2012 年 Android API 的 Spline 实现: https://android.googlesource.com/platform/frameworks/base/+/mas
我有一个效果很好的 highcharts 样条图。我改变了一些 ajax 调用,现在它不会绘制连接前 30 个左右点的线。它只是绘制点一段时间,然后线条就出现了。我更关心线条而不是点。 有谁知道为什么
我想在我的屏幕上生成一个随机样条。这是我目前所拥有的: public class CurvedPath { Random rn; CatmullRomSpline curve; float[] xPt
我有严格增加的数据,并希望拟合一个单调增加的平滑样条曲线以及 smooth.spline()由于此功能的易用性,请尽可能使用该功能。 例如,我的数据可以通过示例有效地重现: testx <- 1:10
有没有办法计算在 R 中具有平滑样条曲线(或类似曲线)的特定点的曲率? 该曲线是根据一组 x,y 点计算的。 先感谢您。 最佳答案 如果您知道有一个 predict(),这实际上很容易。 smooth
我有一个月度图表(在 highcharts 中制作),其中有两个 SPLINE 系列。我想为图表中的系列添加随机文本(基于系列的随机位置),我怎样才能实现这一点。 我希望它看起来像这样。 最佳答案 您
我是一名优秀的程序员,十分优秀!