网站大量收购闲置独家精品文档,联系QQ:2885784924

数值计算实验三.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数值计算实验三

附:报告封面要求 计算方法C (2014-2015-2) 【 插值法 】实验报告 、 实验三 插值法的稳定性 实验目的: 掌握插值法的思想,掌握拉格朗日插值、牛顿插值和分段低次插值,分析这些插值法的稳定性。 实验题目: 已知y=cos x,对区间[0,1]作等距划分,节点为,试对下面两种情况分别按指定方案求cos x在0.73333点的近似值( n=10,40,160)。 ⑴以给定节点为插值节点; ⑵仍以给定节点为插值节点,但在cos 0.5上人为增加一个误差0.05。 方案一:用拉格朗日插值公式。 方案二:用牛顿插值公式。 方案三:用分段三次插值。 试比较同一方案对不同的n、不同方案对相同的n的精度情况,分析人为增加的误差对不同方案计算结果的影响。 算法流程图如下: 源程序清单如下: Lagrange.c #include stdio.h #include malloc.h float lagrange(float *x,float *y,float xx,int n) { int i,j; float *a,yy=0.0; for(i=0;i=n-1;i++) { a[i]=y[i]; for(j=0;j=n-1;j++) if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i]; } free(a); return yy; } int main() { int i; int n; float x[20],y[20],xx,yy; printf(Input n:); scanf(%d,n); if(n=20) { printf(Error!The value of n must in (0,20).); getch();return 1; } if(n=0) { printf(Error! The value of n must in (0,20).); getch(); return 1; } for(i=0;i=n-1;i++) { printf(x[%d]:,i); scanf(%f,x[i]); } printf(\n); for(i=0;i=n-1;i++) { printf(y[%d]:,i); scanf(%f,y[i]); } printf(\n); printf(Input xx:); scanf(%f,xx); yy=lagrange(x,y,xx,n); newton.c #include iostream using namespace std; #define F(x) (cos(x)) #define Type double //xi为待求的函数值的x值 Type Newton(Type *x, Type *y, int n, Type xi); int main() { int n; cout Newton n= ; cin n; Type *x, *y; x = new Type[n]; y = new Type[n]; for (int i = 0; i n; i++) { x[i] = i*1.0 / n; y[i] = F(x[i]); } cout Newton(x, y, n, 0.73333) endl; delete[]x; delete[]y; return 0; } Type Newton(Type *x, Type *y, int n, Type xi) { Type yi = y[0]; Type *dc = new Type[n + 1];//difference coefficient差商 Type t = 1.0; dc[0] = 0; for (int i = 1; i n; i++) { for (int j = i; j n; j++) { dc[j] = (y[j] - y[j - 1]) / (x[j] - x[j - i]); } t *= (xi - x[i - 1]); yi += t*dc[i]; for (int j = i; j n; j++) { y[j] = dc[j]; } } return yi; } 方案三 #include iostream using namespace std; #define F(x) (cos(x)) #define F1(x) (-sin(x))//F(x)的导数 #define Type double //xi

文档评论(0)

文档精品 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6203200221000001

1亿VIP精品文档

相关文档