这里是近似 log10(x+1), (x+1) 的函数 < ~1.2
a = 1.097
b = 0.085
c = 2.31
ans = 1 / (a - b*x + c/x)
所以它看起来应该是这样的 它的工作原理是调整调和平均值以匹配 log10 但问题出在 abc 的值上
问题是如何得到恰到好处的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)
那么你们对于如何产生更好的价值有什么想法吗?
我在神经网络中使用了类似的反向传播方法,但它无法给我更好的值
如果将它们通过泰勒级数展开为 x 的幂,那么
使 x、x^2 和 x^3 的系数相等可得出
代码中:
import math
import numpy as np
import matplotlib.pyplot as plt
c = math.log( 10 )
a = c / 2
b = c / 12
print( "a, b, c = ", a, b, c )
x = np.linspace( -0.2, 0.2, 50 )
y = np.log10( 1 + x )
fit = x / ( a * x - b * x ** 2 + c )
plt.plot( x, y , 'b-', label="Original" )
plt.plot( x, fit, 'ro', label="Fit" )
plt.legend()
plt.show()