重根迭代法解方程(两种方法)(Python实现)

简述

通过两种不同的重根迭代的来解方程。

处理的方程是 (sin(x) - x/2) ^2 = 0

代码

采用的第一种迭代重根迭代方法:

xk+1=xkmf(xk)f(xk) x k + 1 = x k − m f ( x k ) f ′ ( x k )

这里取m为2。

from sympy import *

x = symbols("x")

func = (sin(x) - x / 2) ** 2

CHF = x - (sin(x) - x / 2) / (cos(x) - 1/2)


MAXSTEP = 100
step_count = 0
x0 = pi / 2
temp = CHF.subs(x, x0)
while step_count < MAXSTEP and abs(temp - x0) > 1e-5:
    print(x0)
    x0 = temp
    temp = CHF.subs(x, x0)
    step_count += 1
print(x0)
print(step_count)

采用第二种重根迭代方法:

xk+1=xkf(xk)f(xk)[f(xk)]2f(xk)f′′(xk) x k + 1 = x k − f ( x k ) f ′ ( x k ) [ f ′ ( x k ) ] 2 − f ( x k ) f ″ ( x k )

from sympy import *

x = symbols("x")

func = (sin(x) - x / 2) ** 2

CHF = x - ((sin(x) - x / 2) * (cos(x) - 1/2)) / ((cos(x) - 1/2) ** 2 + sin(x) * (sin(x) - x / 2))


MAXSTEP = 100
step_count = 0
x0 = float(pi / 2)
temp = CHF.subs(x, x0)
while step_count < MAXSTEP and abs(temp - x0) > 1e-5:
    print(x0)
    x0 = temp
    temp = CHF.subs(x, x0)
    step_count += 1
print(x0)
print(step_count)

你可能感兴趣的:(Python,数学,数值计算)