얼마전 재밌는 논문이 하나 나왔는대 바로 수학에서 쓰이는 대부분의 기초 함수를 하나의 함수의 반복 사용으로 생성 할 수 있음을 증명 했다는 것이다.
그 함수가 바로 Exp-Minus-Log(EML) 이라는 함수로 -+*/, sin, cos, pos, exp,.. 등등의 기초 연산자를 이 함수의 사용으로 대체 할 수 있다고 한다.

뭐 너무 빠르게 읽어봐서 (수학쪽으로 뭐 잘아는것도 아니고 ㅎㅎ) 대충 봤지만 어쨋든 이미지를 보면

eml 함수와 1의 사용으로 기초 연산자를 대체 하여 사용 할 수 있다는 것이다.
그래서 실제 코드로 보면,
def exp(x):
return np.exp(x)
def ln(x):
return np.log(x)
def eml(x, y):
return exp(x) - ln(y)
def exp_x(x):
return eml(x, 1)
def ln_x(x):
return eml(1, eml(eml(1, x), 1))
def minus_x(x):
return eml(eml(1, eml(1, eml(1, eml(eml(1, 1), 1)))), eml(x, 1))
def inv_x(x):
return eml(eml(eml(1, eml(1, eml(1, eml(eml(1, 1), 1)))), x), 1)
def x_times_y(x, y):
return eml(eml(1, eml(eml(eml(1, eml(eml(1, eml(1, x)), 1)), eml(1, eml(eml(1, eml(y, 1)), 1))), 1)), 1)
def x_plus_y(x, y):
return ln_x(
x_times_y(
exp_x(x), exp_x(y)
)
)
def sqr_x(x):
return x_times_y(x, x)
이렇게 eml함수와 인자 값에 1과 같이 사용하면 같은 연산 결과가 나온다.