用C++给出线性插值代码
时间: 2024-09-24 21:08:24 浏览: 32
math_chazhi.rar_c++库 插值函数_分段线性插值_统计 分段
线性插值在C++中可以使用双精度浮点数数组和条件运算符来实现。假设我们有一个二维线性插值的例子,其中`xValues`存储了横坐标值,`yValues`存储了相应的纵坐标值,而`x`是我们想要查询的新点的横坐标。以下是一个简单的线性插值函数示例:
```cpp
#include <iostream>
#include <vector>
// 二分查找函数,找到x在xValues中的索引
size_t binarySearch(const std::vector<double>& xValues, double x) {
size_t left = 0;
size_t right = xValues.size() - 1;
while (left <= right) {
size_t mid = left + (right - left) / 2;
if (xValues[mid] == x)
return mid;
else if (xValues[mid] < x)
left = mid + 1;
else
right = mid - 1;
}
// 如果x大于所有的xValues,则返回最后一个索引
return left;
}
// 线性插值函数
double linearInterpolate(const std::vector<double>& xValues, const std::vector<double>& yValues, double x) {
size_t index = binarySearch(xValues, x);
if (index < xValues.size()) { // 如果x在范围内
double y1 = yValues[index];
double y2 = yValues[index > 0 ? index - 1 : xValues.size() - 1]; // 上下两个点
double t = (x - xValues[index]) / (xValues[index] - xValues[index > 0 ? index - 1 : xValues.size() - 1]);
return y1 + t * (y2 - y1);
} else { // 如果x超出范围,返回边界的值
return x < xValues[0] ? yValues[0] : yValues[xValues.size() - 1];
}
}
int main() {
std::vector<double> xValues = {0, 1, 2, 3};
std::vector<double> yValues = {10, 20, 30, 40};
double x = 2.5; // 要插值的点
double interpolatedValue = linearInterpolate(xValues, yValues, x);
std::cout << "Linear interpolation at point " << x << ": " << interpolatedValue << std::endl;
return 0;
}
```
阅读全文