Ньютон Рафсон не может дать аппроксимацию за пределами двух десятичных знаков.Python

Программы на Python
Ответить
Anonymous
 Ньютон Рафсон не может дать аппроксимацию за пределами двух десятичных знаков.

Сообщение Anonymous »

Я написал программу, которая находит корни двухфункциональной системы, используя метод Ньютона-Рафсона. Его цель — найти два неизвестных замкнутого векторного цикла (эскизы ниже). Проблема в том, что он работает только при погрешности 0,01 и выше, в остальных случаях (например, при 0,001) он попадает в колебание и, похоже, никогда не сходится. Я нахожу такое поведение странным, поскольку тот факт, что ему удается достичь точности 0,01, должен доказывать его способность делать предположения внутри радиуса сходимости, и с этого момента дальнейшее приближение не должно сталкиваться с какими-либо проблемами...

Код: Выделить всё

import numpy as np
import random as rnd

TOLERANCE = 0.01
ITER_LIMIT = 50

track_x = 0
track_y = 0
track_incline = np.deg2rad(60)

r41 = 12.2/2
r1 = 28.88 - 10.95
r2 = 22.65 - track_x
r26 = 8/2 - track_y
r3 = 8
r4 = 12.2

theta41 = np.pi
theta3 = np.deg2rad(30)

def f1(x, y):
return r41*np.sin(theta41) + r1*np.cos(theta41) + r2*np.sin(y) + r26*np.cos(y) - x*np.sin(y + track_incline) + r3*np.sin(theta3)

def f2(x, y):
return r41*np.cos(theta41) - r1*np.sin(theta41) + r2*np.cos(y) - r26*np.sin(y) - x*np.cos(y + track_incline) + r3*np.cos(theta3) + r4

def jacobian_mat(x, y):
return np.array([
[-np.sin(y + track_incline), r2*np.cos(y) - r26*np.sin(y) - x*np.cos(y + track_incline)],
[-np.cos(y + track_incline), -r2*np.sin(y) - r26*np.cos(y) + x*np.sin(y + track_incline)]
])

def compute_newton_raphson(x0, y0):
for i in range(ITER_LIMIT):
result = -np.matmul(np.array([f1(x0, y0), f2(x0, y0)]), np.linalg.inv(jacobian_mat(x0, y0))) + np.array([x0, y0])
x = result[0]
y = result[1]

print(x, y)

if max(np.abs(x - x0), np.abs(y - y0)) 

Подробнее здесь: [url]https://stackoverflow.com/questions/79327926/newton-raphson-fails-to-approximate-beyond-two-decimal-points[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»