2014 dxdy logo

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

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




 
 Визуализация 4D
Сообщение29.01.2012, 15:35 
Аватара пользователя
Здравствуйте.
Мне известен способ представления натуральных чисел точками в пространстве размерности $N=4$. Интересно было бы увидеть, как в этом пространстве распределены простые числа.
Пожалуйста, помогите закодировать в C++ алгоритм, который я приведу ниже. Потребуется работа с массивами и матрицами, но программа должна получиться несложной. Вся работа выполняется исключительно в натуральных числах.

Алгоритм представления натуральных чисел точками в пространстве размерности $N=4$

1. Число вычисляется как результат скалярного произведения векторов $(\vec a_{pu},\vec a_{qv})=S$ и, таким образом, зависит от четырех параметров, которые мы будем считать его координатами: $S(p,u,q,v)$ .

2. Каждый из векторов, например, вектор $\vec a_{pu}$ принадлежит упорядоченному множеству $T_p$ где $p$ - номер множества, и имеет в этом множестве номер $u$.

3. Построение множества $T_p$ рассмотрим на примере $T_1$ . Алгоритм его построения следующий:

3.1. Построить матрицу $C$ по правилу: $c_{1j}=c_{i1}=1\ , c_{ij}=c_{i,j-1}+c_{i-1,j}$ . В результате (здесь для $i,j=1 \dots 5$) получится "квадрат Паскаля":

$ C=\left ( \begin {array} {ccccс}
1 & 1 & 1 & 1 & 1 \\
1 & 2 & 3 & 4 & 5 \\
1 & 3 & 6 & 10 & 15 \\
1 & 4 & 10 & 20 & 35 \\
1 & 5 & 15 & 35 & 70
\end {array} \right ) $

3.2. Извлечь из матрицы $C$ первую строку и построить матрицу $A_1$ содержащую на главной диагонали и первой диагонали под ней эту строку, а остальные элементы имеющую равными нулю:

$ A_1=\left ( \begin {array} {ccccс}
1 & 0 & 0 & 0 & 0 \\
1 & 1 & 0 & 0 & 0 \\
0 &1 & 1 & 0 & 0 \\
0 & 0 & 1 & 1 & 0 \\
0 & 0 & 0 & 1 & 1
\end {array} \right ) $

3.3. Возвести матрицу $A_1$ в соответствующие степени и получить векторы множества $T_1$ по правилу: $A_1^u \vec e_1=\vec a_{1u}$ где $ \vec e_1=\left ( \begin {array} {c} 1 \\ 0 \\ 0 \\ 0 \\ 0 \end {array} \right ) $ - первый орт (упорядоченное множество векторов $T_1$ является ни чем иным, как Треугольником Паскаля):

$ T_1=\left ( \begin {array} {ccccс}
1 & 0 & 0 & 0 & 0 \\
1 & 1 & 0 & 0 & 0 \\
1 &2 & 1 & 0 & 0 \\
1 & 3 & 3 & 1 & 0 \\
1 & 4 & 6 & 4 & 1
\end {array} \right ) $

Любое другое множество $T_p$ строится аналогично при помощи строки с номером $p$ из матрицы $C$.

4. Построить все множества $T_i$ при помощи $i$-тых строк матрицы $C$.

5. Вычислить все скалярные произведения векторов принадлежащих полученным множествам при том условии, что нельзя перемножать между собой векторы принадлежащие одному множеству: $(\vec a_{pu},\vec a_{qv})=S\ ,\ p \ne q$ .

6. Проверить полученные значения $S$ на простоту. В случае положительного результата вывести их в виде $S(p,u,q,v)$ .

7. Построить четыре трехмерных сечения полученного множества точек: $S(p,u,q)\ ,\ S(p,u,v)\ ,\ S(p,q,v)\ ,\ S(u,q,v)$ или визуализировать результать каким-либо иным способом.

P.S. Конечно, совсем не обязательно строить и хранить все множества $T_i$ для того чтобы организовать перебор попарных сочетаний принадлежащих им векторов. Видимо, будет экономнее строить каждый вектор скалярного произведения по его индексам, проверять получившееся число и переходить к следующему скалярному произведению.

 
 
 
 Re: Визуализация 4D
Сообщение30.01.2012, 11:56 
2serval
Интересно, однако. Но некоторые моменты абсолютно непонятны. Например,
Цитата:
Извлечь из матрицы $C$ первую строку и построить матрицу $A_1$ содержащую на главной диагонали и первой диагонали под ней эту строку

Но ведь главная диагональ ($i=j$) и диагональ под ней (как я понял, с индексами $i=j+1$, где $i$, $j$ -- номера соответственно строки и столбца) имеют разную длину, как именно вместить первую строку матрицы $C$ в элементы непосредственно под главной диагональю матрицы $A_1$?

 
 
 
 Re: Визуализация 4D
Сообщение30.01.2012, 13:43 
Аватара пользователя
Circiter в сообщении #533007 писал(а):
2serval
как именно вместить первую строку матрицы $C$ в элементы непосредственно под главной диагональю матрицы $A_1$?

Извиняюсь на неточности. Я так привык к своим треугольникам, что многое кажется мне очевидным.
В данном случае, нужно заполнять ячейки под главной диагональю, начав с верхнего левого, пока не заполнятся все. Их будет на 1 меньше, чем элементов исходной строки. Например, матрица $A_2$ будет выглядеть так:

$ A_2=\left ( \begin {array} {ccccс}
1 & 0 & 0 & 0 & 0 \\
1 & 2 & 0 & 0 & 0 \\
0 &2 & 3 & 0 & 0 \\
0 & 0 & 3 & 4 & 0 \\
0 & 0 & 0 & 4 & 5
\end {array} \right ) $

 
 
 
 Re: Визуализация 4D
Сообщение30.01.2012, 17:07 
Аватара пользователя
К слову, $(\vec a_{1u},\vec a_{2v})=u^v$ - хорошо известное в комбинаторике тождество. Только там кроме биномиальных коэффициентов (множество $T_1$) под суммой стоят еще числа Стирлинга 2-го рода и факториалы.

 
 
 
 Re: Визуализация 4D
Сообщение31.01.2012, 01:58 
Ещё вопросик. Формула $A_1^u\vec e_1=\vec a_{1u}$ для произвольного $p$ должна выглядеть как $A_p^u\vec e_p=\vec a_{pu}$? Т.е. именно $\vec e_p$, а не все тот же $\vec e_1$? Все никак не получается вникнуть...

В этой же формуле матрица $A_i$ возводится в степень $u$. Какого порядка величина максимальной степени? Я плохо себе представляю как это реализовать программно... Числа очень большие же получаются. Видимо вам придется использовать длинную арифметику? (Так же, правильно ли я понимаю, что $A_1^u e_1$ можно расчитывать по формуле $x_i=A_1 x_{i-1}$, $x_0=e_1$, $a_{1u}=x_u$?)

 
 
 
 Re: Визуализация 4D
Сообщение31.01.2012, 10:07 
Аватара пользователя
Circiter в сообщении #533283 писал(а):
Формула $A_1^u\vec e_1=\vec a_{1u}$ для произвольного $p$ должна выглядеть как $A_p^u\vec e_p=\vec a_{pu}$? Т.е. именно $\vec e_p$, а не все тот же $\vec e_1$?

Нет, для произвольного $p$ формула должна выглядеть как $A_p^u\vec e_1=\vec a_{pu}$, т.е. именно $\vec e_1$ - все тот же первый орт.
Circiter в сообщении #533283 писал(а):
В этой же формуле матрица $A_i$ возводится в степень $u$. Какого порядка величина максимальной степени? Я плохо себе представляю как это реализовать программно... Числа очень большие же получаются. Видимо вам придется использовать длинную арифметику? (Так же, правильно ли я понимаю, что $A_1^u e_1$ можно расчитывать по формуле $x_i=A_1 x_{i-1}$, $x_0=e_1$, $a_{1u}=x_u$?)

1. Конечно, чем числа больше - тем интереснее должна быть картина. Но, для первого взгляда, думаю, будет достаточно положить $u=10$ или около того.
2. Если я правильно понял вопрос, то да, вектор в множестве получается действием оператора этого множества на предыдущий вектор: $A_1 \vec a_{1,i-1}=\vec a_{1i}$.

 
 
 
 Re: Визуализация 4D
Сообщение31.01.2012, 10:24 
Цитата:
чем числа больше - тем интереснее должна быть картина.

Плохо себе представляю, как это будет выглядеть на экране. :) Сначала я подумал, что вы предлагаете нарисовать скалярное поле $S(p,u,q,v)$, т.е. $p$, $u$, $q$, $v$ -- координаты, а $S$ -- скажем, цвет точки. Но коль скоро разброс значений $S$ велик, то непонятно как это все ужать в сравнительно узкое (в смысле разумного порога различения оттенков) цветовое пространство. (кстати, раз значения таких координат сравнительно небольшие, получится что-то некрасивое воксельное.)

Если же я понял вас совершенно неправильно и большие числа следует (каким-то образом) понимать как координаты, то тоже возникает проблема с обозримостью облака таких точек.

В любом случае напрашивается то ли логарифмический масштаб, то ли ещё какой трюк...

 
 
 
 Re: Визуализация 4D
Сообщение31.01.2012, 12:14 
Аватара пользователя
Circiter в сообщении #533313 писал(а):
я подумал, что вы предлагаете нарисовать скалярное поле $S(p,u,q,v)$, т.е. $p$, $u$, $q$, $v$ -- координаты, а $S$ -- скажем, цвет точки.

Поле было бы еще интереснее, я об этом думал, но пока задача скромнее. Цвет не нужен. Нужно изобразить точками только простые числа - все одним цветом.
Не исключаю, что некоторые из них будут иметь более чем одно представление (иметь более одного образа в виде точки).
Задача-минимум - посмотреть, не проявится ли в этом пространственном распределении какая-нибудь структура. Если проявится, тогда можно будет ее изучать, если не проявится - тогда ... будем думать дальше :-) Возможно, тогда их и раскрасим :-)
Собственно, нужно подобрать максимальные значения индексов нумерующих векторы $\vec a_{ij}$ такими, чтобы количество изображаемых простых чисел $S$ было порядка нескольких сотен. Для визуализации общей картины этого должно хватить.
Думаю, что хорошо бы сделать эти индексы параметрами чтобы можно было присваивать им значения вручную и экспериментировать.

 
 
 
 Re: Визуализация 4D
Сообщение31.01.2012, 21:26 
Аватара пользователя
Я вообще предполагал, что программа будет лишь вычислять координаты точек и выводить их в файл.
А из файла их можно забирать, скажем, в Maple, и строить точечные 3D графики.

 
 
 
 Re: Визуализация 4D
Сообщение09.04.2012, 21:13 
Аватара пользователя
28 января Circiter предложил мне создать здесь тему и обещал помощь. Его последнее сообщение на форуме датировано 3 февраля. На два личных сообщения он не ответил. Пропал человек. А он, однако, не случайный прохожий, - заслуженный участник, на форуме с 2009 года. Никто не знает, что с ним случилось?

 
 
 [ Сообщений: 10 ] 


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