在Java中实现拉格朗日插值法

拉格朗日插值法的定义(引自维基百科)

 

对某个多项式函数,已知有给定的k + 1个取值点:

 (x0,y0),(x1,y1),(x2,y2),⋯⋯,(xk,yk)

其中xj对应着自变量的位置,而yj对应着函数在这个位置的取值。

假设任意两个不同的xj都互不相同,那么应用拉格朗日插值公式所得到的拉格朗日插值多项式为:

 

具体的

import java.util.Scanner;


public class Lagrange {
    private static double[] Lag(double x[],double y[],double x0[]){
        int m=x.length;
        int n=x0.length;
        double y0[]=new double[n];
        for(int ia=0;ia<n;ia++) {
            double j=0;
            for(int ib=0;ib<m;ib++) {
                double k=1;
                for(int ic=0;ic<m;ic++) {
                    if(ib!=ic){
                        k=k*(x0[ia]-x[ic])/(x[ib]-x[ic]);
                    }
                }
                k=k*y[ib];
                j=j+k;
            }
            y0[ia]=j;
        }
        return y0;
    }
    public static void main(String[] args) {
        System.out.println("请输入给定的插值点数量:");
        Scanner input=new Scanner(System.in);
        int m=input.nextInt();
        System.out.println("请输入需求解的插值点数量:");
        int n=input.nextInt();
        double x[]=new double[m];
        double y[]=new double[m];
        double x0[]=new double[n];
        System.out.println("依次输入给定的插值点:");
        for(int i=0;i<m;i++){
            x[i]=input.nextDouble();
        }
        System.out.println("依次输入给定的插值点对应的函数值:");
        for(int i=0;i<m;i++){
            y[i]=input.nextDouble();
        }
        System.out.println("依次输入需求解的插值点");
        for(int i=0;i<n;i++){
            x0[i]=input.nextDouble();
        }
        double y0[]=Lag(x, y, x0);
        System.out.println("运用拉格朗日插值法求解得:");
        for(int i=0;i<n;i++){
            System.out.println(y0[i]+" ");
        }
        System.out.println();
        input.close();
    }
}

拉格朗日插值法的缺点在于插值点较多时计算出的结果不稳定,可以以定义一个重心权的方式进行改进,这种经过改良的插值法一般称作重心拉格朗日插值法。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值