一元非线性方程求解数值分析.docx
《一元非线性方程求解数值分析.docx》由会员分享,可在线阅读,更多相关《一元非线性方程求解数值分析.docx(18页珍藏版)》请在冰豆网上搜索。
一元非线性方程求解数值分析
课程设计报告
课程名称
课题名称
专业
班级
学号
姓名
指导教师
年月日
湖南工程学院
课程设计任务书
课程名称计算方法
课题
专业班级
学生姓名
学号
指导老师
审批
任务书下达日期2007年6月9日
任务完成日期2007年6月20日
一、设计内容与设计要求
1.设计内容:
对课程《计算方法》中的常见算法进行综合设计或应用(具体课题题目见后面的供选题目)。
2.设计要求:
●课程设计报告正文内容
a.问题的描述及算法设计;
b.算法的流程图(要求画出模块图);
c.算法的理论依据及其推导;
d.相关的数值结果(通过程序调试),;
e.数值计算结果的分析;
f.附件(所有程序的原代码,要求对程序写出必要的注释)。
●书写格式
a.要求用A4纸打印成册
b.正文格式:
一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
c.正文的内容:
正文总字数要求在3000字左右(不含程序原代码)。
d.封面格式如下页。
●考核方式
指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。
具体考核标准包含以下几个部分:
a.平时出勤(占10%)
b.系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)
c.程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)
d.设计报告(占30%)
注意:
不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。
e.独立完成情况(占10%)。
●课程验收要求
a.判定算法设计的合理性,运行相关程序,获得正确的数值结果。
b.回答有关问题。
c.提交课程设计报告。
d.提交软盘(源程序、设计报告文档)。
e.依内容的创新程度,完善程序情况及对程序讲解情况打分。
三、进度安排
1、班级:
信息与计算科学:
0501、0502、0503
2、主讲教师:
聂存云
3、辅导教师:
聂存云、赵钍焱
4、时间安排:
第16周星期一8时:
30分——11时:
30分
星期二8时:
30分——11时:
30分
星期四8时:
30分——11时:
30分
星期五8时:
30分——11时:
30分
1问题的描述:
给定函数f(x)=-x
-4x
+10要求用一下四种方法球的该一次非线性函数的零点
(1)Fixed-pointiteration
(2)Newtoniteration(3)Secantiteration(4)Aitken△
method算法设计用简单的程序加上已经推导出的公式即可以将该函数的零点算出
2算法的流程图
(1)Fixed-point的算法流程图
图1不动点迭代流程
(2)Newtoniteration算法的流程图
图2牛顿迭代算法流程图
(3)Secantiteration算法流程图
图3割线算法流程图
(4)Aitken△
method算法流程图
图4加速算法流程图
针对以上四个图形的说明:
x0,x1:
初值
i:
迭代的次数
N0:
总的迭代次数
Y:
是N:
否
error:
误差
TOL:
精度要求。
3算法的理论依据:
(1)Fixed-pointiteration
理论依据是利用了函数的不动点定理即函数在某一个自变量处的函数值与该自变量相等(x=g(x))
(2)Newtoniteration
理论依据是利用了切线原理,首先得到函数在初值点处切线与直线y=0的交点,然后用该交点作为下一轮迭代的初值点(x=x0-f(x0)/f’(x0))
(3)Secantiteration
的理论依据是利用了割线与直线y=0的交点得到,已知两个初值点求得两
的函数值在函数曲线上用直线连接该两点得到函数曲线的割线,得到割线
与直线y=的交点,结合第一轮中的一个点作为下一轮迭代的两个初值点即
(x=x1-f(x1)(x1-x0)/(f(x1)-f(x0)))
(4)Aitken△
method
理论依据是,根据原来的序列构造出一个新的序列,新的序列比原来序列的收敛速度快,新的序列中的元素是p=p0-(p1-p0)
/(p0-2*p1+p2).
4相关的数值结果(通过程序调试)
(1)Fixed-point
(2)Newtoniteration
(3)Secantiteration
(4)Aitken△
method
5数值计算结果的分析
从运行结果可以看出不动点迭代的收敛速度最慢,Newton和Secant的收敛速度差不多,从四种方法运行的结果可以看出该函数的零点时1.36523。
6所有程序的源代码:
(1)Fixed-point
#include
#include
usingnamespacestd;
intmain(){
doublex0,x,TOL=pow(10,-4);
inti=0,N;
cout<<"请输入初值x0=";
cin>>x0;
cout<cout<<"请输入要迭代的次数N=";
cin>>N;
cout<while(i<=N){
//不动点迭代函数
x=sqrt(10-pow(x0,3))/2;
//误差判断
if(fabs(x-x0)<=TOL)
//输出结果
cout<<"x"<
i++;
//更换初始值
x0=x;
}
return0;
}
(2)Newton
#include
#include
usingnamespacestd;
intmain(){
doublex0,x,TOL=pow(10,-6);
inti=1,N;
cout<<"请输入初值x0=";
cin>>x0;
cout<cout<<"请输入要迭代的次数N=";
cin>>N;
cout<while(i<=N){
//Newton迭代公式
x=x0-(-pow(x0,3)-4*pow(x0,2)+10)/(-3*pow(x0,2)-8*x0);
//误差判断
if(fabs(x-x0)<=TOL)
//输出结果
cout<<"x"<
i++;
//更换初始值
x0=x;
}
return0;
}
(3)Secant
#include
#include
usingnamespacestd;
intmain(){
doublex0=0,x1=0,x=0,TOL=pow(10,-4),fx0,fx1,fx;
inti=2,N;
cout<<"请输入初值x0=";
cin>>x0;
cout<<"请输入初值x1=";
cin>>x1;
cout<<"请输入要迭代的次数N=";
cin>>N;
while(i<=N){
//计算初值点出的函数值
fx1=-pow(x1,3)-4*pow(x1,2)+10;
fx0=-pow(x0,3)-4*pow(x0,2)+10;
fx=-pow(x,3)-4*pow(x,2)+10;
//割线公式
x=x1-fx1*(x1-x0)/(fx1-fx0);
//判断是否满足精度要求
if(fabs(x1-x)<=TOL)
cout<<"x"<
i++;
//更换初始值
x0=x1;
fx0=fx1;
x1=x;
fx1=fx;
}
return0;
}
(4)Aitken△
method
#include
#include
usingnamespacestd;
intmain(){
doublex0,x1,x2,x,TOL=pow(10,-4);
inti=1,N;
cout<<"请输入初值x0=";
cin>>x0;
cout<<"请输入要迭代的次数N=";
cin>>N;
while(i<=N){
//根据不动点迭代公式计算两个初值点
x1=sqrt(10-pow(x0,3))/2;
x2=sqrt(10-pow(x1,3))/2;
//加速公式
x=x0-pow(x1-x0,2)/(x0-2*x1+x2);
//判断是否满足精度要求
if(fabs(x-x2)<=TOL)
cout<<"x"<
i++;
//更换初值
x0=x1;
x1=x2;
x2=x;
}
return0;
}
数理系课程设计评分表
课程名称:
项目
评价
设计方案的合理性与创造性
设计与调试结果
设计说明书的质量
答辩陈述与回答问题情况
课程设计周表现情况
综合成绩
教师签名:
日期:
仅供个人用于学习、研究;不得用于商业用途。
Forpersonaluseonlyinstudyandresearch;notforcommercialuse.
NurfürdenpersönlichenfürStudien,Forschung,zukommerziellenZweckenverwendetwerden.
Pourl'étudeetlarechercheuniquementàdesfinspersonnelles;pasàdesfinscommerciales.
толькодлялюдей,которыеиспользуютсядляобучения,исследованийинедолжныиспользоватьсявкоммерческихцелях.
以下无正文