切比雪夫(chebyshev)曲线拟合 c语言源程序

切比雪夫(chebyshev)曲线拟合 c语言源程序

ID:11469844

大小:34.50 KB

页数:6页

时间:2018-07-12

切比雪夫(chebyshev)曲线拟合 c语言源程序_第1页
切比雪夫(chebyshev)曲线拟合 c语言源程序_第2页
切比雪夫(chebyshev)曲线拟合 c语言源程序_第3页
切比雪夫(chebyshev)曲线拟合 c语言源程序_第4页
切比雪夫(chebyshev)曲线拟合 c语言源程序_第5页
资源描述:

《切比雪夫(chebyshev)曲线拟合 c语言源程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、切比雪夫(Chebyshev)曲线拟合(参考《常用算法程序集》)给定n个数据点,求切比雪夫意义下的最佳拟合多项式。函数语句和形参说明:voidchir(x,y,n,a,m)doublex[n]:存放给定n个数据点的X坐标doubley[n]:存放给定n个数据点的Y坐标intn:给定数据点的个数doublea[m+1]:前m个元素返回m-1次拟合多项式的m个系数,最后一个元素返回拟合多项式的偏差最大值。若最后一个元素为负值,则说明在迭代过程中参考偏差不再增大,其绝对值为当前选择的参考偏差。Intm:拟合

2、多项式的项数,即拟合多项式的最高次为m-1。要求m<=n且m<=20。若m>n或m>20则自动按m=min(n-1,20)处理。源程序: #include"math.h" voidchir(x,y,n,a,m) intn,m; doublex[],y[],a[]; {intm1,i,j,l,ii,k,im,ix[21]; doubleh[21],ha,hh,y1,y2,h1,h2,d,hm; for(i=0;i<=m;i++)a[i]=0.0; if(m>=n)m=n-1; if(m>=20)m=19

3、; m1=m+1; ha=0.0; ix[0]=0;ix[m]=n-1; l=(n-1)/m;j=l; for(i=1;i<=m-1;i++) {ix[i]=j;j=j+l;} while(1==1) {hh=1.0; for(i=0;i<=m;i++) {a[i]=y[ix[i]];h[i]=-hh;hh=-hh;} for(j=1;j<=m;j++) {ii=m1;y2=a[ii-1];h2=h[ii-1]; for(i=j;i<=m;i++) {d=x[ix[ii-1]]-x[ix[m1-i-1

4、]]; y1=a[m-i+j-1]; h1=h[m-i+j-1]; a[ii-1]=(y2-y1)/d; h[ii-1]=(h2-h1)/d; ii=m-i+j;y2=y1;h2=h1; } } hh=-a[m]/h[m]; for(i=0;i<=m;i++) a[i]=a[i]+h[i]*hh; for(j=1;j<=m-1;j++) {ii=m-j;d=x[ix[ii-1]]; y2=a[ii-1]; for(k=m1-j;k<=m;k++) {y1=a[k-1];a[ii-1]=y2-d*y1;

5、 y2=y1;ii=k; } } hm=fabs(hh); if(hm<=ha){a[m]=-hm;return;} a[m]=hm;ha=hm;im=ix[0];h1=hh; j=0; for(i=0;i<=n-1;i++) {if(i==ix[j]) {if(j=0;k--) h2=h2*x[i]+a[k]; h2=h2-y[i]; if(fabs(h2)>hm) {hm=fabs(h2);h1=h2;im=i;} }

6、 } if(im==ix[0])return; i=0;l=1; while(l==1) {l=0; if(im>=ix[i]) {i=i+1; if(i<=m)l=1; } } if(i>m)i=m; if(i==(i/2)*2)h2=-hh; elseh2=hh; if(h1*h2>=0.0)ix[i]=im; else {if(im=0;j--) ix[j+1]=ix[j]; ix[0]=im; } else {if(im>ix[m]) {for(j=1

7、;j<=m;j++) ix[j-1]=ix[j]; ix[m]=im; } elseix[i-1]=im; } } } } 例:取函数f(x)=arctgx在区间[-1,1]上的101个点x(i)=-1.0_0.02i,i=0,1,…,100其相应的函数值为y(i)=f(x(i))。根据此101个数据点构造切比雪夫意义下的5次你和多项式:Ps(x)=a0+a1x+a2x^2+a3x^3+a4x^4+a5x^5主函数程序如下: #include"math.h" #include"stdio.h" #i

8、nclude"8chir.c" main() {inti; doublex[101],y[101],a[7]; for(i=0;i<=100;i++) {x[i]=-1.0+0.02*i; y[i]=atan(x[i]); } chir(x,y,101,a,6); printf(""); for(i=0;i<=5;i++) printf("a(%2d)=%e",i,a[i]); printf(""); printf("MAX(p-f)=%e

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。