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

article/2025/9/19 20:17:19

1.实验内容

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

分别编写函数Binary(min,

max, times)和 Newton(x0,

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

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

2.主要函数

1)二分法:

a4c26d1e5885305701be709a3d33442f.png

​函数参数:(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表示迭代次数;

a4c26d1e5885305701be709a3d33442f.png

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

a4c26d1e5885305701be709a3d33442f.png

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

3.实验结果

1)。二分法结果​

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

a4c26d1e5885305701be709a3d33442f.png

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

2)。牛顿迭代结果

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

a4c26d1e5885305701be709a3d33442f.png

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

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

a4c26d1e5885305701be709a3d33442f.png

​4.实验分析

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

二分法:(0.0001,

100)迭代次数为20次

a4c26d1e5885305701be709a3d33442f.png

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

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

a4c26d1e5885305701be709a3d33442f.png

比较最后两次,其达到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));

}


http://chatgpt.dhexx.cn/article/vmEpvQPm.shtml

相关文章

验证牛顿公式的局部收敛性,并找到对于牛顿公式不收敛(发散)的函数,比较二分法与牛顿公式的收敛速度

文末有代码&#xff0c;大家可以自己跑一下&#xff0c;体会一下牛顿法的运算过程 二、实验目的&#xff1a; a.验证牛顿公式的局部收敛性&#xff1b; b.比较二分法与牛顿公式的收敛速度&#xff1b; c.验证求解结果的正确性&#xff1b; 三、实验内容 a.在验证牛顿公式的…

牛顿迭代公式(详细)

牛顿迭代公式 X n 1 X n − f ( x ) f ′ ( x ) X_{n1} X_n -\frac{f(x)}{f(x)} Xn1​Xn​−f′(x)f(x)​ 上网搜了很久,搞懂了一点,简单记录一下 其实弄懂了一点后会发现它并不是很高大上&#x1f605; . 先来一段代码 求9的平方根,java实现 public static void main…

牛顿-莱布尼茨公式

牛顿-莱布尼兹公式&#xff08;Newton-Leibniz formula&#xff09;&#xff0c;通常也被称为微积分基本定理&#xff0c;揭示了定积分与被积函数的原函数或者不定积分之间的联系。 牛顿-莱布尼茨公式的内容是一个连续函数在区间 [ a&#xff0c;b ] 上的定积分等于它的任意一个…

python语言培训是密封式的吗

述&#xff08;最多18字 以下试题内容来源由-众课帮-公众号和小程序提供 可查询更多的试题答案新鲜尿液有氨臭味 变异性心绞痛患者首选药物是 A_______ofdependenceonGMOseedsandchemicalfertilizers,pesticides(杀虫剂),andherbicides&#xff08;除草剂&#xff09;isthencre…

【业界分享】字节跳动如何用 7 年,成为腾讯最可怕的对手?张一鸣一语道破...

点击上方&#xff0c;选择星标或置顶&#xff0c;每天给你送干货&#xff01; 阅读大概需要16分钟 跟随小博主&#xff0c;每天进步一丢丢 转载自公众号&#xff1a;开发者技术前线 2019 年&#xff0c;字节跳动被预估广告收入可达 1000 亿元。 说到互联网巨头&#xff0c;很多…

VR旅游应用案例解析,世界那么大用VR去看看!

中国旅游研究院(文化和旅游部数据中心)发布“2019年上半年全国旅游经济运行情况”中显示上半年旅游经济平稳运行,预计国内旅游人数30.8亿人次,国内旅游收入2.78万亿元,同比分别增长8.8%和13.5%。由相关数据显示,旅游消费如今已经成为民众的一个重要生活方式。 同时为了不断…

从虚机到容器,秒拍架构师告诉你如何平滑进行业务迁移

近期&#xff0c;炫一下&#xff08;北京&#xff09;科技有限公司&#xff08;简称“一下科技”&#xff09;短视频产品“秒拍”完成了一个“大动作”——将原来部署在虚拟机上的主体业务迁移到华为云&#xff0c;同时将公司的技术体系承载在下一代虚拟技术容器&#xff08;Do…

git中如何取消忽略文件

问题现象描述&#xff1a; 在每天的git-----pull时&#xff0c;操作失败。报文件冲突的异常。而该冲突文件却是自己已被忽略的文件&#xff0c;在网上通用的在.gitignore文件中取消忽略的办法无法实现&#xff0c;因为.gitignore文件中根本没有哪行命令是决定该文件的忽略操作…

git忽略文件不生效问题解决

git忽略文件不生效问题解决 文章目录 git忽略文件不生效问题解决**一 .gitignore添加了忽略文件&#xff0c;但是提交时还会出现这些忽略文件** 一 .gitignore添加了忽略文件&#xff0c;但是提交时还会出现这些忽略文件 —在gitignore中忽略了.idea文件夹,但是提交时仍旧会出…

git如何忽略一个文件

1.1 添加.gitignore文件 在.gitignore文件中指定的目录和文件会在下次push时从git仓库中删除&#xff0c;本地文件不会删除。 创建.gitignore文件&#xff0c;这个文件不仅能创建在根目录&#xff0c;而且也能在子目录下创建&#xff0c;个数不限。若多个.gitignore文件中有…

git忽略文件的两种方式

目录 前言 一、忽略并且push到远程 二、忽略本地&#xff0c;不提交 2.1、忽略本地文件 2.2、取消忽略&#xff0c;恢复提交 2.2.1、查看有哪些文件被忽略 2.2.2、 取消忽略 前言 本文不讲述.gitignore文件的设置。 关键字&#xff1a;git update-index --no-assume-un…

IDEA设置GIT忽略文件提交

情景一:从未提交过的文件 我们是项目组长,组内员工总是会误把本地的一些文件提交上git,以下以target目录为例,我们过滤这个文件夹的所有内容不允许提交 一、在项目根目录下新建.gitignore文件,内容如下 target/ # Package Files # *.jar *.war *.nar *.ear *.zip *.tar.…

【git】git忽略文件 取消忽略文件

【git】git忽略文件 取消忽略文件 一、git忽略文件 &#xff08;一&#xff09;通常操作 忽略成功后会出现灰色图标 git根目录下有一个.gitignore文件&#xff0c;被忽略的文件全部会添加到里面 相关过滤规则举例说明&#xff1a; #&#xff1a;注释符号&#xff0c;自动被…

git提交忽略不必要的文件或文件夹

创建maven项目&#xff0c;使用git提交&#xff0c;有时需要忽略不必要的文件或文件夹&#xff0c;只保留一些基本。 例如如下截图&#xff0c;实际开发中我们只需提交&#xff1a;src,.gitignore,pom.xml 而自己项目文件一般都保留&#xff0c;但是有些则不必要提交&#xff0…

【git】Git-忽略某些文件

忽略某些文件 一般我们总会有些文件无需纳入 Git 的管理&#xff0c;也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件&#xff0c;比如日志文件&#xff0c;或者编译过程中创建的临时文件等。我们可以创建一个名为 .gitignore 的文件&#xff0c;列出要忽略的文…

Git忽略文件的几种方法,以及.gitignore文件的忽略规则

Git忽略文件的几种方法&#xff0c;以及.gitignore文件的忽略规则 .gitignore文件定义Git全局的.gitignore文件Git 忽略规则Git忽略规则的优先级.gitignore文件忽略规则常用匹配示例&#xff1a; 关于.gitignore规则不生效的问题 不忽略没有后缀名的文件搜索电脑里没有后缀的文…

idea设置git忽略文件

idea设置git忽略文件 根据项目忽略一.老版IDEA配置忽略文件&#xff1a;二. 新版IDEA配置忽略文件&#xff1a;特别提醒 根据分支忽略 根据项目忽略 一.老版IDEA配置忽略文件&#xff1a; 该方法是针对当前电脑的设置&#xff0c;无关项目&#xff0c;无关分支&#xff1b; 步…

git如何忽略文件或者文件夹

用git开发中会有一些不愿意提交的目录或者文件 在仓库目录下新建一个名为.gitignore的文件&#xff08;因为是点开头&#xff0c;没有文件名&#xff0c;没办法直接在windows目录下直接创建&#xff0c;必须通过右键Git Bash&#xff0c;按照linux的方式来新建.gitignore文件&…

git忽略指定文件

有时候会习惯的使用命令 git add . 直接提交代码&#xff0c;这样的话&#xff0c;会不小心把一些不需要提交的文件提交上去&#xff0c;比如编译文件等。 这个时候使用git自带的忽略文件就很好用。具体方法如下&#xff1a; 可以在文件列表建立一个.gitignore 命名的文件&am…

Git操作 --忽略文件

目录 一、.gitignore二、使用1.pycharm中的使用2. 手动创建 .gitignore 文件3. 语法 一、.gitignore 这个忽略文件只对某一级目录下的文件的忽略有效。如果某一个目录下有需要被忽略的文件&#xff0c;那么就可以在该目录下手工地创建忽略文件 .gitignore&#xff0c;并在这个…