Мне удалось найти несколько реализаций методов Ньютона, например, эта ссылка или , может быть, эта .
Однако в большинстве случаев примерыс простыми функциями, такими как: x ^ 2−9 = 0 или x ^ 3-x ^ 2-1 = 0.Я ищу что-то, что будет работать для:
У меня вопрос, который я потерял в том, как использовать этот код для решения моей проблемы.Например, я не уверен, как бы я применил производную (dfdx) к моему F (x), который содержит матрицы.Кроме того, если мне нужно напрямую ввести матрицы в моем "def f (x)"
Код, который я использую:
def Newton(f, dfdx, x, eps):
f_value = f(x)
iteration_counter = 0
while abs(f_value) > eps and iteration_counter < 100:
try:
x = x - float(f_value)/dfdx(x)
except ZeroDivisionError:
print "Error! - derivative zero for x = ", x
sys.exit(1) # Abort with error
f_value = f(x)
iteration_counter += 1
# Here, either a solution is found, or too many iterations
if abs(f_value) > eps:
iteration_counter = -1
return x, iteration_counter
def f(x):
return x**2 - 9
def dfdx(x):
return 2*x
solution, no_iterations = Newton(f, dfdx, x=1000, eps=1.0e-6)
if no_iterations > 0: # Solution found
print "Number of function calls: %d" % (1 + 2*no_iterations)
print "A solution is: %f" % (solution)
else:
print "Solution not found!"