实验3非线性方程求根问题.docx
- 文档编号:9694357
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:15
- 大小:134.78KB
实验3非线性方程求根问题.docx
《实验3非线性方程求根问题.docx》由会员分享,可在线阅读,更多相关《实验3非线性方程求根问题.docx(15页珍藏版)》请在冰豆网上搜索。
实验3非线性方程求根问题
西华数学与计算机学院上机实践报告
课程名称:
计算方法A
年级:
上机实践成绩:
指导教师:
严常龙
姓名:
上机实践名称:
非线性方程求根问题
学号:
上机实践日期:
上机实践编号:
1
上机实践时间:
一、目的
1.通过本实验的编程练习,加深对非线性方程求根方法之二分法、简单迭代法、、牛顿迭代法等的构造过程的理解;
2.能将各种方法的算法描述正确地改编为程序并上机实现;
3.比较各种方法在求解同一非线性方程根时,在收敛情况上的差异。
二、内容与设计思想
自选求根问题,分别用二分法、简单迭代法、埃特金加速收敛法和牛顿迭代法求解其根,然后完成编程作业(注意把同一求根问题的几种不同方法放在一个程序之内)。
以下求根问题供参考和选择,也可自行选择其他求根问题:
1.用二分法求方程f(x)=x3-2x-5=0在区间[2,3]内的根。
2.方程f(x)=2x3-5x2-19x+42=0在x=3.0附近有根,试写出其三种不同的等价形式以构成三种不同的迭代格式,再用简单迭代法求根,观察这三种迭代是否收敛及收敛的快慢。
3.用牛顿迭代法求方程f(x)=x3+2x2+10x-20=0在区间[1,1.5]上的根。
4.Cosx=x在区间[0,/2]上的根。
三、使用环境
操作系统:
WindowsXP
软件环境:
MicrosoftVisualC++
四、核心代码及调试过程
第一题:
用二分法求方程f(x)=x3-2x-5=0在区间[2,3]内的根。
方程的近似解是:
x=2.094552。
#include
#include
#defineN25
voidmain()
{
intk;
floata[N],b[N],c[N],fa[N],fb[N],fc[N];
floatx,y;
printf("请输入a[0]的数值:
");
scanf("%f",&x);
printf("\n请输入b[0]的数值:
");
scanf("%f",&y);
a[0]=x;
b[0]=y;
for(k=0;k { fa[k]=a[k]*a[k]*a[k]-2*a[k]-5; fb[k]=b[k]*b[k]*b[k]-2*b[k]-5; c[k]=(a[k]+b[k])/2; fc[k]=c[k]*c[k]*c[k]-2*c[k]-5; if(fb[k]*fc[k]>0) { b[k+1]=c[k]; a[k+1]=a[k]; } elseif(fa[k]*fc[k]>0) { a[k+1]=c[k]; b[k+1]=b[k]; } } for(k=0;k { printf("下面是第%d次计算结果! \n",k+1); printf("a[%d]=%fc[%d]=%fb[%d]=%f\n",k,a[k],k,c[k],k,b[k]); printf("################\n"); printf("fa[%d]=%ffc[%d]=%ffb[%d]=%f\n",k,fa[k],k,fc[k],k,fb[k]); } } 计算23次,得到最终结果: x=2.094552。 第二题: 2.方程f(x)=2x3-5x2-19x+42=0在x=3.0附近有根,试写出其三种不同的等价形式以构成三种不同的迭代格式,再用简单迭代法求根,观察这三种迭代是否收敛及收敛的快慢。 用形式 (1): X= ,迭代法求根。 #include #include #defineN20 voidmain() { intk; doublex; printf("请输入x的初始数值: "); scanf("%lf",&x); for(k=0;k { x=sqrt((2*x*x*x-19*x+42)/5); printf("第%d次计算结果: ",k+1); printf("x=%lf\n",x); } printf("方程的近似解为: x=%lf\n",x); } 迭代计算14次,得到最后结果: x=2.00000。 用迭代形式 (2): X= ,迭代法求根。 #include #include #defineN50 voidmain() { intk; doublex; printf("请输入x的初始数值: "); scanf("%lf",&x); for(k=0;k { x=pow((5*x*x+19*x-42)/2,1.0/3.0); printf("第%d次计算结果: ",k+1); printf("x=%lf\n",x); } printf("方程的近似解为: x=%lf\n",x); } 迭代计算46次,得到最后结果x=3.500000。 用形式(3): X=(2*X*X*X-5*X*X+42)/19迭代法求根。 #include #include #defineN20 voidmain() { intk; doublex; printf("请输入x的初始数值: "); scanf("%lf",&x); for(k=0;k { x=(2*x*x*x-5*x*x+42)/19; printf("第%d次计算结果: ",k+1); printf("x=%lf\n",x); } printf("方程的近似解为: x=%lf\n",x); } 迭代计算12次,得到最后结果: x=2.00000。 第3题: 用牛顿迭代法求方程f(x)=x3+2x2+10x-20=0在区间[1,1.5]上的根。 #include #include #defineN10 voidmain() { intk; doublex; printf("请输入x的初始数值: "); scanf("%lf",&x); for(k=0;k { x=x-(x*x*x+2*x*x+10*x-20)/(3*x*x+4*x+10); printf("第%d次计算结果: ",k+1); printf("x=%lf\n",x); } printf("方程的近似解为: x=%lf\n",x); } 计算3次,得到最后结果: x=1.368808。 第4题: Cosx=x在区间[0,/2]上的根。 #include #include #defineN40 voidmain() { intk; doublex; printf("请输入x的初始数值: "); scanf("%lf",&x); for(k=0;k { x=cos(x); printf("第%d次计算结果: ",k+1); printf("x=%lf\n",x); } printf("方程的近似解为: x=%lf\n",x); } 五、总结 通过本次上机实验,我对求非线性方程的实单根有了深入的掌握。 方程的解称为方程的根或函数的零点。 函数可以是多项式,指数函数,对数函数,三角函数或其它超越函数。 方程的实数根可能不止一个,我们可以采用隔离的办法,使得实函数在某个区间上有且只有一个零点。 方程求根常用的方法有: 二分法,简单迭代法,牛顿迭代法。 三种方法都有一定的使用条件。 二分法要求在区间上有唯一根,简单迭代法要求迭代公式是收敛的,牛顿迭代法要求在区间上二阶可导。 对于编程序实现计算,主要运用数组存储数据,用循环语句实现迭代。 迭代计算过程存在舍入误差,我们应尽量减小误差,在实际应用中,要选择较好的计算方法。 六、附录 参考: 《数值计算方法与算法》(第二版)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 非线性 方程 求根 问题