数值分析论文几种插值方法的比较Word文件下载.docx

上传人:b****3 文档编号:7818442 上传时间:2023-05-09 格式:DOCX 页数:15 大小:96.13KB
下载 相关 举报
数值分析论文几种插值方法的比较Word文件下载.docx_第1页
第1页 / 共15页
数值分析论文几种插值方法的比较Word文件下载.docx_第2页
第2页 / 共15页
数值分析论文几种插值方法的比较Word文件下载.docx_第3页
第3页 / 共15页
数值分析论文几种插值方法的比较Word文件下载.docx_第4页
第4页 / 共15页
数值分析论文几种插值方法的比较Word文件下载.docx_第5页
第5页 / 共15页
数值分析论文几种插值方法的比较Word文件下载.docx_第6页
第6页 / 共15页
数值分析论文几种插值方法的比较Word文件下载.docx_第7页
第7页 / 共15页
数值分析论文几种插值方法的比较Word文件下载.docx_第8页
第8页 / 共15页
数值分析论文几种插值方法的比较Word文件下载.docx_第9页
第9页 / 共15页
数值分析论文几种插值方法的比较Word文件下载.docx_第10页
第10页 / 共15页
数值分析论文几种插值方法的比较Word文件下载.docx_第11页
第11页 / 共15页
数值分析论文几种插值方法的比较Word文件下载.docx_第12页
第12页 / 共15页
数值分析论文几种插值方法的比较Word文件下载.docx_第13页
第13页 / 共15页
数值分析论文几种插值方法的比较Word文件下载.docx_第14页
第14页 / 共15页
数值分析论文几种插值方法的比较Word文件下载.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数值分析论文几种插值方法的比较Word文件下载.docx

《数值分析论文几种插值方法的比较Word文件下载.docx》由会员分享,可在线阅读,更多相关《数值分析论文几种插值方法的比较Word文件下载.docx(15页珍藏版)》请在冰点文库上搜索。

数值分析论文几种插值方法的比较Word文件下载.docx

其中基函数

=

2.1.2优缺点

可对插值函数选择多种不同的函数类型,由于代数多项式具有简单和一些良好的特性,故常选用代数多项式作为插值函数。

利用插值基函数很容易得到拉格朗日插值多项式,公式结构紧凑,在理论分析中甚为方便,但当插值节点增减时全部插值基函数

均要随之变化,整个公式也将发生变化,这在实际计算中是很不方便的,为了克服这一缺点,提出了牛顿插值可以克服这一缺点。

2.1.3数值实验

程序如下:

#include<

stdio.h>

#defineTRUE1

#defineFALSE0

#defineN10

#defineM2

voidmain(void)

{

doublex[N],y[N],a,l[N];

inti,j,n,flag;

doubleanswer=0.00f;

do{

printf("

创建Lagrange插值多项式共用到N组(X,Y)值,请输入N:

"

);

scanf("

%d"

&

n);

if(n<

=N&

&

n>

=M)flag=FALSE;

elseif(n>

N||n<

=1)

{

对不起,你输入错误!

\n请确保你输入的N满足2<

=N<

=%d."

N);

\n"

flag=TRUE;

}

}while(flag==TRUE);

\n请输入需要计算的X值:

%lf"

a);

for(i=0;

i<

n;

i++)

{

请输入第%d组(X,Y)的值:

i+1);

%lf%lf"

x+i,y+i);

l[i]=1.0f;

for(j=0;

j<

N;

j++)

if(i!

=j)l[i]*=(a-x[j])/(x[i]-x[j]);

elsecontinue;

answer+=l[i]*y[i];

f(%.3lf)=%lf\n"

a,answer);

}

2.2牛顿插值

2.2.1基本原理

构造n次多项式

称为牛顿插值多项式,其中

(二个节点,一阶差商)

(三个节点,二阶差商)

(n+1个节点,n阶差商)

注意:

由于插值多项式的唯一性,有时为了避免拉格朗日余项Rn(x)中n+1阶导数的运算,用牛顿插值公式

2.2.2优缺点

牛顿插值法具有承袭性和易变性的特点,当增加一个节点时,只要再增加一项就可以了即

而拉格朗日插值若要增加一个节点时全部基函数都需要重新算过。

牛顿插值法既适合于用来计算函数值,也适合于做理论推导,比如说可用来推导微分方程的数值求解公式。

2.2.3数值实验

#include"

stdafx.h"

voidmain(intargc,char*argv[])

{inti1,i2,p,j,k,w,n=0;

floatx[100],f[100][100],f1[100],x1,x2,N1,N2=1.0,N3=0.0;

请输入节点个数w<

=100:

"

w);

for(n=0;

n<

w;

n++)

{printf("

x="

%f"

x[n]);

f(x)="

f1[n]);

f[n][0]=f1[n];

for(j=1;

j++)

{k=j;

for(p=0;

k<

k++,p++)

f[k][j]=(f[k][j-1]-f[k-1][j-1])/(x[k]-x[p]);

xif(xi)1阶差商"

for(i1=1;

i1<

n-1;

i1++)

%d阶差商"

(i1+1));

for(i1=0;

{{if(x[i1]>

=0)

if(x[i1]>

=10&

x[i1]<

100)

\n%.5f"

x[i1]);

elseif(x[i1]>

=100)

elseprintf("

elseif(x[i1]<

=-10)

=-100)

for(i2=0;

i2<

=i1;

i2++)

if(f[i1][i2]>

=0)

{if(f[i1][i2]>

10)

%.5f"

f[i1][i2]);

else

{if(f[i1][i2]<

\nN%d(x)=%.5f+"

n-1,f[0][0]);

i1++)

if(i1==j)

{if(f[i1][j]<

0)

(%.5f)"

f[i1][j]);

%.5f"

for(k=0;

j;

k++)

(x-%.5f)"

x[k]);

if(j<

n-1)

+"

}

输入节点x1(用3次多项式计算),

%f%f"

x1,&

x2);

for(i1=0;

if(x1>

x[i1])break;

if((n-i1)>

=3)

i2=i1;

else

{i1=i1-2;

if(i1>

=0)i2=i1;

{i2=i1+1;

i1=i2;

N1=f[i1][0];

4;

j++,i1++)

{N2=N2*f[i1+1][i1+1];

for(k=i2;

i2+j;

N2=N2*(x1-x[k]);

N3=N2+N3;

N2=1.0;

N3=N1+N3;

N3(%.5f)=%.5f\n"

x1,N3);

N3=0.0;

N1=f[0][0];

{for(i2=0;

i1;

i2++)

N2=N2*(x2-x[i2]);

N2=N2*f[i1][i1];

N%d(%.5f)=%.5f\n"

n-1,x2,N3);

 

2.3埃尔米特插值

2.3.1基本原理

设在

个互不相同的节点

处,已知

要求插值多项式

满足:

这类问题与前面的插值问题的区别在于不仅要求在节点上的函数值相等,而且还要求导数也相等,甚至要求高阶导数也相等.求次数不超过

的多项式

使得:

1)

2)

类似求Lagrange插值多项式的方法,通过构造基函数的方法.若能够构造出基函数

满足条件

=

则容易得到

如下:

确定基函数

插值余项

,若

内的

阶导数存在,则插值余项

,其中

且与

有关.

2.3.2优缺点

Hermite插值多项式具有唯一性和承袭性的特点,对相应于条件的

的组合形式可以找出尽可能多的条件给出的根,根据多项式的总阶数和根的个数写出表达式,但表达式具有唯一性,可以根据尚未利用的条件解出表达式中的待定系数,在这里待定系数法任适用,但插值节点多时比较麻烦.

2.3.3数值实验

structHINTEP

intn;

double*x;

double*y;

double*dy;

doublet;

}hp,ha;

doublehermite(structHINTEP*hp)

intnum,i,j;

double*x,*y,*dy,pio,z,p,q,s;

num=hp->

x=hp->

x;

y=hp->

y;

dy=hp->

dy;

pio=hp->

t;

z=2.0;

for(i=1;

=num;

s=1.0;

for(j=1;

if(j!

=i)s*=(pio-x[j-1])/(x[i-1]-x[j-1]);

s=s*s;

p=0.0;

=i)p+=1.0/(x[i-1]-x[j-1]);

q=y[i-1]+(pio-x[i-1])*(dy[i-1]-2.0*y[i-1]*p);

z+=q*s;

return(z);

main()

doublex[10]={3.0,5.0,8.0,13.0,17.0,25.0,27.0,29.0,31.0,35.0};

doubley[10]={7.0,10.0,11.0,17.0,23.0,18.0,13.0,6.0,3.0,1.0};

doubledy[10];

inti;

structHINTEPha={10,x,y,dy,19.0};

for(i=0;

=9;

dy[i]=-y[i];

printf("

\npio=%6.3f,z=%e\n\n"

ha.t,hermite(&

ha));

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2