- •Основы математического моделирования
- •Содержательные математические модели
- •Классификация содержательных моделей
- •Формальные математические модели
- •Законы сохранения
- •Вариационные принципы
- •Элементы теории размерностей
- •Контрольные вопросы
- •Основы работы с системой Maxima
- •Установка и запуск системы Maxima
- •Графический интерфейс wxMaxima
- •Справочная информация в wxMaxima
- •Сохранение данных и управление wxMaxima
- •Система компьютерной математики Maxima
- •Основные возможности системы Maxima
- •Скалярные выражения
- •Векторные и матричные выражения
- •Функции и управляющие структуры
- •Контрольные вопросы
- •Элементы вычислительной математики
- •Основы теории погрешностей
- •Абсолютная и относительная погрешности
- •Погрешности основных операций
- •Численное решение нелинейных уравнений
- •Локализация корней уравнения
- •Метод бисекции
- •Метод простой итерации
- •Метод касательных
- •Методы численного интегрирования
- •Метод прямоугольников
- •Метод трапеций
- •Метод парабол
- •Численное решение задачи Коши
- •Метод Эйлера
- •Метод Эйлера–Коши
- •Методы Рунге–Кутты
- •Контрольные вопросы
- •Моделирование в приложениях
- •Падение тела с учётом сопротивления воздуха
- •Колебания маятника с учётом силы трения
- •Полёт тела с учётом сопротивления воздуха
- •Листинги программ
20 2. Система компьютерной математики Maxima
списка и выборочного удаления определённых пользователем переменных «Maxima|Show Variables», «Maxima|Delete Variable...» и функций «Maxima|Show Functions», «Maxima|Delete Function...»
2.2.Основные возможности системы Maxima
В данном разделе приводятся краткие иллюстрации использования основных команд и функций интерпретатора системы Maxima, употребляемые в листингах примеров.
2.2.1. Скалярные выражения
Для построения выражений в Maxima используются стандартные алгебраические операторы: «+», «-», «*», «^», «/».
Функции округления: «round()», «floor()», «fix()», «ceiling()». Функции квадратного корня и модуля: «sqrt()», «abs()». Показательные и логарифмические функции: «exp()», «log()». Тригонометрические и обратные к ним функции: «sin()», «cos()»,
«tan()», «cot()», «asin()», «acos()», «atan()», «acot()». Гиперболические и обратные к ним функции: «sinh()», «cosh()»,
«tanh()», «coth()», «asinh()», «acosh()», «atanh()», «acoth()». Для завершения строки в командном поле или для разделения
нескольких выражений в одной строке могут использоваться символы «;» или «$». При использовании символа «;» результат выполнения выражения будет отображаться в поле ответа, а использовании символа «$»–– нет. Если возникает необходимость в группировке нескольких простых выражений в одно составное, то для этого следует использовать круглые скобки «(cmd1,cmd2)», а для разделения простых выражений между собой –– запятые «,». Результатом, который возвращает составной оператор, будет результат последнего вычисленного выражения.
Для обозначения положительных и отрицательных неограниченных, а также неопределённых выражений в Maxima используются служебные слова «inf», «minf» и «und», например 2.1 : (%i5)–(%o5)1. Имена системных констант начинаются со знака процента: обозначение «%pi» соответствует константе = 3,14159 . . ., «%e» –– константе= 2,71828 . . ., а «%i»–– мнимой единице = √−1.
1 Обозначение вида 2 1 : (%i5)–(%o5) здесь и далее расшифровывается как ссылка на листинг 2.1, строки с (%i5) по (%o5).
2.2. Основные возможности системы Maxima |
21 |
При присваивании переменным результатов вычислений и/или других выражений используется оператор «:». Система Maxima может по-разному трактовать любые выражения в зависимости от текущего контекста. Если входящие в выражение имена переменных ранее были определены, то для вычисления используются их значения, в противном случае имена трактуются как обозначения новых переменных, например 2.1 : (%i1)–(%o3). Если требуется отменить подстановку выражения вместо имени переменной, то перед этим именем следует поставить символ «’», например 2.1 : (%i4)–(%o4).
Листинг 2.1. Примеры некоторых скалярных выражений
(%i1) a*b;
(%o1)
(%i2) a:1/3$
(%i3) a*b;
(%o3)
3
(%i4) (%o4) (%i5)
(%o5)
(%o6)
’a*b;
z:1/minf; limit(z); tan(%pi/2);
1
−∞
0
isn’t in the domain of tan – an error.
2
To debug this try: debugmode(true);
Ниже строк 2.1 : (%i5)–(%o6) выводится сообщение об ошибке,
возникающее при попытке вычисления функции tg за пределами |
|
области её определения. |
2 |
|
|
2.2.2. Векторные и матричные выражения
Упорядоченные множества значений и/или переменных в Maxima называют списками. Простейшим способом формирования списка является обрамляемое квадратными скобками перечисление его элементов через запятую как показано в 2.2 : (%i1)–(%o3). Для ссылки на конкретный элемент его указывают рядом с именем списка в квадратных скобках, например как в 2.2 : (%i4)–(%o4).
22 2. Система компьютерной математики Maxima
Для генерирования элементов списка по определённой формуле используются функции «create_list()» как показано в 2.2 : (%i5)– (%o5). Элементами списка вполне могут быть другие списки, а генерирующая формула может иметь множественную индексацию как, например, в 2.2 : (%i6)–(%o8). Заметим, что для обращения к непоименованным спискам (как и к другим непоименованным объектам) в Maxima используются номера строк как это сделано в 2.2 : (%i7)– (%o8).
Несколько списков одного размера можно объединить в матрицу с помощью функции «matrix()» как показано в 2.2 : (%i9)–(%o9). Обратите внимание на разницу в обращении к элементам матрицы и вложенного списка в 2.2 : (%i10)–(%o11) и 2.2 : (%i7)–(%o8). Для создания нулевой и диагональной матриц используются функции «zeromatrix()» и «diagmatrix()», а для генерирования элементов матрицы по формуле –– «genmatrix()» как это показано в 2.2 : (%i12)–(%o14).
Листинг 2.2. Примеры использования списков и матриц
(%i1) x:1/5$ y:1/3$
(%i3) s:[x,y,z-x+2*y];
(%o3) [ 15 , 13 , + 157 ] (%i4) s[1]*s[2]-s[3];
(%o4) |
− − 52 |
|
|
|
|
||||
(%i5) |
create_list(z^(2*i+1),i,0,4); |
||||||||
(%o5) |
[ , 3, 5, 7, 9] |
|
|
||||||
(%i6) |
create_list([i,j],i,[1,2,3],j,1,i); |
||||||||
(%o6) |
[[1, 1], [2, 1], [2, 2], [3, 1], [3, 2], [3, 3]] |
||||||||
(%i7) |
%o6[2]; %o6[2][2]; |
||||||||
(%o7) |
[2, 1] |
|
|
|
|
|
|||
(%o8) |
1 |
|
|
|
|
|
|
|
|
(%i9) |
matrix(s-1/5,s-1/3); |
||||||||
|
|
0 |
|
2 |
+ |
4 |
|
||
(%o9) |
[ |
15 |
152 ] |
||||||
2 |
|
|
|||||||
|
|
− |
|
|
0 |
+ |
|
|
|
(%i10) |
|
15 |
15 |
|
|||||
%o9[2,1]; %o9[2,3]; |
|||||||||
|
2.2. Основные возможности системы Maxima |
23 |
||||
(%o10) |
− |
2 |
|
|
|
|
15 |
|
|||||
(%o11) |
+ |
2 |
|
|
||
|
|
|
||||
15 |
|
|
||||
(%i12) |
zeromatrix(2,2); diagmatrix(2,z); |
|
||||
(%o12) |
[00 |
00] |
|
|||
(%o13) |
[0 |
0] |
|
|||
(%i14) |
genmatrix(lambda([i,j],12/(i+j)),2,2); |
|
||||
(%o14) |
[46 |
34] |
|
|||
2.2.3. Функции и управляющие структуры
Система Maxima включает в себя реализации нескольких тысяч базовых функций. Для расширения возможностей системы можно воспользоваться дополнительными библиотеками или написать собственные функции. Определение новой функции вида «f(x,y):=cmd» включает: имя функции с её аргументами «f(x,y)», оператор присваивания «:=» и определяющее функцию выражение «cmd». Пример определения и использования пользовательской функции двух аргументов показан в 2.3 : (%i1)–(%o5).
Управляющие структуры в Maxima включают в себя операторы, используемые для выборочного изменения порядка выполнения в последовательности команд в зависимости от выполнения или невыполнения заданных условий.
Оператор «if cnd then cm1 else cm2» используется для выбора между альтернативными группами команд «cm1» и «cm2» в зависимости от значения условия «cnd». Заметим, что операторы «cm1» и «cm2» могут быть составными. Для построения условия «cnd» могут использоваться комбинации вычисляемых выражений и операторов: «=», «#», «<», «<=», «>», «>=», «not», «or», «and». Пример использования условного оператора для определения итеративной функции, генерирующей последовательность чисел Фиббоначи показан в
2.3 : (%i6)–(%o6).
Для повторения группы команд «cmd» некоторое число раз используются операторы: а) «for v:a step s thru b do cmd», б) «for
v:a step s while cnd do cmd», в) «for v:a step s unless cnd do cmd». Форма (а) используется в том случае, если число повторений
