分享
分销 收藏 举报 申诉 / 24
播放页_导航下方通栏广告

类型数值逼近课程设计报告样本.doc

  • 上传人:天****
  • 文档编号:4431717
  • 上传时间:2024-09-22
  • 格式:DOC
  • 页数:24
  • 大小:410KB
  • 下载积分:10 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    数值 逼近 课程设计 报告 样本
    资源描述:
    资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。 课程设计报告 课程名称 数 值 逼 近 专 业 信息与计算科学 班 级 计算092 姓 名 杜青 学 号 指导教师 秦新强、 胡钢 日 期 -07-01 理学院应用数学系 数值积分及其应用 报告1 一、 目的意义 (1)进一步熟悉掌握复化梯形公式。 (2)进一步掌握熟悉复化抛物线公式。 (3) 学会比较复化梯形公式和复化抛物线公式如何达到所要求的精度。 二、 内容要求 积分计算问题: 分别用复化梯形和复化Simpsom求积公式计算积分, 并比较计算量( 精度为10-8) 。 三、 问题解决的方法与算法 方法: 利用复化梯形和复化抛物线积分公式。 算法: 输入: 端点a、 b以及要计算的积分公式f(x); 输出: 积分f(x)在指定区间上的近似值以及当其达到所要求的精度时要做的等分数n的值。 Step1: 编写复化梯形公式程序。 Step2: 经过所要达到的精度作为条件, 算出要做的等分数以及对应的近视值。 Setp3: 编写复化抛物线积分公式程序。 Setp4: 经过所要达到的精度作为条件, 算出要做的等分数以及对应的近视值。 Setp5: 然后比较复化梯形和复化抛物线的所需等分数, 比较谁的精度比较高。 四、 计算程序 1.复化梯形 #include <stdio.h> #include <math.h> double f(double x) { double s; s=13*(x-x*x)*exp(-1.5*x); return s; } void main() { int n,i; double h,m,y,a,b,t[3000]; printf("请输入端点的值a,b\n"); scanf("%lf",&a); scanf("%lf",&b); for(n=1;;n++) { h=(b-a)/n; m=(f(a)+f(b))/2; for(i=1;i<n;i++) { m+=f(a+i*h); } t[n]=m*h; h=(b-a)/(n+1); m=(f(a)+f(b))/2; for(i=1;i<n+1;i++) { m+=f(a+i*h); } t[n+1]=m*h; if(fabs(t[n+1]-t[n])<0.00000001) break; } printf("求得结果为n=%d",n); printf("求得结果为:t[n+1]=%10.8f\n",t[n+1]); } 2.复化抛物线 #include <stdio.h> #include <math.h> double f(double x) { double s; s=13*(x-x*x)*exp(-1.5*x); return s; } void main() { int i,n; double h,m,p,q,x,s,a,b,t[1000]; printf("请输入端点的值a,b\n"); scanf("%lf",&a); scanf("%lf",&b); for(n=1;;n++) {h=(b-a)/(2*n); m=f(a)+f(b); p=0; q=0; for(i=1;i<2*n;i++) { x=a+i*h; if(i%2==0) q=q+f(x); else p=p+f(x); } t[n]=h*(m+2*q+4*p)/3; h=(b-a)/(2*(n+1)); m=f(a)+f(b); p=0; q=0; for(i=1;i<2*(n+1);i++) { x=a+i*h; if(i%2==0) q=q+f(x); else p=p+f(x); } t[n+1]=h*(m+2*q+4*p)/3; if(fabs(t[n+1]-t[n])<0.00000001) break; } printf("求得结果为:n=%d\n",n); printf("求得结果为:%10.8f\n",t[n+1]); } 五、 计算结果与分析 1.复化梯形的运行结果: 2.复化抛物线的运行结果: 分析与评价: 经过对复化梯形的运行结果和复化抛物线的运行结果的分析得到, 当其所要求的精度相同时, 复化抛物线的的等分数明显比复化梯形的等分数少, 因此能够得到复化抛物线的精度比复化梯形的精度高。 六、 参考文献 [1] 谭浩强. C语言程序设计[M]. 北京: 清华大学出版社, . [2] 秦新强. 数值逼近, 西安:西安理工大学印刷厂, . 机械设计问题 报告2 一、 目的意义 (1)掌握分段线性插值多项式的算法实现。 (2)学会分析误差和精度, 熟练运用各类编程的语句。 (3)进一步提高用数值算法解决实际问题的能力。 二、 内容要求 机械设计问题: 万能拉拨机中有一个圆柱形凸轮(见图1), 其底圆半径R=30cm,凸轮的上端面不在同一平面上, 要根据从动杆位移变化的需要进行设计制造。 将底圆周长36等分为xi (i=0,1, …, 36), 每一圆弧段长为h=52.36mm,对应于每 一分点的柱高为yi (i=0,1, …, 36)。为方便, 将圆柱展开为平面, 柱面的的顶端成为图2所示的平面曲线, 并已知该曲线上的37个点的坐标( 表1) 。 y C A B yi yi x0 O xi x17 x36 x 图1 凸轮模型 图2 展开曲线 表1: 测量数据表 xi x0 x1 x2 x3 x4 x5 x6 x7 x8 yi 502.75 520.96 525 523.6 514.3 492 451 394.6 326.5 xi X0 x10 x11 x12 x13 x14 x15 x16 x17- x36 yi 256.7 188.6 132.1 92.2 68.9 59.6 58.2 62.24 80.45-502.75 xi=jh, x0 =0, x36=1884.96mm, h=52.36mm。 是直线段, AB是曲线段, 为了数控加工, 需要计算出圆周上任一点处的柱高,试构造算法、 设计程序、 编程计算。 三.问题解决的方法和算法 方法: 利用分段线性插值和线性插值。 算法: Step1: 输入题目所给的数据(x[i], y[i])。 Step2: 编写曲线段时要用的分段线性插值的程序。 Step3: 编写直线端时要用的线性插值的程序。 Step4: 任意输入一个插值点。 Step5: 经过判断条件计算插值点所对应的函数值。 四.程序设计 #include <stdio.h> #include <math.h> #define N 17 void main() { int i,n; double X,Y; double m1,m2,m3,m4; double x[N+1]; doubley[N+1]={502.75,520.96,525,523.6,514.3,492,451,394.6,326.5,256.7,188.6,132.1,92.2,68.9,59.6,58.2,62.24,80.45}; double h=52.36; for(i=0;i<N+1;i++) { x[i]=i*h; printf("x[%d]=%lf\n",i,x[i]); } printf("请输入要插入的值X="); scanf("%lf",&X); if(X>=0&&X<=890.12) { for(i=0;i<N;i++) { if(X>=x[i]&&X<x[i+1]) { m1=x[i]; m2=x[i+1]; m3=y[i]; m4=y[i+1]; Y=0.0; Y=m3*(X-m2)/(m1-m2)+m4*(X-m1)/(m2-m1)+Y; } else if(X=x[i]) Y=y[i]; else Y=y[i+1]; } } else if(X>=890.12&&X<=1884.96) Y=(502.75-80.45)/(1884.96-890.12)*(X-890.12)+80.45; else printf("输入的插入点不在范围内,请重新输入\n"); printf("Y=%lf\n",Y); } 五.对计算结果的分析和评价 此运行结果为第一种情况, 当插入点的值在曲线范围内所对应的x0~x17。 此运行结果为第二种情况, 当插入点的值在直线范围内所对应的x18~x36。 此运行结果为第三种情况, 当插入点的值不在题目所给的范围内时。 分析与评价: 运用数值算法解决实际问题时, 要注意各种误差。该题目运用的是分段线性插值和线性插值, 虽然存在误差, 可是对所要求的结果的影响不大, 因此本程序的结果是比较准确的。 六.参考文献 [1] 谭浩强. C语言程序设计[M]. 北京: 清华大学出版社, . [2] 秦新强. 数值逼近, 西安:西安理工大学印刷厂, . 综合应用问题 报告3 一、 目的意义 (1)掌握最小二乘法的基本算法。 (2)经过最小二乘法能够拟合多次多项式的算法。 (3)熟练运用编程所要用的各种语句, 该算法主要学会矩阵的乘法以及如何解方程组的程序的实现。 二、 内容要求 6.多项式拟合问题:考虑将[0, 1] 30 等分节点, 用多项式y = 1+ x +L+ x 5生成数据, 再分别用多项式拟合求其3 次、 5 次、 10 次、 15 次插值多项式, 并分析误差产生原因。 三.算法和方法 方法: 最小二乘法。 算法: Step1: 计算和输入题目所给的数据对(x[i],y[i])。 Step2: 输入系数矩阵和系数矩阵的转置, 两个矩阵相乘得到新矩阵。 Step3: 系数矩阵的转置与函数值矩阵相乘, 得到新矩阵。 Step4: 得到所要求的方程组解方程组。 Step5: 得到多项式的各项系数。即能够写出所要求的拟合多项式。 四.程序设计。 #include <stdio.h> #include <conio.h> #include <math.h> #include <process.h> #define N 7//N个点 #define T 15 //T次拟合 #define W 1//权函数 #define PRECISION 0.00001 float pow_n(float a,int n) { int i; if(n==0) return(1); float res=a; for(i=1;i<n;i++) { res*=a; } return(res); } void mutiple(float a[][N],float b[][T+1],float c[][T+1]) { float res=0; int i,j,k; for(i=0;i<T+1;i++) for(j=0;j<T+1;j++) { res=0; for(k=0;k<N;k++) { res+=a[i][k]*b[k][j]; c[i][j]=res; } } } void matrix_trans(float a[][T+1],float b[][N]) { int i,j; for(i=0;i<N;i++) { for(j=0;j<T+1;j++) { b[j][i]=a[i][j]; } } } void init(float x_y[][2],int n) { int i; printf("请输入%d个已知点: \n",N); for(i=0;i<n;i++) { printf("(x%d y%d):",i,i); scanf("%f %f",&x_y[i][0],&x_y[i][1]); } } void get_A(float matrix_A[][T+1],float x_y[][2],int n) { int i,j; for(i=0;i<N;i++) { for(j=0;j<T+1;j++) { matrix_A[i][j]=W*pow_n(x_y[i][0],j); } } } void print_array(float array[][T+1],int n) { int i,j; for(i=0;i<n;i++) { for(j=0;j<T+1;j++) { printf("%-g",array[i][j]); } printf("\n"); } } void convert(float argu[][T+2],int n) { int i,j,k,p,t; float rate,temp; for(i=1;i<n;i++) { for(j=i;j<n;j++) { if(argu[i-1][i-1]==0) { for(p=i;p<n;p++) { if(argu[p][i-1]!=0) break; } if(p==n) { printf("方程组无解!\n"); exit(0); } for(t=0;t<n+1;t++) { temp=argu[i-1][t]; argu[i-1][t]=argu[p][t]; argu[p][t]=temp; } } rate=argu[j][i-1]/argu[i-1][i-1]; for(k=i-1;k<n+1;k++) { argu[j][k]-=argu[i-1][k]*rate; if(fabs(argu[j][k])<=PRECISION) argu[j][k]=0; } } } } void compute(float argu[][T+2],int n,float root[]) { int i,j; float temp; for(i=n-1;i>=0;i--) { temp=argu[i][n]; for(j=n-1;j>i;j--) { temp-=argu[i][j]*root[j]; } root[i]=temp/argu[i][i]; } } void get_y(float trans_A[][N],float x_y[][2],float y[],int n) { int i,j; float temp; for(i=0;i<n;i++) { temp=0; for(j=0;j<N;j++) { temp+=trans_A[i][j]*x_y[j][1]; } y[i]=temp; } } void cons_formula(float coef_A[][T+1],float y[],float coef_form[][T+2]) { int i,j; for(i=0;i<T+1;i++) { for(j=0;j<T+2;j++) { if(j==T+1) coef_form[i][j]=y[i]; else coef_form[i][j]=coef_A[i][j]; } } } void print_root(float a[],int n) { int i,j; printf("%d个点的%d次拟合的多项式系数为:\n",N,T); for(i=0;i<n;i++) { printf("a[%d]=%g,",i+1,a[i]); } printf("\n"); printf("拟合曲线方程为:\ny(x)=%g",a[0]); for(i=1;i<n;i++) { printf(" + %g",a[i]); for(j=0;j<i;j++) { printf("*X"); } } printf("\n"); } void process() { float x_y[N][2],matrix_A[N][T+1],trans_A[T+1][N],coef_A[T+1][T+1],coef_formu[T+1][T+2],y[T+1],a[T+1]; init(x_y,N); get_A(matrix_A,x_y,N); printf("矩阵A为: \n"); print_array(matrix_A,N); matrix_trans(matrix_A,trans_A); mutiple(trans_A,matrix_A,coef_A); printf("法矩阵为: \n"); print_array(coef_A,T+1); get_y(trans_A,x_y,y,T+1); cons_formula(coef_A,y,coef_formu); convert(coef_formu,T+1); compute(coef_formu,T+1,a); print_root(a,T+1); } void main() { process(); } 五.计算结果与分析 三次多项式时: 五次多项式时: 十次多项式和十五次多项式时: 分析与评价: 根据运行结果可得, 已知的数据对数只能够拟合成三次多项式和五次多项式, 不能拟合成十次多项式和十五次多项式, 因为其多项式系数作为未知量的方程组无解。 其误差产生原因是在计算过程中数据的四舍五入以及再输入数据时本身就输入的是近似值。 六.参考文献 [1] 谭浩强. C语言程序设计[M]. 北京: 清华大学出版社, . [2] 秦新强. 数值逼近, 西安:西安理工大学印刷厂, .
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:数值逼近课程设计报告样本.doc
    链接地址:https://www.zixin.com.cn/doc/4431717.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork