1.实验内容

​分别利用牛顿公式和二分法对某一方程(此实验是以开方公式为准,即x2-c=0,在验证时取c=115)进行求解。且对两者的求解结果进行比较,比较两者的迭代次数和精度。

分别编写函数Binary(min,

max, times)和 Newton(x0,

times)实现以上两种方法。实验初始界面:

选择编号进入相应的功能模块进行计算

2.主要函数

1)二分法:

​函数参数:(min,max)表示二分区间,

times表示要进行多少次二分。

变量说明:mid

=(min +

max)/2.0,即每次二分后的点。

二分原理:对于给定的方程f(x)=0,在二分区间(min,

max)上,进行如下处理:

a.选择min与max的中点mid;

b.判断f(mid)是否等于0,若是则返回mid;

c.判断f(min)*f(mid)<0,若true,则max=mid;

d.否则min=mid;

f.判断次数是否达到times次,若是完成,若否返回a。

2)牛顿迭代函数

​函数参数:x0表示给定的初值,times表示迭代次数;

​牛顿迭代:按照牛顿迭代公式

​把已知的初始值x0带入等式的右边,得到x1。然后再把x1带入右端得到x2,由于牛顿迭代公式的局部收敛性,当带入一个合适的初始值时,如此下去便能求得精度很高的近似值。

3.实验结果

1)。二分法结果​

首先选择编号1进入二分功能模块,系统提示输入下限,即前面说的min,输入后回车,系统提示输入上限,即max,最后系统提示输入二分次数,即times。输入以后的结果如下:​

从第9次与第10次对比可以知道,经过10次二分以后达到的精度为4次。

2)。牛顿迭代结果

选择2进入牛顿迭代功能模块,系统提示输入初始值,即前面的x0,接着系统提示输入迭代次数。回车以后的结果:

从4次开始,迭代结果就开始重复了,对比第2次与第3次可知,在相同给定的条件下,即给定初值为x0=10,经过三次牛顿迭代便达到了10为有效数字,可见牛顿迭代的速度要明显快于二分法。

为了与二分法进行平等的对比,这里在以二分的上限max=11来作为牛顿迭代的初始值,得到结果如下,其也是在第3次迭代后便达到了10位有效数字,可见牛顿迭代速度之快。

​4.实验分析

​牛顿迭代相对于二分法有明显的速度优势,但是二分法比牛顿法有更加重要的性质。对于二分法只要你给定一个足够大的包含解的上下限,一定能够经过有限次二分找到满足精度的解。但是对于牛顿迭代,由于其局部收敛性,当给定的初值远离真实值的时候,可能会发生发散的情况,其求解速度反而比二分要慢。如下这种情况:

二分法:(0.0001,

100)迭代次数为20次

通过最后两次的比较,其达到5位有效数字;

牛顿迭代,初始值x0=0.0001,同样迭代20次

比较最后两次,其达到4位有效数字。

5.实验源码

​#include

#include

//#progmma comment(lib, "ws2_32.lib")

void menu();

double Newton(double x0, int times);

double Binary(double min, double max, int times);

//times表迭代次数,求解区间(min, max)

void First();

void Second();

double f(double x);  //f(x)

double p(double x);

//f(x)的迭代格式

int main(){

int flag=0;

menu();

printf("\t\t请输入:");

scanf("%d", &flag);

while(flag){

if(flag == 1) {

First();

printf("\t\t----------------------------------------------\n");

}

else if(flag == 2) {

Second();

printf("\t\t----------------------------------------------\n");

}

else printf("\t\t输入错误!\n");

printf("\t\t请继续输入:");

scanf("%d", &flag);

}

printf("\t\tExit successful!\n");

return 0;

}

void menu(){

printf("\t\t---------方程(y = x*x - 115)求根--------------\n");

printf("\t\t

\n");

printf("\t\t

1. 二分法

\n");

printf("\t\t

2. 牛顿迭代

\n");

printf("\t\t

0. 退出

\n");

printf("\t\t----------------------------------------------\n");

}

void First(){

double max=0, min=0, fruit=0;

int times = 0; //迭代次数

printf("\t\t请输入下限:");//min

scanf("%lf", &min);

//这里min是double型数据,所以输入格式应该是%lf,如果按%f输入那么会造成输入错误

printf("\t\t请输入上限:");//max

scanf("%lf", &max);

printf("\t\t请输入二分次数:");//精度e

scanf("%d", ×);

fruit = Binary(min, max, times);

if(fruit == 0)

printf("此内没有解\n");

else

printf("\t\tBinary: .8f\n", fruit); //二分计算

}

double f(double x){

return x * x - 115;

}

double Binary(double min, double max, int

times){

double mid = 0;

int i=0;

//printf("min:%f max:%f\n", min,max);

printf("\n");

printf("\t\t

次数\t  结果\n");

for(i=1; i<=times; i++){

mid = (min + max)/2.0;

if(f(min)*f(mid) < 0)

max = mid;

else if(f(mid) == 0)

return mid;

else

min = mid;

printf("\t\t\t%d   \t.8f\n", i, mid);

}

return mid;

}

double Newton(double x0, int times){

int i=0;

//printf("x0:%f   times:%d\n", x0, times);

if(x0 == p(x0)) return x0; //如果x0刚好是解,直接返回

//printf("\t\t1   \t.8f\n", x0);

printf("\n");

printf("\t\t

次数\t  结果\n");

for(i=1; i<=times; i++){

x0 = p(x0);

printf("\t\t\t%d   \t.8f\n", i, x0);

}

return x0;

}

//y = x*x - 115 的牛顿迭代格式为p(x);

double p(double x){

double fruit=0;

fruit = 0.5 * (x + 115.0/x);

//printf("p \t%f\n", fruit);

return fruit;

}

void Second(){

double x0=0;//x0表示初值

int times=0;//times表迭代次数

printf("\t\t请输入初值:");//x0

scanf("%lf", &x0);

printf("\t\t请输入迭代次数:");//e

scanf("%d", ×);

printf("\t\tNewton: .8f\n", Newton(x0, times));

}

二分法求解方程的根java_【数值分析】利用二分法和牛顿公式求解方程的根相关推荐

  1. 二分法python上机实验报告_数值分析上机实验报告..doc

    数值分析上机实验报告. 实验报告一 题目: (绪论) 非线性方程求解及误差估计 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要.本实验采用两种常见的求解方法二分法.Newton ...

  2. 利用特征值与特征向量求解弹性力学中的主应力与主平面问题

    利用特征值与特征向量求解弹性力学中的主应力与主平面问题 前言 一.二向应力状态 1. 莫尔圆图解法 2. 特征值与特征向量解法 二.三向应力状态 前言 已知物体在任意一点的六个应力分量(σx,σy,σ ...

  3. 分别用二分法和牛顿迭代法求解方程x3 – 3x – 1 = 0在x = 2附近的实根

    编写程序,分别用二分法和牛顿迭代法求解方程x3 – 3x – 1 = 0在x = 2附近的实根,要求计算精确到小数点后七位数字为止,并将求出的近似结果与理论值2cos20 相比较,二分法的初始迭代区间 ...

  4. 写一个判断方程根的C语言程序,写出求方程ax2+bx+c=0的根的算法,画出相应的程序框图,并要求输出它的实根....

    写出求方程ax2+bx+c=0的根的算法,画出相应的程序框图,并要求输出它的实根. 答案 思路分析:主要考查含参问题的讨论方法及条件嵌套结构的应用.输入三个实数a,b,c,先判断a是否为零,当a≠0时 ...

  5. 如何利用扩展欧几里得算法求解不定方程_欧几里德算法、拓展欧几里德、中国剩余定理...

    01.欧几里德算法(Euclidean algorithm)(辗转相除法) 欧几里德算法又称辗转相除法,主要是用于计算两个整数a,b的最大公约数. 简单点说一下算法原理:两个整数的最大公约数等于其中小 ...

  6. 利用MSFM算法计算程函方程的走时CT胖射线反演法

    利用MSFM算法计算程函方程的走时CT胖射线反演法 基于程函方程的弹性波走时CT胖射线反演方法,是在反演迭代过程中,利用程函方程计算走时场,并得到接收点处的走时数据,用这个数据代替正演数据.每次迭代完 ...

  7. 二分法和简单迭代法的优缺点_二分法和牛顿迭代法求解方程的比较.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp高等教育&nbsp>&nbsp理学 二分法和牛顿迭代法求解方程的比较.doc5页 本文档一共 ...

  8. C++利用二维数组求解线性方程组

    C++利用二维数组求解线性方程组 今天给大家介绍二维数组,以下介绍来自二维数组百度百科 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式] ...

  9. 利用Matlab优化工具箱求解旅行商最短路径问题

    前面介绍了利用Matlab二元整数规划求解数独问题,对于另一个问题-旅行商问题也可以用它来求解. 旅行商问题就是找到经过所有站点的最短闭合路径,如下图为在美国地图框架内产生的200个旅行站点,而旅行商 ...

  10. wps 模拟分析 规划求解_【网友来稿】利用Excel求解线性规划问题

    点击上方"运筹学小将",和小将一起学习运筹学把 提问 Qustions 解答 Answers 01 网友分享历年真题到公众号后台有现金收入吗? 没有. 02 分享历年真题到公众号后 ...

最新文章

  1. 快递员依据管理中心发来收件信息
  2. c语言求一个数组的众数,众数问题 (C语言代码)
  3. 吴恩达 coursera ML 第十二课总结+作业答案
  4. 利用SoapHeader验证web service调用的合法性(dwonmoon)
  5. H.264句法和语法总结 句法元素的分层结构
  6. mysql 5.5 1366错误_laravel5.3 在 mysql5.1中运行出错 error: 1366 Incorrect integer
  7. ArcGIS利用数据驱动工具条批量出图(python代码)
  8. 12.混淆——数字音频采样,混淆,反混淆,脉冲序列_2
  9. python框架django教程_[Python] Django框架入门3——深入视图
  10. socket编程:简单TCP服务器/客户端编程
  11. [转载]MySQL锁机制
  12. Linux下编译DCMTK,ACE问题记录
  13. 【工具】 Wget网页图片下载利器
  14. 属于计算机审计中测试信息系统的方法是,审计信息化问题浅析论文
  15. python 怎么将数字转大写_python 数字转换为大写
  16. hdu Intelligent IME
  17. 定时器应用—选项卡自动切换
  18. 小卡与质数2全网最简单思路 看不懂你来打我
  19. IT运维工程师要会什么?
  20. 地址解析协议(Address Resolution Protocol)

热门文章

  1. Python少儿编程入门篇(1)基本数据类型
  2. 【wpa_supplicant】入门 eloop 机制
  3. 双基因突变患者_肺癌多EGFR基因突变 7成脑转移 双标靶并用 有效控制肿瘤
  4. crmeb重新安装_Linux下CRMEB环境搭建
  5. 《数字电子技术基础》5.3/4/5 电平/脉冲/边沿触发的触发器
  6. 一个完整的项目管理流程包括什么?
  7. sql语句实现动态添加查询条件
  8. aliddns ipv6_AliDDNS v2.0.0.1 - 阿里云DNS动态解析Windows客户端 支持IPv6 微信推送
  9. 2020年班级管理html,2020-2021学年度小学四年级班级管理工作计划
  10. centos7搭建hexo+nods.j个人博客