Здравствуйте, McSeem2, Вы писали:
MS>Просто торможу как удав по песку.
MS>Сейчас я вас насмешу. Есть такой простейший код:
MS>MS>f += df;
MS>df += ddf;
MS>ddf += dddf;
MS>
MS>Допустим, что он выполняется 2 раза. Надо написать код, дающий результат, эквивалентный выполнению приведенного кода дважды, но тоже в три выражения, а не в шесть. На самом деле все сложнее. Вместо 2 может быть некое K, необязательно целое. Может быть как меньше единицы, так и больше. И может быть отрицательным, что эквивалентно откату назад.
1) Прежде всего, сведем аффинную задачу к линейной, добавив
dddf+=0;
2) Заметим, что все операции можно сгруппировать в одну векторную (здесь важен порядок исходных операций)
(f,df,ddf,dddf)+=(df,ddf,dddf,0);
3) Иными словами,
(f,df,ddf,dddf) = (I+N) (f,df,ddf,dddf)
Здесь I -- единичная матрица, N -- нильпотентная.
N(f,df,ddf,dddf) = (df,ddf,dddf,0)
N^4 = 0
4) Говоря математическим языком, автор хочет возвести I+N в некоторую вещественную степень, не обязательно целую положительную (композиция отображений соотвествует умножению матриц).
5) Список желаемых свойств такой степени F(x) состоит из:
a) F(0) = I
b) F(1) = I+N
c) F(x+y) = F(x) * F(y)
d) F(x) непрерывна
6) Такая функция называется однопараметрической подгруппой группы матриц ( 4 порядка в нашем случае, GL(R,4) ) (условие нормировки b) в общем случае исключается, естественно).
7) Вспоминая теорию групп Ли, выводим, что F(x) = exp(L*x), где L -- некоторая матрица.
8) Матрица L может быть найдена из условий нормировки b),
exp(L) = I+N
9) Данное уравнение имеет единственное решение, причина -- в нильпотентности матрицы N.
10) Собственно говоря, решение находится подстановкой N в ряд для логарифма,
L = N - (N^2)/2 + (N^3)/3 (остальные члены равны нулю)
L^4 = 0
exp(L*x) = I + L*x/1 + (L^2)*(x^2)/2! + (L^3)*(x^3)/3! (остальные члены равны нулю)
11) Вспомним ещё бином Ньютона.
exp(L*x) = (I+N)^x (для целых положительных x)
= I + C(x,1) * N + C(x,2) * N^2 + C(x,3) * N^3 (хорошая штука -- нильпотентность, остальные члены опять равны нулю)
C(x,1) = x
C(x,2) = (x*(x-1))/2
C(x,3) = (x*(x-1)*(x-2))/6
Эта формула справедлива и в общем случае. Просто потому, что два многочлена, совпадающих на бесконечном множестве точек, тождественно равны.
12) Очко! (Т.е. дюжина

).
op(x) : (f,df,ddf,dddf) -> (f+C(x,1)*df+C(x,2)*ddf+C(x,3)*dddf,df+C(x,1)*ddf+C(x,2)*dddf,ddf+C(x,1)*dddf,dddf)