请帮我用C++实现matlab的线性插值
时间: 2023-10-09 07:10:18 浏览: 51
以下是用 C++ 实现 Matlab 的线性插值的代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
// 线性插值函数:x 为插值点,x_data 为已知数据点横坐标,y_data 为已知数据点纵坐标
double linear_interpolation(double x, const vector<double>& x_data, const vector<double>& y_data) {
int n = x_data.size();
if (x <= x_data[0]) {
return y_data[0];
} else if (x >= x_data[n - 1]) {
return y_data[n - 1];
} else {
int i = 0;
while (x > x_data[i + 1]) {
i++;
}
double y = y_data[i] + (y_data[i + 1] - y_data[i]) / (x_data[i + 1] - x_data[i]) * (x - x_data[i]);
return y;
}
}
int main() {
// 输入已知数据点横坐标和纵坐标
vector<double> x_data = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
vector<double> y_data = {0.0, 0.8, 0.9, 0.1, -0.8, -1.0};
// 输入插值点
double x = 2.5;
// 计算线性插值
double y = linear_interpolation(x, x_data, y_data);
// 输出插值结果
cout << "The linear interpolation result is: " << y << endl;
return 0;
}
```
以上代码中,我们定义了一个线性插值函数 `linear_interpolation`,其实现方法与 Matlab 中的 `interp1` 函数类似。我们首先判断插值点 `x` 是否超出已知数据点的横坐标范围,如果是,则直接返回最靠近插值点的已知数据点的纵坐标;如果不是,则找到最靠近插值点的两个已知数据点,并用线性函数计算插值点的纵坐标。最后,我们在 `main` 函数中输入已知数据点和插值点,计算线性插值,并输出插值结果。