数值分析上机实验报告.docx

上传人:b****5 文档编号:30233028 上传时间:2023-08-07 格式:DOCX 页数:21 大小:127.09KB
下载 相关 举报
数值分析上机实验报告.docx_第1页
第1页 / 共21页
数值分析上机实验报告.docx_第2页
第2页 / 共21页
数值分析上机实验报告.docx_第3页
第3页 / 共21页
数值分析上机实验报告.docx_第4页
第4页 / 共21页
数值分析上机实验报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数值分析上机实验报告.docx

《数值分析上机实验报告.docx》由会员分享,可在线阅读,更多相关《数值分析上机实验报告.docx(21页珍藏版)》请在冰豆网上搜索。

数值分析上机实验报告.docx

数值分析上机实验报告

 

数值分析上机实验报告

班级:

材料工程

学号:

2013730069

姓名:

张明杰

日期:

2013.12.31

 

昆明理工大学

13工科硕士《数值分析》上机实验报告

专业:

材料工程姓名:

张明杰学号:

2013730069

任课教师:

李玉兰作业完成实验室:

实验成绩:

理论描述(10)

数值公式(10)

程序流程图和程序结构(20)

数据和结果(20)

讨论(20)

源程序(20)

总分(100)

实验内容:

1.题目/要求:

1、利用Lagrange插值公式

编写出插值多项式程序;

2、给出插值多项式或分段三次插值多项式的表达式;

3、根据节点选取原则,对问题

(2)用三点插值或二点插值,其结果如何;

对此插值问题用Newton插值多项式其结果如何

2.作业环境(包括选用的程序语言、运行环境)

VisualC++6.0

3.数学(理论背景)描述

1.Lagrange插值多项式定义:

若n次多项式

其中

,就称这

个次多项式

为节点

上的

次插值基函数。

插值多项式可

表示为:

,称为Lagrange插值多项式。

2.分段线形插值就是通过插值点用折线段连接起来逼近

设已知节点

上的函数值

,记

求一折线函数

满足:

4.数值计算公式

Lagrange插值多项式

分段线形插函数,在每个小区间

上可表示为:

在整个区间

上为:

其中基函数

,其形式是:

 

5.算法程序流程图

Lagrange插值算法程序流程图

 

分段低次插值算法程序流程图

6.程序结构(程序中的函数调用关系图

6.实验数据和实验结果(打印或用屏幕图形拷屏表示,可加为附页)

(1)

0.4

0.55

0.65

0.80

0.95

1.05

0.41075

0.57815

0.69675

0.90

1.00

1.25382

Lagrange插值算法

分段低次插值算法

(2)

1

2

3

4

5

6

7

0.368

0.135

0.050

0.018

0.007

0.002

0.001

Lagrange插值算法

分段低次插值算法

7.讨论(包括题目要求的讨论和方法的适用性讨论)

对于插值多项式L

(x),当

时,L

(x)不一定收敛到f(x),此时需用分段线性插值比L

(x)逼近f(x)好得多,题

(2)就是一例。

计算

时,用分段线性插值算法的结果比用Lagrange插值算法的结果更接近题目所给数据0.00213348。

另一种情况,当用拉格郎日插值多项式L

(x)计算函数近似值,如精度不满足要求需增加插值节点,原来算出的数据均不能利用时,可用埃特金逐次线形插值算法。

牛顿插值多项式较Lagrange插值多项式更有一般性,它对

是由离散点给出的情形或

导数不存在时均适用。

且比Lagrange值计算量省,且便于程序设计。

 

8.附—源程序(打包邮件)

题一

(Ⅰ)Lagrange插值算法源程序

#include

#include

#include

doubleLAG(intn,doublet,double*x,double*y)

{inti,j;

doublep,s;

s=0;

for(i=0;i<=n-1;i++)//外循环,累和

{

p=1;

for(j=0;j<=n-1;j++)//内循环,累积

{

if(i!

=j)p*=(t-x[j])/(x[i]-x[j]);//循环语句

}

s+=p*y[i];

}

return(s);

}

doubleLAG(intn,doublet,double*x,double*y);

voidmain()

{

intn;

double*x,*y,t;

n=6;

t=0.99;//或t=0.596

x=(double*)calloc(n,sizeof(double));

if(x==NULL)

printf("error");

y=(double*)calloc(n,sizeof(double));

if(y==NULL)

printf("error");

x[0]=0.4;

x[1]=0.55;

x[2]=0.65;

x[3]=0.80;

x[4]=0.95;

x[5]=1.05;

y[0]=0.41075;

y[1]=0.57815;

y[2]=0.69675;

y[3]=0.90;

y[4]=1.00;

y[5]=1.25382;

printf("%10.8f\n",LAG(n,t,x,y));

free(x);

free(y);

}

(Ⅱ)分段低次插值算法程序

#include

#include

#include

doubleLAG(intn,doublet,double*x,double*y)

{inti,j;

doublep,s;

s=0;

for(i=0;i<=n-1;i++)//外循环,累和

{

p=1;

for(j=0;j<=n-1;j++)//内循环,累积

{

if(i!

=j)p*=(t-x[j])/(x[i]-x[j]);//循环语句

}

s+=p*y[i];

}

return(s);

}

doubleLAG(intn,doublet,double*x,double*y);

voidmain()

{

intn;

double*x,*y,t;

n=6;

t=0.99;//或t=0.596

x=(double*)calloc(n,sizeof(double));

if(x==NULL)

printf("error");

y=(double*)calloc(n,sizeof(double));

if(y==NULL)

printf("error");

x[0]=0.4;

x[1]=0.55;

x[2]=0.65;

x[3]=0.80;

x[4]=0.95;

x[5]=1.05;

y[0]=0.41075;

y[1]=0.57815;

y[2]=0.69675;

y[3]=0.90;

y[4]=1.00;

y[5]=1.25382;

printf("%10.8f\n",LAG(n,t,x,y));

free(x);

free(y);

}

题二

(Ⅰ)Lagrange插值算法源程序

#include

#include

doubleLAG(intn,doublet,double*x,double*y)

{

intk,i;

doublep,s;

s=0;

for(k=0;k<=n-1;k++)//外循环,累和

{

p=1;

for(i=0;i<=n-1;i++)//内循环,累积

{

if(i!

=k)p*=(t-x[i])/(x[k]-x[i]);//循环语句

}

s+=(p*y[k]);

}

return(s);

}

doubleLAG(intn,doublet,double*x,double*y);

voidmain()

{

intn;

double*x,*y,t;

n=7;

t=1.8;//或t=6.15

x=(double*)calloc(n,sizeof(double));

if(x==NULL)

printf("error");

y=(double*)calloc(n,sizeof(double));

if(y==NULL)

printf("error");

x[0]=1;

x[1]=2;

x[2]=3;

x[3]=4;

x[4]=5;

x[5]=6;

x[6]=7;

y[0]=0.368;

y[1]=0.135;

y[2]=0.050;

y[3]=0.018;

y[4]=0.007;

y[5]=0.002;

y[6]=0.001;

printf("%10.8f\n",LAG(n,t,x,y));

free(x);

free(y);

}

(Ⅱ)分段低次插值算法程序

#include

#include

doubleLIP(intn,doublet,double*x,double*y)

{

inti=0;

doubleu,f;

for(i=0;i

{

if(t>=x[i]&&t<=x[i+1])

{

u=(t-x[i])/(x[i+1]-x[i]);

f=y[i]+u*(y[i+1]-y[i]);

}

}

return(f);

}

doubleLIP(intn,doublet,double*x,double*y);

voidmain()

{

intn;

double*x,*y,t;

n=7;

t=6.15;//或1.8

x=(double*)calloc(n,sizeof(double));

if(x==NULL)

printf("error");

y=(double*)calloc(n,sizeof(double));

if(y==NULL)

printf("error");

x[0]=1;

x[1]=2;

x[2]=3;

x[3]=4;

x[4]=5;

x[5]=6;

x[6]=7;

y[0]=0.368;

y[1]=0.135;

y[2]=0.050;

y[3]=0.018;

y[4]=0.007;

y[5]=0.002;

y[6]=0.001;

printf("%10.8f\n",LIP(n,t,x,y));

free(x);

free(y);

}

 

#include

#include

#include

doubleLAG(intn,doublet,double*x,double*y)

{inti,j;

doublep,s;

s=0;

for(i=0;i<=n-1;i++)//外循环,累和

{

p=1;

for(j=0;j<=n-1;j++)//内循环,累积

{

if(i!

=j)p*=(t-x[j])/(x[i]-x[j]);//循环语句

}

s+=p*y[i];

}

return(s);

}

doubleLAG(intn,doublet,double*x,double*y);

voidmain()

{

intn;

double*x,*y,t;

n=6;

t=0.99;//或t=0.596

x=(double*)calloc(n,sizeof(double));

if(x==NULL)

printf("error");

y=(double*)calloc(n,sizeof(double));

if(y==NULL)

printf("error");

x[0]=0.4;

x[1]=0.55;

x[2]=0.65;

x[3]=0.80;

x[4]=0.95;

x[5]=1.05;

y[0]=0.41075;

y[1]=0.57815;

y[2]=0.69675;

y[3]=0.90;

y[4]=1.00;

y[5]=1.25382;

printf("%10.8f\n",LAG(n,t,x,y));

free(x);

free(y);

}

Lagrange插值算法源程序

#include

#include

#include

doubleLAG(intn,doublet,double*x,double*y)

{inti,j;

doublep,s;

s=0;

for(i=0;i<=n-1;i++)//外循环,累和

{

p=1;

for(j=0;j<=n-1;j++)//内循环,累积

{

if(i!

=j)p*=(t-x[j])/(x[i]-x[j]);//循环语句

}

s+=p*y[i];

}

return(s);

}

doubleLAG(intn,doublet,double*x,double*y);

voidmain()

{

intn;

double*x,*y,t;

n=6;

t=0.99;//或t=0.596

x=(double*)calloc(n,sizeof(double));

if(x==NULL)

printf("error");

y=(double*)calloc(n,sizeof(double));

if(y==NULL)

printf("error");

x[0]=0.4;

x[1]=0.55;

x[2]=0.65;

x[3]=0.80;

x[4]=0.95;

x[5]=1.05;

y[0]=0.41075;

y[1]=0.57815;

y[2]=0.69675;

y[3]=0.90;

y[4]=1.00;

y[5]=1.25382;

printf("%10.8f\n",LAG(n,t,x,y));

free(x);

free(y);

}

 

分段低次插值算法程序

#include

#include

doubleLIP(intn,doublet,double*x,double*y)

{

inti=0;

doubleu,f;

for(i=0;i

{

if(t>=x[i]&&t<=x[i+1])

{

u=(t-x[i])/(x[i+1]-x[i]);

f=y[i]+u*(y[i+1]-y[i]);

}

}

return(f);

}

doubleLIP(intn,doublet,double*x,double*y);

voidmain()

{

intn;

double*x,*y,t;

n=6;

t=0.596;//或t=0.99

x=(double*)calloc(n,sizeof(double));

if(x==NULL)

printf("error");

y=(double*)calloc(n,sizeof(double));

if(y==NULL)

printf("error");

x[0]=0.4;

x[1]=0.55;

x[2]=0.65;

x[3]=0.80;

x[4]=0.95;

x[5]=1.05;

y[0]=0.41075;

y[1]=0.57815;

y[2]=0.69675;

y[3]=0.90;

y[4]=1.00;

y[5]=1.25382;

printf("%10.8f\n",LIP(n,t,x,y));

free(x);

free(y);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1