Введение в информатику

База знаний Wolfram|Alpha

Разбить на страницы
Показывать лекцию целиком

Система Wolfram|Alpha - база знаний, которую также называют интеллектуальной машиной знаний, использует вычислительные интеллектуальные алгоритмы для поиска ответов на онлайн-запросы. Она была создана с помощью системы компьютерной математики Wolfram Mathematica. Система Wolfram|Alpha ищет ответы в своей базе знаний и в качестве ответа выдает как результаты вычислений, так и некоторые сведения из базы знаний, которые могут иметь отношение к запросу. База содержит сведения из большого количества областей знаний. Для запросов используется язык, близкий к естественному. Когда это возможно, ответ содержит формулировку запроса на языке Wolfram.

Ниже приведены примеры запросов к базе знаний Wolfram|Alpha по рассмотренным в предыдущих главах вопросам, а также примеры аналогичных запросов в облаке Wolfram.

Запросы о представлении информации в компьютере

Представление чисел в системах счисления

Рассмотрим запросы о преобразования представлений чисел между системами счисления и о выполнении арифметических операций в системах счисления. Принадлежность числа к системе счисления указывается с помощью знака подчеркивания: запись 123_4 соответствует $$123_4$$.

Пример 1. Найти троичное представление числа $$12a,a12_{16}$$ в системе Wolfram|Alpha можно с помощью запроса

convert 12a.a12 from base 16 to base 3 или 
convert 12a.a12_16 to base 3

Ответ на запрос выдается после нажатия на клавишу . В разделе Input interpretation приводится интерпретация запроса, который будет вычисляться системой (рис. 7.1).

(рис 7.1) Раздел интерпретации ввода

На вкладке Plain Text см. рис. 7.1 можно увидеть вариант этого запроса на языке Wolfram:

BaseForm[16^^12a.a12, 3]

В разделе Result приводится результат вычислений:

$$102001.12122221..._3$$

Число знаков после запятой будет увеличено при выборе команды More digits. Дополнительно система показывает результат в десятичном виде, а также в других системах счисления.

Пример 2. Запрос на преобразование из одной системы счисления в другую может быть сокращен. Например, рассмотрим запрос

43000 to base 60

Он интерпретируется так же, как и предыдущие запросы, в виде

convert 43000 to base 60

На языке Wolfram запрос имеет вид:

BaseForm[43000, 60]

Система Wolfram|Alpha приводит следующий результат:

$$11 56 40_{60} (3 digits)$$

Она предлагает ответ и в нормализованном виде: $$11.56 40_{60} 60^2$$. Результат также приводится в других системах счисления.

Пример 3. Рассмотрим запрос:

23_8 + 14_16 * 12_4

Операция умножения обозначается как символом *, так и символом пробела. Запрос интерпретируется в виде

$$23_8 + 14_{16} 12_4$$

На языке Wolfram запрос имеет вид:

8^^23 + 16^^14 4^^12

Результат 139 выдается в десятичной системе счисления, дополнительное приводится его представление в других системах счисления.

Кодирование целых и действительных чисел

Рассмотрим примеры запросов, которые в качестве дополнительной информации возвращают результаты двоичного кодирования чисел с различной точностью.

Пример 4. Пусть запрос имеет вид:

convert 34/3 to base 2

В режиме краткого ответа можно узнать, что

$$11,(3) = 1011,(01)_2 = 23,(1)_4 = 13,(25)_8 = b,4_{12} = b,(5)_{16}$$

(по умолчанию период не выделяется).

Кроме этого, приводится преставление числа 11,(3) с двойной точностью в 16-ричном формате, при этом по умолчанию используется нумерация байт от младшего к старшему (little-endian): abaaaaaaaaaa2640.

Количество выдаваемых сведений можно регулировать с помощью команд More … и Less … В режиме развернутого ответа пользователь получает информацию о представлении запрашиваемого числа в системах счисления с основаниями от 2 до 16. Кроме этого, можно получить представление числа 11,(3) в типах данных при двоичном кодировании не только с двойной, но и с одинарной и с четверной точностью рис. 7.2. При этом можно выбрать порядок нумерации байт от старшего к младшему (big-endian).

(рис 7.2) Представление числа 11 1\3

Пример 5. Запрос для целого числа вида

1100111_2

приводит к дополнительной информации о представлении числа 103 в типах данных, предназначенных для хранения целых чисел, например

unsigned 8-bit integer:    67
unsigned 16-bit integer: 	0067
…

Кодирование текста

Рассмотрим примеры запросов о кодах символов к системе Wolfram|Alpha.

Пример 6. Найти последовательность десятичных кодов символов в таблице Unicode по заданной строке можно с помощью запроса вида

to character code "Science"

Результат выглядит следующим образом:

{83, 99, 105, 101, 110, 99, 101}.

Если же использовать текст на русском языке, то результат может быть неправильным. Например, для запроса

to character code "Привет"

результат имеет вид:

{1055, 112, 1080, 1074, 1077, 1090}.

Система Wolfram|Alpha не различает русскую букву "р" и латинскую букву "p", так как они имеют одинаковое написание, поэтому для слова "Привет" вместо кода буквы русского алфавита приведен код буквы латинского алфавита.

, соответственно.

(рис 7.3) Символы (a) латиницы; (b) кириллицы и их десятичные коды

Пример 8. Если число десятичных кодов символов в запросе невелико, то система выдает подробную информацию. Например, для запроса

character code {72, 105}

ответ содержит представление кодов символов H и i в таблице ASCII, в десятичном, 16-ричном, 8-ричном и двоичном форматах, а также в таблице Unicode в 16-ричном и десятичном форматах.

Пример 9. Ниже приведены примеры аналогичных запросов в облаке Wolfram:

 In[1]:= ToCharacterCode["Привет!"]
ToCharacterCode["Привет!", "UTF8"]
 Out[1]= {1055, 1088, 1080, 1074, 1077, 1090, 33}
 Out[2]= {208, 159, 209, 128, 208, 184, 208, 178, 208, 181, 209, 130, 33}
 In[3]:= 	FromCharacterCode[{1052, 1080, 1088, 33}]
FromCharacterCode[{208, 156, 208, 184, 209, 128, 33},
"UTF8"]
 Out[3]= Мир!
 Out[4]= Мир!
 In[5]:= FromCharacterCode[Range[1040, 1103]] 
 Out[5]=	АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеж
Зийклмнопрстуфхцчшщъыьэюя

Функция Range возвращает список элементов, принадлежащих заданному диапазону.

Цветовые модели

Рассмотрим примеры запросов к системе Wolfram|Alpha о представлении цвета и цветовых моделях.

Пример 10. В ответ на запрос

rgb 30, 155, 102

система приводит информацию о представления цвета в цветовых моделях RGB, HSV, HSL, CMYK, XYZ и CIE Lab. Кроме того, приводится двоичный код цвета в 16-ричном формате и представление запроса на языке Wolfram. Дополнительно указывается местоположении цвета на цветовой диаграмме, названия ближайших HTML-цветов, и т. д.

Аналогичная информация приводится, если в запросе задаются параметры цвета в других цветовых моделях, например

hsv 158, 79, 56

В облаке .

(рис 7.4) Запрос о цвете в облаке Wolfram

Для цветовых моделей HSV и CMYK используются функции Hue и CMYKColor, соответственно. Функция ColorConvert используется для преобразований представления цвета из одной модели в другую:

ColorConvert[RGBColor[0.3, 0.5, 0.7],"HSB"]//InputForm

Для того чтобы увидеть изображение цвета, достаточно ввести его название. Например, в ответ на запрос

{Red, Blue, Pink, Brown, LightGreen}

появится список изображений указанных цветов.

Результатом запроса

ColorNegate[Blue]

является изображение желтого цвета - дополнительного для синего в модели RGB.

Таблицу основных цветов модели :

 In[7]:= Graphics[Raster[{{{1,0,0}, 
 {0,1,0}, {0,0,1}, {0,0,0}}, 
 {{0,1,1}, {1,0,1}, {1,1,0}, {0.9,0.9,0.9}}}]]
(рис 7.5) (a) Таблица основных цветов модели RGB; (b) цветовой бокс

С помощью запроса .

Графические примитивы

Для того чтобы получить общую информацию о геометрических фигурах в системе Wolfram|Alpha, достаточно ввести их название.

Пример 11. В ответ на запрос

rounded rectangle

система приводит пример (изображение) скругленного прямоугольника , а также информацию о его свойствах.

(рис 7.6) Скругленный прямоугольник

Информацию о функциях языка Wolfram можно получить в системе Wolfram|Alpha с помощью запросов вида:

wolfram language symbol Dodecahedron

В данном случае будет приведен пример запроса на языке Wolfram

Graphics3D[Dodecahedron[]]

и изображение додекаэдра в качестве ответа на него.

Ниже приведен пример запроса о построении графических примитивов в облаке .

 In[8]:= Graphics[{Point[{0, 0}], 
 Line[{{0.5, 0.2}, {1, -0.5}, {1.8, 0}}], 
Red, Rectangle[{2, -0.5}, {3, 0.3}], 
Blue, Polygon[{{3.5, -0.5}, {4.5, 0.5}, {5, 0}}],
Black, Circle[{5.8, 0}, 0.4], 
Circle[{7, 0.2}, {0.5, 0.2}], Disk[{8, 0}, 0.3], 
Circle[{8.8, 0}, 0.5, {0, 2 Pi/3}], 
Text["Hello", {9.8, 0}]}]
(рис 7.7) Графические примитивы

Если функцию Circle заменить функцией Disk, то эллипс она вернет окрашенный, а вместо дуги эллипса будет построен его сектор.

Скругленный прямоугольник красного цвета можно построить с помощью запроса

Graphics[{Red, Rectangle[{0, 0}, {2, 1}, 
RoundingRadius -> 0.3]}]

Кривые Безье и B-сплайны

В ответ на запрос

bezier curve или b spline

система Wolfram|Alpha выдает только определение кривой Безье или B-сплайна, соответственно. Примеры данных кривых система показывает в результате запросов о функциях языка Wolfram вида

wolfram language symbol BezierCurve

(аналогично для функции BSplineCurve).

Пример 12. Рассмотрим примеры построения в облаке Wolfram кривых Безье первого, второго и третьего порядка по двум, трем и четырем точкам, соответственно:

 In[9]:= two = {{0, 0}, {0.5, 0.1}}; 
three = {{1, -0.5}, {1.5, 1}, {2.8, -0.1}};
four = {{4.5, 1}, {6.5, -0.5}, {3.5, 0}, {5, 1}};
Graphics[{LightGray, Line[three], Line[four], 
Black, BezierCurve[two], BezierCurve[three], 
BezierCurve[four], Blue, Point[two], 
Point[three], Point[four]}]

Результат показан на .

(рис 7.8) Кривые Безье первого, второго и третьего порядка

Если число точек в списке превышает 4, то они разбиваются на группы по 4 точки, так что последняя точка группы является первой точкой следующей группы, и для каждой группы строятся кривые Безье третьего порядка. Если в последней группе точек оказывается меньше четырех, т. е. она содержит 2 или 3 точки, то для нее строится кривая Безье первого или второго порядка, соответственно.

Ниже показан пример построения кривой по 9 точкам. Для точек с индексами 0 - 3 и 3 - 6 строятся кривые Безье третьего порядка, а для точек с индексами 6 - 8 - кривая Безье второго порядка :

 In[13]:= p = {{0, 0}, {1, 1}, {2, -1}, {5, 2}, {7, -1}, 
{3, -1}, {6, 1}, {8, 2}, {9, 0}};
Graphics[{LightGray, Line[p], Black, 
BezierCurve[p], Blue, Point[p]}
(рис 7.9) Кривая, составленная из трех кривых Безье

Пример 13. :

 In[15]:= Graphics[{LightGray, Line[p], Black, 
BSplineCurve[p], Blue, Point[p]}
(рис 7.10) B-сплайн, построенный по 9 точкам

Аналогичным образом кривые Безье и B-сплайны, а также другие графические примитивы строятся в трехмерном пространстве с помощью функции Graphics3D. Для точек в этом случае должны указываться по 3 координаты.

Фракталы

Примеры разного рода фракталов в системе Wolfram|Alpha предлагаются по запросу fractal или fractals.

В языке Wolfram также имеется большое количество функций для построения различных фракталов.

Пример 14. Ниже приведен пример построения кривой Гильберта (4 итерации), в которой ломаная заменена :

 In[16]:= 	Graphics[{HilbertCurve[4]/.Line->BSplineCurve}]

Снежинку Коха можно построить с помощью следующего запроса:

In[17]:= Graphics[GeometricTransformation[KochCurve[3], 
{RotationTransform[Pi, {1/2, 0}], 
 RotationTransform[-Pi/3, {1, 0}], 
 RotationTransform[Pi/3, {0, 0}]}]] 
(рис 7.11) Приближение (a) кривой Гильберта; (b) снежинки Коха

Изображения. Звуки

В системе Wolfram|Alpha изображениями сопровождается большое количество разнообразных запросов. Например, по запросу Eiffel Tower приводятся изображения как самой Эйфелевой башни, так и ее местоположения. Кроме этого, сообщается информация об этой башне.

В ответ на запросы о преобразованиях изображений возвращаются функции языка Wolfram.

В облаке :

(рис 7.12) Изображение в облаке Wolfram

Пример 15. Ниже приведены примеры запросов, которые выполняют геометрические преобразования - отражение и поворот, заменяют цвета изображения на дополнительные в модели :

 In[2]:=ImageReflect[myimage, Left]
ImageRotate[myimage, Right] 
ColorNegate[myimage]
Blur[myimage]
(рис 7.13) Операции (a) отражения; (b) поворота; (c) инверсии; (d) размытия

Систему Wolfram|Alpha можно использовать для настройки музыкальных инструментов. Для того чтобы услышать звучание ноты или последовательности нот, достаточно ввести их название в строку поиска, например, в виде F#, C#, A#

ответ система , а также на клавиатуре.

(рис 7.14) Изображение нот фа-диез, до-диез, ля-диез на нотном стане

Звучание можно прослушать с помощью кнопки Play Sound.

Пример 16. Ниже приведены примеры трех запросов в облаке Wolfram, в результате ответа на которые появляется проигрыватель для прослушивания звучания нот. Ноты можно обозначать как буквами, так и цифрами: 0 соответствует ноте до первой октавы, 12 - ноте до второй октавы.

В результате первого запроса можно прослушать гамму до мажор и аккорд до-ми-соль. Второй запрос - ноты ре, фа-диез, ля, ре и аккорд, третий - хроматическая гамма от $$\box$$ ступени :

In[1]:= Sound[{SoundNote["C"], SoundNote["D"],
 SoundNote["E"], SoundNote["F"], SoundNote["G"],
 SoundNote["A"], SoundNote["B" SoundNote[12],
 SoundNote[{"C", "E", "G"}]}]
Sound[{SoundNote[2], SoundNote[6], SoundNote[9],
 SoundNote[14], SoundNote[{2, 6, 9, 14}]}]
Sound[Table[SoundNote[n],{n, 0, 12}]]
(рис 7.15) (a) До мажор; (b) ре мажор; (c) хроматическая гамма

Запросы о логических преобразованиях

Рассмотрим запросы, связанные с преобразованиями логических выражений, электронными логическими схемами, битовыми операциями, играми и клеточными автоматами.

Логические выражения

Для логических операций в системе Wolfram|Alpha используются следующие обозначения:

  • дизъюнкция: or или ||;
  • конъюнкция: and или ;
  • отрицание: not или !;
  • импликация: implies или =>;
  • эквиваленция: equivalent или <=>;
  • строгая дизъюнкция:xor;
  • штрих Шеффера: nand;
  • стрелка Пирса: nor;
  • отрицание строгой дизъюнкции: xnor;
  • Пример 17. Построить таблицу истинности логического выражения можно с помощью запроса вида

    truth table ((a || b)  !a) => (a <=> b)

    Таблица истинности показана на рис. 7.16. Выражение предварительно не упрощается.

    (рис 7.16) Таблица истинности для выражения...

    Пример 18. Упростить логическое выражение в системе Wolfram|Alpha можно, например, следующим образом:

    simplify ((a or not b) and c) xnor ((a implies not c) nor a)

    Результат имеет вид: $$(\neg a \wedge b) \vee \neg c$$.

    Кроме упрощенного выражения, приводится его ДНФ, КНФ и другие формы его представления через подмножество логических операций. Для исходного выражения также приводится таблица истинности, схема логической функции и клеточный автомат с правилом, которое представляет эта функция, если она имеет 3 аргумента.

    Рассмотрим результаты запроса для упрощенного выражения (not a and b) or not c.

    Электронная логическая схема и диаграмма Венна, или Эйлера-Венна приведены на .

    (рис 7.17) (a) Электронная логическая схема; (b) диаграмма Эйлера-Венна

    На показано клеточное поле, представляющее состояния элементарного клеточного автомата в моменты времени от 0 до 25, который определяется правилом 93, описываемым логической функцией $$f(a, b, c) = (\neg a b) \vee \neg c$$.

    Начальное состояние соответствует верхнему ряду поля.

    (рис 7.18) Клеточный автомат для правила...

    На языке Wolfram таблицу истинности для рассматриваемого выражения можно построить следующим образом:

    In[1]:= 	BooleanTable[{a, b, c, Or[And[Not[a], b], Not[c]]},
    {a, b, c}]//TableForm
    Out[1]//TableForm= 
    True	True 	True	False
    True	True	False	True
    True	False	True	False
    True	False	False	True
    False	True	True	True
    False	True	False	True
    False	False	True	False
    False	False	False	True 
    

    Таблица истинности может быть построена сразу для нескольких логических выражений:

    In[2]:= 	BooleanTable[{a, b, And[a, b], Or[a, b], 
    Implies[a, b], Equivalent[a, b], Xor[a, b],
    Nand[a, b], Nor[a, b]}, {a, b}]//TableForm
    Out[2]//TableForm= 
    True	True	True	True	True	True	False	False	False 	
    True	False	False	True	False	False	True	True	False
    False	True	False	True	True	False	True	True	False
    False	False	False	False	True	True	False	True	True

    Упростить логическое выражение, вычислить его ДНФ, а также найти по таблице истинности логической функции номер правила для элементарного клеточного автомата можно следующим образом:

    In[3]:= 	Simplify[Xnor[(a||!b)c, Nor[Implies[a, !c], a]]]
     Out[3]= 	(!a  b) || !c
     In[4]:= 	LogicalExpand[(a||!b||c) (!a||b||c||!d)]
     Out[4]= 	c | | (a   b) || (a   !d) || (!a   !b) || (!b   !d) 
     In[5]:= 	val = BooleanTable[(!a   b)|| !c, {a, b, c}]
     Out[5]= 	{False, True, False, True, True, True, False, True}
     In[6]:= 	boolelist = Boole[val]
     Out[6]= 	{0, 1, 0, 1, 1, 1, 0, 1}
     In[7]:= 	FromDigits[boolelist, 2]
     Out[7]= 	93
    

    Электронные логические схемы

    Изображения электронных логических схем в системе Wolfram|Alpha строятся в ответ на запросы вида

    logic circuit (a or not b) and (c xor d)

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

    Пример 19. Изображение отдельного логического элемента в системе Wolfram|Alpha можно получить с помощью запроса

    Xor gate

    Результат показан на .

    (рис 7.19) Логический элемент Xor (ANSI)

    Битовые операции

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

    Например, результатом вычисления запроса

    bitOr(4, 9, 10)

    является 15.

    Пример 20. В языке Wolfram побитовые операции конъюнкции, дизъюнкции и строгой дизъюнкции выполняются с помощью функций BitAnd, BitOr и BitXor, соответственно.

    Запрос BitNot[n] возвращает число - 1 - n.

    Функция BitLength находит наименьшее число двоичных разрядов, которые необходимы для представления числа.

    Ниже приведены примеры запросов:

     In[1]:= 	{BitAnd[4,9,10], BitOr[4,9,10], BitXor[4,9,10]} 
    BitNot[12]
    BitLength[2345]
     Out[1]= 	{0, 15, 7}
     Out[2]= 	-13
     Out[3]= 	12

    Функция BitGet от аргументов n и k возвращает значение двоичного разряда числа n - коэффициента при $$2^k$$. Функции BitSet и BitClear устанавливают в разряде k числа n значения 1 и 0, соответственно:

     In[4]:= 	BitGet[2345, 10] 
     Out[4]= 	0
     In[5]:= 	BitSet[2345, 10] 
     Out[5]= 	3 369
     In[6]:= 	BitClear[3369, 10]
     Out[6]= 	2 345

    Функция IntegerDigits возвращает список цифр числа в заданной системе счисления, функция FromDigits по списку цифр числа и основанию системы счисления возвращает десятичное представление этого числа:

     In[7]:= 	IntegerDigits[2345, 2] 
    IntegerDigits[6789, 16] 
     Out[7]= 	{1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1}
     Out[8]= 	{1, 10, 8, 5}
     In[9]:= 	FromDigits[{1, 0, 0, 1, 0, 0, 1}, 2]
    FromDigits[{11, 56, 40}, 60]
     Out[9]= 	73
     Out[10]= 	43000

    Игра "Ним". Использование сущностей в облаке Wolfram

    База знаний Wolfram|Alpha содержит информацию о большом количестве игр. Описание игры "Ним" приводится в ответ на запрос

    Nim game

    Пример 21. Ниже приведены примеры запросов, которые возвращают общие сведения об игре "Ним" в облаке Wolfram:

    In[1]:= Entity["FamousMathGame", "Nim"]

    In[2]:=	Entity["FamousMathGame", "Nim"][ "Statement"]
    Entity["FamousMathGame", "Nim"][ "FormulationDate"]
    Entity["FamousMathGame", "Nim"][ "AdditionalPeople"
    Out[2]=	Given one or more piles ("nim-heaps"), players alternate by taking all or some of the counters in a single heap. The player taking the last counter or stack of counters is the winner.

    Для получения информации из базы знаний, используется функция Entity (сущность). Создать сущность можно с помощью сочетания клавиш

    В появившееся поле для ввода следует ввести название понятия, в данном случае nim, и нажать клавишу Enter. Система предложит вариант ассоциации этой сущности. Согласие с ней выражается нажатием на галочку:

    После этого можно задать, например, запрос обо всех доступных свойствах сущности:

    Информацию обо всех значениях свойств сразу можно получить с помощью запроса

    Сведения об отдельных свойствах возвращаются с помощью запроса вида

    Вместо изображения с именем сущности можно, как и выше, использовать функцию Entity. Кроме этого, можно запрашивать информацию не только о конкретных свойствах, но и о наборах свойств:

    Entity["FamousMathGame", "Nim"][{ "Diagram", "Classes"}]

    Для того чтобы получить информацию обо всех типах сущностей, которые имеются в базе знаний, следует ввести в строку поиска облака Wolfram запрос

    Entity Types

    В результате появится информация о большом количестве типов сущностей, классифицированных по областям знаний. В частности, сведения о функциях, с помощью которых можно формулировать запросы о сущностях, принадлежащих типу "FamousMathGame", находятся в разделе Mathematical Computational Entities.

    Элементарные клеточные автоматы

    Общие сведения о клеточных автоматах, а также их примеры система Wolfram|Alpha приводит в ответ на запрос:

    cellular automaton

    Пример 22. Информацию об элементарном клеточном автомате, который соответствует конкретному правилу, например 86, система Wolfram|Alpha возвращает в ответ на запрос

    cellular automaton rule 86

    В частности, приводится логическая и алгебраическая форма правила $$86 (86 = 01010110_2)$$. Эти формы, соответственно, имеют вид:

    $$(p, q, r) \to r Xor (p Or q)$$

    и

    $$(p, q, r) \to (p + q + p q + r) \mod 2$$

    Рассмотрим примеры запросов в облаке Wolfram.

    Представить правило 86 в виде преобразований клеток можно следующим образом:

    In[1]:= 	RulePlot[CellularAutomaton[86]]

    Клетка черного цвета соответствует 1, белого - 0.

    Состояния клеточного автомата в моменты времени 0 - 10 программа возвращает в результате запроса вида :

    In[2]:= 	RulePlot[CellularAutomaton[86], {{1}, 0}, 10,
    Mesh -> All, ImageSize -> Full]

    В начальном состоянии центральная клетка имеет черный цвет. Слева и справа от нее расположены клетки белого цвета, число которых равно числу шагов. На начальное состояние соответствует верхнему ряду поля.

    (рис 7.20) Состояния 0 - 10 клеточного автомата для правила 86

    Первые 50 состояний поля с аналогичным начальным состоянием можно также увидеть с помощью запроса

    ArrayPlot[CellularAutomaton[86, {{1}, 0}, 50]]

    В результате следующего запроса возвращаются первые 2 состояния автомата для начального состояния, описываемого явным образом:

     In[3]:= 	CellularAutomaton[86, {1,0,0,0,1,0,0}, 2]
     Out[3]= 	{{1, 0, 0, 0, 1, 0, 0}, {1, 1, 0, 1, 1, 1, 1}, {0, 1, 0, 0, 0, 0, 0}}
     In[4]:= 	CellularAutomaton[86, {1,0,0,0,1,0,0}, 2]//Grid

    Правила могут описываться с помощью логических или алгебраических функций (см. выше), например в виде

     In[5]:= 	CellularAutomaton[{{p_, q_, r_} -> Xor[r, Or[p, q]]},
    {{True}, False}, 2]
     Out[5]= 	{{False, False, True, False, False}, {False, True, True, True, False},
    {True, False, False, True, True}}
     In[6]:= 	ArrayPlot[Boole[%]]

    Игра "Жизнь"

    Информацию об игре Джона Конвея "Жизнь" и примеры некоторых начальных состояний для этой игры можно получить в системе Wolfram|Alpha с помощью запроса

    Conway's Game of Life

    Пример 21. Рассмотрим пример построения клеточного поля со случайным набором живых клеток в начальном состоянии в облаке Wolfram.

    Случайная расстановка живых клеток строится с помощью функции RandomInteger. Например, поле 5 * 5 может иметь вид:

     In[1]:= 	RandomInteger[1, {5, 5}]//Grid

    Следующий пример реализации игры "Жизнь" приводится в документации языка Wolfram (поле сокращено до размера 20 * 20):

    In[2]:= 	gameOfLife = {224, {2, {{2, 2, 2}, {2, 1, 2}, 
    {2,, 2}}}, {1, 1}};
    board = RandomInteger[1, {20, 20}]; 
    Dynamic[ArrayPlot[board =
    Last[CellularAutomaton[gameOfLife, board, 
    {{0, 1}}]]]]

    В первой строке кода описываются правила игры "Жизнь"; они присваиваются переменной gameOfLife. Во второй строке переменной board присваивается значение начальной конфигурации живых клеток поля; эта конфигурация задается случайным образом. Третья строка описывает динамическое отображение состояний поля, при этом в переменной board запоминается последнее состояние, которое затем преобразуется по правилам игры.

    Состояния поля автоматически обновляются. На приведены примеры двух состояний поля.

    (рис 7.21) Состояния клеточного поля в игре "Жизнь"

    Состояние поля на конкретном шаге можно получить следующим образом:

     In[5]:= 	board1 = {{0,0,1,0,0}, {1,0,1,0,0}, 
    {0,1,1,0,0}, {0,0,0,0,0}, {0,0,0,0,0}};
    Grid[board1]
    In[7]:= 	ArrayPlot[CellularAutomaton[gameOfLife, board1,
    {{{4}}}]]

    Переменная board1 хранит начальное состояние поля (см. Out[6]). Программа вычисляет состояние поля на шаге 4.

    Упражнения

  • Найдите 1) в системе Wolfram|Alpha; 2) в облаке Wolfr

    a) 2;

    b) 3;

    c) 12;

    d) 16;

    e) 60.

  • Найдите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram результат вычисления выражения

    a) $$(33,33_5 + 11,77_{25}) * (44,44_5 - 22,22_{25}); b) 73f_{16} * 9e_{16} + abcd_{16}.$$

  • Найдите с помощью системы Wolfram|Alpha двоичный код в представленных в ней типах данных числа

    a) 3,14159265;

    b) 1335.

  • Найдите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram последовательность кодов символов строки

    a) "Peace";

    b) "Всему своё время".

  • Выведите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram фрагменты таблицы кодов символов Unicode, содержащие все буквы греческого алфавита.
  • Найдите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram компоненты в моделях RGB, CMYK и HSV цвета

    a) rgb(28, 240, 157);

    b) hsv(60, 85, 95);

    c) cmyk(0,8, 0,5, 0,3, 0,6);

    d) rgb(0,2, 0,8, 0,7).

  • Задайте запрос 1) в системе Wolfram|Alpha; 2) в облаке Wolfram, в результате которого система построит

    a) прямоугольник красного цвета;

    b) эллипс оранжевого цвета;

    c) окружность синего цвета;

    d) круг пурпурного цвета;

    e) скругленный прямоугольник фиолетового цвета.

  • Постройте в облаке Wolfram

    a) дугу эллипса сиреневого цвета;

    b) сектор круга небесно-голубого цвета.

  • Задайте запрос 1) в системе Wolfram|Alpha; 2) в облаке Wolfram, в результате которого система построит

    a) куб;

    b) параллелепипед;

    c) шар;

    d) додекаэдр.

  • Постройте в облаке Wolfram изображение с помощью кривых Безье:

    a) полумесяц;

    b) сердечко;

    с) цветок;

    d) игрушечный автомобиль.

  • Постройте в облаке Wolfram с помощью B-сплайнов изображение буквы:

    a) П;

    b) И;

    c) М;

    d) О;

    e) В;

    f) А.

  • Задайте запрос 1) в системе Wolfram|Alpha; 2) в облаке Wolfram, в результате которого система построит

    a) кривую Пеано;

    b) кривую Серпинского.

  • Найдите с помощью системы Wolfram|Alpha изображение

    a) множества Мандельброта;

    b) множества Жюлиа;

    c) дерева Пифагора;

    d) тетраэдра Серпинского.

  • Вставьте в облако Wolfram изображение и постройте для него

    a) перевернутое изображение (верх и низ меняются местами);

    b) черно-белое изображение (оттенки серого).

  • Задайте запрос 1) в системе Wolfram|Alpha; 2) в облаке Wolfram, в результате которого система построит таблицу истинности для логического выражения

    a) $$(x \to y) (x \to z) \to (y \leftrigharrow z);$$

    b) $$x \oplus y \oplus z.$$

  • Упростите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram логическое выражение

    a) $$(x \neg y z) \vee (\neg x \neg y \neg z) \vee (x y z);$$

    b) $$x nor y.$$

  • Приведите к ДНФ 1) в системе Wolfram|Alpha; 2) в облаке Wolfram логическое выражение

    a) $$(x \vee \neg y \vee z) (\neg x \vee \neg y \vee \neg z) (x \vee y \vee z);$$

    b) x nand y.

  • Найдите в системе Wolfram|Alpha электронную логическую схему функции $$f(x, y, z) = (x \to y) (y \to z) (x \to z).$$
  • Найдите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram результат битовой операции

    a) $$25 \oplus 39 \oplus 83$$;

    b) bitAnd(45, 33, 62);

    c) bitShiftLeft(1234, 3);

    d) bitShiftRight(1234, 4).

  • Найдите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram

    a) количество двоичных разрядов числа 2022;

    b) список цифр в двоичной системе счисления числа 1844;

    c) число по списку троичных цифр {2, 0, 0, 1, 2, 1, 0, 0, 2}.

  • Найдите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram информацию об игре "Крестики-нолики".
  • Найдите в системе Wolfram|Alpha информацию об элементарном клеточном автомате, в котором переходы описываются правилом 90.
  • В облаке Wolfram для элементарного клеточного автомата, в котором переходы описываются правилом 54, выведите

    a) правило перехода, которое описывается с помощью клеток;

    b) правило перехода, которое описывается с помощью логической функции;

    c) 10 первых состояний, которые описываются с помощью 0 и 1;

    d) 50 первых состояний на клеточном поле, если в начальном расположении центральная клетка черная, остальные - белые;

    e) 50 первых состояний на клеточном поле, если в начальном расположении черные и белые клетки располагаются случайным образом.

  • В облаке Wolfram выведите для игры "Жизнь" первые 4 состояния поля, в котором начальная конфигурация живых клеток образует тяжелый космический корабль.
  • В облаке Wolfram создайте для игры "Жизнь" динамическое отображение состояний поля размером 30 * 30, в начальном состоянии которого живыми являются расположенные подряд 8 клеток верхнего ряда.
  • Страницы:

    Система Wolfram|Alpha - база знаний, которую также называют интеллектуальной машиной знаний, использует вычислительные интеллектуальные алгоритмы для поиска ответов на онлайн-запросы. Она была создана с помощью системы компьютерной математики Wolfram Mathematica. Система Wolfram|Alpha ищет ответы в своей базе знаний и в качестве ответа выдает как результаты вычислений, так и некоторые сведения из базы знаний, которые могут иметь отношение к запросу. База содержит сведения из большого количества областей знаний. Для запросов используется язык, близкий к естественному. Когда это возможно, ответ содержит формулировку запроса на языке Wolfram.

    Ниже приведены примеры запросов к базе знаний Wolfram|Alpha по рассмотренным в предыдущих главах вопросам, а также примеры аналогичных запросов в облаке Wolfram.

    Запросы о представлении информации в компьютере

    Представление чисел в системах счисления

    Рассмотрим запросы о преобразования представлений чисел между системами счисления и о выполнении арифметических операций в системах счисления. Принадлежность числа к системе счисления указывается с помощью знака подчеркивания: запись 123_4 соответствует $$123_4$$.

    Пример 1. Найти троичное представление числа $$12a,a12_{16}$$ в системе Wolfram|Alpha можно с помощью запроса

    convert 12a.a12 from base 16 to base 3 или 
    convert 12a.a12_16 to base 3

    Ответ на запрос выдается после нажатия на клавишу . В разделе Input interpretation приводится интерпретация запроса, который будет вычисляться системой (рис. 7.1).

    (рис 7.1) Раздел интерпретации ввода

    На вкладке Plain Text см. рис. 7.1 можно увидеть вариант этого запроса на языке Wolfram:

    BaseForm[16^^12a.a12, 3]

    В разделе Result приводится результат вычислений:

    $$102001.12122221..._3$$

    Число знаков после запятой будет увеличено при выборе команды More digits. Дополнительно система показывает результат в десятичном виде, а также в других системах счисления.

    Пример 2. Запрос на преобразование из одной системы счисления в другую может быть сокращен. Например, рассмотрим запрос

    43000 to base 60

    Он интерпретируется так же, как и предыдущие запросы, в виде

    convert 43000 to base 60

    На языке Wolfram запрос имеет вид:

    BaseForm[43000, 60]

    Система Wolfram|Alpha приводит следующий результат:

    $$11 56 40_{60} (3 digits)$$

    Она предлагает ответ и в нормализованном виде: $$11.56 40_{60} 60^2$$. Результат также приводится в других системах счисления.

    Пример 3. Рассмотрим запрос:

    23_8 + 14_16 * 12_4

    Операция умножения обозначается как символом *, так и символом пробела. Запрос интерпретируется в виде

    $$23_8 + 14_{16} 12_4$$

    На языке Wolfram запрос имеет вид:

    8^^23 + 16^^14 4^^12

    Результат 139 выдается в десятичной системе счисления, дополнительное приводится его представление в других системах счисления.

    Кодирование целых и действительных чисел

    Рассмотрим примеры запросов, которые в качестве дополнительной информации возвращают результаты двоичного кодирования чисел с различной точностью.

    Пример 4. Пусть запрос имеет вид:

    convert 34/3 to base 2

    В режиме краткого ответа можно узнать, что

    $$11,(3) = 1011,(01)_2 = 23,(1)_4 = 13,(25)_8 = b,4_{12} = b,(5)_{16}$$

    (по умолчанию период не выделяется).

    Кроме этого, приводится преставление числа 11,(3) с двойной точностью в 16-ричном формате, при этом по умолчанию используется нумерация байт от младшего к старшему (little-endian): abaaaaaaaaaa2640.

    Количество выдаваемых сведений можно регулировать с помощью команд More … и Less … В режиме развернутого ответа пользователь получает информацию о представлении запрашиваемого числа в системах счисления с основаниями от 2 до 16. Кроме этого, можно получить представление числа 11,(3) в типах данных при двоичном кодировании не только с двойной, но и с одинарной и с четверной точностью рис. 7.2. При этом можно выбрать порядок нумерации байт от старшего к младшему (big-endian).

    (рис 7.2) Представление числа 11 1\3

    Пример 5. Запрос для целого числа вида

    1100111_2

    приводит к дополнительной информации о представлении числа 103 в типах данных, предназначенных для хранения целых чисел, например

    unsigned 8-bit integer:    67
    unsigned 16-bit integer: 	0067
    …

    Кодирование текста

    Рассмотрим примеры запросов о кодах символов к системе Wolfram|Alpha.

    Пример 6. Найти последовательность десятичных кодов символов в таблице Unicode по заданной строке можно с помощью запроса вида

    to character code "Science"

    Результат выглядит следующим образом:

    {83, 99, 105, 101, 110, 99, 101}.

    Если же использовать текст на русском языке, то результат может быть неправильным. Например, для запроса

    to character code "Привет"

    результат имеет вид:

    {1055, 112, 1080, 1074, 1077, 1090}.

    Система Wolfram|Alpha не различает русскую букву "р" и латинскую букву "p", так как они имеют одинаковое написание, поэтому для слова "Привет" вместо кода буквы русского алфавита приведен код буквы латинского алфавита.

    , соответственно.

    (рис 7.3) Символы (a) латиницы; (b) кириллицы и их десятичные коды

    Пример 8. Если число десятичных кодов символов в запросе невелико, то система выдает подробную информацию. Например, для запроса

    character code {72, 105}

    ответ содержит представление кодов символов H и i в таблице ASCII, в десятичном, 16-ричном, 8-ричном и двоичном форматах, а также в таблице Unicode в 16-ричном и десятичном форматах.

    Пример 9. Ниже приведены примеры аналогичных запросов в облаке Wolfram:

     In[1]:= ToCharacterCode["Привет!"]
    ToCharacterCode["Привет!", "UTF8"]
     Out[1]= {1055, 1088, 1080, 1074, 1077, 1090, 33}
     Out[2]= {208, 159, 209, 128, 208, 184, 208, 178, 208, 181, 209, 130, 33}
     In[3]:= 	FromCharacterCode[{1052, 1080, 1088, 33}]
    FromCharacterCode[{208, 156, 208, 184, 209, 128, 33},
    "UTF8"]
     Out[3]= Мир!
     Out[4]= Мир!
     In[5]:= FromCharacterCode[Range[1040, 1103]] 
     Out[5]=	АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеж
    Зийклмнопрстуфхцчшщъыьэюя

    Функция Range возвращает список элементов, принадлежащих заданному диапазону.

    Цветовые модели

    Рассмотрим примеры запросов к системе Wolfram|Alpha о представлении цвета и цветовых моделях.

    Пример 10. В ответ на запрос

    rgb 30, 155, 102

    система приводит информацию о представления цвета в цветовых моделях RGB, HSV, HSL, CMYK, XYZ и CIE Lab. Кроме того, приводится двоичный код цвета в 16-ричном формате и представление запроса на языке Wolfram. Дополнительно указывается местоположении цвета на цветовой диаграмме, названия ближайших HTML-цветов, и т. д.

    Аналогичная информация приводится, если в запросе задаются параметры цвета в других цветовых моделях, например

    hsv 158, 79, 56

    В облаке .

    (рис 7.4) Запрос о цвете в облаке Wolfram

    Для цветовых моделей HSV и CMYK используются функции Hue и CMYKColor, соответственно. Функция ColorConvert используется для преобразований представления цвета из одной модели в другую:

    ColorConvert[RGBColor[0.3, 0.5, 0.7],"HSB"]//InputForm

    Для того чтобы увидеть изображение цвета, достаточно ввести его название. Например, в ответ на запрос

    {Red, Blue, Pink, Brown, LightGreen}

    появится список изображений указанных цветов.

    Результатом запроса

    ColorNegate[Blue]

    является изображение желтого цвета - дополнительного для синего в модели RGB.

    Таблицу основных цветов модели :

     In[7]:= Graphics[Raster[{{{1,0,0}, 
     {0,1,0}, {0,0,1}, {0,0,0}}, 
     {{0,1,1}, {1,0,1}, {1,1,0}, {0.9,0.9,0.9}}}]]
    (рис 7.5) (a) Таблица основных цветов модели RGB; (b) цветовой бокс

    С помощью запроса .

    Графические примитивы

    Для того чтобы получить общую информацию о геометрических фигурах в системе Wolfram|Alpha, достаточно ввести их название.

    Пример 11. В ответ на запрос

    rounded rectangle

    система приводит пример (изображение) скругленного прямоугольника , а также информацию о его свойствах.

    (рис 7.6) Скругленный прямоугольник

    Информацию о функциях языка Wolfram можно получить в системе Wolfram|Alpha с помощью запросов вида:

    wolfram language symbol Dodecahedron

    В данном случае будет приведен пример запроса на языке Wolfram

    Graphics3D[Dodecahedron[]]

    и изображение додекаэдра в качестве ответа на него.

    Ниже приведен пример запроса о построении графических примитивов в облаке .

     In[8]:= Graphics[{Point[{0, 0}], 
     Line[{{0.5, 0.2}, {1, -0.5}, {1.8, 0}}], 
    Red, Rectangle[{2, -0.5}, {3, 0.3}], 
    Blue, Polygon[{{3.5, -0.5}, {4.5, 0.5}, {5, 0}}],
    Black, Circle[{5.8, 0}, 0.4], 
    Circle[{7, 0.2}, {0.5, 0.2}], Disk[{8, 0}, 0.3], 
    Circle[{8.8, 0}, 0.5, {0, 2 Pi/3}], 
    Text["Hello", {9.8, 0}]}]
    (рис 7.7) Графические примитивы

    Если функцию Circle заменить функцией Disk, то эллипс она вернет окрашенный, а вместо дуги эллипса будет построен его сектор.

    Скругленный прямоугольник красного цвета можно построить с помощью запроса

    Graphics[{Red, Rectangle[{0, 0}, {2, 1}, 
    RoundingRadius -> 0.3]}]

    Кривые Безье и B-сплайны

    В ответ на запрос

    bezier curve или b spline

    система Wolfram|Alpha выдает только определение кривой Безье или B-сплайна, соответственно. Примеры данных кривых система показывает в результате запросов о функциях языка Wolfram вида

    wolfram language symbol BezierCurve

    (аналогично для функции BSplineCurve).

    Пример 12. Рассмотрим примеры построения в облаке Wolfram кривых Безье первого, второго и третьего порядка по двум, трем и четырем точкам, соответственно:

     In[9]:= two = {{0, 0}, {0.5, 0.1}}; 
    three = {{1, -0.5}, {1.5, 1}, {2.8, -0.1}};
    four = {{4.5, 1}, {6.5, -0.5}, {3.5, 0}, {5, 1}};
    Graphics[{LightGray, Line[three], Line[four], 
    Black, BezierCurve[two], BezierCurve[three], 
    BezierCurve[four], Blue, Point[two], 
    Point[three], Point[four]}]

    Результат показан на .

    (рис 7.8) Кривые Безье первого, второго и третьего порядка

    Если число точек в списке превышает 4, то они разбиваются на группы по 4 точки, так что последняя точка группы является первой точкой следующей группы, и для каждой группы строятся кривые Безье третьего порядка. Если в последней группе точек оказывается меньше четырех, т. е. она содержит 2 или 3 точки, то для нее строится кривая Безье первого или второго порядка, соответственно.

    Ниже показан пример построения кривой по 9 точкам. Для точек с индексами 0 - 3 и 3 - 6 строятся кривые Безье третьего порядка, а для точек с индексами 6 - 8 - кривая Безье второго порядка :

     In[13]:= p = {{0, 0}, {1, 1}, {2, -1}, {5, 2}, {7, -1}, 
    {3, -1}, {6, 1}, {8, 2}, {9, 0}};
    Graphics[{LightGray, Line[p], Black, 
    BezierCurve[p], Blue, Point[p]}
    (рис 7.9) Кривая, составленная из трех кривых Безье

    Пример 13. :

     In[15]:= Graphics[{LightGray, Line[p], Black, 
    BSplineCurve[p], Blue, Point[p]}
    (рис 7.10) B-сплайн, построенный по 9 точкам

    Аналогичным образом кривые Безье и B-сплайны, а также другие графические примитивы строятся в трехмерном пространстве с помощью функции Graphics3D. Для точек в этом случае должны указываться по 3 координаты.

    Фракталы

    Примеры разного рода фракталов в системе Wolfram|Alpha предлагаются по запросу fractal или fractals.

    В языке Wolfram также имеется большое количество функций для построения различных фракталов.

    Пример 14. Ниже приведен пример построения кривой Гильберта (4 итерации), в которой ломаная заменена :

     In[16]:= 	Graphics[{HilbertCurve[4]/.Line->BSplineCurve}]

    Снежинку Коха можно построить с помощью следующего запроса:

    In[17]:= Graphics[GeometricTransformation[KochCurve[3], 
    {RotationTransform[Pi, {1/2, 0}], 
     RotationTransform[-Pi/3, {1, 0}], 
     RotationTransform[Pi/3, {0, 0}]}]] 
    (рис 7.11) Приближение (a) кривой Гильберта; (b) снежинки Коха

    Изображения. Звуки

    В системе Wolfram|Alpha изображениями сопровождается большое количество разнообразных запросов. Например, по запросу Eiffel Tower приводятся изображения как самой Эйфелевой башни, так и ее местоположения. Кроме этого, сообщается информация об этой башне.

    В ответ на запросы о преобразованиях изображений возвращаются функции языка Wolfram.

    В облаке :

    (рис 7.12) Изображение в облаке Wolfram

    Пример 15. Ниже приведены примеры запросов, которые выполняют геометрические преобразования - отражение и поворот, заменяют цвета изображения на дополнительные в модели :

     In[2]:=ImageReflect[myimage, Left]
    ImageRotate[myimage, Right] 
    ColorNegate[myimage]
    Blur[myimage]
    (рис 7.13) Операции (a) отражения; (b) поворота; (c) инверсии; (d) размытия

    Систему Wolfram|Alpha можно использовать для настройки музыкальных инструментов. Для того чтобы услышать звучание ноты или последовательности нот, достаточно ввести их название в строку поиска, например, в виде F#, C#, A#

    ответ система , а также на клавиатуре.

    (рис 7.14) Изображение нот фа-диез, до-диез, ля-диез на нотном стане

    Звучание можно прослушать с помощью кнопки Play Sound.

    Пример 16. Ниже приведены примеры трех запросов в облаке Wolfram, в результате ответа на которые появляется проигрыватель для прослушивания звучания нот. Ноты можно обозначать как буквами, так и цифрами: 0 соответствует ноте до первой октавы, 12 - ноте до второй октавы.

    В результате первого запроса можно прослушать гамму до мажор и аккорд до-ми-соль. Второй запрос - ноты ре, фа-диез, ля, ре и аккорд, третий - хроматическая гамма от $$\box$$ ступени :

    In[1]:= Sound[{SoundNote["C"], SoundNote["D"],
     SoundNote["E"], SoundNote["F"], SoundNote["G"],
     SoundNote["A"], SoundNote["B" SoundNote[12],
     SoundNote[{"C", "E", "G"}]}]
    Sound[{SoundNote[2], SoundNote[6], SoundNote[9],
     SoundNote[14], SoundNote[{2, 6, 9, 14}]}]
    Sound[Table[SoundNote[n],{n, 0, 12}]]
    
    (рис 7.15) (a) До мажор; (b) ре мажор; (c) хроматическая гамма

    Запросы о логических преобразованиях

    Рассмотрим запросы, связанные с преобразованиями логических выражений, электронными логическими схемами, битовыми операциями, играми и клеточными автоматами.

    Логические выражения

    Для логических операций в системе Wolfram|Alpha используются следующие обозначения:

  • дизъюнкция: or или ||;
  • конъюнкция: and или ;
  • отрицание: not или !;
  • импликация: implies или =>;
  • эквиваленция: equivalent или <=>;
  • строгая дизъюнкция:xor;
  • штрих Шеффера: nand;
  • стрелка Пирса: nor;
  • отрицание строгой дизъюнкции: xnor;
  • Пример 17. Построить таблицу истинности логического выражения можно с помощью запроса вида

    truth table ((a || b)  !a) => (a <=> b)

    Таблица истинности показана на рис. 7.16. Выражение предварительно не упрощается.

    (рис 7.16) Таблица истинности для выражения...

    Пример 18. Упростить логическое выражение в системе Wolfram|Alpha можно, например, следующим образом:

    simplify ((a or not b) and c) xnor ((a implies not c) nor a)

    Результат имеет вид: $$(\neg a \wedge b) \vee \neg c$$.

    Кроме упрощенного выражения, приводится его ДНФ, КНФ и другие формы его представления через подмножество логических операций. Для исходного выражения также приводится таблица истинности, схема логической функции и клеточный автомат с правилом, которое представляет эта функция, если она имеет 3 аргумента.

    Рассмотрим результаты запроса для упрощенного выражения (not a and b) or not c.

    Электронная логическая схема и диаграмма Венна, или Эйлера-Венна приведены на .

    (рис 7.17) (a) Электронная логическая схема; (b) диаграмма Эйлера-Венна

    На показано клеточное поле, представляющее состояния элементарного клеточного автомата в моменты времени от 0 до 25, который определяется правилом 93, описываемым логической функцией $$f(a, b, c) = (\neg a b) \vee \neg c$$.

    Начальное состояние соответствует верхнему ряду поля.

    (рис 7.18) Клеточный автомат для правила...

    На языке Wolfram таблицу истинности для рассматриваемого выражения можно построить следующим образом:

    In[1]:= 	BooleanTable[{a, b, c, Or[And[Not[a], b], Not[c]]},
    {a, b, c}]//TableForm
    Out[1]//TableForm= 
    True	True 	True	False
    True	True	False	True
    True	False	True	False
    True	False	False	True
    False	True	True	True
    False	True	False	True
    False	False	True	False
    False	False	False	True 
    

    Таблица истинности может быть построена сразу для нескольких логических выражений:

    In[2]:= 	BooleanTable[{a, b, And[a, b], Or[a, b], 
    Implies[a, b], Equivalent[a, b], Xor[a, b],
    Nand[a, b], Nor[a, b]}, {a, b}]//TableForm
    Out[2]//TableForm= 
    True	True	True	True	True	True	False	False	False 	
    True	False	False	True	False	False	True	True	False
    False	True	False	True	True	False	True	True	False
    False	False	False	False	True	True	False	True	True

    Упростить логическое выражение, вычислить его ДНФ, а также найти по таблице истинности логической функции номер правила для элементарного клеточного автомата можно следующим образом:

    In[3]:= 	Simplify[Xnor[(a||!b)c, Nor[Implies[a, !c], a]]]
     Out[3]= 	(!a  b) || !c
     In[4]:= 	LogicalExpand[(a||!b||c) (!a||b||c||!d)]
     Out[4]= 	c | | (a   b) || (a   !d) || (!a   !b) || (!b   !d) 
     In[5]:= 	val = BooleanTable[(!a   b)|| !c, {a, b, c}]
     Out[5]= 	{False, True, False, True, True, True, False, True}
     In[6]:= 	boolelist = Boole[val]
     Out[6]= 	{0, 1, 0, 1, 1, 1, 0, 1}
     In[7]:= 	FromDigits[boolelist, 2]
     Out[7]= 	93
    

    Электронные логические схемы

    Изображения электронных логических схем в системе Wolfram|Alpha строятся в ответ на запросы вида

    logic circuit (a or not b) and (c xor d)

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

    Пример 19. Изображение отдельного логического элемента в системе Wolfram|Alpha можно получить с помощью запроса

    Xor gate

    Результат показан на .

    (рис 7.19) Логический элемент Xor (ANSI)

    Битовые операции

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

    Например, результатом вычисления запроса

    bitOr(4, 9, 10)

    является 15.

    Пример 20. В языке Wolfram побитовые операции конъюнкции, дизъюнкции и строгой дизъюнкции выполняются с помощью функций BitAnd, BitOr и BitXor, соответственно.

    Запрос BitNot[n] возвращает число - 1 - n.

    Функция BitLength находит наименьшее число двоичных разрядов, которые необходимы для представления числа.

    Ниже приведены примеры запросов:

     In[1]:= 	{BitAnd[4,9,10], BitOr[4,9,10], BitXor[4,9,10]} 
    BitNot[12]
    BitLength[2345]
     Out[1]= 	{0, 15, 7}
     Out[2]= 	-13
     Out[3]= 	12

    Функция BitGet от аргументов n и k возвращает значение двоичного разряда числа n - коэффициента при $$2^k$$. Функции BitSet и BitClear устанавливают в разряде k числа n значения 1 и 0, соответственно:

     In[4]:= 	BitGet[2345, 10] 
     Out[4]= 	0
     In[5]:= 	BitSet[2345, 10] 
     Out[5]= 	3 369
     In[6]:= 	BitClear[3369, 10]
     Out[6]= 	2 345

    Функция IntegerDigits возвращает список цифр числа в заданной системе счисления, функция FromDigits по списку цифр числа и основанию системы счисления возвращает десятичное представление этого числа:

     In[7]:= 	IntegerDigits[2345, 2] 
    IntegerDigits[6789, 16] 
     Out[7]= 	{1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1}
     Out[8]= 	{1, 10, 8, 5}
     In[9]:= 	FromDigits[{1, 0, 0, 1, 0, 0, 1}, 2]
    FromDigits[{11, 56, 40}, 60]
     Out[9]= 	73
     Out[10]= 	43000

    Игра "Ним". Использование сущностей в облаке Wolfram

    База знаний Wolfram|Alpha содержит информацию о большом количестве игр. Описание игры "Ним" приводится в ответ на запрос

    Nim game

    Пример 21. Ниже приведены примеры запросов, которые возвращают общие сведения об игре "Ним" в облаке Wolfram:

    In[1]:= Entity["FamousMathGame", "Nim"]

    In[2]:=	Entity["FamousMathGame", "Nim"][ "Statement"]
    Entity["FamousMathGame", "Nim"][ "FormulationDate"]
    Entity["FamousMathGame", "Nim"][ "AdditionalPeople"
    Out[2]=	Given one or more piles ("nim-heaps"), players alternate by taking all or some of the counters in a single heap. The player taking the last counter or stack of counters is the winner.

    Для получения информации из базы знаний, используется функция Entity (сущность). Создать сущность можно с помощью сочетания клавиш

    В появившееся поле для ввода следует ввести название понятия, в данном случае nim, и нажать клавишу Enter. Система предложит вариант ассоциации этой сущности. Согласие с ней выражается нажатием на галочку:

    После этого можно задать, например, запрос обо всех доступных свойствах сущности:

    Информацию обо всех значениях свойств сразу можно получить с помощью запроса

    Сведения об отдельных свойствах возвращаются с помощью запроса вида

    Вместо изображения с именем сущности можно, как и выше, использовать функцию Entity. Кроме этого, можно запрашивать информацию не только о конкретных свойствах, но и о наборах свойств:

    Entity["FamousMathGame", "Nim"][{ "Diagram", "Classes"}]

    Для того чтобы получить информацию обо всех типах сущностей, которые имеются в базе знаний, следует ввести в строку поиска облака Wolfram запрос

    Entity Types

    В результате появится информация о большом количестве типов сущностей, классифицированных по областям знаний. В частности, сведения о функциях, с помощью которых можно формулировать запросы о сущностях, принадлежащих типу "FamousMathGame", находятся в разделе Mathematical Computational Entities.

    Элементарные клеточные автоматы

    Общие сведения о клеточных автоматах, а также их примеры система Wolfram|Alpha приводит в ответ на запрос:

    cellular automaton

    Пример 22. Информацию об элементарном клеточном автомате, который соответствует конкретному правилу, например 86, система Wolfram|Alpha возвращает в ответ на запрос

    cellular automaton rule 86

    В частности, приводится логическая и алгебраическая форма правила $$86 (86 = 01010110_2)$$. Эти формы, соответственно, имеют вид:

    $$(p, q, r) \to r Xor (p Or q)$$

    и

    $$(p, q, r) \to (p + q + p q + r) \mod 2$$

    Рассмотрим примеры запросов в облаке Wolfram.

    Представить правило 86 в виде преобразований клеток можно следующим образом:

    In[1]:= 	RulePlot[CellularAutomaton[86]]

    Клетка черного цвета соответствует 1, белого - 0.

    Состояния клеточного автомата в моменты времени 0 - 10 программа возвращает в результате запроса вида :

    In[2]:= 	RulePlot[CellularAutomaton[86], {{1}, 0}, 10,
    Mesh -> All, ImageSize -> Full]

    В начальном состоянии центральная клетка имеет черный цвет. Слева и справа от нее расположены клетки белого цвета, число которых равно числу шагов. На начальное состояние соответствует верхнему ряду поля.

    (рис 7.20) Состояния 0 - 10 клеточного автомата для правила 86

    Первые 50 состояний поля с аналогичным начальным состоянием можно также увидеть с помощью запроса

    ArrayPlot[CellularAutomaton[86, {{1}, 0}, 50]]

    В результате следующего запроса возвращаются первые 2 состояния автомата для начального состояния, описываемого явным образом:

     In[3]:= 	CellularAutomaton[86, {1,0,0,0,1,0,0}, 2]
     Out[3]= 	{{1, 0, 0, 0, 1, 0, 0}, {1, 1, 0, 1, 1, 1, 1}, {0, 1, 0, 0, 0, 0, 0}}
     In[4]:= 	CellularAutomaton[86, {1,0,0,0,1,0,0}, 2]//Grid

    Правила могут описываться с помощью логических или алгебраических функций (см. выше), например в виде

     In[5]:= 	CellularAutomaton[{{p_, q_, r_} -> Xor[r, Or[p, q]]},
    {{True}, False}, 2]
     Out[5]= 	{{False, False, True, False, False}, {False, True, True, True, False},
    {True, False, False, True, True}}
     In[6]:= 	ArrayPlot[Boole[%]]

    Игра "Жизнь"

    Информацию об игре Джона Конвея "Жизнь" и примеры некоторых начальных состояний для этой игры можно получить в системе Wolfram|Alpha с помощью запроса

    Conway's Game of Life

    Пример 21. Рассмотрим пример построения клеточного поля со случайным набором живых клеток в начальном состоянии в облаке Wolfram.

    Случайная расстановка живых клеток строится с помощью функции RandomInteger. Например, поле 5 * 5 может иметь вид:

     In[1]:= 	RandomInteger[1, {5, 5}]//Grid

    Следующий пример реализации игры "Жизнь" приводится в документации языка Wolfram (поле сокращено до размера 20 * 20):

    In[2]:= 	gameOfLife = {224, {2, {{2, 2, 2}, {2, 1, 2}, 
    {2,, 2}}}, {1, 1}};
    board = RandomInteger[1, {20, 20}]; 
    Dynamic[ArrayPlot[board =
    Last[CellularAutomaton[gameOfLife, board, 
    {{0, 1}}]]]]

    В первой строке кода описываются правила игры "Жизнь"; они присваиваются переменной gameOfLife. Во второй строке переменной board присваивается значение начальной конфигурации живых клеток поля; эта конфигурация задается случайным образом. Третья строка описывает динамическое отображение состояний поля, при этом в переменной board запоминается последнее состояние, которое затем преобразуется по правилам игры.

    Состояния поля автоматически обновляются. На приведены примеры двух состояний поля.

    (рис 7.21) Состояния клеточного поля в игре "Жизнь"

    Состояние поля на конкретном шаге можно получить следующим образом:

     In[5]:= 	board1 = {{0,0,1,0,0}, {1,0,1,0,0}, 
    {0,1,1,0,0}, {0,0,0,0,0}, {0,0,0,0,0}};
    Grid[board1]
    In[7]:= 	ArrayPlot[CellularAutomaton[gameOfLife, board1,
    {{{4}}}]]

    Переменная board1 хранит начальное состояние поля (см. Out[6]). Программа вычисляет состояние поля на шаге 4.

    Упражнения

  • Найдите 1) в системе Wolfram|Alpha; 2) в облаке Wolfr

    a) 2;

    b) 3;

    c) 12;

    d) 16;

    e) 60.

  • Найдите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram результат вычисления выражения

    a) $$(33,33_5 + 11,77_{25}) * (44,44_5 - 22,22_{25}); b) 73f_{16} * 9e_{16} + abcd_{16}.$$

  • Найдите с помощью системы Wolfram|Alpha двоичный код в представленных в ней типах данных числа

    a) 3,14159265;

    b) 1335.

  • Найдите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram последовательность кодов символов строки

    a) "Peace";

    b) "Всему своё время".

  • Выведите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram фрагменты таблицы кодов символов Unicode, содержащие все буквы греческого алфавита.
  • Найдите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram компоненты в моделях RGB, CMYK и HSV цвета

    a) rgb(28, 240, 157);

    b) hsv(60, 85, 95);

    c) cmyk(0,8, 0,5, 0,3, 0,6);

    d) rgb(0,2, 0,8, 0,7).

  • Задайте запрос 1) в системе Wolfram|Alpha; 2) в облаке Wolfram, в результате которого система построит

    a) прямоугольник красного цвета;

    b) эллипс оранжевого цвета;

    c) окружность синего цвета;

    d) круг пурпурного цвета;

    e) скругленный прямоугольник фиолетового цвета.

  • Постройте в облаке Wolfram

    a) дугу эллипса сиреневого цвета;

    b) сектор круга небесно-голубого цвета.

  • Задайте запрос 1) в системе Wolfram|Alpha; 2) в облаке Wolfram, в результате которого система построит

    a) куб;

    b) параллелепипед;

    c) шар;

    d) додекаэдр.

  • Постройте в облаке Wolfram изображение с помощью кривых Безье:

    a) полумесяц;

    b) сердечко;

    с) цветок;

    d) игрушечный автомобиль.

  • Постройте в облаке Wolfram с помощью B-сплайнов изображение буквы:

    a) П;

    b) И;

    c) М;

    d) О;

    e) В;

    f) А.

  • Задайте запрос 1) в системе Wolfram|Alpha; 2) в облаке Wolfram, в результате которого система построит

    a) кривую Пеано;

    b) кривую Серпинского.

  • Найдите с помощью системы Wolfram|Alpha изображение

    a) множества Мандельброта;

    b) множества Жюлиа;

    c) дерева Пифагора;

    d) тетраэдра Серпинского.

  • Вставьте в облако Wolfram изображение и постройте для него

    a) перевернутое изображение (верх и низ меняются местами);

    b) черно-белое изображение (оттенки серого).

  • Задайте запрос 1) в системе Wolfram|Alpha; 2) в облаке Wolfram, в результате которого система построит таблицу истинности для логического выражения

    a) $$(x \to y) (x \to z) \to (y \leftrigharrow z);$$

    b) $$x \oplus y \oplus z.$$

  • Упростите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram логическое выражение

    a) $$(x \neg y z) \vee (\neg x \neg y \neg z) \vee (x y z);$$

    b) $$x nor y.$$

  • Приведите к ДНФ 1) в системе Wolfram|Alpha; 2) в облаке Wolfram логическое выражение

    a) $$(x \vee \neg y \vee z) (\neg x \vee \neg y \vee \neg z) (x \vee y \vee z);$$

    b) x nand y.

  • Найдите в системе Wolfram|Alpha электронную логическую схему функции $$f(x, y, z) = (x \to y) (y \to z) (x \to z).$$
  • Найдите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram результат битовой операции

    a) $$25 \oplus 39 \oplus 83$$;

    b) bitAnd(45, 33, 62);

    c) bitShiftLeft(1234, 3);

    d) bitShiftRight(1234, 4).

  • Найдите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram

    a) количество двоичных разрядов числа 2022;

    b) список цифр в двоичной системе счисления числа 1844;

    c) число по списку троичных цифр {2, 0, 0, 1, 2, 1, 0, 0, 2}.

  • Найдите 1) в системе Wolfram|Alpha; 2) в облаке Wolfram информацию об игре "Крестики-нолики".
  • Найдите в системе Wolfram|Alpha информацию об элементарном клеточном автомате, в котором переходы описываются правилом 90.
  • В облаке Wolfram для элементарного клеточного автомата, в котором переходы описываются правилом 54, выведите

    a) правило перехода, которое описывается с помощью клеток;

    b) правило перехода, которое описывается с помощью логической функции;

    c) 10 первых состояний, которые описываются с помощью 0 и 1;

    d) 50 первых состояний на клеточном поле, если в начальном расположении центральная клетка черная, остальные - белые;

    e) 50 первых состояний на клеточном поле, если в начальном расположении черные и белые клетки располагаются случайным образом.

  • В облаке Wolfram выведите для игры "Жизнь" первые 4 состояния поля, в котором начальная конфигурация живых клеток образует тяжелый космический корабль.
  • В облаке Wolfram создайте для игры "Жизнь" динамическое отображение состояний поля размером 30 * 30, в начальном состоянии которого живыми являются расположенные подряд 8 клеток верхнего ряда.
  • Вернуться к учебному плану