数值分析实验报告五.doc
文本预览下载声明
数值分析实验报告(五)
一.实验名称:
lagrange和newton插值法
二.实验目的:
掌握用Lagrange和Newton方法解决未知的问题。
三.题目:
已知
x 0.4 0.5 0.6 0.7 0.8 0.9 lnx -0.916291 -0.693147 -0.510826 -0.357762 -0.223144 -0.105361 分别用lagrange插值法和牛顿插值法来求ln0.78的近似值。
四.程序:
Lagrange插值法:
#include stdio.h
#include math.h
double Langrage(x,y,n,a)
double *x,*y,a;
int n;
{
int i,j;
double t=0,k;
for (i=0;i=n;i++)
{
k=1;
for (j=0;j=n;j++)
{
if (j==i)j++;
k*=(a-x[j])/(x[i]-x[j]);
}
t+=k*y[i];
}
return t;
}
main()
{
double x[20]={0.4,0.5,0.6,0.7,0.8,0.9},
y[20]={-0.916291,-0.693147,-0.510826,-0.357765,-0.223144,-0.105361},
a=0.78;
clrscr();
printf(ln0.78=%10.5f\n,Langrage(x,y,5,a));
}
牛顿插值法:
#include stdio.h
#include math.h
#define N 5
double Newton(x,y,a)
double *x,*y,a;
{
int i,j;
double t,k=1;
for (i=0;iN;i++)
{
for (j=N;ji;j--)
y[j]=(y[j]-y[j-1])/(x[j]-x[j-1]);
}
t=y[0];
for (i=1;i=N;i++)
{
k*=(a-x[i-1]);
t+=y[i]*k;
}
return t;
}
main()
{
double x[10]={0.4,0.5,0.6,0.7,0.8,0.9},
y[10]={-0.916291,-0.693147,-0.510826,-0.357765,-0.223144,-0.105361},
a=0.78;
clrscr();
printf(ln0.78=%10.5f\n,Newton(x,y,a));
}
五.运行结果:
Lagrange插值法结果显示:
ln0.78= -0.24923
牛顿插值法结果显示:
ln.78= -0.26666
六.体会:
通过本次练习我体会到了lagrange和newton插值法在实际解题中的应用,也方便了我以能
更好的应用。
信计050213 孟松见
显示全部