Java用拉格朗日插值公式计算

img


我想问问如何用已知y求所对应的x的值

import java.text.DecimalFormat;
public class Lagrange1
{
    public static void main(String[] args)
    {
        double L2;
        double x0=1.45,x1=1.36,x2=1.14;
        double y0=3.14,y1=4.15,y2=5.65;
        
        double x=1.4;
        
        L2=(x-x1)*(x-x2)/((x0-x1)*(x0-x2))*y0+
            (x-x0)*(x-x2)/((x1-x0)*(x1-x2))*y1+
               (x-x0)*(x-x1)/((x2-x0)*(x2-x1))*y2;
               
        DecimalFormat fmt=new DecimalFormat("0.######");       
        System.out.println("x=1.4对应近似值为:"+fmt.format(L2));
    }
}


该回答引用chatgpt:
要用拉格朗日插值公式求所对应的x的值,需要对公式进行变形,将y看作已知量,x看作未知量。具体来说,对于已知y值,我们需要解方程:

L(x) = y

其中,L(x)是拉格朗日插值多项式,由已知的数据点计算得出。

在实际计算中,由于L(x)是一个高阶多项式,解这个方程比较困难。一种可行的方法是,通过二分法或牛顿迭代等方法,不断逼近解。具体实现需要根据具体情况进行选择。

下面是一个通过二分法求解的示例代码,可以根据需要进行修改:

import java.text.DecimalFormat;

public class Lagrange2 {
    public static void main(String[] args) {
        double x0 = 1.45, x1 = 1.36, x2 = 1.14;
        double y0 = 3.14, y1 = 4.15, y2 = 5.65;

        double y = 4.5; // 已知的y值
        double eps = 1e-6; // 精度要求
        double l = Math.min(Math.min(x0, x1), x2); // x的下界
        double r = Math.max(Math.max(x0, x1), x2); // x的上界
        double mid = 0.0; // 二分中点
        double L = 0.0; // L(mid)的值
        while (r - l > eps) {
            mid = (l + r) / 2;
            L = (mid - x1) * (mid - x2) / ((x0 - x1) * (x0 - x2)) * y0
                    + (mid - x0) * (mid - x2) / ((x1 - x0) * (x1 - x2)) * y1
                    + (mid - x0) * (mid - x1) / ((x2 - x0) * (x2 - x1)) * y2;
            if (L > y) {
                r = mid;
            } else {
                l = mid;
            }
        }
        DecimalFormat fmt = new DecimalFormat("0.######");
        System.out.println("y=" + y + " 对应的x值为:" + fmt.format(mid));
    }
}