Питон для нормальных. Учебник Москва Базальт спо макс пресс 2018
Скачать 2.54 Mb.
|
7.4 Примеры решения заданий Пример задачи 22 (Определитель матрицы) Найдите определитель ма- трицы. Матрицу возьмите из текстового файла, созданного при выпол- нении задания №15. Решение задачи 22 f r o m numpy i m p o r t * M = loadtxt ( ’ Matrix . txt ’) p r i n t ( linalg . det ( M )) 168 Глава 7. Библиотеки, встроенные в numpy Пример задачи 23 (Cистема линейных уравнений) Решите систему ли- нейных уравнений, матрицу коэффициентов и столбец свободных членов прочитайте из текстовых файлов, созданных в задании №15. Запишите в новый текстовый файл полученные корни. Решение задачи 23 f r o m numpy i m p o r t * M = loadtxt ( ’ Matrix . txt ’) V = loadtxt ( ’ Vector . txt ’) p r i n t ( linalg . solve (M , V )) Пример задачи 24 (Аппроксимация параболою) Сгенерируйте парабо- лу y = x 2 − x − 6 на отрезке [−6; 6]. Прибавьте к ней белый шум с па- раметрами (0; 2). Аппроксимируйте её полиномом второй степени. Оце- ните ошибку аппроксимации. Постройте график (рис. 7(a)). Решение задачи 24 f r o m numpy i m p o r t * f r o m m a t p l o t l i b . pyplot i m p o r t * x = arange ( -6 , 6 , 0.1) # диапазон y = x **2 - x - 6 # парабола r = random . normal (0 , 2 , l e n ( x )) # белый шум z = y + r a = ones (( l e n ( x ) , 3)) a [: , 1] = x a [: , 2] = x **2 result = linalg . lstsq (a , z ) za = dot (a , result [0]) # аппроксимирующая кривая plot (x , z , ’o ’ , color = ’ red ’) plot (x , za , color = ’ blue ’) p r i n t ( result [1]/ l e n ( x )) # ошибка аппроксимации show () Значение ошибки аппроксимации должно быть порядка квадрата стандарт- ного отклонения шума. Пример задачи 25 (Погрешности аппроксимации) Сгенерируйте 3 ря- да y, как это описано в предыдущем задании, пусть ряды отличаются реализациями шума. Для каждого x таким образом будет доступно по 3 7.4. Примеры решения заданий 169 значения y. По этим значениям рассчитайте для каждого x среднее зна- чение ¯ y и среднеквадратичное отклонение от среднего σ x . С использова- нием полученных рядов и постройте график погрешностей результатов (errorbar) (рис. 7(b)). Решение задачи 25 f r o m numpy i m p o r t * f r o m m a t p l o t l i b . pyplot i m p o r t * x = arange ( -6 , 6 , 0.1) y = x **2 - x -6 r = random . normal (0 , 2 , l e n ( x )) y1 = y + r r = random . normal (0 , 2 , l e n ( x )) y2 = y + r r = random . normal (0 , 2 , l e n ( x )) y3 = y + r y = c o l u m n _ s t a c k ([ y1 , y2 , y3 ]) e r r o r b a r (x , mean (y , axis =1) , yerr =[ std (y , axis =1) , std (y , axis =1)] , marker = ’. ’ , color = ’ green ’ , ecolor = ’ blue ’) savefig ( ’ plot . png ’) show () Пример задачи 26 (Генерация массивов случайных чисел) Сгенерируйте случайные векторы из n действительных значений с равномерным и нор- мальным распределением, а также из n целых чисел. Решение задачи 26 n = i n t ( i n p u t ( ’Введите количество значений: ’ )) a = i n p u t ( ’Введите диапазон равномерного распределения: ’ ). split () x = random . u n i f o r m ( f l o a t ( a [0]) , f l o a t ( a [1]) , n ) p r i n t ( x ) b = i n p u t ( ’Введите параметры нормального распределения: ’ ). split () y = random . normal ( f l o a t ( b [0]) , f l o a t ( b [1])**0.5 , n ) p r i n t ( y ) c = i n p u t ( ’Введите диапазон для дискретного распределения: ’ ). split () z = random . r a n d i n t ( i n t ( c [0]) , i n t ( c [1]) , n ) p r i n t ( z ) Возможный вывод программы (при каждом запуске будут различные случайные числа): 170 Глава 7. Библиотеки, встроенные в numpy Введите количество значений: 8 Введите диапазон равномерного распределения: 1 10 [ 4.59727241 5.25897018 7.05872105 6.53497311 2.79842143 6.9183058 5.47890825 8.6876828 ] Введите параметры нормального распределения: 3 9 [ 9.2115671 2.97903395 2.91634906 3.67303643 0.29596935 6.45306148 3.50505498 3.44637582] Введите диапазон дискретного распределения: -10 10 [ 7 2 -2 -2 6 -8 3 1] Чтобы вводить сразу несколько значений с клавиатуры, в данном примере был использован метод split, разделяющий строку на подстроки. При выполне- нии задания можно просто каждый необходимый параметр считывать новым input() Пример задачи 27 (Случайные перестановки) Сгенерируйте массив-ле- сенку длины n. Cлучайно перемешайте его. На экран выведите изначаль- ный и перемешанный массивы. Решение задачи 27 f r o m numpy i m p o r t * n = i n t ( i n p u t ( ’Размер массива: ’ )) x = arange (n , 0 , -1) p r i n t ( x ) y = random . p e r m u t a t i o n ( x ) p r i n t ( y ) Возможный вывод программы (третья строка будет меняться от запуска к за- пуску): Размер массива: 10 [10 9 8 7 6 5 4 3 2 1] [ 7 5 6 1 2 8 10 4 3 9] Пример задачи 28 (Периодограмма синуса) Рассчитайте и постройте периодограмму для функции sin(x) на отрезке x ∈ [π; π]. Решение задачи 28 Результат можно увидеть на рис. 8(a). Грубость графика обусловлена малым объёмом данных. f r o m numpy i m p o r t * f r o m m a t p l o t l i b . pyplot i m p o r t * t = arange ( - pi , pi , pi /12) x = sin (2* pi * t ) 7.5. Задания на использование встроенных библиотек numpy 171 Px = a b s ( fft . rfft ( x )/(0.5* l e n ( t )))**2 fn = 1/(2* pi /12) freq = l i n s p a c e (0 , fn , l e n ( Px )) grid ( True ); plot ( freq , Px , color = ’ red ’) show () Пример задачи 29 (Сложный шум) Сгенерируйте случайный процесс, представляющий собою сумму равномерно распределённых на отрезке [−10; 10] случайных величин и нормально распределённых случайных ве- личин с параметрами (0; 1), длиною в 10000 значений. Постройте гисто- грамму его распределения. Решение задачи 29 Возможный результат можно увидеть на рис. 8(b). От за- пуска к запуску картинка будет несколько варьировать. f r o m numpy i m p o r t * f r o m m a t p l o t l i b . pyplot i m p o r t * n = 10000 x = random . uniform ( -10 , 10 , n ) y = random . normal (0 , 1 , n ) z = x + y hist (z , bins =100 , normed = True , color = ’ green ’) show () 7.5 Задания на использование встроенных библиотек numpy Для заданий, содержащих большое число вариантов (от 4 и более) следует выполнить 1 вариант с номером (n − 1)%m + 1, где n — номер в списке группы, а m — число заданий. Задание 24 Найдите определитель матрицы. Матрицу возьмите из текстового файла, созданного ранее, либо у преподавателя. Задание 25 Решите систему линейных уравнений. Матрицу коэффици- ентов и столбец свободных членов прочитайте из текстовых файлов, созданных ранее. Запишите в новый текстовый файл полученные корни. Задание 26 Сгенерируйте набор значений заданной функции с шумом. Аппроксимируйте его полиномом второй степени. Оцените ошибку ап- проксимации. Постройте график. Функции: 1. парабола y = x2 − x − 6 на отрезке [−4; 4] с белым шумом, распределённым по нормальному закону с параметрами (0; 1); 172 Глава 7. Библиотеки, встроенные в numpy 2. парабола y = x2 − x − 6 на отрезке [−4; 4] с белым шумом, распределённым по равномерному закону на отрезке [−10; 10]; 3. парабола y = x2 − x − 6 на отрезке [−4; 4] с белым шумом, распределённым по закону χ 2 (random.chisquare) с параметрами (6; n), где 6 — количество степеней свободы шума, а n — длина ряда y; 4. парабола y = 5x 2 −4x+1 на отрезке [−6; 6] с белым шумом, распределённым по нормальному закону с параметрами (0; 3); 5. парабола y = 5x 2 −4x+1 на отрезке [−6; 6] с белым шумом, распределённым по равномерному закону на отрезке [−1; 1]; 6. парабола y = 5x 2 −4x+1 на отрезке [−6; 6] с белым шумом, распределённым по закону χ 2 (random.chisquare) с параметрами (6; n), где 6 — количество степеней свободы шума, а n — длина ряда y; 7. парабола y = x 2 + 5 на отрезке [−10; 10] с белым шумом, распределённым по нормальному закону с параметрами (0; 1); 8. парабола y = x 2 + 5 на отрезке [−10; 10] с белым шумом, распределённым по равномерному закону на отрезке [−10; 10]. Задание 27 Сгенерируйте 5 рядов y, как это описано в предыдущем зада- нии, пусть ряды отличаются реализациями шума. Для каждого x таким образом будет доступно по 5 значений y. По этим значениям рассчитай- те для каждого x соответствующее ему среднее значение ¯ y и средне- квадратичное отклонение от среднего σ y . С использованием полученных рядов ¯ y(x) и σ y (x) постройте график средних с планками погрешностей (errorbar). Задание 28 Сгенерируйте случайные векторы из 10, 30 и 200 значений: 1. с равномерным распределением на отрезке [−0.5; 0.5]; 2. с нормальным распределением с параметрами µ = 1, σ = 0.5; 3. из целых чисел в диапазоне [0; 10]. Задание 29 Сгенерируйте и случайно перемешайте: 1. массив-диапазон, покрывающий полуинтервал [0; 10) с шагом 0.5; 2. массив-диапазон из целых чисел от 0 до 19; 3. массив из 10 чисел, первые 5 из которых нули, вторые 5 — единицы; 4. массив длины 10, в котором изначально в начале и в конце было по 2 тройки. А середине — пятёрки; 7.5. Задания на использование встроенных библиотек numpy 173 5. массив из 4 нулей, 4 единиц и 4 двоек; 6. массив из 15 нулей и 1 единицы; 7. массив-пирамиду длины 11 из целых чисел, где среднее число — самое большое, стоящие рядом с ним на 1 меньше, следующие по очереди от середины ещё на 1 меньше и т. д., значение среднего числа за- дайте сами; 8. массив, полученный в результате табулирования синусоиды. Выведите на экран сначала неизменённый массив, потом — перемешан- ный. Задание 30 Рассчитайте и постройте периодограмму — оценку спектра мощности: 1. сигнала y(x), полученного по формуле 4 sin(πx + π/8) − 1 на отрезке [−10; 10] с шагом 0.05; 2. сигнала y(x), полученного по формуле 2 cos(x − 2) + sin(2x − 4), на от- резке [−20π; 10π] с шагом π/20; 3. нормального шума, параметры выберите сами; 4. равномерного шума, параметры выберите сами. Задание 31 Сгенерируйте случайный процесс длиною в 10000 значений и постройте гистограмму его распределения для следующих рядов: 1. равномерный шум с параметрами (0, 1); 2. равномерный шум с параметрами (−4, 10); 3. равномерный шум с параметрами (0.5, 0.6); 4. равномерный шум с параметрами (−a, a), где a — случайное равномерно распределённое число из диапазона [0; 1]; 5. равномерный шум с параметрами (−a, 2a), где a — случайное равномерно распределённое число из диапазона [1; 10]; 6. нормальный (гауссов) шум со стандартными параметрами: (0, 1); 7. нормальный шум с параметрами (−2, 0.25); 8. нормальный шум с параметрами (1, 2.5); 9. нормальный шум с нулевым средним и среднеквадратичным отклонением σ, где σ — число, равномерно распределённое в диапазоне [0; 1]; 174 Глава 7. Библиотеки, встроенные в numpy 10. нормальный шум с параметрами µ, σ, где µ есть нормально распределён- ное число со стандартными параметрами (0, 1), а σ — число, равномерно распределённое в диапазоне [1, 10]; 11. процесс, представляющий собою сумму двух независимых величин, распре- делённых равномерно на интервале [−1; 1]; 12. процесс, представляющий собою сумму 3 независимых величин, равномерно распределённых на интервале [−1; 1]; 13. процесс, представляющий собою сумму двух нормально распределённых случайных величин с единичною дисперсией, первое из которых имеет сред- нее −e, а второе имеет среднее e; 14. процесс, представляющий собою сумму большого числа (например, 30) рав- номерно распределённых на отрезке [−0.1; 0.1] случайных величин; 15. процесс, представляющий собою сумму большого числа (например, 30) нор- мально распределённых случайных величин с параметрами µ = 0, σ = 0.1. Учебное издание Серия «Библиотека ALT» Сысоева Марина Вячеславовна Сысоев Илья Вячеславович Программирование для «нормальных» с нуля на языке Python В двух частях Часть 1 Ответственный редактор: В. Л. Черный Оформление обложки: А. С. Осмоловская Вёрстка: В. Л. Черный Издание доступно в РИНЦ по адресу: https://elibrary.ru ООО «Базальт СПО» Адрес для переписки: 127015, Москва, а/я 21 Телефон: (495) 123-47-99. E-mail: sales@basealt.ru http://basealt.ru Подписано в печать 02.03.18. Формат 70x100/16. Гарнитура Computer Modern. Печать офсетная. Бумага офсетная. Усл. печ. л. 14.3[+0.33]. Уч.-изд. л. 11.77 Тираж 999 экз. Изд. номер. 044 Издательство ООО «МАКС Пресс» Лицензия ИД N 00510 от 01.12.99 г. 119992, ГСП-2, Москва, Ленинские горы, МГУ имени М. В. Ломоносова, 2-й учебный корпус, 527 к. Тел. 8(495)939-3890/91. Тел./Факс 8(495)939-3891. По вопросам приобретения обращаться: ООО «Базальт СПО» (495)123-47-99 E-mail: sales@basealt.ru http://basealt.ru 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 1.0 0.5 0.0 0.5 1.0 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 1.0 0.5 0.0 0.5 1.0 (a) (b) Рис. 1. График синусоиды серыми линиями — (a) и синусоиды (синими) и коси- нусоиды (зелёными) линиями — (b). 0.0 0.5 1.0 1.5 2.0 0 1 2 3 4 5 x 0.0 0.5 1.0 1.5 2.0 0 1 2 3 4 5 x 0.0 0.5 1.0 1.5 2.0 0 1 2 3 4 5 x 3 0.0 0.5 1.0 1.5 2.0 0 1 2 3 4 5 x 2 0.0 0.5 1.0 1.5 2.0 0 1 2 3 4 5 x 5 0.0 0.5 1.0 1.5 2.0 0 1 2 3 4 5 6 7 8 x 3 x 3 Рис. 2. Пример построения нескольких графиков на одном полотне. 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 Java 26.9% C 22.4% C++ 16.4% PHP 13.4% Python 11.9% Ruby 9.0% (a) (b) Рис. 3. Пример столбцовой (a) и круговой (b) диаграмм. 3 2 1 0 1 2 2.0 1.5 1.0 0.5 0.0 0.5 1.0 1.5 3 2 1 0 1 2 2.0 1.5 1.0 0.5 0.0 0.5 1.0 1.5 (a) (b) Рис. 4. Пример построения контурных диаграмм: (a) — использованы линии, (b) — использована заливка. −10 −5 0 5 10 −10 −5 0 5 10 −10 −5 0 5 10 −10 −5 0 5 10 −10 −5 0 5 10 −10 −5 0 5 10 (a) (b) Рис. 5. 3D-каркас (a) и 3D-поверхность (b). 3 2 1 0 1 2 3 2 1 0 1 2 (a) (b) Рис. 6. Иллюстрация к задаче 21. −6 −4 −2 0 2 4 6 −10 0 10 20 30 40 −6 −4 −2 0 2 4 6 −10 0 10 20 30 40 (a) (b) Рис. 7. Иллюстрации к задачам 24 — (а) и 25 — (b). На рис. (а) представлена за- висимость y i = x 2 i − x i − 6 + ξ i (серые точки), где ξ i — нормально распределённые случайные числа (шум) с нулевым средним и среднеквадратичным отклонени- ем 2, и её аппроксимирующая функция (чёрная кривая), рассчитанная методом наименьших квадратов. На рис. (b) — зависимость hy k (x)i k=1,2,3 с разбросом ошибок, построенная по 3 экспериментам (k — номер эксперимента), исходная зависимость сгенерирована по формуле y i = x 2 i − x i − 6 + ξ i , причём для каждого эксперимента реализация шума ξ своя. 0.0 0.5 1.0 1.5 2.0 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 −15 −10 −5 0 5 10 15 0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 (a) (b) Рис. 8. Спектр мощности синусоиды, построенный по 1 периоду при шаге вы- борки π/12 — (a) и гистограмма сложного (суммы равномерного и нормального) распределения — (b). |