Tôi vừa thử nghiệm một ví dụ từ Phương pháp số trong Kỹ thuật với Python.ValueError: lỗi tên miền toán học
from numpy import zeros, array
from math import sin, log
from newtonRaphson2 import *
def f(x):
f = zeros(len(x))
f[0] = sin(x[0]) + x[1]**2 + log(x[2]) - 7.0
f[1] = 3.0*x[0] + 2.0**x[1] - x[2]**3 + 1.0
f[2] = x[0] + x[1] + x[2] -5.0
return f
x = array([1.0, 1.0, 1.0])
print newtonRaphson2(f,x)
Khi tôi chạy nó, nó cho thấy các lỗi sau:
File "example NR2method.py", line 8, in f
f[0] = sin(x[0]) + x[1]**2 + log(x[2]) - 7.0
ValueError: math domain error
tôi đã thu hẹp nó xuống để đăng nhập như khi tôi loại bỏ bản ghi và thêm một chức năng khác nhau, nó hoạt động. Tôi cho rằng đó là do một số loại giao thoa với cơ sở, tôi không thể hiểu được làm thế nào. Bất cứ ai có thể đề xuất một giải pháp?
Tôi không thấy cách thực hiện nhật ký tiêu cực vì định nghĩa xác định tập hợp phương trình, nghĩa là x [0], x [1] và x [2] là các biến x, y và z Newton Raphson sử dụng. Nó cần những bộ phương trình này để giải quyết. –
Ngoài ra, như tôi đang nói x [2] = 1.0 khi tôi xác định x trong mã ở trên, đăng nhập (1) = 0, ít nhất đó là những gì tôi mặc dù, có lẽ tôi sai .. Cảm ơn sự giúp đỡ mặc dù .. –
thêm một 'in x' vào đầu hàm của bạn ** f **. Bạn sẽ thấy cách trình giải phương trình tiếp tục thử các giá trị khác nhau của x, dẫn đến lỗi của bạn. – mtadd