拉格朗日插值java代码 拉格朗日插值法算法程序框图

用Java实现牛顿插值 求大神帮下class Lagrange
{
public static double esitimate(double x,int n,double k[][])
{
double y=0;
int i;
int j;
double w;
double w1;
for(i=0;in;i++)
{
w=1;
w1=1;
for(j=0;jn;j++)
{
if(j==i)
continue;
else
{
w=w*(x-k[j][0]);
w1=w1*(k[i][0]-k[j][0]);
}
}
//System.out.printf("y=%f,w=%f,w1=%f\n",k[i][1],w,w1);
y=y+k[i][1]*w/w1;
}
return y;
}
}
class Newton
{
double ad[][];//均差表
int n;
Newton(int n,double k[][])
{
int i,j;
this.n=n;
ad=new double[n][n];
for(i=0;in;i++)
ad[i][0]=k[i][1];
for(i=1;in;i++)
ad[i][1]=(ad[i][0]-ad[i-1][0])/(k[i][0]-k[i-1][0]);
for(i=2;in;i++)
for(j=i;jn;j++)
{
ad[j][i]=(ad[j][i-1]-ad[j-1][i-1])/(k[j][0]-k[j-i][0]);
//System.out.printf("%f %f %f %f\n", ad[j][i-1],ad[j-1][i-1],k[j][0],k[j-i][0]);
}
show();
}
void update(double x,double y,double k[][])
{
int i,j;
n++;
k[n-1][0]=x;
k[n-1][1]=y;
double temp[][]=new double[n][n];
for(i=0;in-1;i++)
for(j=0;j=i;j++)
temp[i][j]=ad[i][j];
temp[n-1][0]=y;
for(i=1;in;i++)
temp[n-1][i]=(temp[n-1][i-1]-temp[n-2][i-1])/(x-k[n-1-i][0]);
ad=temp;
show();
}
void show()
{
int i,j;
System.out.println("均差计算可列均差表如下拉格朗日插值java代码:");
for(i=0;in;i++)
{
for(j=0;j=i;j++)
System.out.printf("%f", ad[i][j]);
System.out.printf("\n");
}
System.out.println("*******************************************");
}
double esitimate(double x,double k[][])
{
int i,j;
double y=ad[0][0];
double w;
for(i=1;in;i++)
{
w=ad[i][i];
for(j=0;ji;j++)
w=w*(x-k[j][0]);
y=y+w;
}
return y;
}
}
public class interpolate
{
public static void main(String args[])
{
int n=20;
double k[][]=new double[n][2];
int i;
n=3;
k[0][0]=0.32;
k[0][1]=0.314567;
k[1][0]=0.34;
k[1][1]=0.333487;
k[2][0]=0.36;
k[2][1]=0.352274;
System.out.println("拉格朗日插值拉格朗日插值java代码的节点拉格朗日插值java代码:");
for(i=0;in;i++)
System.out.printf("%f%f\n", k[i][0],k[i][1]);
System.out.println("估算0.3367处拉格朗日插值java代码的函数值:");
n=2;
System.out.printf("采用%d次插值得:%f\n",n-1,Lagrange.esitimate(0.3367,n,k));
n=3;
System.out.printf("采用%d次插值得:%f\n",n-1,Lagrange.esitimate(0.3367,n,k));
System.out.println("*******************************************");
k[0][0]=0.4;
k[0][1]=0.41075;
k[1][0]=0.55;
k[1][1]=0.57815;
k[2][0]=0.65;
k[2][1]=0.69675;
k[3][0]=0.80;
k[3][1]=0.88811;
k[4][0]=0.90;
k[4][1]=1.02652;
k[5][0]=1.05;
k[5][1]=1.25382;
Newton nt=new Newton(3,k);
nt.update(0.80, 0.88811, k);
nt.update(0.90, 1.02652, k);
nt.update(1.05, 1.25382, k);
nt=new Newton(5,k);
System.out.println("估算0.596处的函数值:");
System.out.printf("%f",nt.esitimate(0.596, k));
}
}
怎么用matlab利用拉格朗日插值计算法的原理编写并计算函数所在节点的近似值 。谢谢 。.m文件
function yy=lagrange(x1,y1,xx)
%本程序为Lagrange1插值 , 其中x1,y1
%为插值节点和节点上的函数值,输出为插值点xx的函数值 , 
%xx可以是向量 。
syms x
n=length(x1);
for i=1:n
t=x1;t(i)=[];L(i)=prod((x-t)./(x1(i)-t));% L向量用来存放插值基函数

推荐阅读