У меня есть сегмент кода, предназначенный для использования в скрипте, чтобы найти ошибку в числовом интегрировании с использованием правила трапеции, установив ошибку в полином. Этот сегмент кода бросает поплавок с нулевой ошибкой, и я не понимаю, почему и как его исправить.Идентификация и исправление поплавка с нулевыми ошибками (Python)
Может ли кто-нибудь помочь привести меня к ответу?
def trap(f,a,b,dx,exact):
N = int(numpy.round(float(b-a)/dx))
w=(b-a)/N
sum = f(a)/2.0 + f(b)/2.0
for i in range(1,N):
sum += f(a+i*w)
area = sum * w
errorf = exact-area
# If the error crosses 0, a polynomial approximation
# to the absolute value will go crazy.
return errorf
Этот альтернативный метод выдает ту же ошибку
# alternate way to handle dx not a divisor of b-a
def alt_trap(f,a,b,dx,exact):
N = int(numpy.floor(float(b-a)/dx))
sum = f(a)/2.0 + f(a+N*dx)/2.0
for i in range(1,N):
sum+= f(a+i*dx)
area = sum*dx
# now add one trapezoid between a+Ndx and b
area += 1/2*(b-(a+N*dx))*(f(b)+f(a+N*dx))
errorf = exact-area
return errorf
'если дх == 0: dx = 1e-8' ... может делать то, что вы хотите ... в основном вы не можете делить на ноль, поэтому вы должны определить, что вы ожидаете в этом случае ... –
Ого, это было очевидно теперь, когда вы указал на это. Спасибо! – Errata