拉格朗日插值法求解函数值
程序员文章站
2022-06-07 11:45:58
...
import java.util.Scanner;
public class Lagrange_polynomial {
static int num;//记录y&x的对数
final static int MAXN=10;
static double a[][]=new double[MAXN][2];//记录x和y
static double x;//记录要求近似值的x
static double y=0;//用于保存近似值
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("共有几对x和f(x):");
num=sc.nextInt();
System.out.println("依次输入x&f(x):");
for(int i=0;i<num;i++){
a[i][0]=sc.nextDouble();
a[i][1]=sc.nextDouble();
}
System.out.println("所求值的x:");
x=sc.nextDouble();
System.out.print("L(x)=");
for(int i=0;i<num;i++){//用于输出L(x)
print(i);
if(i!=(num-1)){
System.out.print("+");
}
}
for(int i=0;i<num;i++){
deal(i);
}
System.out.println("f("+x+")的近似值是:"+y);
}
static void print(int ii){//用于输出L(x)
System.out.print(a[ii][1]+"*");
System.out.print("(");
for(int i=0;i<num;i++){
if(i!=ii){
if(i!=0&&ii!=0){
System.out.print("*");
}
System.out.print("(");
System.out.print("x-"+a[i][0]);
System.out.print(")");
if(i!=0){
System.out.print("/");
}
System.out.print("(");
System.out.print(a[ii][0]+"-"+a[i][0]);
System.out.print(")");
}
}
System.out.println(")");
}
static void deal(int ii){//用于计算近似值
double temp=1;
for(int i=0;i<num;i++){
if(i!=ii){
temp*=(x-a[i][0]);
temp/=(a[ii][0]-a[i][0]);
}
}
y+=a[ii][1]*temp;
}
}
//2 0.5
// 2.5 0.4
// 4 0.25
上一篇: 浙大版《C语言程序设计(第3版)》题目集 习题10-1 判断满足条件的三位数 (15分)
下一篇: PAT_甲级_1096 Consecutive Factors (20point(s)) (C++)【分解因子/优美暴力】
推荐阅读
-
BZOJ3453: tyvj 1858 XLkxc(拉格朗日插值)
-
BZOJ2655: calc(dp 拉格朗日插值)
-
拉格朗日插值学习小结
-
python数据分析与挖掘实战---拉格朗日插值法
-
BZOJ4559: [JLoi2016]成绩比较(dp 拉格朗日插值)
-
洛谷P4593 [TJOI2018]教科书般的*(拉格朗日插值)
-
计算方法实验(一):拉格朗日插值多项式
-
插值多项式的拉格朗日形式
-
插值与拟合 (一) : 拉格朗日多项式插值 、Newton插值 、分段线性插值、Hermite插值 、样条插值、 B 样条函数插值、二维插值
-
lagrange插值法:求拉格朗日插值多项式matlab实现(内附代码及例题)