Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комп'ютерна алгебра.Навчально-методичний посібн...doc
Скачиваний:
17
Добавлен:
24.08.2019
Размер:
683.01 Кб
Скачать

Лабораторна робота № 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 діленням його на свій вільний член.