C++ Algorithm to Compute the One-Dimensional (Linear) Interpolat
- 时间:2020-09-27 14:36:16
- 分类:网络文摘
- 阅读:176 次
Consider the time series of measurements m = [40.0, 41.0, 40.0, 45.0] and time points t1 = [0.0, 1.1, 1.9, 3.0] respectively and another sequence of time points t2 = [0.4, 0.7, 1.8, 2.9, 3.3].
Write a function to, where possible, return the one-dimensional interpolated values of m at t2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | double interpolated(double targetValue, double x1, double x2, double y1, double y2) { auto x = x2 - x1; return (targetValue - x1) / x * y1 + (x2 - targetValue) / x * y2; } // assume m and t1 is sorted in non-descending order vector<double> linearPolated(const vector<double> &t1, const vector<double> &m, const vector<double> &t2) { auto sz_t1 = t1.size(); auto sz_m = m.size(); // input sizes of t1 and m should be equal assert(sz_t1 == sz_m); auto sz_t2 = t2.size(); vector<double> r; r.reserve(sz_t2); for (const auto &n: t2) { int j = 0; for (int i = 0; i < sz_t1 - 1; ++ i) { if (n >= t1[i] && n <= t1[i + 1]) { j = i; break; } } // TODO: check how interpolation actually works. auto nv = interpolated(n, t1[j], t1[j + 1], m[j], m[j + 1]); r.push_back(nv); } return r; } |
double interpolated(double targetValue, double x1, double x2, double y1, double y2) {
auto x = x2 - x1;
return (targetValue - x1) / x * y1 + (x2 - targetValue) / x * y2;
}
// assume m and t1 is sorted in non-descending order
vector<double> linearPolated(const vector<double> &t1, const vector<double> &m, const vector<double> &t2) {
auto sz_t1 = t1.size();
auto sz_m = m.size();
// input sizes of t1 and m should be equal
assert(sz_t1 == sz_m);
auto sz_t2 = t2.size();
vector<double> r;
r.reserve(sz_t2);
for (const auto &n: t2) {
int j = 0;
for (int i = 0; i < sz_t1 - 1; ++ i) {
if (n >= t1[i] && n <= t1[i + 1]) {
j = i;
break;
}
}
// TODO: check how interpolation actually works.
auto nv = interpolated(n, t1[j], t1[j + 1], m[j], m[j + 1]);
r.push_back(nv);
}
return r;
}Note: above C++ code may not have been tested.
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:3 Chrome Blogging Extensions to Watch Out for 2015 Cloud-Based Tools to Stake Your Business Blog On How To Protect Your Brand On Social Media Ways to Find Out if a Ghost Blogger is Right for You Why You SHOULDN’T Use WordPress as Your Blogging Platform How to Maximize Your Freelance Profits Using the Power of Emotio What to Expect from Hiring Outsourced Content Writers Call for Minimalism: How the New Wave of Blogging Platforms Give 3 Easy Ways to Improve Writing Skills Explaining The Perfect Website Design to Non-Designers
- 评论列表
-
- 添加评论