在Python中对割线法进行建模

在Python中对割线法进行建模

割线法是一种强大的方法,用于确定多项式或任何超越函数的x-截距(零点)。在这个方法中,首先我们选择(基本上猜测)我们期望找到根的区间(\mathrm{𝑥_{1}}\mathrm{𝑥_{2}})。然后,我们绘制一条割线来连接函数上对应于猜测值的点A,B,如下图所示。

在Python中对割线法进行建模

斜率线与x轴在点 𝑥₃ 相交,由于 𝑥₃ 和 𝑥₂ 不接近(即它们的绝对差是有限的),我们找到与𝑥₃ 对应的曲线上的点,即点 C。然后我们连接一个与点 B 和 C 相交的斜率线。我们将延长斜率线直到到达X轴,并将该点标记为 𝑥₄。

现在再次检查 𝑥₃ 和 𝑥₄ 是否接近。由于它们也不接近,所以我们找到与 𝑥₄ 对应的多项式值,并将其标记在曲线上作为点 D。下面的图表示第二个斜率线和点 D。

在Python中对割线法进行建模

# Importing module
from pylab import *

# Defining Polynomial function
def f(x):
   return x ** 2 + 3 * x - 10

# Defining function for new value of x
def fn(a, b):
   return a - ((b - a) / (f(b) - f(a))) * f(a)

# Creating array of x
x = linspace(-15, 15, 150)

# Plotting the function
figure(1, figsize=(7.20, 3.50))
plot(x, f(x), linewidth=2)
plot([-25, 25], [0, 0], "k--")
ylim(-15, 20)
xlim(-8, 6)

# Initial guess Interval
x1 = -4
x2 = 3

# Initial Error to enter into the loop
error = 1

# Setting iteration counter
count = 1

# Integration starts
while error > 1.E-3:

   # Plotting Secant line
   plot([x1, x2], [f(x1), f(x2)])

   # Evaluating new value of x based on old
   xn = fn(x1, x2)

   # Plotting x intercept of secant
   plot([xn], [0], 'o', label=f'{xn}')

   # Evaluating error
   error = abs(x2 - xn)

   # Setting x's for next iteration
   x1 = x2
   x2 = xn

   # Incrementing loop counter
   count += 1

   # Printing selected value of xn in the legend
   if count < 6:
      legend()

# Showing root in the figure (just decoration)
text(-7, -10, f'Root = {round(xn, 3)}', bbox={'facecolor': 'red', 'alpha': 0.5, 'pad': 10})
print(f'Root = {round(xn, 3)}')
show()

上面的代码中,所有的步骤都在本节开头提到。上述程序的输出如下图所示。

在Python中对割线法进行建模

对于另一个根,你可以将初始 “x” 设置为:-6和-2。然后结果将如下所示:

在Python中对割线法进行建模

结论

在这篇文章中,对割线法进行了详细讨论。给出了数学背景以便更容易地建模该方法。用户可以使用上面给出的代码进行操作,并用它来寻找其他函数的根。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程