Câu hỏi
Bài 27
Đề bài: Tìm nghiệm bằng phuong phap Newton-Raphson.
Cong thuc: x_(n+1) = x_n - f(x_n) / f'(x_n)
Nhập da thuc bac 3, điểm bat đầu x0.
So sánh toc do hoi từ voi phuong phap chia doi.
Ví dụ: f(x) = x^3 - 2, x0 = 1
Kết quả:
Buoc 1: x = 1.3333 (f = -0.037)
Buoc 2: x = 1.2639 (f = -0.0003)
Buoc 3: x = 1.2599 (f ≈ 0)
Nghiem: x ≈ 1.2599 (= 2^(1/3))
Chi căn 5 buoc (chia doi căn 50 buoc)
Câu trả lời
a_hs = float(input("He so a (bac 3): "))
b_hs = float(input("He so b (bac 2): "))
c_hs = float(input("He so c (bac 1): "))
d_hs = float(input("He so d (hang so): "))
x0 = float(input("Diem bat dau x0: "))
eps = float(input("Do chinh xac epsilon (vd 1e-8): "))
def f(x):
return a_hs*x**3 + b_hs*x**2 + c_hs*x + d_hs
def f_dd(x):
return 3*a_hs*x**2 + 2*b_hs*x + c_hs
x = x0
print(f"\n{'Buoc':>5} {'x':>14} {'f(x)':>14}")
print("-" * 38)
for i in range(1, 51):
fx = f(x)
fdx = f_dd(x)
if abs(fdx) < 1e-15:
print("Dao ham = 0, dung lai")
break
x_moi = x - fx / fdx
print(f"{i:>5} {round(x_moi,8):>14} {f(x_moi):.4e}")
if abs(x_moi - x) < eps:
x = x_moi
print(f"\nHoi tu sau {i} buoc!")
break
x = x_moi
print(f"Nghiem xap xi: x ≈ {round(x, 8)}")
print(f"Kiem tra: f(x) = {f(x):.2e}")