C++ Algorithm to Compute the One-Dimensional (Linear) Interpolat
- 时间:2020-09-27 14:36:16
- 分类:网络文摘
- 阅读:100 次
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) —
推荐阅读:一道求比例尺的问题 欧拉的故事 分羊的故事 千里马的故事 监狱里的数学研究 比和比例的历史 平均数、中位数和众数的区别 黄金分割的历史 蝴蝶效应 一道有关比的行程问题
- 评论列表
-
- 添加评论