- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
插值法的程序实现
题目
分别用拉格朗日插值、牛顿插值(一次插值和二次插值)计算丽的数值
原理
1 ?拉格朗口插值算法设计
利用己知条件得到xi, yi, i=0, 1, 2,...
由 Lk(x) = ((x-xO)*???*(x-x(k-1))*(x-x(k+1))…(x~xn))/ ((xk-xO)*…
* (xk-x (k-l))*(xk~x (k+1))…(xk-xn))得出 Li (x);
由Y二yl* Ll(x)+—+yn*Ln (x)得出Y关于x的表达式。
带值计算即可。
2.牛顿插值算法设计
利用己知条件得到xi, yi, i=0, I, 2,...
利用差商公式f [xO,…
xk] = (f [xO,…,x(k-2), xk]-f [xO,…,x(kT)])/(xk~x(k-1))各阶差商。
利用牛顿插值公式f (x)=f (xO)-f [xO, xl]*(x-xO)+???f [xO, xl,…
xn] * (x~xO) *??? (x-x (n~l))?
带值计算即可。
1 .编写的拉格朗日插值程序如下:
#in cludeiostream
using namespace std;
unsigned int ij,k,n;
float a[200]={0},b[200]={0};//数组 a 用来存放 x[i]b 用来存放 y[i]
double x,xmt=l ,sum=0;//xmt为分式累乘器,sum为累加器 void input()//输入函数
{ cout?nPlease input n?endl?Mn=;
cin?n;
if(n199)//防止数组溢出
{
cout?Hunable to calculate^ is too big?endl?Please type in n?endl?n=; cin?n;
}
else
{
for(i=0;i=n;i++)/Z输入 x[i]
{
cout?Please in put x?i ?en dl?x?i?M=;
cin?a[i];
for(i=0;i=n;i++)//输入 y[i] cout?Please input y?i?endl?y?i?=; cin b[i];
cout?Please input xM?endl?Mx=H;//输入 x cin?x;
)
}
double cal()〃计算函数
{ for(k=0;k=n;k4-+)
{ for(j=0;j=n;j++)
{ if(j=k)
{ xmt*=(1.0*(x-a[j])/(a[k]-a[j]));
}
}
sum+=b[k]*xmt;
xmt=l;//累乘器清零
1
return(sum);
}
void main()
{
whiled)//让程序可以一直工作,而不是一次性的
{
input();
cout?The result is :y=?cal()?endl;//结果
sum=0;//累加器清零,便于下次计算
} }
2.编写的牛顿插值程序如下:
#includestdio.h
void main()
{
float x[ll],y[l 1][11],xx,temp,newton;
int i,j,n;
printf(Newton插值:\n请输入要运算的值:x=);
scanf(H%f*,xx);
printf(请输入插值的次数(nvl 1 ):n=);
scanf(M%d,n);
printf(”请输入%d 组值:\n“,n+l);
fbr(i=0;in+l ;i++)
{
printf(Hx%d=H,i);
scanf(K%f\x[i]);
printf(Hy%d=n,i);
scanf(H%f\y[O][i]);
}
for(i= 1 ;in+1 ;i++)
forj=i;jn+l;j++)
{
if(i1)
y[i]U]=(y[i-i]U]-y[i-i]U-i])/(xU]-xU-i]);
else
y[i]U]=(y[i-i]Ul-y[i-i]U-i])/(xU]-xU-i]);
)
temp= 1 ;newton=y[0][0];
for(i= 1 ;in+1 ;i++)
{
temp=temp*(xx-x[i-l ]); newton=newton+y [i] [ i]*temp;
)
printf(求得的结果为:N(%.4f)=%f\n*,xx,newton);
getchar(); }
结果
1.拉格朗H插值结果
Please input n
-hi xi
n=2 Please input x0
Please input n !
x0=100
n=l HI
Please input xl
Please input x0
xl=121
x0=100 .
Plea
您可能关注的文档
- 操作系统与计算机软硬件关系浅析.doc
- 插床机构课设.doc
- 插花艺术课程结业论文.doc
- 插铺道岔技术交底.doc
- 插入式基础施工方法研究与探讨.doc
- 插秧机后齿轮设计毕业论文.doc
- 拆降施工方案打印.doc
- 拆迁安置项目三期项目投资建议书.docx
- 掺烧高碱金属煤种的技术探讨.doc
- 持续发展的佛得角经济.doc
- 重庆新速达物业服务集团股份凯里公司招聘笔试题库2024.pdf
- 浙江杭州千岛湖泰众肉类食品有限公司招聘笔试题库2024.pdf
- 陕西新华出版传媒集团新华书店分公司招聘笔试题库2024.pdf
- 宁夏海原县肉牛产业发展集团有限公司招聘笔试题库2024.pdf
- 浙江温岭市化工轻工建筑材料有限公司招聘笔试题库2024.pdf
- 中航飞机汉中航空零组件制造有限公司招聘笔试题库2024.pdf
- 山东海阳市海昇矿产资源开发有限公司招聘笔试题库2024.pdf
- 山东潍坊寿光市公共交通运输有限公司招聘笔试题库2024.pdf
- 内蒙古察右前旗农业投资开发有限公司招聘笔试题库2024.pdf
- 线上清明祭英烈活动策划.pptx
文档评论(0)