c++ - 仅由表定义的评估函数,C++

标签 c++ math interpolation

我想用 C++ 计算一个函数,但我的值只在表中定义,如下所示:

entry #  en(eV)   Effective Qm - Defined in introduction(1E-16*cm^2)

   1        0     4.96
   2    0.001     4.98
   3    0.002     5.02
   4    0.003     5.07
   5    0.005     5.12
   6    0.007     5.15
   7   0.0085     5.18

我想要一个函数,它返回每种能量的有效 Qm。理想的内插值,但现在我很乐意四舍五入到已知 Qm 的最接近的能量并给出结果。我不知道应该怎么做。我知道这在 Mathematica 中很容易,但其余代码在 C++ 中要快得多。

最佳答案

假设您为数据创建一个结构:

struct energyEntry {
    double energy;
    double Qm;
};

我假设您可以将数据加载到 vector 中。您寻求帮助的第一级方法只是加载数据并找到最接近的条目。您只需跟踪最近的条目并在遍历数据时更新它。最后你会得到最近的元素。

std::vector<energyEntry> entries;
loadEntries(entries); // assuming you can do this

double targetEnergy = 0.0015; // value you want to look up

int best = 0;
for (int x = 1; x < entries.size(); x++)
{
    if (fabs(entries[x].energy-targetEnergy) < fabs(entries[best].energy-targetEnergy))
        best = x;
}

cout << "Qm is " << entries[best].Qm << "\n";

这里有一些注意事项。确保通过引用将 vector 传递给 loadEntries。如果精度很重要,您可能需要进行浮点比较。您可能希望在函数中使用此代码。但是,这会让您入门。

如果您想做更多的事情,您可以进行回归以尝试对数据建模(线性、逻辑或神经网络)。或者,如果你落在两点之间,你可以插值。但这是一个单独的问题。

关于c++ - 仅由表定义的评估函数,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25770924/

相关文章:

math - 图形编程中的矩阵乘法阶 PVM 与 MVP

python - python中数组之间的插值

python - 3D 体积的时间序列插值(MATLAB 或 Python)

c++ - QX11EmbedContainer 和 QProcess 问题

c++ - 是否可以将对象实例移动到 QT 项目中不同代码点的不同线程?

c++ - 为什么在声明 vector 迭代器时使用 typename 关键字?

c++ - Qt 4.6 和 OpenGL : how to capture keyboard presses with three different widgets at once?

python - 在Python中求解固定非均匀网格上的BVP而不进行插值

performance - Common Lisp 中前导小数位为 12 的 2 的第一个幂

MATLAB:使用插值替换缺失值 (NaN)