您的位置:首页 > 其它

【数值分析】插值算法-拉格朗日插值法

2017-05-05 21:16 826 查看

开篇明志

之前学过《数值分析》这门课,现对部分内容做代码上的实现。今天讲拉格朗日插值法,那么什么是拉格朗日插值法呢?

大概用大白话总结一下:利用函数f (x)在某区间中插入若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值,这种方法称为插值法。

目的: 便就是估算出其他点上的函数值。

概念



定理

满足插值条件的、次数不超过n的多项式是存在而且是唯一的。

一般形式运用方法





以上截图解释摘自百度百科

进入百度百科搜【拉格朗日插值法】即可找到。

实现代码

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
;
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
;
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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: