17155

Лінійна алгебра в Maple

Лекция

Информатика, кибернетика и программирование

Лекція №26 Тема: Лінійна алгебра в Maple План Пакет linalg. Пакет LinearAlgebra. Елементарні операції з матрицями і векторами. Рішення систем лінійних рівнянь. У Maple виконання перетворень лінійної алгебри можна здійснювати за допомогою команд двох пакетів...

Украинкский

2013-06-29

118 KB

23 чел.

Лекція №26

Тема: Лінійна алгебра в Maple

План

  1.  Пакет linalg.
  2.  Пакет LinearAlgebra.
  3.  Елементарні операції з матрицями і векторами.
  4.  Рішення систем лінійних рівнянь.

У Maple  виконання перетворень лінійної алгебри можна здійснювати за допомогою команд двох пакетів: linalg і LinearAlgebra, функціональність яких практично однакова. Перший пакет входив до складу і всіх попередніх версій Maple, тоді як другий пакет — це новий засіб, що дозволяє працювати з числовими матрицями, у тому числі і з матрицями великих розмірів, використовуючи всю потужність відомого пакету чисельних розрахунків NAG (Numerical Algorithms Group).

Основними об'єктами, з якими працюють команди цих пакетів, є матриці, проте матриці одного пакету не еквівалентні матрицям іншого. У пакеті linalg використовуються матриці, побудовані на основі масиву, створюваного командою array про, тоді як в пакеті LinearAlgebra застосовуються вектори і матриці, побудовані на основі нової структури r-таблииы (r-table) і створювані спеціальними конструкторами vector про і Matrix про або з використанням короткої нотації <а,b,с>. Матриці в пакеті linalg обчислюються тільки до рівня своїх імен, тому в ньому неможливо обчислити операції поелементного підсумовування або віднімання, використовуючи прості операції над ідентифікаторами матриць, і доводиться користуватися спеціальним синтаксисом через команду evalm(). У пакеті LinearAlgebra матриці обчислюються до рівня своїх елементів, тому просте завдання імені матриці у області введення робочого листу приводить до відображення її елементів, а не імені матриці, як у випадку з пакетом linalg. Окрім цього, в пакеті LinearAlgebra матриці можуть задаватися як операнди складання і віднімання, що приводить до поелементного виконання вказаних операцій без використовування додаткових синтаксичних конструкцій.

Щоб ухвалити рішення, якому пакету лінійної алгебри віддати перевагу, рекомендується взяти до уваги наступні обставини:

  •  Пакет linalg корисний при виконанні абстрактних обчислень над матрицями і векторами.
  •  Пакет LinearAlgebra володіє більш дружнім інтерфейсом, працює з числовими матрицями і особливо ефективний при роботі з числовими матрицями великих розмірів через можливість звернення до програм пакету чисельних розрахунків NAG, що відкомпілюються.

Пакет linalg

Пакет лінійної алгебри linalg містить команди створення матриць і векторів, пропонує великий набір функцій для роботи із структурою цих об'єктів, для виконання основних матричних і векторних операцій і для вирішення основних задач лінійної алгебри: рішення систем лінійних рівнянь, знаходження власних векторів і власних векторів матриці, приведення матриць до спеціальних форм і т.д. І всі ці дії можна виконувати з матрицями і векторами, елементи яких можуть бути загальними виразами алгебри, одержуючи результати також у вигляді виразів алгебри.

Всі команди пакету лінійної алгебри працюють з матрицями і векторами. У Maple матрицею вважається двовимірний масив, індекси якого змінюються від одиниці. Аналогічно, вектор — це одновимірний масив з індексом, що змінюється від одиниці. Визначити матрицю або вектор в Maple можна двома способами: або за допомогою команди array() стандартної бібліотеки, або командами matrix ()  і vector()  пакету linalg.

Найзагальніший синтаксис команди array про, яка дозволяє задавати багатовимірні масиви з індексами, що змінюються в діапазонах цілих (як позитивних, так негативних) чисел, наступний:

array(діапазони, список, опції);

Всі параметри необов'язкові і можуть задаватися в довільному порядку. Параметр діапазонами є цілочисельні діапазони зміни індексів масивів, що задаються через кому, — розмірність масиву рівна кількості заданих діапазонів. Значення елементів масиву задаються параметром список у вигляді списку для одновимірних масивів або списку списків для багатовимірних масивів, Як значення параметра функції можна застосовувати symmetric,  antisymmetric,  identity і  diagonal.  Вони  використовуються для завдання масивів спеціального вигляду (симетричних, антисиметричних, одиничних і діагональних). Для завдання векторів і матриць за допомогою цієї функції слід указувати діапазони зміни індексів, що починаються з одиниці:

> vec:=array(1..2,[1,2]);

> matr:=array(1..2,1..2,[[1,2],[10,15]]);

Для завдання тих же вектора і матриці можна використовувати відповідно команди vector() і matrix() з пакету linalg, заздалегідь підключивши його командою with (linalg). Синтаксис цих команд наступний:

vector (n,[элемент1,элемент2,...]);

matrix (n,m,[элемент1,элемент2,...]);

Тут цілі величини n і m задають розмірності вектора і матриці, а значення їх елементів задаються у вигляді простого списку.

> vec:=vector(2,[1,2]);

> matr:=matrix(2,2,[1,2,10,15]);

У Maple 6 команди vector() і matrix() знаходяться в основній бібліотеці, тому ними можна користуватися і без підключення пакету linalg. Проте доступ до всієї решти команд цього пакету вимагає його явного підключення.

Значення елементів вектора або матриці не обов'язково задавати при створенні цих об'єктів. Можна пізніше за допомогою загальноприйнятого індексного посилання на елементи вектора або матриці (у квадратних дужках після імені вектора або масиву задаються індекс(ы) необхідного елементу) привласнити їм нові значення або використати вже привласнені значення в обчисленнях.

> vec[1]:=5;

> eval(vec);

Зверніть увагу, що для відображення вмісту вектора vec використана команда eval(), оскільки змінний, містить складні об'єкти, якими є і вектори, і матриці, обчислюється не повністю, а тільки до свого імені.

Пакет linalg містить більше ста корисних команд виконання матричних операцій, а також структурних перетворень матриць. Перелік всіх доступних команд можна знайти на сторінці довідки, що відображається командою ?linalg.

Пакет LinearAlgebra

Всі команди пакету LinearAlgebra можна викликати безпосередньо по імені, заздалегідь підключивши всі його команди функцією

> with(LinearAlgebra);

або окрему команду з використанням синтаксису

> with(LinearAlgebra, имя_команды);

Можна викликати команду, заздалегідь не підключаючи її, а використовуючи довге ім'я

LinearAlgebra [ім'я__команды] (параметри);

LinearAlgebra['ім'я__команды'](параметри);

Остання форма (ім'я команди, укладене в одинарні лапки), викликає відповідну команду пакету, навіть якщо в поточному сеансі використовується який-небудь об'єкт з таким же ім'ям.

Пакет LinearAlgebra реалізований у вигляді модуля, нової мовної конструкції Maple, що реалізовує елементи об'єктно-орієнтованого програмування. Кожна команда є методом об'єкту LinearAlgebra, а тому її можна викликати, використовуючи спеціальну операцію : - звернення до методу об'єкту:

> LinearAlgebra:-имя команди(параметри);

Команда, що в цьому випадку викликається, також буде завантажена, не конфліктуючи з об'єктом іншого типу, створеним в поточному сеансі.

Основні типи даних

Основні типи даних, з якими працюють команди пакету LinearAlgebra, є скаляри, що представляють як числа, так і вирази алгебри, а також матриці і вектори, визначувані на базі нового типу даних r-таблиці. Матриці і вектори створюються за допомогою відповідних конструкторів.

Конструктором матриць є команда Matrix про (обов'язково із заголовної букви), синтаксис якої має наступний вигляд:

Matrix(r,   з,   init,   ro,   sc,   sh,   st,   про,   dt,   f,   а);

Семантика параметрів і їх допустимі значення представлені в табл. 3.2.

Таблиця . Параметри конструктора матриць

Параметр

    Опис

r

Ненегативне ціле або діапазон цілих чисел, що починається з 1.Представляет кількість рядків в матриці

c

Ненегативне ціле або діапазон цілих чисел, що починається з 1. Представляє кількість стовпців в матриці

ro

Задається у вигляді readonly або readonly=true і визначає, що значення елементів матриці, визначені при її створенні, не можуть бути змінені надалі.І т.д.

Всі параметри є необов'язковими, і у разі їх відсутності створиться матриця розмірності 0х0. Власне кажучи, для створення матриці важливі перші три параметри. Інші використовуються різними командами для прискорення її обробки.

Приклад  Створення матриць

> Matrix(2);

> Matrix(2,3);

> Matrix(1..1,1..4,6);

> Matrix([[1,2,3],[4,5,6]]);

> Matrix(2,(i,j) ->x^(i+j));

Створити вектор можна конструктором Vector() з наступним синтаксисом:

Vector(d, init, ro, sh, st, dt, f, а, про);

Vector [column](d, init, ro, sh, st, dt, f, а, про);

Vector [row](d, init, ro, sh, st, dt, f, а, про);

У пакеті LinearAlgebra розрізняються вектори-стовпці, що задаються за допомогою перших двох форм конструктора, і вектори-рядки, для завдання яких служить третя форма конструктора. Їх можна визначати тільки за допомогою першої форми, задаючи відповідне значення останнього параметра про: column або row. Перший параметр d задає розмірність вектора і може приймати тільки цілі позитивні значення, великі або рівні 1. Решта параметрів відповідає аналогічним в конструкторі матриць.

Приклад  Створення векторів

> Vector(2);

> Vector(1..3,5,orientation=row);

> Vector(2,(i) ->x^i);

При інтерактивній роботі в Maple іноді не зовсім зручно створювати матриці і вектори, звертаючись до їх конструктора. Розробники пакету LinearAlgebra надали користувачу можливість використовування короткої форми завдання векторів і матриць:

<а,b,c> створює матрицю або вектор по рядках;

<a|b]c> створює матрицю або вектор по стовпцях.

Якщо величини, що задаються в кутових дужках, не є скалярами, то створюється матриця, інакше вектор.

Приклад  Коротка форма завдання векторів і матриць

> V1:=<1,2,3>;

> V2:=<1|2|3>;

> M1:=<<1|2>,<3|4>>;

> M2:=<<1,3>|<2,4>>;

> <M2|M1>;

Для створення спеціальних типів матриць і векторів — одиничних, нульових, матриць і векторів констант і скалярних — можна використовувати спеціальні конструктори, хоча об'єкти вказаних типів можна створити і за допомогою загальних конструкторів. Приклад  демонструє всі типи спеціальних конструкторів.

Приклад  Спеціальні типи векторів і матриць

> with(LinearAlgebra):IdentityMatrix(2,2);

> ZeroMatrix(2,3);

> ConstantMatrix(6,2);

> ScalarMatrix(a^2,2);

> UnitVector[row](2,3);

> ZeroVector[row](3);

> ConstantVector[row](5,3);

> ScalarVector[row](x^2+y^2,3,4);

При завданні матриць і векторів великих розмірів вони не відображаються на робочому листі. Замість їх вмісту відображається підказка, що тут розташований відповідний об'єкт і указується його структура і розмірність:

> Matrix(15,15,(i,j) ->i*j);

Елементарні операції з матрицями і векторами

Як вже наголошувалося раніше, основні операції з матрицями в пакеті LinearAlgebra виконуються простіше, ніж такі ж в пакеті linalg. Це пов'язано з тим, що ідентифікатори векторів і матриць тут обчислюються не до рівня імені, а безпосередньо до рівня обчислення їх компонентів. У зв'язку з цим можливе виконання поелементного складання, віднімання і складання лінійних комбінацій векторів і матриць однакової розмірності з використанням звичних арифметичних операцій.

Приклад  Елементарні операції з векторами і матрицями

> M1:=<<1|2>,<3|4>>;

> M2:=<<10|7>,<8|15>>;

> M1+M2;

> M1-M2;

> 3.1*M1+5*M2;

> V1:=<1|4>;

> V2:=<3|8>;

> 3*V1-6*V2;

> V3:=<3,8>;

> V1+V3;

Error, (in rtable/Sum) invalid arguments

Якщо складається скаляр з матрицею, то це рівносильно складанню матриці з одиничною матрицею, елементи якої помножені на заданий скаляр, вектор не можна складати з скаляром:

Побудову лінійної комбінації матриць і векторів можна також виконати, використовуючи, відповідно, команди MatrixAdd () і VectorAdd ().

Оскільки твір матриць (мається на увазі операція скалярного множення) не є комутативною, те використовування операції комутативного множення (*) для векторів і матриць приводить до помилки. (Виключення допускається тільки для множення матриці саму на себе, причому в цьому випадку виконується операція скалярного множення.) Комутативне множення можна використовувати для перемножування скаляра і матриці або вектора.

Проте якщо скаляр містить невизначену змінну, то перемножування не відбувається, оскільки Maple не знає, який об'єкт надалі ця змінна може містити. Для виконання такого множення слід використовувати команду simplify() з параметром symbolic або опцією assume=scalar:

> mull:=x^2*<1|2|3>;

> simplify(mull,symbolic);

Виконати некомутативне множення в Maple 6 можна операцією, символом якої є крапка (.). Вона ніколи не міняє співмножники місцями, тому твори x.y.z і x.z.y не є тотожними.

Приклад  Скалярні твори векторів і матриць

> <1,3>.<4|6>;

> <4|6>.<1,3>;

Для отримання ступеня квадратної матриці можна послідовно застосувати операцію скалярного множення необхідне число раз або операцію зведення в ступінь(^)

> M:=<<0.2|0.8>,<0.7|0.5>>;

> M.M.M.M.M;

> M^5;

Показник ступеня може бути і негативним цілим числом, що дозволяє обчислювати зворотну матрицю і її ступені:

> M^(-1);

Для виділення елементів матриці і її підматриць використовується індексний запис, причому як індекс можна застосовувати діапазон, що дозволяє виділяти цілі блоки початкової матриці:

> restart:M:=Matrix(5,(i,j) ->3*i-j);

> M[3,1..-1];#выбор третього рядка

> M[3,2]; #Выбор елементу матриці

> M[1..-1,2];#Выбор другого стовпця

> M[2..3,2..4];#Выбор блоку розмірності 2х3

Всі перераховані операції можна виконувати за допомогою команд пакету LinearAlgebra, які рекомендується використовувати при програмуванні в Maple, хоча і допустиме їх використовування при інтерактивній роботі. Неповний список команд допустимих операцій над матрицями і векторами приведений в табл. .

Таблиця . Команди виконання операцій над матрицями і векторами

Назва команди

Опис

DeleteRow

Видалення рядка матриці

DeleteColumn

Видалення стовпця матриці

Row

Виділення рядка матриці

Column

Виділення стовпця матриці

SubMatrix

Виділення підматриці із заданої матриці

SubVector

Виділення підвектора із заданого вектора

ScalarMultiply

Множення матриці/вектора на скаляр

MatrixVectorMultiply

Скалярний твір матриці на вектор-стовпець

VectorMatrixMultiply

Скалярний твір вектора-рядка на матрицю

MatrixMatrixrMuitiply

Скалярний твір матриці на матрицю

MatrixInverse

Обчислення зворотної матриці

Determinant

Обчислення визначника матриці

Minor

Виділення мінору матриці

ConditionNumber

Обчислення числа обумовленості матриці

Eigenvalues

Обчислення власних значень матриці

Eigenvectors

Обчислення власних векторів

Одержати повну інформацію про всіх перерахованих в табл. командах можна на сторінках довідки по кожній з команд, які відображаються після виконання команди ?имя команди.

Рішення систем лінійних рівнянь

У пакет LinearAlgebra, як і в пакет linalg, входить спеціальна команда LinearSolve() рішення систем лінійних рівнянь алгебри. На відміну від свого двійника linsolve() з пакету linalg в цій команді можна вказати спосіб, яким слід вирішувати систему, але аналогічно своєму двійнику вона вимагає завдання системи рівнянь в матричній формі, тобто як параметри їй передаються матриця а системи і вектор правих частин b. Сама система в матричній формі записується у вигляді а.x=b.

Загальний синтаксис команди LinearSolve() наступний:

LinearSoive(А,   В,   m,   t,   з,   ip,   outopts);

Тут параметр а представляє матрицю системи, а параметр B — її ліву частину, причому в може задаватися як у вигляді вектора, так і у вигляді матриці. У останньому випадку за одне звернення до команди рішення системи лінійних рівнянь розв'язуватиметься безліч систем з правими частинами, представленими векторами — стовпцями матриці в. Параметр в можна і не задавати, передаючи як перший параметр розширену матрицю системи <А|B>. Розмірності матриці рішення узгоджуються з размерностямі матриць правої і лівої частин рівняння. Якщо матриця системи а має розмірність mxn, і права частина представлена матрицею mxp, то результатом буде матриця розмірності nхр, стовпці якої будуть рішеннями відповідних систем.

Необов'язковий параметр m задається у формі рівняння method=имя, де ім'я вибирається з наступного списку: 'none', 'solve', 'subs', 'Cholesky', 'LU’, 'QR', 'sparseLU' і визначає метод рішення системи рівнянь.

Параметр t, який також необов'язковий, визначає базове ім'я змінної у формі free = ім'я, яке використовується для конструювання імен параметрів у випадку, якщо початкова система лінійних рівнянь має безліч рішень.

Необов'язковим параметром з у формі рівняння conjugate=true/false визначається, чи слід будувати ермітову зв'язану матрицю при використовуванні методу Холецкого або QR-декомпозиции.

Література:

       Матросов А.В. Maple 6. Решение задач высшей математики и механики, Москва, 2000 – 528 с. [4], 160-187

Контрольні запитання:

  1.  Використання пакету linalg.
  2.  Використання пакету LinearAlgebra.


 

А также другие работы, которые могут Вас заинтересовать

6695. Популяционная структура человечества 29.46 KB
  Популяционная структура человечества. Особенности популяционной структуры человечества. Действие факторов эволюции в популяции людей. Популяция человека - группа людей, занимающих одну территорию и свободно вступающих в брак. Демогр...
6696. Эволюция систем органов (пищеварительная, иммунная, эндокринная и дыхательная системы) 28.6 KB
  Эволюция систем органов. Эволюция пищеварительной системы. Эволюция иммунной системы. Эволюция эндокринной системы. Эволюция дыхательной системы. Пищеварительная система. С 1880 по 1950г господствовала теория Мечникова. Она б...
6697. Онтофилогенетическая обусловленность пороков развития 200.23 KB
  Онтофилогенетическая обусловленность пороков развития. Биогенетический закон. Преобразование онтогенезов. Пороки развития. Эволюционные преобразования связаны не только с образованием и вымиранием видов, но и преобразованием онтоге...
6698. Человек как закономерный результат процесса развития органического мира 27.85 KB
  Человек как закономерный результат процесса развития органического мира. Прогрессивный характер эволюции. Проблема происхождения человека. Положение Homosapiens в системе живого мира. Этапы антропогенеза. Происхождение и эвол...
6699. Закономерности антропогенеза. Генетическая программа и программа социальная наследование в развитии современного человека 26.77 KB
  Закономерности антропогенеза Биологические предпосылки. Биосоциальная природа человека и процесс антропогенеза. Генетическая программа и программа социальная наследование в развитии современного человека. Расы современного че...
6700. Биологические основы паразитизма и трансмиссивных заболеваний 25.98 KB
  Биологические основы паразитизма и трансмиссивных заболеваний. Характеристика паразитизма. Взаимодействие паразитов и хозяина. Трансмиссивные и природно-очаговые заболевания. Живые организмы находятся в биотическом окружении, поэто...
6701. Медицинская протозоология. Характерные признаки простейших и их представители 25.22 KB
  Медицинская протозоология. Характерные признаки простейших. Представители. Один из разделов медицинской паразитологии - медицинская протозоология. Она изучает паразитических простейших, вопросы патогенеза, терапии заболеваний, диагн...
6702. Гельминтология. Характерные признаки типа Плоские черви - Plathelmintes 26.13 KB
  Гельминтология. Введение в гельминтологию. Характерные признаки типа Плоские черви - Plathelmintes. Класс Сосальщики - Trematoda. Класс Ленточные черви - Cestoda. Характеристика типа Круглые черви Гельминтология...
6703. Членистоногие (Arthopoda). Класс паукообразные 26.06 KB
  Тип Членистоногие (Arthopoda) Общая характеристика. Класс паукообразные. Членистоногие - самый многочисленный тип. Характерные признаки: двусторонняя симметрия трехслойная организация гетерономная метамерия...