C++ Algorithm to Compute the One-Dimensional (Linear) Interpolat
- 时间:2020-09-27 14:36:16
- 分类:网络文摘
- 阅读:156 次
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) —
推荐阅读:Don’t Feed The Trolls: How to Stop Haters from Infiltrating Your 50 Blogging Tips From the Experts Algorithm to Compute the Length of the Longest Palindrome String How to Find Common Characters in an array of Strings? How to Turn a Binary Search Tree into a Increasing Order Search How to Free TCP/UDP Port on Windows Using netstat and taskkill? The Review of cozmo robot from Anki Scaling Digital Marketing Agencies Through White Label Solutions How to Solve the Lemonade Change Problem by Simulation Algorithm How to Sum within A Range in a Binary Search Tree?
- 评论列表
-
- 添加评论