- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
李建昊数值分析课设
《数值分析》课程设计任务书
指导教师姓名 王恒友 教研室 信计 课程设计题目 求给定代数多项式的根 人数 1 学时 5天 设计目的、任务和要求
目的
要求学生利用所学过的数值分析方法求给定代数多项式的根。
(二)任务
1. 根据所掌握的数值分析算法,选择一至两个算法,独立编写程序,实现根的求解等;
2. 根据给定的代数多项式进行测试,调式程序;
3. 对所设计的程序解决实际问题并分析,撰写分析报告。
(三)要求
学生1个人组成一个小组,要求根据上述任务,通过查找资料,完成程序设计,并撰写分析报告,报告要体现工作过程、测试结果、分析等内容。 设计的方法和步骤
查阅资料,展开充分理论分析,在掌握算法原理后进行软件设计,完成下列任务:
熟悉此次设计的目标,查阅相关资料;
对算法理论进行剖析,论证算法实现的可行性;
根据可行的算法设计,进行软件程序实现,并最终解决实际问题。
设计工作计划
本案例时间为5天,具体安排如下
熟悉课设目标,查阅相关资料:1天
算法理论进行剖析,论证算法实现的可行性:1天
根据可行的算法设计,进行软件程序实现:2天
对所设计的程序解决实际问题并分析,撰写分析报告:1天
主要参考资料
《数值分析简明教程》 王能超 高等教育出版社
《数值分析课程设计》 陈越、童若锋 浙江大学出版社
教研室签字:
年 月 日
院签字:
年 月 日
目录
一、问题分析 - 3 -
二、方法原理 - 3 -
三、算法设计 - 5 -
四、案例分析 - 7 -
五、课设总结 - 8 -
六、附录 - 9 -
一、问题分析
1.1 对问题的分析
根据上文问题的提出可知,我们要对给定的任意多项式:
求解。然而若想要一次性求出所有解则需要考虑多个因素,比如我们需要考虑重根问题,多个根值问题,本次实验我要采用的方法是二分法和牛顿法,如果遇到重根二分法就不能求出重根。因此为了避免这种误差我们将采用二分法和牛顿法相结合的方式,用牛顿法弥补二分法的不足。先提前分析可能的根区间,分段求解的方式分别求出每个根。这样让每段所求的区间上只有一个根,将其可能区间值代入程序中,经过处理就能得此根的真实值。
二、方法原理
2.1二分法原理
2.1.1基本原理
(连续函数的介值定理) 设f(x)在[a,b]上连续,且f(a) f(b)0,则存在x*((a,b)使f(x*)=0。
2.1.2具体方法
给定有根区间 [a, b] ( f(a) · f(b) 0) 和 精度要求 (
1. 令 x = (a+b)/2
2. 如果 b – a = 2(, 停止计算,输出 x ,否则执行第3步
3. 如果 f (a) f (x) 0 , 则令 b = x,否则令 a = x, 返回第1步
2.2牛顿迭代法
2.2.1 基本原理:
解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数:
取其线性部分,作为非线性方程f(x)=0的近似方程,则有:
设fˊ(x0)≠0则其解为:
再把f(x)在x1附近展开成泰勒级数,也取其线性部分作f(x)=0的近似方程。若f(x1)≠0,则得:
这样,得到牛顿法的一个迭代序列:
以上是牛顿迭代算法的基本思想,现在的任务就是确定一个初始值。由其思想可知的值越接近所求根的值越好。
三、算法设计
牛顿法代码如下:
float qiudao(double z){
int m=0;
int u;
int g;
float t=0;
q=(float *)malloc(sizeof(float)*(n+1));
for(g=0;gn;g++)
q[g]=(n-g)*p[g];
for(g=0;gn-1;g++)
{
}
for(g=0;gn-1;g++){
while(mn-1)
{
q[g]=q[g]*z;
m++;
}
m--;
}
for(u=0;un;u++)
t=q[u]+t;
return (t);
}
主函数
printf(请输入弦截法起始点:);
scanf(%d,z);
while(1){
t=qiudao(z);
w=f(z,n);
x1=w-z*t;
x2=-1*x1/t;
z=x2;
x3=f(z,n);
if(x3-0eps) break;
}
p
文档评论(0)