Saya baru saja menguji contoh dari Metode Numerik dalam Teknik dengan Python .
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)
Ketika saya menjalankannya, itu menunjukkan kesalahan berikut:
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
Saya telah mempersempitnya ke log seperti ketika saya menghapus log dan menambahkan fungsi yang berbeda, itu berhasil. Saya berasumsi itu karena semacam gangguan dengan pangkalan, saya tidak tahu caranya. Adakah yang bisa menyarankan solusi?
python
runtime-error
logarithm
ramanunni.pm
sumber
sumber
print x
ke awal fungsi Anda f . Anda akan melihat bagaimana pemecah persamaan secara berturut-turut mencoba nilai x yang berbeda, yang mengarah ke kesalahan Anda.Anda mencoba melakukan logaritma dari sesuatu yang tidak positif.
Logaritma mencari tahu basis setelah diberi nomor dan kekuatannya dinaikkan.
log(0)
berarti bahwa sesuatu yang dipangkatkan2
adalah0
. Eksponen tidak pernah bisa menghasilkan0
*, yang berartilog(0)
tidak ada jawaban, sehingga membuangmath domain error
* Catatan:
0^0
bisa menghasilkan0
, tapi bisa juga menghasilkan1
pada saat bersamaan. Masalah ini sangat diperdebatkan.sumber
Anda juga dapat menggunakan
math.log1p
.Menurut dokumentasi resmi :
Anda dapat mengonversi kembali ke nilai asli menggunakan
math.expm1
yang mengembalikane
pangkat x, minus 1.sumber
Anda mendapatkan kesalahan domain matematika karena salah satu alasannya: Anda mencoba menggunakan angka negatif di dalam fungsi log atau nilai nol.
sumber