- •Р.М.Літнарович, ю.Г.Лотюк комп’ютерна алгебра навчально-методичний посібник
- •© Літнарович р.М., Лотюк ю.Г.,2010 р.
- •1. Програма нормативної дисципліни
- •2. Мета та завдання дисципліни,
- •3. Формування практичних навичків
- •4. Зміст дисципліни
- •4.1.Лекції, найменування тем за їх змістом
- •6.Перелік питань до заліку
- •7.Науково-дослідна робота студентів
- •8. Літературні джерела
- •9.Розподіл балів за один змістовий модуль, присвоюваних студентам
- •10.Шкала оцінювання:
- •11.Зміни та доповнення ,внесені в робочу програму на 201__ рік
- •12.Оцінка навчальної діяльності студента
- •2. Лекційний курс Лекція 1. (2 год.)
- •1.1 Коротка характеристика gap
- •1.2 Можливості для роботи з різними видами об'єктів алгебри
- •1.3 Приклади простих обчислень
- •2 Мова програмування gap
- •2.1 Символи і категорії слів в gap
- •2.2 Ключові слова
- •2.3 Ідентифікатори
- •2.4 Вирази
- •2.5 Звернення до функцій
- •2.6 Порівняння виразів
- •2.7 Арифметичні оператори
- •2.8 Привласнення
- •2.9 Виклик процедури
- •2.10 Команда if
- •2.11 Цикл while
- •2.12 Цикл repeat
- •2.13 Цикл for
- •2.14 Функції
- •3 Структури даних
- •3.1 Константи і оператори
- •3.2 Змінні і привласнення
- •3.3 Функції
- •3.4 Списки
- •3.5 Тотожність і рівність списків
- •3.6 Множини
- •3.7 Вектори і матриці
- •3.8 Записи
- •3.9 Арифметичні прогресії
- •3.10 Використання циклів
- •3.11 Подальші операції із списками
- •3.12 Функції
- •4 Операції над групами і їх елементами
- •4.1 Завдання групи підстановок
- •4.2 Завдання підгрупи групи підстановок
- •4.3 Прості властивості групи. Силовськие підгрупи.
- •4.4 Інші види підгруп
- •4.5 Факторгруппи
- •Список літератури, що рекомендується
- •Додаток а Рекомендації по створенню і запуску програм в системі gap
- •1. Створюємо за допомогою текстового редактора файл "prog.G" наступного змісту:
- •2. Зберігаємо цей файл в каталозі, вибраному з урахуванням рекомендацій параграфа 1.2.
- •3. Запустимо gap і визначимо файл протоколу log.Txt:
- •Лабораторна робота № 1. Основи роботи з системою gap в Windows
- •Лабораторна робота № 2 Списки. Цілі числа
- •Завдання для лабораторної роботи № 2
- •Лабораторна робота № 3. Лінійні програми. Вектори і матриці
- •Завдання для лабораторної роботи № 3
- •Лабораторна робота № 4. Програми, що гілкуються. Многочлени
- •Лабораторна робота № 5. Циклічні програми (цикл for). Бінарні відносини
- •Лабораторна робота № 6. Циклічні програми (цикл while). Підстановки
- •Лабораторна робота № 7. Циклічні програми (цикл repeat). Групи підстановок
- •Завдання для лабораторної роботи № 7
- •Лабораторна робота № 8. Вивчення властивостей елементів групи
- •Завдання для лабораторної роботи № 7
- •Лабораторна робота № 9. Вивчення властивостей підгруп групи.
- •Завдання для лабораторної роботи № 9.
- •Лабораторна робота № 10. Робота з бібліотекою кінцевих груп
- •Додаткові завдання
- •33027 Рівне , Україна
Лабораторна робота № 4. Програми, що гілкуються. Многочлени
Дана лабораторна робота призначена для вивчення оператора умовного переходу на прикладі роботи з многочленами від однієї змінної.
Докладні відомості по даних темах містяться: - в розділі "Мова програмування GAP" <file:///d:\ Комп'ютерна%20алгебра\metgap43\3-data.htm> даної методичної допомоги (див. п.2.10); - в розділі "Прімененіє GAP для вивчення теорії многочленів" <file:///d:\ Комп'ютерна%20алгебра\metgap43\tppmsgs\msgs0.htm> учбових матеріалів до курсу алгебри і теорії чисел; - в розділі "Polynomials and Rational Functions" довідкового керівництва за системою GAP <file:///d:\ Комп'ютерна%20алгебра\metgap43\tppmsgs\msgs0.htm>.
Приклад: Розробити функцію, яка визначає, чи є коефіцієнти заданого многочлена взаємно простими, і у разі позитивної відповіді повертає початковий многочлен, а у разі негативного - початковий многочлен, розділений на НОД своїх коефіцієнтів.
Перед тим, як приступити до розробки функції, спробуємо зрозуміти схему її роботи в діалоговому режимі. Задамо змінну х і многочлен f від цієї змінної, потім отримаємо список коефіцієнтів многочлена f, знайдемо їх найбільшого загального дільника d і розділимо на нього многочлен f :
gap> x:=indeterminate(Rationals,"x"); x gap> f:=20*x^3+15*x^2+10*x+5; 20*x^3+15*x^2+10*x+5 gap> Coefficientsofunivariatepolynomial(f); [ 5, 10, 15, 20 ] gap> d:=gcd(last); 5 gap> f/5; 4*x^3+3*x^2+2*x+1 Тепер в робочому каталозі створимо текстовий файл наступного змісту (докладні інструкції по роботі з файлами див. в лабораторній роботі № 3 <file:///d:\ Комп'ютерна%20алгебра\metgap43\lab03.htm>):
Coeffcancellation := function( f ) local d; d := Gcd( Coefficientsofunivariatepolynomial( f )); if d<>1 then return f/d; else return f; fi; end; Після читання даної програми (див. приклад з лабораторної роботи № 3 <file:///d:\ Комп'ютерна%20алгебра\metgap43\lab03.htm>) ми можемо звертатися до функції Coeffcancellation. Для перевірки правильності роботи обидві алгоритму спочатку застосуємо її до раніше заданого многочлена f, а потім до многочлена g, коефіцієнти якого вже є взаємно простими: gap> Coeffcancellation(f); 4*x^3+3*x^2+2*x+1 gap> g:=x^3+x^2+10*x+5; x^3+x^2+10*x+5 gap> Coeffcancellation(g); x^3+x^2+10*x+5
Очевидно, що програма працює коректно. При розробці функцій звернете увагу на наступне: - необхідність тестування обох гілок алгоритму; - використання відступів при форматуванні тексту програми; - опциональность операторів else і elif залежно від конкретного завдання. Завдання для лабораторної роботи № 4
Варіант 1. Розробити функцію, яка визначає, чи має заданий многочлен f коріння кратності вище першою, і у разі негативної відповіді повертає початковий многочлен, а у разі позитивного - многочлен g, що має те ж коріння, що і початковий, але тільки першій кратності (при цьому для знаходження многочлена g необхідно розділити многочлен f на найбільшого загального дільника многочлена f і його похідній f' ). Примітка: використовувати функції Gcd, Derivative, Isone.
Варіант 2. Розробити функцію, яка визначає, чи є два задані многочлени f і g взаємно простими, і у разі позитивної відповіді повертає їх твір, а у разі негативного - їх твір, розділений на їх найбільшого загального дільника. Примітка: використовувати функції Gcd, Isone.
Варіант 3. Розробити функцію, яка визначає, чи має заданий многочлен f різні знаки на кінцях заданого інтервалу [а,b], і у разі позитивної відповіді повертає середнє арифметичне значень многочлена на кінцях інтервалу, а у разі негативного - найбільше із значень многочлена на кінцях інтервалу. Примітка: використовувати функції Value, Maximum.
Варіант 4. Розробити функцію, яка визначає, чи всі коефіцієнти заданого многочлена f є парними, і у разі негативної відповіді повертає початковий многочлен, а у разі позитивного - многочлен (1/2)*f.
Варіант 5. Розробити функцію, яка визначає, чи розкладається заданий многочлен f в твір лінійних множників, і у разі позитивної відповіді повертає їх твір, а у разі негативного - одиницю. Примітка: використовувати функції Factors, Degree.
Варіант 6. Розробити функцію, яка визначає, чи збігаються ступені двох заданих многочленів f і g, і у разі позитивної відповіді повертає їх суму, а у разі отріцатльного - твір. Примітка: використовувати функцію Degree.
Варіант 7. Розробити функцію, яка визначає, чи має заданий многочлен f парний ступінь, і у разі негативної відповіді повертає початковий многочлен, а у разі позитивного - многочлен f*x. Примітка: використовувати функції Degree, Indeterminateofunivariaterationalfunction.
Варіант 8. Розробити функцію, яка визначає, чи дорівнює нулю вільний член заданого многочлена, і у разі негативної відповіді повертає початковий многочлен, а у разі позитивного - многочлен f / x. Примітка: використовувати функцію Indeterminateofunivariaterationalfunction. Варіант 9. Розробити функцію, яка визначає, чи дорівнює одиниці сума коеффіцентов заданого многочлена f, і у разі позитивної відповіді повертає початковий многочлен, а у разі негативного - многочлен, отриманий з многочлена f діленням його на суму своїх коефіцієнтів.
Варіант 10. Розробити функцію, яка визначає, чи дорівнює одиниці старший коефіцієнт заданого многочлена f, і у разі позитивної відповіді повертає початковий многочлен, а у разі негативного - многочлен, отриманий з многочлена f діленням його на свій старший коефіцієнт.
Варіант 11. Розробити функцію, яка визначає, чи дорівнює нулю сума коеффіцентов заданого многочлена f, і у разі позитивної відповіді повертає початковий многочлен, а у разі негативного - многочлен, отриманий з многочлена f відніманням з нього суми своїх коефіцієнтів.
Варіант 12. Розробити функцію, яка визначає, чи дорівнює одиниці сума коеффіцентов заданого многочлена f, і у разі позитивної відповіді повертає початковий многочлен, а у разі негативного - многочлен, отриманий з многочлена f відніманням з нього суми своїх коефіцієнтів і збільшенням одиниці. Варіант 13. Розробити функцію, яка визначає, чи має заданий многочлен f непарний ступінь, і у разі негативної відповіді повертає початковий многочлен, а у разі позитивного - многочлен f*x. Примітка: використовувати функції Degree, Indeterminateofunivariaterationalfunction.
Варіант 14. Розробити функцію, яка визначає, чи дорівнює нулю похідна заданого многочлена f в заданій точці а, і у разі негативної відповіді повертає значення похідної многочлена f в крапці а, а у разі позитивного, - значення многочлена f в крапці а. Примітка: використовувати функції Derivative, Value.
Варіант 15. Розробити функцію, яка визначає, чи позитивне значення заданого многочлена f в заданій точці а, і у разі негативної відповіді повертає значення похідної многочлена f в крапці а, а у разі позитивного, - значення многочлена f в крапці а. Примітка: використовувати функції Derivative, Value.
Варіант 16. Розробити функцію, яка визначає, чи негативне значення заданого многочлена f в заданій точці а, і у разі негативної відповіді повертає значення похідної многочлена f в крапці а, а у разі позитивного, - значення многочлена f в крапці а. Примітка: використовувати функції Derivative, Value.
Варіант 17. Розробити функцію, яка визначає, чи всі коефіцієнти заданого многочлена f діляться на три, і у разі негативної відповіді повертає початковий многочлен, а у разі позитивного - многочлен (1/3)*f.
Варіант 18. Розробити функцію, яка визначає, чи дорівнює одиниці вільний член заданого многочлена f, і у разі позитивної відповіді повертає початковий многочлен, а у разі негативного - многочлен, отриманий з многочлена f діленням його на свій вільний член.