科学与工程计算实验曲线拟合报告.ppt

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

实验17:曲线拟合 组长: 组员: 一:实验内容 实验内容:由实验给出数据表 试求3次、4次多项式的曲线拟合。(求对应次项的曲线拟合多项式) 实验要求: 给出两种曲线拟合下0.4、0.6、0.7、0.9的值。 一:实验内容 实验提示: 根据下式构造正交多项式族并形成拟合多项式。 二:曲线拟合 1:问题来源 即上述的已知f(x)的某些点的函数值(即离散的函数结果)能否找到一个简单易算的p(x),使得f(x) p(x)。要求:不要求p(xi)=yi,而是使得f(x)-p(x)总体上尽量小。 2:解决思路 使得f(x)-p(x)尽量小的话,则可以使用如下的表示: 已知函数值表 ( xi , yi ),在函数空间  中求 S*(x) ,使得 二:曲线拟合(续) 上述的wi是点xi的权值 对于这个问题,究其本质可以使用求连续函数的最佳平方逼近函数的方法解决。 3:实现方法 利用前面的平凡逼近的结论即求 为极小值点。 求得S*(x) = a0* 0 + a1*  1 + · · · + an*  n(x) 二:曲线拟合(续) 正交多项式拟合: 在上述的思路中,我们无法确定合适的表达式来求解,因此考虑使用正交多项式拟合 正交拟合: 二:曲线拟合(续)-正交多项式拟合 设多项式 p0, p1,…, pn 关于点集 x0, x1, …, xm 带权 0,  1, …,  m 正交,则 f(x) 在 Hn 中的最小二乘拟合多项式为 那么对于给定的(x,y),如何确定正交多项式pk(x): 使用如下的递推公式 三:代码实现 1:输入创建 本题目使用的给定的离散点的函数值 基础函数值存储: mapdouble,double mp;//存储函数值 int len = 7;//存储初始化数据的个数 double data[100];//存储初始化x的值 double A[100], B[100];//存储α和β的值 double arr[20] = {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0};//存储x用于计算和输出 void init() { //初始化数据 mp[0.0] = 1.0;mp[0.1] = 0.41;mp[0.2] = 0.50;mp[0.3] = 0.61; mp[0.5] = 0.91;mp[0.8] = 2.02;mp[1.0] = 2.46; data[0] = 0.0;data[1] = 0.1;data[2] = 0.2;data[3] = 0.3; data[4] = 0.5;data[5] = 0.8;data[6] = 1.0; } 三:代码实现 2:递归式的实现 for(int i = 2; i = n; ++i) { as = 0, ax = 0, bs = 0, bx = 0; //Pk+1 = (x - A[K])P[k] - B[k-1]P[k-1] //A[k] = (x*P[k], P[k])/(P[k], P[k])//B[k-1] = (P[k], P[k])/ (P[k-1], P[k-1] //要计算P[i],则先要计算A[i-1], B[i-2] int k = i; for(int j = 0; j len; ++j) { double x = data[j]; as += (x * P(x, k) * P(x, k)); ax += (P(x, k) * P(x, k)); bs += (P(x, k) * P(x, k)); bx += (P(x, k - 1) * P(x, k - 1)); } A[k] = as/ax; B[k-1] = bs/bx; } 三:代码实现 3:P(x,k)的求解 double P(double x, int k1) { //根据递推公式计算P(k+1) if(k1 == 0) return 1; if(k1 == 1) return x - A[0]; double res = (x - A[k1 - 1])*P(x, k1 - 1) - B[k1 - 2]*P(x, k1-2); return res; } 三:代码实现

文档评论(0)

yaocen + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档