Варіант 4.
Розробити функцію для обчислення визначника матриці A третього порядку, вхідним параметром якої є матриця A, а вихідним - її визначник, обчислений за правилом Саррюса.
Варіант 5.
Розробити функцію для обчислення векторного твору двох векторів, заданих своїми координатами в ПДСЬК, вхідними параметрами якої є два вектори u і v, а вихідним - вектор, що є їх векторним твором.
Варіант 6.
Розробити функцію для обчислення векторного твору двох векторів, заданих координатами їх початків і кінців в ПДСЬК, вхідними параметрами якої є координати чотирьох точок простору, відповідних початку і кінцю векторів u і v, а вихідним - вектор, що є їх векторним твором.
Варіант 7.
Розробити функцію для обчислення твору двох матриць другого порядку безпосередньо за визначенням твору матриць (тобто не використовуючи наявну в GAP операцію множення матриць), вхідними параметрами якої є матриці A і B, а вихідним - матриця C=ab.
Варіант 8.
Розробити функцію для транспонування матриці третього порядку безпосередньо за визначенням транспонування матриць (тобто не використовуючи наявну в GAP операцію транспонування), вхідним параметром якої є матриця A, а вихідним - матриця AT.
Варіант 9.
Розробити функцію для обчислення скалярного твору двох векторів, заданих своїми координатами в ПДСЬК (не використовуючи наявну в GAP операцію скалярного множення векторів), вхідними параметрами якої є два вектори u і v, а вихідним - їх скалярний твір.
Варіант 10.
Розробити функцію для обчислення скалярного твору двох векторів, заданих координатами їх початків і кінців в ПДСЬК (не використовуючи наявну в GAP операцію скалярного множення векторів), вхідними параметрами якої є координати чотирьох точок простору, відповідних початку і кінцю векторів u і v, а вихідним - їх скалярний твір.
Варіант 11.
Розробити функцію для обчислення перманенту матриці A другого порядку, вхідним параметром якої є матриця A, а вихідним - її перманент, рівний a11 a22 + a12 a21.
Варіант 12.
Розробити функцію для обчислення перманенту матриці A третього порядку, вхідним параметром якої є матриця A, а вихідним - її перманент, рівний сумі шести доданків, кожне з яких є твором трьох елементів матриці А, узятих по одному з кожного рядка і кожного стовпця.
Варіант 13.
Розробити функцію для обчислення сліду матриці другого порядку, вхідним параметром якої є матриця А, а вихідним її слід, рівний сумі елементів її головної діагоналі.
Варіант 14.
Розробити функцію для обчислення сліду матриці третього порядку, вхідним параметром якої є матриця А, а вихідним її слід, рівний сумі елементів її головної діагоналі.
Варіант 15.
Розробити функцію, вхідним параметром якої є координати двох точок плоскості A і B, а вихідним - координати середини відрізання AB.
Варіант 16.
Розробити функцію, вхідним параметром якої є координати двох точок простору A і B, а вихідним - координати середини відрізання AB.
Варіант 17.
Розробити функцію для обчислення образу вектора u=(u1,u2,u3) під дією лінійного оператора f, заданого матрицею A (не використовуючи наявну в GAP операцію множення матриці на вектор), вхідними параметрами якої є матриця A і координати вектора u, а вихідним - координати вектора Au.
Варіант 18.
Розробити функцію для обчислення Лієвського комутатора [A,b] двох квадратних матриць A і B довільного порядку n, вхідними параметрами якої є матриці A і B, а вихідним - матриця D=ab-ba.
Лабораторна робота № 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 діленням його на свій вільний член.
Лабораторна робота № 5.
Циклічні програми (цикл FOR). Бінарні відносини
Дана лабораторна робота призначена для вивчення оператора циклу FOR на прикладі роботи з бінарними відносинами.
Докладні відомості по даних темах містяться:
- в розділі "Мова програмування GAP" <file:///d:\ Комп'ютерна%20алгебра\metgap43\3-data. htm> даної методичної допомоги (див. п.2.13);
- в розділі "Бінарні стосунки в GAP" <file:///d:\ Комп'ютерна%20алгебра\metgap43\tppmsgs\msgs0.htm> учбових матеріалів до курсу алгебри і теорії чисел;
- в розділі "Relations" довідкового керівництва за системою GAP <file:///d:\ Комп'ютерна%20алгебра\metgap43\tppmsgs\msgs0.htm>.
Приклад: Розробити функцію, вхідним параметром якої є бінарне відношення r, задане на множині з n елементів, а вихідним - квадратна матриця M порядку n, в якій mij=1, якщо i r j, і mij=0 інакше (таким чином, M - матриця смежностей орієнтованого графа, відповідного бінарному відношенню r).
Дане завдання вирішується таким чином. Спочатку ми визначаємо порядок безлічі N, на якій задано бінарне відношення r, і будуємо нульову матрицю m відповідного розміру за допомогою функції Nullmat. Потім за допомогою функції Successors ми отримуємо список s, i-й елемент якого є списком номерів тих елементів безліч N, яка знаходиться в бінарному відношенні r з i-м елементом. Для заміни потрібних елементів нульової матриці одиницями ми перебираємо елементи отриманого списку s. При цьому i-й елемент списку s визначає, які елементи i-й рядка матриці m мають дорівнювати одиниці - на одиницю замінюються ті елементи i-й рядка матриці m, які лежать в стовпцях з номерами із списку s[i]:
Matrixofbinaryrelation:=function(r)
local s, n, m, i, j;
n := Degreeofbinaryrelation( r );
m := Nullmat( n, n );
s := Successors( r );
for i in [ 1 .. Length(s)] do
for j in s[i] do
m[i][j]:=1;
od;
od;
return m;
end;
Звернете увагу на форматування програми (виділення циклів за допомогою відступів), а також на те, що перебирати можна не тільки числа із заданого діапазону (як в зовнішньому циклі), але і всі елементи із заданого списку (як у внутрішньому циклі).
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |


