国外采购网站有哪些,自己创建一个网页,哪个行业最需要推广,新开传奇网站发布网目录
一、非线性方程式求根
1、二分法#xff08;Bisection Method、对分法#xff09;
a. 理论简介
b. python实现
2、迭代法#xff08;Iterative Method#xff09;
a. 理论简介
b. python实现
3、Newton 迭代法#xff08;Newtons Method#xff09;
a. 理论…目录
一、非线性方程式求根
1、二分法Bisection Method、对分法
a. 理论简介
b. python实现
2、迭代法Iterative Method
a. 理论简介
b. python实现
3、Newton 迭代法Newtons Method
a. 理论简介
b. python实现 一、非线性方程式求根 非线性方程举例 非线性方程式求根是一个重要的数值计算问题常用的方法包括二分法、迭代法和牛顿迭代法。
1、二分法Bisection Method、对分法
a. 理论简介
连续函数介值定理 二分法是一种简单而直观的求根方法适用于单调函数的根。它的基本思想是通过不断缩小根所在区间来逼近根的位置。具体步骤如下
首先选择一个初始区间[a, b]确保函数在这个区间内连续且函数值异号即f(a) * f(b) 0。然后计算区间的中点c (a b) / 2并计算函数在c处的值f(c)。接下来根据f(c)与0的关系确定新的区间[a, c]或[c, b]使得新的区间内仍满足函数值异号的条件。重复上述步骤直到满足预设的精度要求即根的近似值落在所选区间内。 b. python实现
def f(x):return 5 * x**4 3 * x 1def bisection_method(a, b, tolerance1e-6, max_iterations100):if f(a) * f(b) 0:return Nonefor _ in range(max_iterations):c (a b) / 2if abs(f(c)) tolerance:return cif f(c) * f(a) 0:b celse:a creturn None# 调用二分法求解方程的根
root bisection_method(a-1, b0)
if root is not None:print(方程的一个根为:, root)
else:print(未找到方程的根)
注意二分法要求初始区间[a, b]满足f(a) * f(b) 0即方程在区间的两个端点上取值异号。
输出
a-0.5, b1
方程的一个根为: -0.36193275451660156
a-1, b0
未找到方程的根 2、迭代法Iterative Method
a. 理论简介 迭代法是一种通过不断迭代逼近根的方法适用于任意函数的根。它的基本思想是从一个初始的近似值开始通过不断更新逼近根的位置直到满足预设的精度要求。具体步骤如下
首先选择一个初始的近似值x0。然后根据迭代公式x[i1] g(x[i])计算下一个近似值x[i1]。重复上述步骤直到满足预设的精度要求即近似值与根的差值足够小。 b. python实现
def g(x):return (-1) / (5 * x**3 3)def iterative_method(initial_guess, tolerance1e-6, max_iterations100):x initial_guessfor _ in range(max_iterations):x_next g(x)if abs(x_next - x) tolerance:return x_nextx x_nextreturn None# 调用迭代法求解方程的根
root iterative_method(initial_guess0)
if root is not None:print(方程的一个根为:, root)
else:print(未找到方程的根)
注意迭代法的收敛性与迭代函数的选择密切相关对于某些函数可能无法收敛或者收敛速度很慢。
输出
方程的一个根为: -0.36193292438672897
3、Newton 迭代法Newtons Method
a. 理论简介 牛顿迭代法是一种快速收敛的求根方法适用于光滑函数的根。它利用函数的局部线性近似来逼近根的位置。具体步骤如下
首先选择一个初始的近似值x0。然后根据牛顿迭代公式x[i1] x[i] - f(x[i]) / f(x[i])计算下一个近似值x[i1]。重复上述步骤直到满足预设的精度要求即近似值与根的差值足够小。 b. python实现
def f(x):return 5 * x**4 3 * x 1def f_prime(x):return 20 * x**3 3def newton_method(initial_guess, tolerance1e-6, max_iterations100):x initial_guessfor _ in range(max_iterations):delta_x f(x) / f_prime(x)x - delta_xif abs(delta_x) tolerance:return xreturn None# 调用牛顿迭代法求解方程的根
root newton_method(initial_guess0)
if root is not None:print(方程的一个根为:, root)print(int(f(root)))
else:print(未找到方程的根)注意牛顿法要求2阶导不编号1阶导不为0
输出
方程的一个根为: -0.3619330489831212