实验3非线性方程求根问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档