目录

  • 目录
  • 前言
  • (一)二分法的分析
    • 1.定义:
    • 2.需要满足的条件:
    • 3.二分法的思想:
    • 4.二分法的误差:
  • (二)代码实现
    • 1.算法流程图:
    • 2.源代码:
  • (三)案例效果
    • 1.求解:\(1-x-sin(x)=0\)
    • 2.求解:\(sin(x)-\frac{x^2 }{4}=0\)
    • 3.求解:\(x^{3}-x-1=0\)

目录

前言

对于普通的方程,我们用高中学的解方程方法是可以的,不过对于 超越方程高次代数方程 的求解是很困难的,而且也很难得到准确得解,今天我们用Python语言和二分法来求解这些方程,得到满足精度的解,并不是准确。

(一)二分法的分析

1.定义:

在某区间有函数 \(f(x)\) 在区间\([a, b]\) 内单调连续,且\(f(a)*f(b)<0\) ,根据连续函数的性质可知方程在\([a,b]\) 内一定有唯一的实根。

2.需要满足的条件:

  1. \(f(x)\)是单调函数
  2. \(f(x)\)是连续函数
  3. \(f(a)*f(b)<0\)

3.二分法的思想:

不断的分割\([a,b]\) 区间,取\([a,b]\) 的中点值\(x=(a+b)/2\)

  1. 当\(f(x)*f(a)<0?\) 时,则根在\([a,x]\) 之间;
  2. 当\(f(x)*f(b)<0\) 时,则根在\([x,b]\) 之间。
  3. 再分割\(x=(a+b)/2\)

直到\(x\)满足我们的精度,我们取\(x\) 为\(f(x)\) 的近似解。

4.二分法的误差:

我们取的是:第k次分割后的中间值为近似解。

即:\(x_k=\frac{1}{2}(a_k+b_k)\)

对于预先给定的误差:\(\varepsilon>0\)

有:\(|x^*-x_k| \le \frac{1}{2}(b_k-a_k)=\frac{1}{2^k+1}<\varepsilon\)

(二)代码实现

1.算法流程图:

2.源代码:

(1)feval函数:

def feval(string, a):"""根据值来计算数学表达式。:param string: 含有x未知数的数学表达式:param a: 自变量x的具体数值:return:  数学表达式的计算结果"""count = string.count("x")string = string.replace('x', '%f')t = (a, ) * countresult = eval(string % t)return result

(2)二分法

"""二分法:f(a)*f(b)<0 连续函数f(a)在a,b区间必有根。
"""
from my_math.func_math import fevaldef two_fun(expr, a, b, r):"""二分法求解方程:param expr: 方程表达式:param a: 左端:param b: 右端:param r: 精度:return: 求解的结果"""f_a = feval(expr, a)f_b = feval(expr, b)if f_a*f_b >= 0:print("该区间没有根")else:k = 0while 1/(2**(k+1)) > r:x = (b + a)/2if feval(expr, a) * feval(expr, x) > 0:a = xelse:b = xk += 1print("*"*20)print("次数", k)print("x:", x)print("a:", a)print("b:", b)result = (a+b)/2print("满足精度的结果:", result)# 求解1-x-sin(x)=0为例
if __name__ == '__main__':two_fun("1-x-sin(x)", 0, 1, 10**-4)

(三)案例效果

1.求解:\(1-x-sin(x)=0\)

使用二分法求解\(1-x-sin(x)=0?\) ,误差范围不超过\(\frac{1}{2}\times10^{-4}\)

(1)确定范围:

使用到数学绘图软件,根据数学表达式绘制曲线。

绘图软件的下载网址

https://www.cnblogs.com/zyg123/p/10385517.html#%E7%9B%AE%E5%BD%95

a. 大致的图像:

b.利用放大按钮,放大后的图像:

c.范围是:[0, 1]内必有根

(2)运行结果:


次数 1
x: 0.5
a: 0.5
b: 1
********************
…………


次数 13
x: 0.5108642578125
a: 0.5108642578125
b: 0.510986328125

满足精度的结果: 0.51092529296875

取结果是:0.5109

2.求解:\(sin(x)-\frac{x^2 }{4}=0\)

要求误差不超过,\(10^{-3}\)

(1)确定范围:

根据下面图像,取范围:[1.8, 2.0]

(2)运行结果:


次数 1
x: 1.9
a: 1.9
b: 2.0


…………


次数 9
x: 1.933984375
a: 1.93359375
b: 1.933984375

满足精度的结果: 1.9337890625

取结果是:1.934

3.求解:\(x^{3}-x-1=0\)

要求误差不超过:\(10^{3}\)

(1)确定范围:

根据下面图像,取范围是:[-2, 2]

(2)运行结果:


次数 1
x: 0.0
a: 0.0
b: 2.0


…………


次数 9
x: 1.3203125
a: 1.3203125
b: 1.328125

满足精度的结果: 1.32421875

取结果是:1.324

作者:Mark

日期:2019/02/17 周日

转载于:https://www.cnblogs.com/zyg123/p/10392055.html

1.1方程求根之二分法相关推荐

  1. 1. 方程求根(二分法)

    function x = agui_bisect(fname,a,b,e) fa = feval(fname,a); fb = feval(fname,b); if fa*fb>0 error( ...

  2. 计算方法实验:方程求根二分法、不动点迭代法、牛顿法

    计算方法实验一,方程求根 分别用Matlab和C写了一下,初学Matlab,如有不足还请指正. 实验内容: 1)在区间[0,1]内用二分法求方程 e x + 10 ∗ x − 2 e^x+10*x-2 ...

  3. 【机器学习】数值分析02——任意方程求根

    任意方程求根 全文目录 (博客园)机器学习 (Github)MachineLearning Math 1.简介 方程和函数是代数数学中最为重要的内容之一,从初中直到大学,我们都在研究着方程与函数,甚至 ...

  4. 关于方程求根的解决方案

    对于方程求根主要的思想主要采取迭代的思想,通过条件判断,循环执行直到满足条件以后直接跳出循环输出 下面以x-cos(x)=0:为例  采用do-while 循环,输出Root: #include &q ...

  5. 方程求根的迭代法——牛顿迭代法

    用牛顿法解方程xe(x) -1=0 程序流程图如下: //方程求根的迭代法--牛顿迭代法 /*************Analysis********** *1.初值x0,精度e,迭代次数N *2.牛 ...

  6. 使用MATLAB求解方程求根——学习笔记

    使用MATLAB求解方程求根--学习笔记 碎碎念:终于参加完了某比赛,连续大约摸了两天的鱼,就在昨天由于自己的操作失误,亲手将电脑给烧了,这就是上天在暗示我是时候加油为接下来的两场比赛和一个考试努力啦 ...

  7. matlab解比例导引法方程,Matlab多式运算与方程求根.ppt

    Matlab多式运算与方程求根 Matlab多项式运算与方程求根 Matlab多项式运算 多项式四则运算 多项式四则运算(续) 多项式的导数:polyder 多项式求值 多项式求值(续) 多项式求根 ...

  8. 数值分析方程求根实验matlab,数值分析实验之非线性方程求根(MATLAB实现)

    一.实验目的 1. 了解一般非线性方程的求根是比较复杂的事情:要讨论(或知道)它有无实根,有多少实根:知道求近似根常用的几种方法,每种方法的特点是什么. 2. 用通过二分法(区间半分法).不动点(也P ...

  9. 数值分析方程求根实验matlab,基于matlab的数值分析( 非线性方程求根)上机实验报告1...

    数值分析试验报告 非线性方程求根 二分法解方程 1. 题目:用二分法求方程0133 =--x x 的所有根 2. 方法:二分法 3. 程序 function x=erfenfa(a,b) if (a* ...

最新文章

  1. 不要使用Android Studio的Git Commit了----记一次debug
  2. 蒙特卡洛法求圆周率 c语言,c++蒙特卡洛法求圆周率
  3. Android中样式及主题
  4. 论述计算机硬件结构的理解论文,论述对汇编语言教学内容和方法及特点的认识与思考...
  5. Eclipse中和编辑相关的快捷键
  6. android音频杂音问题_三星手机与iOS13 双蓝牙音频输出功能体验报告 「Soomal」
  7. k近邻法的实现:kd树
  8. python循环速度提高_提高python中for循环的速度
  9. 【文件类型转换】.mat后缀文件 转化为 .xml后缀文件
  10. SSL-ZYC 逃离洞穴
  11. Android 一体机研发之修改系统设置————声音
  12. termux安装numpy,matplotlib,pandas
  13. Gerrit添加Verified
  14. [CODE【VS】]江哥的DP题d
  15. 2022年遂宁市团体标准培优计划项目名单及申报指南
  16. 大数据征信,核心是对大数据的搜集与挖掘
  17. 关于医保你可能不了解的
  18. Rstudio中文乱码,UTF-8之后仍乱码,文本打开仍乱码
  19. vue element 的 el-cascade 组件如何实现多选点击确认提交操作
  20. 微信朋友圈公众号装B神器网站源码+可用于引流

热门文章

  1. Golang 项目布局浅析
  2. mysql如何时间减10分钟_mysql – 从时间值中减去分钟数
  3. cgo 调用dll Failed to load xxxxx.dll: The specified module could not be found.
  4. 无缓冲channel与容量为1的channel的区别
  5. Elasticsearch学习系列-搜索技术基本知识
  6. 使用Docker安装Redis
  7. 第一节 Java语言发展史
  8. 用systemd命令来管理linux系统
  9. 多线程的那点儿事(之数据同步)
  10. 可编程控制器是计算机,可编程控制器的工作原理!与我们PC有什么区别呢?