插值法实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
void newton(int N, double X[], double Y[],double F[][M+1]){ int i,j; for (i=0;i<=N;i++) { F[i][0]=Y[i]; } for (j=1;j<=N;j++) { for (i=j;i<=N;i++) { F[i][j]=(F[i][j-1]-F[i-1][j-1])/(X[i]-X[i-j]); } } printf ("\n %12S%12S\n","XI","F(XI)"); for (j=1;j<=38;j++) printf("--"); printf ("\n"); for (i=0;i<=N;i++) { printf("%12f",X[i]); for (j=0;j<=i;j++) printf("%12f",F[i][j]); printf("\n"); } for (j=1;j<=38;j++)
2. 牛顿插值法截图:
【实验心得】
通过这次实验,使我熟悉了拉格朗日插值和牛顿插值公式以及它们不同的特点
拉格朗日插值可用双重循环来实现;内循环为连乘;外循环为连加。
牛顿插值法在计算机上计算均差表时,可用一维数组 X 存放基点值,用二维数组 F 存放和 计算由个阶均差构成的下三角矩阵。计算公式如下:
FI0=F(XI)
分别用四次拉格朗日插值和牛顿插值,求 x=0.596 时的函数值。
【程序代码】
1. 拉格朗日插值法: #include <iostream.h> const int N=4; const double XX=0.596;
void main() {
double X[N+1]={0.4,0.55,0.65,0.8,0.9}; double Y[N+1]={0.41075,0.57815,0.69675,0.88811,1.02652}; double L=0,LI=1; for (int I=0;I<=N;I++) {
计算方法实验报告
题目:插值法 院系:计算机科学与工程学院 班级:140402 班 姓名:李浩琛 学号:20141144
【实验时间】
2016.10.10 【实验内容】
已知函数表:
xi
wk.baidu.com
0.4
0.55
0.65 0.8
0.9
yi 0.41075 0.57815 0.69675 0.88811 1.02652
printf("--"); printf("\n"); } int main(){ newton(M,X,Y,F); double x=0.596; int k; double p;
p=F[M][M]; for (k=3;k>=0;k--)
p=p*(x-X[k])+F[k][k]; /*计算牛顿均差值多项式*/ printf("%f\n",p); return 0; } 【实验结果】 1. 拉格朗日插值法截图:
LI=1; for (int J=0;J<=N;J++) {
if (J!=I) {
LI=LI*(XX-X[J])/(X[I]-X[J]); } } L+=LI*Y[I]; } cout<<"THE RESULT IS:"<<L<<endl; } 2. 牛顿插值法: #include<iostream> using namespace std;
const int M = 5;
double X[M] = {0.4, 0.55, 0.65, 0.8, 0.9}; double Y[M] = {0.41075, 0.57815, 0.69675, 0.88811, 1.02652}; double F[M+1][M+1];
double large(int N, double X[], double Y[]){ double XX = 0.596; double l=0,li=1; for(int i=0;i<=N;i++) { li=1; for (int j=0;j<=N;j++) { if(j!=i) { li=li*(XX-X[j])/(X[i]-X[j]); } } l+=li*Y[i]; } return l;
,I=0,1,…N
FIJ=(FI,J-1-FI-1,J-1)/(XI-XI-J) ,J=1,2,…N I=J,J+1,…N
void newton(int N, double X[], double Y[],double F[][M+1]){ int i,j; for (i=0;i<=N;i++) { F[i][0]=Y[i]; } for (j=1;j<=N;j++) { for (i=j;i<=N;i++) { F[i][j]=(F[i][j-1]-F[i-1][j-1])/(X[i]-X[i-j]); } } printf ("\n %12S%12S\n","XI","F(XI)"); for (j=1;j<=38;j++) printf("--"); printf ("\n"); for (i=0;i<=N;i++) { printf("%12f",X[i]); for (j=0;j<=i;j++) printf("%12f",F[i][j]); printf("\n"); } for (j=1;j<=38;j++)
2. 牛顿插值法截图:
【实验心得】
通过这次实验,使我熟悉了拉格朗日插值和牛顿插值公式以及它们不同的特点
拉格朗日插值可用双重循环来实现;内循环为连乘;外循环为连加。
牛顿插值法在计算机上计算均差表时,可用一维数组 X 存放基点值,用二维数组 F 存放和 计算由个阶均差构成的下三角矩阵。计算公式如下:
FI0=F(XI)
分别用四次拉格朗日插值和牛顿插值,求 x=0.596 时的函数值。
【程序代码】
1. 拉格朗日插值法: #include <iostream.h> const int N=4; const double XX=0.596;
void main() {
double X[N+1]={0.4,0.55,0.65,0.8,0.9}; double Y[N+1]={0.41075,0.57815,0.69675,0.88811,1.02652}; double L=0,LI=1; for (int I=0;I<=N;I++) {
计算方法实验报告
题目:插值法 院系:计算机科学与工程学院 班级:140402 班 姓名:李浩琛 学号:20141144
【实验时间】
2016.10.10 【实验内容】
已知函数表:
xi
wk.baidu.com
0.4
0.55
0.65 0.8
0.9
yi 0.41075 0.57815 0.69675 0.88811 1.02652
printf("--"); printf("\n"); } int main(){ newton(M,X,Y,F); double x=0.596; int k; double p;
p=F[M][M]; for (k=3;k>=0;k--)
p=p*(x-X[k])+F[k][k]; /*计算牛顿均差值多项式*/ printf("%f\n",p); return 0; } 【实验结果】 1. 拉格朗日插值法截图:
LI=1; for (int J=0;J<=N;J++) {
if (J!=I) {
LI=LI*(XX-X[J])/(X[I]-X[J]); } } L+=LI*Y[I]; } cout<<"THE RESULT IS:"<<L<<endl; } 2. 牛顿插值法: #include<iostream> using namespace std;
const int M = 5;
double X[M] = {0.4, 0.55, 0.65, 0.8, 0.9}; double Y[M] = {0.41075, 0.57815, 0.69675, 0.88811, 1.02652}; double F[M+1][M+1];
double large(int N, double X[], double Y[]){ double XX = 0.596; double l=0,li=1; for(int i=0;i<=N;i++) { li=1; for (int j=0;j<=N;j++) { if(j!=i) { li=li*(XX-X[j])/(X[i]-X[j]); } } l+=li*Y[i]; } return l;
,I=0,1,…N
FIJ=(FI,J-1-FI-1,J-1)/(XI-XI-J) ,J=1,2,…N I=J,J+1,…N