Ошибка ZeroDivisionError: division by zero
Можете помощь с ошибкой..
Происходить деления на ноль, и происходить исключения.
Вот сама ошибка.
Traceback (most recent call last):
File "c:/Users/artem/Desktop/arrrr.py", line 46, in <module>
y = fp(x)
File "c:/Users/artem/Desktop/arrrr.py", line 10, in fp
return 6 * x - 36 / x ** 4
ZeroDivisionError: division by zero
Вот сам код
import numpy as n
import matplotlib.pyplot as pl
def f(x):
return 3 * x ** 2 + 12 / x ** 3 - 5
def fp(x):
return 6 * x - 36 / x ** 4
def fpp(x):
return 6 * (1 + 24 / x ** 5)
x5 = n.linspace(0.5, 2.5, 100)
F1 = f(x5)
F2 = fp(x5)
pl.plot(x5, F1, 'g--', label='Fun1')
pl.plot(x5, F2, 'g--', label='Fun2')
pl.grid()
pl.legend()
pl.show()
print('метод Ньютона-Рафсона')
x1 = 1
e = 1e-3
n = 1
x2 = x1 - fp(x1) / fpp(x1)
while abs(fp(x2) > e):
x1 = x2
x2 = x1 - fp(x1) / fpp(x1)
n += 1
print('n =', n, 'f =', f(x2), 'x =', x2)
print('метод середньої точки (пошук Больцано)')
n = 0
x = 0
d = 1
e = 1e-3
L = x - d
R = x + d
y = fp(x)
while (fp(L) * y) > 0 and (fp(R) * y) > 0:
L = L - d
R = R + d
if (fp(L) * y) < 0:
R = x
else:
L = x
y1 = fp(L)
y2 = fp(R)
if y1 * y2 >= 0:
print('Корнів немає')
else:
n = 0
x = (L + R) / 2
y3 = fp(x)
while abs(y3) > e:
x = (L + R) / 2
y3 = fp(x)
if y1 * y3 < 0:
R = x
else:
L = x
n += 1
print('n =', n, 'f =', f(x), 'x =', x)
print('метод січних (метод хорд)')
x = 0
d = 1
e = 1e-3
n = 0
L = x - d
R = x + d
y = fp(x)
while fp(L) * y > 0 and fp(R) * y > 0:
L = L - d
R = R + d
if fp(L) * y < 0:
R = x
y1 = fp(L)
y2 = fp(R)
else:
L = x
x = R - fp(R) * (R - L) / (fp(R) - fp(L))
n = 1
y3 = fp(x)
while abs(y3) > e:
if y1 * y3 < 0:
R = x
else:
L = x
x = R - fp(R) * (R - L) / (fp(R) - fp(L))
y3 = fp(x)
y1 = fp(L)
y2 = fp(R)
n += 1
print('n =', n, 'f =', f(x), 'x =', x)
# FIXME PLEASE!!!!!!
print('метод оптимізації з використанням кубічної апроксимації')
x = 0
d = 1
e1 = 1e-3
e2 = 1e-3
y = fp(x)
L = x - d
R = x + d
while (fp(L) * y) > 0 and (fp(R) * y) > 0:
L = L - d
R = R + d
if (fp(L) * y) < 0:
R = x
else:
L = x
n = 0
print('n =', n, 'f =', f(x), 'x =', x)
while abs(f(x)) > e1 or abs(fp(x)) > e2:
z = 3 * (f(L) - f(R) / (R - L)) + fp(L) + fp(R)
b = (z ** 2 - fp(L) * fp(R)) ** (1 / 2)
m = (fp(R) + b - z) / (fp(R) - fp(L) + 2 * b)
print('n =', n, 'f =', f(x), 'x =', x)
if m < 0:
x = R
else:
if m > 1:
x = L
else:
x = R - m * (R - L)
while f(x) > f(L):
x = x - 0.5 * (x - L)
print('n =', n, 'перехід до наступної точки')
if fp(L) * fp(x) < 0:
R = x
else:
L = x
n += 1
print('n =', n, 'f =', f(x), 'x =', x)
Спасибо за внимания
Ответы (2 шт):
Автор решения: Мотя
→ Ссылка
При делении на 0 программа выдает ошибку. Используйте функцию try except
try:
#ваш пример
except ZeroDivisionError:
#что делать если появилась ошибка из-за деления на 0
Автор решения: CrazyElf
→ Ссылка
def fp(x):
return 6 * x - 36 / x ** 4 # <- вот деление на x = 0
x = 0 # <- вот 0
d = 1
e = 1e-3
L = x - d
R = x + d
y = fp(x) # <- вот вызов fp(0)
Так вот у вас присваивание x = 0 и после этого вызов fp(x), вот и деление на ноль. Проверяйте свой алгоритм.