实验3非线性方程求根问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西华数学与计算机学院上机实践报告
课程名称:计算方法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]上的根。
三、使用环境
操作系统:Windows XP
软件环境:Microsoft Visual C++
四、核心代码及调试过程
第一题:用二分法求方程f(x)=x3-2x-5=0在区间[2 , 3]内的根。
方程的近似解是:x=2.094552。
#include
#include
#define N 25
void main()
{
int k;
float a[N],b[N],c[N],fa[N],fb[N],fc[N];
float x,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]; } else if(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]=%f c[%d]=%f b[%d]=%f\n",k,a[k],k,c[k],k,b[k]); printf("################\n"); printf(" fa[%d]=%f fc[%d]=%f fb[%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 #define N 20 void main() { int k; double x; 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 #define N 50 void main() { int k; double x; 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