Образователни технологии

КРАТКО РЪКОВОДСТВО ЗА СИСТЕМАТА ЗА КОМПЮТЪРНА АЛГЕБРА WOLFRAM MATHEMATICA

Отворен достъп

Резюме. Настоящата статия е първа в поредицата „Математически модели на реални процеси и приложения на системите за компютърна алгебра за тяхното изследване“ и има по-скоро уводен характер. Основната ни цел е да представи една от най-популярните системи за компютърна алгебра – Wolfram Mathematica. Показани са някои базови възможности на системата, които биха били полезни в средния курс на образование, а запознаването с тях ще подготви читателя за последващите статии, свързани с математическото моделиране. Включени са и някои прости примери за самостоятелна работа, които позволяватусвояването на първоначални умения за работа със системата.

Ключови думи: mathematical modeling, computer algebra systems, education, Wolfram Mathematica

1. Основи на работата с Mathematica

Системата за компютърна алгебра Wolfram Mathematica е едно мощно средство, което позволява решаването на огромен набор от математически задачи, включително аритметични и алгебрични преобразования, решаване на алгебрични и диференциални уравнения и системи – точно и приближено, диференциране, интегриране и мн. др. Също така, Mathematica е удобно средство за визуализация, като предлага голям набор от възможности за построяването на двумерни и тримерни графики и за анимации. Системата позволява и написването на програми, които да извършват различни дейности. В настоящата работа ние ще се спрем на някои съвсем базови възможности (без да претендираме за каквато и да е изчерпателност) на системата Mathematica, които биха представлявали интерес за обучението по математика в средния курс на образование. Работата с тях може да бъде лесно овладяна, което прави системата подходяща за използване в този етап на обучение.

За да започнем работа със системата, ни е необходимо да създадем нов “notebook”. Това става от менюто File -> New -> Notebook. Работата в Mathematica e организирана в т.нар. клетки (cells). Всяка клетка съдържа команди, реализиращи определени функционалности и е оградена от квадратна скоба, намираща се в десния край на прозореца (Фиг. 1).

Създаването на нова клетка става, като преместим курсора под някоя от вече създадените, докато той стане хоризонтален, след което кликваме с левия бутон на мишката. Когато започнем да въвеждаме команди, на това място се появява нова клетка.

Изпълняването на командите в една клетка става, когато курсорът се намира в нея, с клавишната комбинация Shift+Enter. След като оценим съдържанието ѝ, пред нея се появява текст In, което означава, че това е клетка с инструкции. Клетките, в които се съдържат резултатите, пресметнати от Mathematica, се именуват с Out.

КлеткиКогато курсорът станехоризонтален,кликваме с мишката исъздаваме нова клетка.

Фиг. 1

Нека сега се спрем на въпроса как се въвеждат алгебрични изрази в Mathematica. Можем да въвеждаме числа и букви (означаващи променливи и константи), свързани с аритметичните операции \(+,-, *, /\), съответно събиране, изваждане, умножение, деление. Знакът за умножение може да се изпуска в редица случаи, когато това не предизвиква двусмислие (не можем да напишем например \(x y\), защото системата ще възприеме това като един символ с име \(x y\), но можем да напишем например \(2 x)\). Знакът за степенуване \(\mathrm{e}^{\wedge}\), например \(x^{\wedge} 2\). Можем да използваме и клавишната комбинация \(C t r l+\wedge\), така че курсорът „да се вдигне“ и да получим израза \(x^{2}\). Квадратен корен може да се въведе като Sqrt[израз] или чрез клавишната комбинация \(C t r l+2\). При въвеждането на алгебрични изрази можем да използваме и вградените константи Pi, E, както и да указваме приоритета на операциите със скоби (задължително кръгли). Разгледайте следните примери:

Можем да използваме и редица вградени функции като Sin, Cos, Tan, Cot, Log и др. Имената на първите четири са достатъчно информативни. Ще отбележим само, че \(\log\) е вградена функция за намиране на натурален логаритъм. Обърнете внимание, че имената на всички вградени функции се пишат с главна буква, а аргументите се ограждат в квадратни скоби. Разгледайте следните примери и резултатите от оценяването на съответните изрази:

Можем и да запазваме данни в паметта по следния начин:

In[6]:=x2;y4;

След като се изпълни съдържанието на клетката с Shift+Enter, променливите \(x\) и \(y\) ще имат стойности съответно 2 и 4. Можем да ги използваме по-нататък в работата си:

In[8]:=xyOut[8]=6

Да отбележим, че често е полезно да именуваме променливи с използването на долни индекси. Това може да стане, като използваме клавишната комбинация Ctrl+_ , например

In[9]:=n01;n14;n22.5;

Обърнете внимание, че, ако веднъж сме присвоили стойност на дадена променлива, тя се пази в паметта, докато не я изтрием (или не излезем от програмата). Нека в променливата \(x\) се пази стойност 2. Ако искаме да работим с \(x\) като със символ (например да пресметнем \(\sin ^{2} x+\cos ^{2} x\) за произволно \(x\) ), трябва да изтрием променливата от паметта. Това става по следния начин:

Задача: Изпробвайте всички приведени примери.

Задача: Пресметнете \(\ln 2981\) и \(\cos \cfrac{319 \pi}{13}\).

Вероятно резултатът от последната задача ви е изненадал. Тук е моментът да споменем, че Mathematica смята точно, докато не ѝ кажем друго. Числата се извеждат чрез точното си алгебрично представяне. Ако искаме да намерим приближение на дадено число във вид на десетична дроб, използваме вградената функция \(N[u\) зраз], например:

Полезно е да отбележим и че системата Mathematica има изключително пълна и удобна за работа документация, която може да бъде отворена от менюто Help -> Documentation Center. Винаги, когато имаме нужда да разберем как става нещо в Mathematica, можем да се обърнем към нея.

В документацията може да се търси по ключови думи, можем да напишем дадена команда, за да видим нейния синтаксис, можем и да се запознаем с възможностите на системата, благодарение на структурираните ръководства, които са подготвени за целта.

2. Работа с алгебрични изрази

Системата Mathematica е удобно средство, когато се налага да се извършват различни технически преобразования с алгебрични изрази, включително ирационални, тригонометрични и др. Ще разгледаме няколко основни вградени функции:

Simplify[expr] – опростява израза expr в съответствие с вградени в системата правила. Тук трябва да се отбележи, че невинаги идеята на Mathematica за „опростяване“ съвпада с нашата, но обикновено това е първата вградена функция, която се използва за целта.

Тук можем да въведем ключовидуми, по коитода търсим вдокументацията.В документациятамогат да сеоткрият и много добреструктурирани ръководства, коитода ни въведат в работата съссистемата и да низапознаят сбогатите ѝвъзможности.

Expand[expr] – най-общо казано, тази вградена функция разкрива скобите в израза expr:

Factor[poly] – разлага полинома poly на прости множители:

Задача: Опростете изразите \(\ln \left(2 e^{5}\right), 1+\cos 2 x, \cfrac{x+[x(x-1)]^{3}-4}{x^{2}+x-6}\) .

3. Списъци. Автоматично генериране на списъци.

Основна структура данни в Mathematica е списъкът. Най-общо казано, той представлява последователност от елементи, разделени със запетаи и оградени от фигурни скоби, например \(\{2,3,1,4\},\{x, 1,1.5\}\). Както и всички други данни, списъците могат да се запишат в променлива:

In[18]:=list2,3,1,4

Ако искаме да използваме някои от елементите на списъка, това става по следния начин:

В горния пример изведохме първия елемент от списъка list, както и сумата на третия и втория елемент.

В много случаи е удобно, вместо да въвеждаме елементите на даден списък един по един, те да се създават автоматично по определено правило. Една възможност за това е вградената функция Table. Ще илюстрираме действието ѝ с няколко примера:

И така, първият аргумент на функцията Table е формулата, по която се изчисляват елементите на списъка. В случая тя зависи от променливата \(k\). Вторият аргумент е т.нар. итератор, който указва как се изменя променливата – в случая \(k\) се мени от 0 до 10 през 1. С други думи, в горния пример създадохме списък с квадратите на числата от 0 до 10. Да разгледаме още един пример. Ще създадем списък, чиито елементи са от вида \(\cos x-0.1\), където \(x\) приема стойности от 0 до \(2 \pi\) през \(\cfrac{\pi}{4}\) :

Последният пример, който ще разгледаме има за цел да ни покаже как можем да създадем списък от променливи, чиито стойности се пазят в паметта. Нека в паметта имаме променливите \(n_{0}, n_{1}, n_{2}, n_{3}\). Ще създадем списък от техните квадрати:

In[23]:=n02;n15;n27;n39;Tablenk2,k,0,3,1Out[27]=4,25,49,81

Тук правилото, по което се определят елементите на списъка, зависи от индекса \(k\), който последователно приема стойности \(0,1,2,3\).

Задача: Създайте списък от първите 50 нечетни числа.

Задача: Създайте списък от първите 20 прости числа. За целта използвайте вградената функция Prime – вижте синтаксиса и семантиката ѝ в документацията. Намерете сумата на квадратите на третото, седмото и петнадесетото от тях.

4. Решаване на уравнения и системи уравнения с Mathematica

В Mathematica можем да решаваме уравнения с помощта на функцията Solve. Тя има следния синтаксис: Solve[equation, var], където еquation е уравнението, което искаме да решим, а var – неизвестното, спрямо което решаваме уравнението. Обърнете внимание, че, когато въвеждаме уравнението, използваме \(==\) вместо \(=\). Системата Mathematica се справя с много класове уравнения, които могат да бъдат решени точно, включително такива, които имат комплексни корени. Нека разгледаме следните примери:

В някои случаи, когато корените на уравнението не могат да бъдат представени точно или представянето им е прекалено сложно (и съответно ни носи малко информация), можем да използваме функцията NSolve. Тя има същия синтаксис, но връща приближения на корените във вид на десетични дроби. Сравнете следните примери:

По същия начин можем да решаваме и системи уравнения. Тогава първият аргумент на Solve/NSolve е списък с уравнения, разделени със запетаи и оградени с фигурни скоби \(\}\), а вторият – списък с неизвестните, относно които решаваме:

5. Графики в Mathematica

Да видим сега как с помощта на системата Mathematica можем да построяваме графики на функции. Командата за това е Plot. Тя приема два аргумента – първият е функцията (или списък от функции), чиято графика искаме да построим. Вторият е списъкът {var, from, to}, където var е името на независимата променлива във функцията, а [from, to] е интервалът, в който искаме да бъде построена графиката.

Например, ако искаме да построим графиката на функцията \(f(x)=x^{3}\), това става по следния начин:

Ако искаме да построим графиките на повече от една функция, това става, като за първия аргумент на Plot подадем списък от функции:

Задача: Изследвайте графично броя на различните корени на уравнението \(\left|x^{2}-4 x+1\right|=a\) в зависимост от стойностите на параметъра \(a\). (Вградената функция за намиране на абсолютна стойност е \(A b s\) )

Задача: Решете графично уравнението \(x^{2}-4 x+1=\sqrt{x+3}\). Намерете приблизително корените на това уравнение. За целта визуализирайте графиките в достатъчно малък интервал, съдържащ съответния корен, за да можете да определите с добра точност абсцисата на пресечната точка на графиките на лявата и дясната страна.

Когато искаме да изобразим множество от точки в равнината, използваме вградената функция ListPlot, която приема един аргумент – списък с наредени двойки от вида \(\{x, y\}\)-координатите на точките:

Често е удобно списъкът с точки да се запише в една променлива и тя да се подаде като аргумент на функцията ListPlot. Да разгледаме следния пример. Нека в паметта имаме следните променливи:

In[42]:=n01;n14;n22.5;

Първо ще създадем списък с наредени двойки от вида \(\left\{k, n_{k}\right\}\), където \(k\) последователно приема стойности \(0,1,2\) и ще го запазим в променлива, която ще наречем pts:

Накрая ще използваме така дефинирания списък и ще изобразим точките от него:

6. Построяване на итерационен процес в Mathematica

В този параграф ще демонстрираме как може да се използва операторът за цикъл Do. Ще направим това на базата на един пример. Ще покажем как можем да намерим първите 15 члена от редицата на Фибоначи:

In[47]:=n01;n11;Donknk1nk2,k,2,15

Първо, запазваме в променливите \(n_{0}\) и \(n_{1}\) стойностите на първите два елемента от редицата на Фибоначи. След това последователно намираме членовете \(n_{k}\), където \(k\) приема последователно стойности от 2 до 15. Считаме, че примерът е достатъчно показателен и затова няма да се спираме по-подробно върху синтаксиса на оператора Do. Ще отбележим само, че ако искаме на всяка итерация да се извършва повече от една операция, това става, като отделните операции се разделят с точка и запетая, а след последната (преди итератора) се постави запетая.

Задача: С помощта на командата ListPlot изобразете първите 15 члена от редицата на Фибоначи.

Задача: Намерете първите 20 члена от геометрична прогресия с първи член \(b_{0}=2\) и частно \(q=0.9\), като използвате формулата за общия ѝ член. Илюстрирайте графично.

7. Заключение

В настоящата статия се запознахме с работата със системата за компютърна алгебра Wolfram Mathematica и разгледахме няколко основни вградени функции. Това е една добра основа, която може да се използва при решаването на различни задачи от средния курс на обучение по математика. Разбира се, трябва да отбележим, че дори за функциите, които разгледахме, пропуснахме редица особености, които биха били важни в една или друга ситуация. В следващите статии от поредицата „Математически модели и приложения на системите за компютърна алгебра за тяхното изследване“ ще коментираме някои аспекти от работата със системата в конкретен контекст. Освен това, надяваме се, че читателят ще продължи да се усъвършенства в използването на Mathematica с помощта на много богатата ѝ документация, както и съществуващата литература.

ЛИТЕРАТУРА

1. S. Hollis (2008). Manual for Stewart’s Single Variable Calculus. Brooks/Cole.

2. S.Wagon (2010). Mathematica in Action. Problem Solving Through Visualization and Computation. Springer.

REFERENCES:

1. S. Hollis (2008). Manual for Stewart‘s Single Variable Calculus. Brooks/Cole.

2. S.Wagon (2010). Mathematica in Action. Problem Solving Through Visualization and Computation. Springer.

Година LVII, 2014/4 Архив

стр. 343 - 354 Изтегли PDF