python 二分法求方程的根

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 二分法求方程的根相关的知识,希望对你有一定的参考价值。

参考技术A import matplotlib.pyplot as plt

a=3

b=-2

x=(a+b)/2.0 # 中点

def f(x): # 定义方程式

y=x-2**0.5

return(y)

u=max([a,b])

l=min([a,b])

i=0

z=[]

est=[]

# 循环体

while abs(f(x))> 10.0**(-15.0): # 计算精度

if f(u)*f(l)>0: # 判断输入假设是否成立

print('Error: Assumption not holds! ')

break

if f(x)*f(u)>0: # 判断零点落入区间

u=x

x=(x+l)/2.0

else:

l=x

x=(x+u)/2.0

i=i+1

z=z+[abs(x-2**0.5)]

est=est+[abs(a-b)/2**i]

plt.semilogy(z)

plt.semilogy(est)

plt.grid('on')

plt.legend(['simu','theo'])

plt.show()

用二分法求下面方程在(-10,10)之间的根。谭浩强第四版课后习题

用二分法求下面方程在(-10,10)之间的根:2x3-4x2+3x-6=0

编程思路:仿照二分查找,将区间划分为两部分,记录区间左右端点,得到中点。每次运算将中点带入方程:

  • 结果>0:根应该向小一点的值拟合,high=mid;
  • 结果<0:根应该向大一点的值拟合,low=mid;

对于跳出循环的条件,我首先是认为low和high应该无限逼近:while(fabs(low-high)>1e-5),当循环体内结果=0后,便使用break跳出循环:if(temp==0) break;但是没有得到答案。

后来修改之后,便得到答案了。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 
 5 int main()
 6     double low=-10,high=10,mid;
 7     double temp=10;
 8     while(fabs(temp)>1e-5)
 9         mid=(low+high)/2;
10         temp=((2*mid-4)*mid+3)*mid-6;
11         printf("%lf ",mid);
12         printf("%lf\n",temp);
13         if(temp>0)    high=mid;
14         else if(temp<0)    low=mid;
15     
16     printf("%lf",mid);
17     return 0;
18 

和官方答案不同,害怕会有疏漏的地方,如果读到这里的你有想法或建议,欢迎指正~

以上是关于python 二分法求方程的根的主要内容,如果未能解决你的问题,请参考以下文章

利用Python语言计算方程的根

MATLAB用二分法不动点迭代法及Newton迭代(切线)法求非线性方程的根

二分求根法

如何用二分法求平方根???

c语言编写一元2次方程。

二分求函数零点