111
This commit is contained in:
6
159-6.py
6
159-6.py
@@ -1,6 +1,6 @@
|
||||
import math
|
||||
|
||||
|
||||
#把函数改成题干的形式#####################
|
||||
def f(x):
|
||||
return x**2 - 30
|
||||
|
||||
@@ -10,12 +10,14 @@ def df(x):
|
||||
# 牛顿方法求解方程
|
||||
def NewtonSolve(fx, dfx, x0, err, N0):
|
||||
count = 0
|
||||
print(f"k={count}, x0={x0}")
|
||||
x1 = x0 + 1 + err
|
||||
while abs(x1 - x0) > err or abs(fx(x1)) > err: # 添加条件修正根误差太大的问题
|
||||
if abs(dfx(x1)) < 1e-10:
|
||||
return None, 0
|
||||
x1 = x0 - fx(x0) / dfx(x0)
|
||||
count += 1
|
||||
print(f"k={count}, x{count}={x1},x1-x0={abs(x1-x0)}")
|
||||
if count > N0:
|
||||
return None, -1
|
||||
x0 = x1
|
||||
@@ -34,6 +36,6 @@ if __name__ == "__main__":
|
||||
err = 1e-4
|
||||
N0 = 100
|
||||
|
||||
x0 = FindRootZone(f, 5, 6, 0.01)
|
||||
x0 = FindRootZone(f, 5, 6, 0.1) # 查找f的根的区间与步长,改成题干对应的范围
|
||||
result,status = NewtonSolve(f, df, x0, err,N0)
|
||||
print(f"sqrt(30) = {result:.3f}")
|
||||
Reference in New Issue
Block a user