C++ Algorithm to Compute the One-Dimensional (Linear) Interpolat
- 时间:2020-09-27 14:36:16
- 分类:网络文摘
- 阅读:142 次
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) —
推荐阅读:How to Count the Distinct Pairs using HashMap? Blogger Jailed For Pokemon Go Gets Even More Trouble Dead Simple Ways to Keep Your Best Blogging Ideas From Slipping The Fear of Blogging is Real – Here’s How to Overcome It Influential Cybersecurity Blogger Gets Digitally Attacked Building Relationships with Your Influencers Authorities In Vietnam Arrest Top Blogger For One Criticizing Co The Top Health Bloggers You Should Be Following Mashable Blogger: Owning a Samsung Galaxy Note 7 is Safer Than G 5 Ways to Earn Money from Your Website
- 评论列表
-
- 添加评论