C++实现插值

1 基于C++实现线性插值

代码如下。

#include <iostream>
#include <vector>

class LinearInterpolation {
    public:
        void SetValues(const std::vector<double>& v1, std::vector<double>& v2);
        double Interpolation(double x) const;    
    private:
        std::vector<double> x_values;
        std::vector<double> y_values;
};

void LinearInterpolation::SetValues(const std::vector<double>& v1, std::vector<double>& v2) {
    x_values = v1;
    y_values = v2;
}

double LinearInterpolation::Interpolation(double x) const {
    double y, k;
    int i = 0, n = x_values.size(), m = y_values.size();
    if (n != m) {
        std::cout << "Error: invalid number of points" << std::endl;
        return 0.0;
    }
    while (i < n && x > x_values[i]) {
        i++;
    }
    if (i == 0) {
        y = y_values[0];
    } else if (i == n) {
        y = y_values[n - 1];
    } else {
        k = (y_values[i] - y_values[i - 1]) / (x_values[i] - x_values[i - 1]);
        y = y_values[i - 1] + k * (x - x_values[i - 1]);
    }
    return y;
}

int main() {
    LinearInterpolation linear_interpolation;
    std::vector<double> x_data = {1.0, 3.0, 5.0, 7.0, 9.0};
    std::vector<double> y_data = {2.0, 4.0, 6.0, 8.0, 10.0};
    linear_interpolation.SetValues(x_data, y_data);
    double x = 2.0;
    double y = linear_interpolation.Interpolation(x);
    std::cout << "result: " << y << std::endl;
    return 0;
}

2 基于C++实现牛顿插值

代码如下。

#include <iostream>
#include <vector>

class NewtonInterpolation {
    public:
        void SetValues(const std::vector<double>& v1, const std::vector<d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值