Задача: всего-то написать такую функцию ( f(f(n)) == -n )
Есть мысли?
Я немного поразмышлял и вот, что мой больной мозг изрек:
То есть в общем виде задача не решается.
Но это был взгляд с точки зрения мат.анализа. А что ответят программисты?
Мой друг k06@ предложил следующий вариант:
Есть мысли?
Я немного поразмышлял и вот, что мой больной мозг изрек:
// Обратную функцию к f(x) я буду обозначать как f'(x)
Пусть f( f(x) ) = -x
<=> f'(-x) = f(x)
<=> f'( x ) = f(-x) // *1
<=> f'( f(x) ) = f( -f(x) ) = x // по опр обратной ф-ции и *1
<=> f'( x ) = -f(x) => учитывая *1 f(x) = -f(x) = f'(x)
=> f'( f(x) ) = -x => x = -x Оппа! Это верно только при x = 0
Пусть f( f(x) ) = -x
<=> f'(-x) = f(x)
<=> f'( x ) = f(-x) // *1
<=> f'( f(x) ) = f( -f(x) ) = x // по опр обратной ф-ции и *1
<=> f'( x ) = -f(x) => учитывая *1 f(x) = -f(x) = f'(x)
=> f'( f(x) ) = -x => x = -x Оппа! Это верно только при x = 0
То есть в общем виде задача не решается.
Но это был взгляд с точки зрения мат.анализа. А что ответят программисты?
Мой друг k06@ предложил следующий вариант:
#define f(n) 0-n
Здорово. Но это же не совсем функция :) еще он предложил вариант с использованием шаблонов... кому интересно взглянуть на психодельный код шаблонов см сюда k06@
Так что, если у кого есть мысли - пишите в комментариях.
ЗЫ: если мои "математические" выкладки содержат ошибки - просьба ткнуть в них носом!
ЗЗЫ: для случая f(f(x)) = x f(x) = 1/x
С точки зрения мат. анализа задача имеет решение f(x)=i*x :) В действительных числах решений нет (я, правда, пришёл к этому выводу при помощи иных рассуждений).
ОтветитьУдалитьЯ тут ещё немного подумал и вот:
ОтветитьУдалитьdef f(n):
if hasattr(n, '__call__'):
return -n()
else:
return (lambda : n)
Хотя вариант с дефайном круче :)
Круто!
ОтветитьУдалитьЯ придумал такую: перевернутый |x|
То есть
x, при x из (-~, 0)
f(x) = { 0, при x = 0
-x, при x из (0, +~)
Гребаный гугл! Все выравнивание профукал!
ОтветитьУдалитьПеревернутый |x| не сработает для отрицательных чисел. В посте показано ведь, что нельзя построить дифференцируемую функцию, удовлетворяющую этому условию. -|x| дифференцируема на интервале (-~;0), а, значит, не подходит.
ОтветитьУдалитьДа, ты прав! Это меня переглючило! Рассмотрел только положительные x
ОтветитьУдалитьКстати, какие были у тебя рассуждения в первом комментарии?
ОтветитьУдалитьМне показалось очевидным, что f(x) может быть только линейной (я не пробовал это доказать строго, но не думаю, что будут проблемы). После этого нужно просто решить уравнение a(ax+b)+b = -x, откуда получится a = +-i, b = 0.
ОтветитьУдалить