Главная  Длительная эволюция 

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [ 45 ] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86]

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

{#}& /©List @@ Composition[Expand, Times] @@ (l--{a,b,c,d}) /. {Times-> Sequence, {1}->{}}

Упражнения

1. Число называется совершенным, если оно равно сумме своих делителей, в число которых включается единица, но не само число. Например, число 6 совершенное. Определите функцию perfectQ, которая принимает значение True, если число совершенное, и False в противном случае. Воспользуйтесь встроенными функциями Divisors и Apply. С помощью функции perfectQ проверьте, что 28 совершенное число. Найдите следующее за 28 совершенное число.

2. С математической точки зрения игральная карта, скажем, дама пик, есть элемент прямого произведения двух множеств. Элементы первого множества есть масти: пики (spears), трефи (clubs), черви (hearts) и бубны (diamonds). Второе есть множество достоинств карт: туз (Ass), король (King), дама (Dame), валет (Jacket), 10 и далее до 7 (или до 2). С помощью функщш Outer получите список CardDeck, элементы которого есть списки из двух элементов, в которых первым элементом являются символы S, с, h или d, а вторым - символы А, К, D, J, 10 и т.д. до 7. Убедитесь, что длина CardDeck равна 32.

3. Совершенным перемешиванием называется перемешивание колоды CardDeck, получаемое делением колоды на две равные части и последу-Ю1ЦИМ расположением карт частей одна эа другой в чередующемся порядке. Получите такое перемешивание с помощью функций Partition и Transpose. Напишите функцию perfectshuffle, первым аргументом которой является колода (с произвольным расположением карт), а вторым аргументом - натуральное число п и которая осуществляла бы совершенное перемешивание п раз подряд. Убедитесь, что после пяти совершенных перемешиваний списка CardDeck восстанавливается исходное расположение карт. Напишите функцию perfectshuffleright, отличающуюся от предыдущей тем, что прежде чем применять функцию Transpose, следует переставить местами первую и вторую части колоды. Убедитесь, что в дашюм случае исходное расположение карт восстанавливается только после десяти перемешивгший.

4. Напишите функцию deleterand, которая удаляла бы из данного множества п элементов случайным образом. Воспользуйтесь для этого



встроенными функциями Delete, Random, Nest. Воспользуйтесь deleterand для того, чтобы написать функцию deal, осуществляющую раздачу четырем игрокам карт из CardDeck.

5. Встроенная функция IntegerDigits[n,b], где п - число, Ь - база системы исчисления, порождает список цифр в представлении числа п в системе с базой Ь. Так, при п = 12, Ь = 2 имеем IntegerDigits[12,2] = {1,1,0,0}. С помощью функции Fold напишите функцию tobase от двух аргументов, которая записывала бы число п, заданное в десятичной системе, в системе исчисления с базой Ь при условии, что Ь<п.

6. Получите список повторяющихся в списке I элементов.

7. Получите список позиций, которые занимают простые числа в списке I = Range[10].

8. По списку I = {a,b,a,b,c,d,d,a} получите новый список, элементами которого были бы пары вида { элемент I, число его вхождений в I }.

9. Дан список /={{1,1,1,1},{1,2,3,4},{1,0,2,0},{1,3,0,7}}

векторов, образую1Цих базис в четырехмерном линейном пространстве. Напишите однострочник для получения матрицы Гама gs этих векторов, матричные элементы которой суть попарные скалярные произведения векторов базиса.

10. Используя список I и матрицу Грама gs предыдущей задачи, перейдите от базиса i к новому базису, четвертый вектор v[4] которого ортогонален трем первым v[l], v[2] и ii[3] и нормирован на единицу. Для этого закените ii[4] на линейную комбинацию v = v[4] + xv[l] + yv[2] + zv[3] с подходящими X, у, z.



Глава 6

ПРОГРАММИРОВАНИЕ, ОСНОВАННОЕ

НА ПРАВИЛАХ ПРЕОБРАЗОВАНИЙ

Понятие преобразования является, по-видимому, одним из самых общих в математике. Таблицу умножения можно рассматривать как совокупность правил преобразований, в соответствии с которыми не будет ошибкой заменить выражение 2x2 всюду, где оно встречается, на 4, выражение 2x3 - на 6 и т.д. Алгебраические вычисления проводятся на основе тождеств, которые также можно рассматривать как правила преобразований. Например, тождество {х + у) = -Ь 2з;у + позволяет всюду в алгебраических формулах заменить его левую часть на правую.

В математическом анализе вычисления часто сводятся к манипулированию выражениями, содержащими интегралы, суммы, производные и т.п., согласно справочным руководствам, содержащим значения этих интегралов, сумм и т.д., которые подставляются на место исходных выражений с тем, чтобы упростить или получить численные значения рассматриваемых выражений. Так, вместо интеграла /fe" dx можно подставить число у/ж.

Другой аспект правил преобразований заключается в том, что их можно рассматривать как аксиомы, которым удовлетворяют определенные математические объекты. Операция сложения ассоциативна, и это свойство можно записать в виде правила (а -- 6) -Ь с = а -Ь (Ь -Ь с), операция дифференцирования линейна: (af{x) + Ьд{х))= af{x) + Ьд{х), при а и 6 постоянных, и удовлетворяет правилу Лейбница: {f{x)g{x)) =



[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [ 45 ] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86]

0.0008