使用java在点处插值函数f的多项式

使用java在点处插值函数f的多项式,java,math,interpolation,Java,Math,Interpolation,我有价值观 x = 0 => y = 0 x = 1 => y = 1 x = 3 => y = 27 x = 4 => y = 64 我想用JAVA创建一个多项式函数来创建函数x^3。程序应该创建函数并显示它,如果我给出任何值,它应该计算插值。我创建了一个函数,它只是使用Aitken生成值,但它不生成函数,而且很难理解如何执行函数。因为我不知道如何在java程序中把X值作为X。我有X=0=>y=0X=1=>y=1X=2=>y=27X=3

我有价值观

x = 0   =>   y = 0
x = 1   =>   y = 1
x = 3   =>   y = 27
x = 4   =>   y = 64

我想用JAVA创建一个多项式函数来创建函数x^3。程序应该创建函数并显示它,如果我给出任何值,它应该计算插值。我创建了一个函数,它只是使用Aitken生成值,但它不生成函数,而且很难理解如何执行函数。因为我不知道如何在java程序中把X值作为X。

我有X=0=>y=0X=1=>y=1X=2=>y=27X=3=>y=64

这是一种列出点的奇怪方式

可惜它们不是y=x^3的一部分。这些是:

(x,y)={(0,0)、(1,1)、(2,8)、(3,27)、(4,64)、(5125)…}

更新:

我想用不同的词来回答你的问题。您的“示例”点集不正确且具有误导性。听起来你真的在说“我有一组任意的点,我想给它们配一个函数。”

如果你知道你需要的函数的形式,问题仅仅是关于计算未知系数。如果你有尽可能多的点作为系数,你可以为他们求解(如果有一个解决方案存在)。如果点多于系数,则可以进行最小二乘拟合

但所有这些都取决于事先知道需要什么功能

要求计算机为您找出最佳形式和系数值是一项艰巨的任务


您当然可以在点之间使用拉格朗日插值,但它仍然不能告诉您“最佳”函数是什么来表示您的点。它采用多项式形式,因此混合其他函数不是该方法的一部分。它可以为sin(x)提供一个非常好的表示,但它不会告诉你正弦函数比多项式近似更容易理解。

假设你有4对(x,y)点。考虑方程a0+a1*x+a2*x^ 2 +a3*x^ 3=y。把4对(x,y)放在一起,你就有了4个变量中的4个线性方程组。使用矩阵解算器或编写自己的矩阵解算器来解(a0…a3)。现在您可以有一个方法插值(双x){返回a0*x+a1*x*x+a2*x^2+a3*x^3;}。希望能有所帮助。

我和你有同样的问题,终于找到了解决办法。 看看ApacheCommonsMathAPI。您可以使用拉格朗日法或牛顿法来计算每个多项式次的系数


您可以下载API的.jar文件和文档。

“我创建了一个函数,它刚刚生成了值……”——这是什么意思?这意味着你有系数吗?“程序应该创建函数并显示它。”--这是什么意思?你的程序需要绘制它吗?不,我需要的是java函数生成的函数x^3。所以程序的输出是x^3,我的程序的输入是double xi[]={-15,0,15,30,};双fi[]={-0.24913878,0,0.221456693,0.415231299};任意数组。所以程序应该产生相关的多项式函数。也许他想找到一个三次多项式,它符合他给出的点。确切地说,我在这里给出了一个例子…我需要的是,我给出2个数组作为输入,例如double[\n]xi[]={-15,0,15,30};双fi[]={-0.24913878,0,0.221456693,0.415231299};。java程序应该为此生成插值函数。我想用拉格朗日方法或牛顿方法实现它。我用下面的源代码得到了插值,但是它没有给我函数。为了获得函数,我应该做什么?公共静态双AITKEN插值(double x){双席[] = { 15, 0, 15,30, 45, 60 };双FI[] = { 0.24913878,0,0.221456693,0.415231299,0.581323819,0.719734252 };int n=X.Langth-1;双ft[] =(double [])Fi?克隆();(inti=2;这应该是一个答案,而不是注释。我实际上想创建函数。我的程序的输入是两个数组,x[]={0,1,2,3}和y[]={0,1,8,27}…我想要的输出是x^3…程序应该为我找到函数…有两种方法,牛顿法和拉格朗日法。但是它很难编码,因为我不知道如何将x值作为x本身放在程序中。你能为你试图实现的东西共享伪代码吗?得到系数后,你想p吗席函数是公共静态的双AITKEN插值(双x){双XI[]={ 15, 0, 15,30, 45, 60 };双Fi[] = { 0.24913878,0,0.221456693,0.415231299,0.581323819,0.719734252 };int n=X.Langth-1;双ft[] =(double [])Fi。C克隆();对于(int i=2;i