Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
a/b определяется как a*b-1, где b*b-1=1, для этого я решил уравнение (a+b*d)(x+y*d)=1 относительно x и y, и получил, что x=1/a; y=-b/(a*a) поэтому там такой код.x = dVar value
f = x^3
f' = df f
f'' = df f'
data Dif a = C a | D a (Dif a) -- второй конструктор содержит выражение (функцию) и производную.
dVar value = D value 1.0 -- маленький кирпичик, из которого всё собирается.
p@(D x x’) * q@(D y y’) = D (x*y)(x’*q+p*y’) -- правило Лейбница
df (D _ p) = p -- "вычисление" производной (форсируем ленивый thunk)
let x = dVar 3.0 in df (df (x^3)) вернёт нам 18.0
Автоматическое дифференцирование