Python 用二分法求解方程
我可以在网上找到专门针对python的二分法吗 例如,给定这些方程,我如何使用二分法求解它们Python 用二分法求解方程,python,numerical-analysis,bisection,Python,Numerical Analysis,Bisection,我可以在网上找到专门针对python的二分法吗 例如,给定这些方程,我如何使用二分法求解它们 x^3 = 9 3 * x^3 + x^2 = x + 5 cos^2x + 6 = x 使用: 导入scipy.optimize作为优化 将numpy作为np导入 def func(x): 返回np.cos(x)**2+6-x #这对你有帮助 import numpy as np def fn(x): # This the equation to find the root
x^3 = 9
3 * x^3 + x^2 = x + 5
cos^2x + 6 = x
使用:
导入scipy.optimize作为优化
将numpy作为np导入
def func(x):
返回np.cos(x)**2+6-x
#这对你有帮助
import numpy as np
def fn(x):
# This the equation to find the root
return (x**3 - x - 1) #x**2 - x - 1
def find_root_interval():
for x in range(0, 1000):
if fn(x) < 0:
lower_interval = x
if fn(x+1) > 0:
higher_interval = x + 1
return lower_interval, higher_interval
return False
def bisection():
a,b = find_root_interval()
print("Interval: [{},{}]".format(a,b))
# Create a 1000 equally spaced values between interval
mid = 0
while True:
prev_mid = mid
mid = (a+b)/2
print("Mid value: "+str(mid))
# 0.0005 is set as the error range
if abs(mid-prev_mid) < 0.0005:
return mid
elif fn(mid) > 0:
b = mid
else:
a = mid
root = bisection()
print(root)
将numpy导入为np
def fn(x):
#这是求根的方程式
返回(x**3-x-1)#x**2-x-1
def find_root_interval():
对于范围(0,1000)内的x:
如果fn(x)<0:
下限间隔=x
如果fn(x+1)>0:
较高的_间隔=x+1
返回较低的\u间隔,较高的\u间隔
返回错误
def二分法():
a、 b=查找根间隔()
打印(“间隔:[{},{}].”格式(a,b))
#在间隔之间创建1000个等距值
mid=0
尽管如此:
prev_mid=mid
中期=(a+b)/2
打印(“中间值:+str(中间))
#0.0005设置为误差范围
如果abs(中-上/中)<0.0005:
中途返回
elif fn(mid)>0:
b=中等
其他:
a=中等
根=二等分()
打印(根)
如何获取a和b值?还有循环的数量?就像在这个例子中,它试图解这个方程(x^3+4x^2-10=0),它使用函数对分[1,2,30],如何得到数字12和30?这是从方程中得到的吗?@bn:要使用对分,你必须提供a
和b
,使得func(a)
和func(b)
具有相反的符号,从而保证[a,b]
中有根,因为func
必须是连续的。您可以尝试猜测a
和b
的值,使用一些分析,或者如果您想以编程方式进行分析,您可以设计一些方法来生成候选a
和b
,直到找到两个符号相反的值。然而,这一切都超出了简单的bisect
方法的范围。@bn:关于迭代次数,scipy.optimize.bisect
有一个maxiter
参数。例如,so.bisect(func,6,8,maxiter=500)
。再见。@unutbu,谢谢!对于(方程式x^3=9),我尝试了a的值为0,b的值为1000(2.10571289062)。它给了我不同的答案,a为0,b为5(2.0802307129)。根据wolfram的说法,这2.0802307129是答案^3+%3D+9++我希望我的数值方法课程使用Python。:/这对你自己的实施很有指导意义;请阅读维基百科对算法的描述。最好使用一些已经被很多人使用过的东西,而不是自己编写。
import numpy as np
def fn(x):
# This the equation to find the root
return (x**3 - x - 1) #x**2 - x - 1
def find_root_interval():
for x in range(0, 1000):
if fn(x) < 0:
lower_interval = x
if fn(x+1) > 0:
higher_interval = x + 1
return lower_interval, higher_interval
return False
def bisection():
a,b = find_root_interval()
print("Interval: [{},{}]".format(a,b))
# Create a 1000 equally spaced values between interval
mid = 0
while True:
prev_mid = mid
mid = (a+b)/2
print("Mid value: "+str(mid))
# 0.0005 is set as the error range
if abs(mid-prev_mid) < 0.0005:
return mid
elif fn(mid) > 0:
b = mid
else:
a = mid
root = bisection()
print(root)