Средние числа в Бройден1 - PullRequest
0 голосов
/ 10 апреля 2020

Я использовал broyden1 в Python распознавателе. На вопрос был дан ответ здесь , мне нужно использовать немного большие числа, но не newton_krylov. Если я использую числа свыше 100, то он начинает выдавать ошибки. Код здесь:

 import numpy as np
 import scipy.optimize
 from scipy.optimize import fsolve
 from functools import partial
 from itertools import repeat

 small_data=[100,220,350,480]
 def G(small_data, x):
    return np.cos(x) +x[::-1] - small_data

 G_partial = partial(G, small_data)
 approximate=list(repeat(1,period))
 y = scipy.optimize.broyden1(G_partial, approximate, f_tol=1e-14)
 print(y)

Ошибка:

 Warning (from warnings module):
 File "C:\Python\Python38\lib\site-packages\scipy\optimize\nonlin.py", line 1004
d = v / vdot(df, v)
RuntimeWarning: invalid value encountered in true_divide
Traceback (most recent call last):
File "read_data.py", line 176, in <module>
y = scipy.optimize.broyden1(G_partial, approximate, f_tol=1e-14)
File "<string>", line 6, in broyden1
File "C:\Python\Python38\lib\site- 
packages\scipy\optimize\nonlin.py", line 350, in nonlin_solve
raise NoConvergence(_array_like(x, x0))
scipy.optimize.nonlin.NoConvergence: [ 99.49247662 219.22593164 350.14354166 480.95722345]

1 Ответ

0 голосов
/ 10 апреля 2020

Я обнаружил, что лучший метод - это изменить уравнение в Boryden1 на:

y = scipy.optimize.broyden1(G_partial, approximate, f_tol=5000e-14)

вместо:

f_tot=1e-14

, поэтому большие значения будут приняты с хорошей точностью

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...