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

北航数值分析B第二题报告完整版详解.doc

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

数学分析B 计算实习题目—第二题 算法设计方案 总体思路:由于需要四种方法进行细化,所以大体需要四个模块,实际上采用在main函数里面进行声明和调用几个子函数,f1(),f2(),f3(),分别是线性插值,二次插值和三次插值,prepare()函数用于求关于Mi的线性方程的参数,chase()函数用于采用追赶法求出Mi,three_moment()函数用于求出三弯矩法的y表达式,求出各种方法下的y的表达式后,进而x就容易求了,利用final_data()函数将数据输出,在matlab下画出细化后的轮廓线。 线性插值:插值法均采用牛顿法,d[]用于存放一阶差商值,这个值不仅在线性插值中要用,在二次插值与三次插值中都需要它进行计算,同理,二次插值中的二阶差商也要用作三次插值中的计算。线性插值算出一阶差商后基本就可以代入公式得到y的表达式了。 二次插值:每三个点为一个插值区域,共六个插值区域,利用差商表计算得出二阶差商,展开牛顿二次插值多项式,得出结果。 三次插值:每四个点为一个插值区域,共四个插值区域,这时计算量就已经有点大了,为简化运算,采用不单独计算,而是在二次插值的基础上进行计算,利用二次插值的已有数据,但是有两个二次插值在二次插值函数中并没有得到计算,即f(x3,x4,x5)和f(x7,x8,x9),所以在二次插值函数中要添加相关代码。 样条插值:计算最为复杂,但其实并不比三次插值容易错,因为只是公式很多,所以化为三个函数来完成,每个函数负责一部分计算。 输出数据:前面的计算只是算出公式,对于不同的插值法,y的分段表达式不一样,采用if,else if语句以及for循环并用到了pow()函数算幂,完成对表中数据x从1到190的细化。 全部源程序 #includestdio.h #includemath.h double x[13]={0.00,4.74,9.50,19.00,38.00,57.00,76.00,95.00,114.00,133.00,152.00,171.00,190.00}; double y[13]={0.00,5.32,8.10,11.97,16.15,17.10,16.34,14.63,12.16,9.69,7.03,3.99,0.00}; double d[12]={0};//存放一阶差商 double da[12]={0};//存放线性插值常数项 double dt[8]={0};//存放二阶差商 double dta[8]={0};//存放二阶插值x项系数 double dtb[8]={0};//存放二阶插值常数项 double ddt[4]={0};//存放二阶差商用作计算三阶差商 double dth[4]={0};//存放三阶差商 double dtha[4]={0};//存放三阶插值附加x^2项系数 double dthb[4]={0};//存放三阶插值附加x项系数 double dthc[4]={0};//存放三阶插值附加常数项 double h[13]={0};//存放样条插值的一些参数 double a[13]={0}; double b[13]={0}; double c[13]={0}; double e[13]={0}; double p[13]={0}; double q[13]={0}; double z[13]={0}; double m[13]={0}; double ta[12]={0}; double tb[12]={0}; double tc[12]={0}; double td[12]={0}; double ans1[190]={0}; double ans2[190]={0}; double ans3[190]={0}; double ans4[190]={0}; void main()//调用几个子程序 { void f1(); //线性插值 void f2();//二次插值 void f3();//三次插值 void prepare();//样条插值计算关于Mn的线性方程组的有关参数 void chase();//追赶法解线性方程组 void three_moment();//三弯矩法 void final_data(); f1(); f2(); f3(); prepare(); chase(); three_moment(); final_data(); } void f1()//线性插值函数 { int i=0; printf(分段线性插值法:\n\n); for(i=0;i12;i++) { d[i]=(y[i+1]-y[i])/(x[i+1]-x[i]); da[i]=y[

文档评论(0)

挑战不可能 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档