2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Заменить функцию более простой
Сообщение16.09.2013, 23:19 
Есть периодическая функция $f(n)=\sin (\pi n/2)$, где $n=0,1,2,..$ которая принимает значения: $0,1,0,-1$.
Вопрос: какой другой функцией $g(n)$ можно заменить эту целую функцию, чтобы выполнялось $g(n)=f(n)$ и определение $g(n)$ не содержала бы ни тригонометрических функций, ни числа $\pi$ и было бы как можно проще?
Пример подобной замены: $\sin (\pi/2+\pi n) = (-1)^n$ для последовательности: $1,-1,1,-1,...$ .

 
 
 
 Re: Заменить функцию более простой
Сообщение16.09.2013, 23:30 
Аватара пользователя
Я понял, чего Вы на самом деле хотите, и сделать это можно. Но сначала всё-таки скажите по-человечески. Ведь нет таких слов "функция содержит пи". Любая функция его содержит: я к ней прибавлю $\pi$ и вычту $\pi$, ничего не изменится, а буковка $\pi$ будет. И никакая функция его не содержит: я позаменяю везде буковку $\pi$, например, на $\sqrt{6\sum\limits_1^\infty{1\over n^2}}$ (это то же самое), и нет её.
С понятием "содержит тригонометрические функции" примерно та же фигня.
С понятием "проще".....

 
 
 
 Re: Заменить функцию более простой
Сообщение17.09.2013, 00:49 
В порядке занудства добавлю, что слово "функция" в стартовом посте используется некорректно. Если все значения одной функции на области определения совпадают со значениями другой функции там же, то это одна и та же функция, и другой ее заменить нельзя. Подробнее об этом.
ЗЫ а выразить эту функцию более простой (в определенном смысле, например, требующей меньше операций при вычислении на компьютере) формулой весьма просто.

 
 
 
 Re: Заменить функцию более простой
Сообщение17.09.2013, 02:54 
Аватара пользователя
Может проще так? :mrgreen:
$
f(n) = 
\begin{cases}
1,&\text{для } n = 1+4a;\\
0,&\text{для } n = 2a;\\
-1,&\text{для } n = 3+4a;
\end{cases}
\text{где a}\in\mathbb{Z}
$

 
 
 
 Re: Заменить функцию более простой
Сообщение17.09.2013, 09:28 
$g(n)=\dfrac{i^{n-1}+(-i)^{n-1}}{2}$

:facepalm:

 
 
 
 Re: Заменить функцию более простой
Сообщение17.09.2013, 12:43 
Используется синтаксис C
signed char rez = (n&&1)&&((n&&2)<<6);

 
 
 
 Re: Заменить функцию более простой
Сообщение17.09.2013, 14:22 
Аватара пользователя
_Ivana в сообщении #764637 писал(а):
Используется синтаксис C
signed char rez = (n&&1)&&((n&&2)<<6);
:shock:

Может Вы имели ввиду
Используется синтаксис C
signed char rez = (n&1)&((n&2)<<6);

Но этот код тоже работает не верно. Правильнее было бы
Используется синтаксис C
int rez = (n&1)*((n&2)?-1:1);


-- 17 сен 2013, 15:25 --

$f(n)=[n\bmod4=1]-[n\bmod4=3]$

-- 17 сен 2013, 15:31 --

$f(n)=(n\mod2)\cdot(2-(n\bmod4))$

 
 
 
 Re: Заменить функцию более простой
Сообщение17.09.2013, 15:11 
whitefox, да, именно это я и имел в виду, опечатался. А насчет неверно - вопрос философский :-) Смотря какие границы применимости иметь в виду. Например, я подразумевал неотрицательные $n$ и допускал в качестве результата ноль с установленным битом знака - для умножения вполне пойдет. А ваш пример мне не нравится тем, что использует условие и умножение (что само по себе не крамольно, просто условие на разных платформах по разному реализуется и аппаратное умножение не везде есть). Чтобы избежать в качестве результата нуля со знаком, можно было бы написать так
Используется синтаксис C
signed char rez = (n&1)&((((n&2)>>1)&(n&1))<<7);
, но это сложнее, и с учетом приведенных выхе ограничений и аргументов, я предложил тот компромиссный вариант.

 
 
 
 Re: Заменить функцию более простой
Сообщение17.09.2013, 16:31 
Аватара пользователя
_Ivana
Дело не в границах применимости.
Условие неотрицательности $n$ задано ТС.
А восьмибитовый код 0x80, всё же, чаще трактуется как
Используется синтаксис C
(signed char)-128
а не как
Используется синтаксис C
(signed char)-0
Но дело не в этом.

Вычислим Ваш код для $n=0,1,2,3$.
Пусть $x=n\&1, y=n\&2, z=y\ll6, rez=x\&z$.
Будем записывать числа в двоичной системе и для простоты ограничимся только младшими 8 битами.

$n=00000000$
$x=00000000\;\&\;00000001=00000000$
$y=00000000\;\&\;00000010=00000000$
$z=00000000\ll6=00000000$
$rez=00000000\;\&\;00000000=00000000$

$n=00000001$
$x=00000001\;\&\;00000001=00000001$
$y=00000001\;\&\;00000010=00000000$
$z=00000000\ll6=00000000$
$rez=00000001\;\&\;00000000=00000000$

$n=00000010$
$x=00000000\;\&\;00000001=00000000$
$y=00000010\;\&\;00000010=00000010$
$z=00000010\ll6=10000000$
$rez=00000000\;\&\;10000000=00000000$

$n=00000011$
$x=00000011\;\&\;00000001=00000001$
$y=00000011\;\&\;00000010=00000010$
$z=00000010\ll6=10000000$
$rez=00000001\;\&\;10000000=00000000$

Во всех четырёх случаях получается результат 0.

А приведённый мной код, это всего лишь попытка исправить Ваш.
И он мне не нравится по тем же причинам, что и Вам.

 
 
 
 Re: Заменить функцию более простой
Сообщение17.09.2013, 16:51 
Действительно, получается глупость :-) Просто опять я наспех написал не то,ч то имею в виду - конечно последним действием надо не "&" а "|", то есть делать логическое ИЛИ двух аргументов (или складывать их). Но если Вы поняли мою опечатку с двойными "&&", то я надеялся что и этот момент тоже поймете, несмотря на мою ошибку. То есть, в вашей нотации, надо rez = x|z$$, и $z$ надо вычислить поаккуратнее, как в моем последнем коде. С учетом всего перечисленного про ошибки, знаковый ноль, нежелательность условий и умножения получается так
Используется синтаксис C
signed char rez = (n&1)|((((n&2)>>1)&(n&1))<<7);

 
 
 
 Re: Заменить функцию более простой
Сообщение17.09.2013, 17:18 
Аватара пользователя
_Ivana
Если Вам так уж необходимо кодировать отрицательные числа в прямом коде вместо более распространённого дополнительного, то исправленная версия Вашего первоначального кода тоже верна:
Используется синтаксис C
signed char rez = (n&1)|((n&2)<<6);

P.S. Предложенный мной вариант верен безотносительно каких-либо предположений о кодировке отрицательных чисел. И в этом смысле более универсален. К тому же, не всегда байт состоит из 8 бит.

 
 
 
 Re: Заменить функцию более простой
Сообщение17.09.2013, 17:38 
Все верно, я хотел "руками" построить $-1$ и забыл про дополнительный код :oops: И конечно ваш вариант более универсален: там компилятор сам разберется и с кодировкой отрицательных чисел, и с условием, и с умножением (если его нет аппаратного), и с big-endian, и с разрядностью типа, и засунет результат целиком в регистр. Просто у меня была мысль - как задешево получить отрицательное число: либо умножением (что не хотелось), либо вычитанием (что вполне можно реализовать, можно чуть подумать попозже, после работы), либо "руками" - но получилось немного коряво и в прямом коде (можно подумать насчет руками в дополнительном :-) )

ЗЫ вообще этот макрос я написал в продолжение шуточных ответов ТС, навскидку и не думая. Получилось просто (как и хотел ТС), и даже элегантно (разумеется, после исправления опечаток) и при условии прямого кода отрицательных чисел - но с другой стороны, ТС не оговаривал формат своей $-1$ :-) Но позже я, повторюсь, подумаю насчет дополнительного кода "руками" и вычитанием.

 
 
 
 Re: Заменить функцию более простой
Сообщение17.09.2013, 20:56 
А если для компютера, то лучшее конечно

$\dfrac{(-1)^{\frac{n(n-1)}{2}}+(-1)^{\frac{n(n+1)}{2}}}{2}$

 
 
 
 Re: Заменить функцию более простой
Сообщение17.09.2013, 23:31 
ИСН в сообщении #764534 писал(а):
нет таких слов "функция содержит пи"
С этим я согласен, однако Вы хотите приписать мне высказывание, которое я не писал.
Я писал
naiv1 в сообщении #764532 писал(а):
определение $g(n)$ не содержала бы ни тригонометрических функций, ни числа $\pi$
Определение функции может быть задано формулой,в которой содержится выражение, а выражение уже может содержать (или не содержать) то, что я просил.

_Ivana в сообщении #764552 писал(а):
Если все значения одной функции на области определения совпадают со значениями другой функции там же, то это одна и та же функция, и другой ее заменить нельзя.
С этим согласен.
_Ivana в сообщении #764552 писал(а):
выразить эту функцию более простой (в определенном смысле, например, требующей меньше операций при вычислении на компьютере) формулой весьма просто.
Например? Чем короче формула,тем лучше.

К сожалению, формулы, предложенные участниками, достаточно громоздкие.

Попробую переформулировать вопрос, который я задавал в начальном сообщении и откажусь от использования числа $\pi$ и тригонометрических функций вообще.

Дана периодическая числовая последовательность $0,1,0,-1,0,1,0,-1,...$ с периодом $0,1,0,-1$.
Указать наиболее простую формулу для общего члена последовательности, который представлял бы эту последовательность.
Критерий простоты:интуитивный, например, минимум символов, которые формула содержит.

 
 
 
 Re: Заменить функцию более простой
Сообщение17.09.2013, 23:46 
Непонятно чего вы хотите. Наиболее простых формул общего члена вам написали гораздо более, чем достаточно. Вспоминается вот эта история. Хорошо, рисую вам ящик, где сидит барашек - ваша функция обозначается, например, Щ(n) - даже Латекс не хочет ее отображать, такая она уникальная, (по аналогии с символом Кронекера), вас это устроит?

 
 
 [ Сообщений: 28 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group