埃尔米特三次样条插值算法-JAVA版本实现

本文详细介绍了如何使用Java编程语言实现埃尔米特三次样条插值算法,通过三个已知点的坐标推导出插值公式,适用于数据拟合和连续函数的近似计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

埃尔米特三次样条插值算法-JAVA版本实现

package math;

/**
 * 三次样条插值
 *
 * y1=a+bx1+cx1^2
 * y2=a+bx2+cx2^2
 * y3=a+bx3+cx3^2
 *
 * (y1-y2)/(x1-x2)=b+c(x1^2-x2^2)/(x1-x2)
 * (y2-y3)/(x2-x3)=b+c(x2^2-x3^2)/(x2-x3)
 * (y1-y2)/(x1-x2)-(y2-y3)/(x2-x3)=c((x1^2-x2^2)/(x1-x2)-(x2^2-x3^2)/(x2-x3))
 *
 * c=[(y1-y2)/(x1-x2)-(y2-y3)/(x2-x3)]/((x1^2-x2^2)/(x1-x2)-(x2^2-x3^2)/(x2-x3))
 * b=-c(x2^2-x3^2)/(x2-x3)+(y2-y3)/(x2-x3)
 * a=y1-bx1-cx1^2
 *
 * @author zrh
 * @date 2022-06-27
 */
public class Fx {

    private double a;
    private double b;
    private double c;

    private double x1, y1;
    private double x2, y2;
    private double x3, y3;

    public Fx(double x1, double y1, double x2, double y2, double x3, double y3){
        this.x1 = x1;
        this.y1 = y1;
        this.x2 = x2;
        this.y2 = y2;
        this.x3 = x3;
        this.y3 = y3;

        getC();
        getB();
        getA();
    }

    public double getY(double x) {
        double y = a + b * x + c * x * x;
        return y;
    }

    private double getC() {
        double aa = (y1-y2)/(x1-x2)-(y2-y3)/(x2-x3);
        double bb = ((x1*x1-x2*x2)/(x1-x2)-(x2*x2-x3*x3)/(x2-x3));
        c = aa/bb;
        return c;
    }

    private double getB() {
        double aa = (-c)*(x2*x2-x3*x3)/(x2-x3);
        double bb = (y2-y3)/(x2-x3);
        b = aa + bb;
        return b;
    }

    private double getA() {
        a = y1-b*x1-c*x1*x1;
        return a;
    }

}

调用方法为:

package math;

/**
 * @author zrh
 * @date 2022-06-16
 */
public class FxTest {
    public static void main(String[] args) {
        Fx fx = new Fx(70.0, 85.0, 74, 90, 81.0, 100.0);
        double y = fx.getY(76);
        System.out.println("x=76, y="+y);
        //x=76, y=92.6948051948052
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值