Код: Выделить всё
a = 1.097
b = 0.085
c = 2.31
ans = 1 / (a - b*x + c/x)

Он работает путем настройки среднего гармонического значения в соответствии с log10,
но проблема в значениях a, b, c.
Вопрос в том, как получить правильные значения a, b и c
и как добиться лучшего приближения.
Я написал этот код, который может дать довольно хорошее приближение для a, b, c,
но мой код не смог сделать это лучше.
Код: Выделить всё
import numpy as np
a = 1
b = 0.01
c = 2
def mlg(t):
x = t
if t == 0:
x = 0.00000001
x2 = x*x
o = a - (b * x) + (c / x)
return 1/o
def mlg0(t):
x = t
if t == 0:
x = 0.00000001
x2 = x*x
o = a - (b * x) + (c / x)
return o
for i in range(9000):
n1 = np.random.uniform(0,1.19,1000)
for i in range(1000):
n = n1[i]
o = np.log10(n+1)
u = mlg(n) - o
e = u ** 2
de_da = 0 - 2 * (u) / (mlg0(n) ** 2)
de_db = de_da * n
de_dc = de_da / n
a -= de_da * 0.00001
b -= de_db * 0.00001
c -= de_dc * 0.00001
print(a,b,c)
Я использовал метод, аналогичный обратному распространению ошибки, в NN, но он не смог дать я ценю лучше.
Вот как рассчитывается ошибка:
[img]https: //i.sstatic.net/oT4YE5ZA.png[/img]
Подробнее здесь: https://stackoverflow.com/questions/791 ... monic-mean