码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-04-02 00:46:22      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:ati   ima   ext   div   nbsp   font   port   ide   实现   

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

 

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

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

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

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

技术分享

其中每个技术分享拉格朗日基本多项式(或称插值基函数),其表达式为:

技术分享

 

 

具体的Java代码:

 

技术分享
 1 import java.util.Scanner;
 2 
 3 
 4 public class Lagrange {
 5     private static double[] Lag(double x[],double y[],double x0[]){
 6         int m=x.length;
 7         int n=x0.length;
 8         double y0[]=new double[n];
 9         for(int ia=0;ia<n;ia++) {
10             double j=0;
11             for(int ib=0;ib<m;ib++) {
12                 double k=1;
13                 for(int ic=0;ic<m;ic++) {
14                     if(ib!=ic){
15                         k=k*(x0[ia]-x[ic])/(x[ib]-x[ic]);
16                     }
17                 }
18                 k=k*y[ib];
19                 j=j+k;
20             }
21             y0[ia]=j;
22         }
23         return y0;
24     }
25     public static void main(String[] args) {
26         System.out.println("请输入给定的插值点数量:");
27         Scanner input=new Scanner(System.in);
28         int m=input.nextInt();
29         System.out.println("请输入需求解的插值点数量:");
30         int n=input.nextInt();
31         double x[]=new double[m];
32         double y[]=new double[m];
33         double x0[]=new double[n];
34         System.out.println("依次输入给定的插值点:");
35         for(int i=0;i<m;i++){
36             x[i]=input.nextDouble();
37         }
38         System.out.println("依次输入给定的插值点对应的函数值:");
39         for(int i=0;i<m;i++){
40             y[i]=input.nextDouble();
41         }
42         System.out.println("依次输入需求解的插值点");
43         for(int i=0;i<n;i++){
44             x0[i]=input.nextDouble();
45         }
46         double y0[]=Lag(x, y, x0);
47         System.out.println("运用拉格朗日插值法求解得:");
48         for(int i=0;i<n;i++){
49             System.out.println(y0[i]+" ");
50         }
51         System.out.println();
52         input.close();
53     }
54 }
代码

 

 

 

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

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

标签:ati   ima   ext   div   nbsp   font   port   ide   实现   

原文地址:http://www.cnblogs.com/PabloZeal/p/6618148.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!