Синтаксис и основные операторы программы «Бумажка»
a:=b
Присвоить переменной a значение b. Вместо b можно использовать ранее объявленную переменную, выражение (в том числе и с переменными), или число.
f(x;y):=
Объявить функцию f от аргументов x и y. Аргументов может быть и больше, или вообще один. Не допускается объявлять функцию от функции, функцию от выражения и т. п., можно только от переменных. Переменные не обязательно объявлять заранее.
A_i:=
A_(i;k):=
Замена значения в векторе или матрице А. Аналогично использованию команды change.
;
Разделитель для переменных, выражений, индексов и т. п. Например, используется для разделения аргументов при объявлении функции или для задания последовательности.
a
Вычисляет (подставляет) значение переменной а. Соответственно, используется в математических выражениях. Переменная a должна быть объявлена заранее.
f(x;y)
Вычисляет значение функции, когда в качестве аргументов используются x и y. Вместо переменных допускается использовать числа и выражения. Также допускается указывать в качестве аргумента функцию в точке, т. е. когда у функции в качестве аргументов указаны числа или ранее объявленные переменные.
123
Число 123. :-) Числа пишутся как обычно, но переводятся при вычислении в числа с плавающей точкой. Это значит, что если написать очень длинное число, то оно будет представлено с точностью, как для вещественных чисел в Питоне.
1.23
Указание разделителя десятичной дроби точкой.
1.2e-3
Число 0,00123 в инженерном формате.
1+2j
Комплексное число. Мнимую часть можно записывать в виде Xj или X*j. Если X является переменной, а не числом, то допустимо использовать только форму X*j.
a^b
a в степени b: ab. Как и ранее, в качестве a и b можно использовать числа и выражения. Выражения следует заключать в скобки, т. к. программа понимает приоритеты операций. В случае возведения матрицы в степень просто умножит матрицу саму на себя нужное количество раз. Для вектора — умножает вектор сам на себя нужное количество раз. В зависимости от степени (четное или нечетное целое число) может получить скалярный или векторный результат. Соответственно, дробные степени для матриц и векторов не поддерживаются. Важно! Программа получает отрицательную степень матрицы последовательным перемножением обратных матриц, а не получением обратной матрицы от перемноженной b раз саму на себя исходной.
( )
А это и есть скобки. Всякие квадратные и фигурные пока не используются.
a_(b;c)
Элемент некоторой матрицы а с номером строки b и номером столбца c. При указании двузначного индекса следует использовать скобки, как показано.
a_b
Элемент некоторой последовательности a с индексом b. Если в качестве b используется выражение, его тоже надо заключать в скобки, чтобы программа не путалась.
a+b
Сложение.
a*b
Умножение.
a-b
Вычитание.
a/b
Деление.
a|b
"Или" для a и b.
a&b
"И" для a и b.
a;b
Последовательность из а и b. Если a уже является последовательностью, то b будет добавлено к a. Если нужно составить последовательность, состоящую из двух последовательностей a и b, то следует использовать конструкцию (a);b.
“строка“
Обычные двойные кавычки используются для указания строк.
'строка'
Одинарные кавычки используются для указания строк, как и двойные. При необходимости задать строку внутри строки следует пользоваться разными кавычками. Если надо сделать что-то вроде “начало строки 1 'начало строки 2 “строка 3“ конец строки 2' конец строки 1“, например, для вычисления вложенных сумм, то используйте переменные для объявления внутренних строк.
a=b
Проверяет равенство между a и b.
a>b
Проверяет условие a>b.
a<b
Проверяет условие a<b.
a>=b
Проверяет условие a≥b.
a<=b
Проверяет условие a≤b.
a<>b
Проверяет условие a≠b.
Основные функции-команды программы «Бумажка»
sum(последовательность)
Суммирует члены последовательности
prod(последовательность)
Перемножает члены последовательности
if(условие; выражение 1; выражение 2)
Условная функция. Если условие выполняется, вычисляется выражение 1, иначе вычисляется выражение 2. Если не заданы выражения, возвращает значения True или False.
chain(“выражение”; “переменная”; от; до[; шаг])
Присваивает переменной значения начиная от и заканчивая до с указанным шагом, каждый раз вычисляя выражение. Возвращает последовательность вычисленных результатов. Шаг можно не указывать. От и до должны быть целыми, а шаг — целым и еще ненулевым. По умолчанию шаг равен 1 или -1.
change(массив;(индексы);значение)
Заменяет в массиве элемент с указанным индексом новым значением. Если массив является последовательностью, то его надо заключать в скобки. Если массив — матрица, то скобки нужны для задания индексов в виде (строка; столбец). Кроме матриц еще можно использовать векторы.
range(от; до; шаг) или
range(до)
Формирует последовательность вещественных чисел от и до с заданным шагом. Если задан один аргумент, то результатом будет последовательность от 0 до аргумента с шагом 1 или -1. Функция напоминает аналогичную в Питоне.
map(“выражение”; “переменная”; последовательность)
Вычисляет выражения при поочередном присваивании переменной значений из последовательности. Результат оформляется в виде последовательности.
plot( “имя графика”; последовательность_X; последовательность_Y[; (min_y;max_y);“цвет”;“тип линии”])
Формирует данные для графика по последовательности абсцисс и последовательности ординат и отображает сам график. Последовательность (min_y;max_y) указывается, когда надо ограничить график по оси ординат. «Цвет» является константой для Tkinter. Вот некоторые цвета:
"blue", "red", "green", "yellow", "pink", "brown", "magenta", "cyan", "gray" (Соответственно: синий, красный, зеленый, желтый, розовый, коричневый, пурпурный, светло-голубой или циановый, серый).
«Тип линии» может быть «arrow», т.е. со стрелкой, "delta" - отдельными палками и "bar" столбцами. Тип линии указывается только если задан цвет.
Если цвет не указан, то будет взят из один перечисленных.
Графики можно отображать на одном рисунке, при этом ось абсцисс будет общая. Для того, чтобы нарисовать два и более графиков на одном рисунке, их следует сложить:
plot(...)+plot(...)+...
Можно также сначала задать переменные:
gr1:=plot(...) ,
gr2:=plot(...) ,
…,
grN:=plot(...) ,
а затем их сложить:
gr1+gr2+...+grN.
Как уже понятно, график строится по точкам. Комплексные значения в последовательностях для построения графиков не допускаются.
vec(эл1; эл2;... )
Формирует вектор с элементами эл1; эл2;...
matrix((эл1 1; эл1 2;... );(эл2 1; эл2 2;...);...)
Формирует матрицу, у которой строки задаются через последовательности (эл1 1; эл1 2;... );...
Если указать только одну последовательность (лишние скобки при этом не нужны), то это будет вектор-строка.
vcol(эл1; эл2;... )
То же самое, но вектор-столбец. «Бумажка» думает, что вектор-строка или вектор-столбец это тоже матрица. Соответственно, правила сложения и умножения — как для матриц.
E(количество)
Возвращает единичную матрицу размера количество x количество.
roots(“выражение”; “переменная”[; от; до;погрешность])
Находит корни уравнения «выражение=0» по указанной переменной в указанном от и до диапазоне. Диапазон и погрешность можно не указывать. В этом случае диапазон будет определен автоматически в пределах ~[-100;100]. Не указанная явно погрешность выбирается исходя из диапазона. Диапазон разбивается на 100 частей, после чего в каждой части ищется корень. Найденные корни возвращаются в виде последовательности. Работает только для вещественных чисел.
out(аргумент)
Повторяет результат выполнения команды с № аргумента. Особенно фееричен результат для out() с аргументом последующих команд, когда появляется возможность зацикливания вычислений.
Математические функции
Для реализации математических функций где только возможно используются функции модулей math и cmath. Соответственно, все возможные особенности и проблемы будут унаследованы оттуда.
Тригонометрия
sin(аргумент)
Синус аргумента.
cos(аргумент)
Косинус аргумента.
sinh(аргумент)
Гиперболический синус аргумента.
cosh(аргумент)
Гиперболический косинус аргумента.
tg(аргумент)
Тангенс аргумента.
th(аргумент)
Гиперболический тангенс аргумента.
deg(аргумент)
Переводит аргумент из радиан в градусы.
arctg(аргумент)
Арктангенс аргумента.
arcsin(аргумент)
Арксинус аргумента.
arccos(аргумент)
Арккосинус аргумента.
arcsinh(аргумент)
Гиперболический арксинус аргумента.
arccosh(аргумент)
Гиперболический арккосинус аргумента.
arcth(аргумент)
Гиперболический арктангенс аргумента.
Алгебра
sqrt(аргумент)
Корень квадратный от аргумента.
log(аргумент; основание)
Логарифм аргумента по основанию.
lg(аргумент)
Десятичный логарифм от аргумента.
ln(аргумент)
Натуральный логарифм от аргумента.
Re(аргумент)
Вещественная часть аргумента.
Im(аргумент)
Мнимая часть аргумента.
abs(аргумент)
Абсолютная величина (модуль) аргумента.
int(аргумент)
Целая часть аргумента.
exp(аргумент)
Экспонента от аргумента.
floor(аргумент)
Меньшее целое от аргумента.
ceil(аргумент)
Большее целое от аргумента.
integral(“выражение”; “переменная”; от; до[; количество_точек])
Берет определенный интеграл от выражения по переменной с пределами интегрирования от и до.
Используется метод парабол как компромисс между точностью, скоростью и простотой реализации. Количество_точек выбирается автоматически в зависимости от интервала интегрирования и максимально равно 400. Можно указать больше, но при условии, что указанное число нормально переведется Python'ом в целое. Столь малое число точек выбрано потому, что в случае вычисления кратных интегралов, когда выражение содержит функцию «integral», происходит огромное количество последовательных вызовов основной функции разбора выражения: 400·400=160000. Скорей всего, при большем количестве точек кратный интеграл все-таки будет вычислен, но можно и не дождаться. Кроме того, приращение аргумента может оказаться столь малым, что это приведет к погрешностям вычисления.
summa(“выражение”; “переменная”; от; до)
Суммирует выражения, поочередно присваивая переменной значения начиная с от и заканчивая до, и вычисляя выражения с подстановкой переменной. Выражение и переменная должны быть указаны в кавычках или заданы в виде переменных заранее: expr=”выражение(переменная)”; var=”переменная”. В последнем случае программа запомнит и выражение и переменную в виде строковых переменных (не забудьте кавычки) и тогда можно будет подставить expr и var в аргументы суммы уже без кавычек:
summa(expr; var; от; до).
product(“выражение”; “переменная”; от; до)
Произведение выражений, аналогично сумме.
diff(“выражение”; “переменная”; точка [;dx])
Значение производной от выражения по переменной в точке. Вычисляется по формуле определения производной, как отношение приращения функции к приращению аргумента.
Необязательный параметр dx нужен для принудительного задания приращения в некоторых случаях. Если приращение не указано, оно будет выбрано автоматически.
Работа с матрицами
trans(матрица)
Транспонирует матрицу, меняя строки и столбцы местами.
alg(матрица; строка; столбец)
Вычисляет алгебраическое дополнение для элемента, стоящего на пересечении строки и столбца, т. е. имеющего соответствующие индексы.
minor(матрица; строка; столбец)
Вычисляет минор для элемента, стоящего на пересечении строки и столбца, т. е. имеющего соответствующие индексы.
vminor(матрица; строка; столбец)
Вычисляет минорную матрицу для элемента, стоящего на пересечении строки и столбца, т. е. имеющего соответствующие индексы. Матрица получается исключением индексных строки и столбца.
det(матрица)
Вычисляет определитель матрицы рекурсивным способом.
inv(матрица)
Вычисляет обратную матрицу с помощью определителя и союзной матрицы. Медленный алгоритм, зато хорошо описывается заранее созданными функциями и процедурами программы. Для чисел вычисляет обратное число.
rows(матрица)
Количество строк матрицы. Аналогично функции len(матрица), но только для матриц.
cols(матрица)
Количество столбцов матрицы.
add(матрица;элемент)
Добавляет элемент к матрице в виде строки снизу и возвращает результирующую матрицу. Элемент должен быть последовательностью. Числовой элемент разрешается добавлять только к вектору-столбцу. Для нематричных последовательностей следует использовать «;».
mtofile(матрица;имя[;разделитель])
Записывает матрицу в текстовый файл и возвращает True, если получилось записать, и False, если не получилось. Имя файла должно быть строкой, т. е. указывается в кавычках, если только в качестве имени не выступает переменная, содержащая строку с именем. Под именем подразумевается путь к файлу, иначе в качестве каталога для файла будет выбран текущий каталог программы. Разделитель указывается в кавычках и по умолчанию выбран «;».
Пример:
0) a:=matrix(1;2;-0.5) – матрица a
1) mtofile(a;”matrix_a.txt”;”;”) – записать матрицу а в файл matrix_a.txt с разделением в строке через точку с запятой
2) name=”matr_a_1.lst” – переменная с именем файла
3) mtofile(a;name;” ”) – записать матрицу а в файл matr_a_1.lst с пробелом в качестве разделителя в строке
mfromfile(имя[;разделитель])
Читает текстовый файл и помещает содержимое в матрицу, которую и возвращает в виде результата. В файле можно использовать числа с точкой, в формате X.XXe±YY, x.xxE±yy или комплексные числа (X+Yj). Кроме того, допускается использовать и выражения, принятые в «Бумажке». Результатом используемых выражений должно быть число, а сами выражения не должны содержать выбранного разделителя (точка с запятой по умолчанию). Это значит, если выражения содержат «;», то разделитель должен быть другим, например, пробелом или двоеточием.
Работа с векторами
vprod(вектор1;вектор2)
Вычисляет векторное произведение двух векторов размерностью 3 каждый.
Разное
len(аргумент)
Вычисляет длину аргумента: для строки — количество символов; для матрицы — количество строк; для вектора и последовательности — количество элементов. Для чисел длина принята равной 1.
rnd(аргумент)
Случайная величина от 0 до 1, умноженная на численный аргумент.
eval(“строка”)
Вычисляет выражение, записанное в виде строки на языке Python.
execfile(“имя”[;”переменная”; “аргумент”;значение])
Ищет скрипт на языке Python с указанным именем (допускаются только ASCII символы в имени и в тексте скрипта) и выполняет его. В случае удачного выполнения и отсутствия указанной переменной, возвращает значение True. В случае ошибок возвращает False. Если было указано имя переменной (в кавычках), то возвращает значение этой переменной после выполнения скрипта. Соответственно, переменная с таким именем должна присутствовать в теле скрипта. Аргумент (должен быть в кавычках, т. е. строкой) представляет ту переменную, которая будет использована в скрипте как параметр, аргумент функции и т.д. Аргументу присваивается указанное значение. Технически это означает, что перед выполнением скрипта будет выполнена команда exec(«аргумент=значение»).
Команда execfile() позволяет реализовать собственные функции и предоставляет широкие возможности для «подвешивания» программы и порчи себе жизни.
min(аргумент)
Минимум последовательности, заданной аргументом. В случае матриц и сложных последовательностей пытается рекурсивно найти минимальный элемент.
max(аргумент)
Максимум последовательности, заданной аргументом. В случае матриц и сложных последовательностей пытается рекурсивно найти максимальный элемент.
Логические операции
and(аргумент1, аргумент2, ...)
Логическое «И». Возвращает True (истина), если все аргументы имеют значение True. Если один из аргументов — False (ложь), то возвращает False. В случае небулевых аргументов возвращает ошибку.
or(аргумент1, аргумент2, ...)
Логическое «Или». Возвращает True (истина), если хотя бы один из булевых аргументов имеет значение True, иначе возвращает False. В случае небулевых аргументов возвращает ошибку.
xor(аргумент1, аргумент2, ...)
Логическое «Исключающее или». Возвращает True (истина), если только один из булевых аргументов имеет значение True, иначе возвращает False. В случае небулевых аргументов возвращает ошибку.
not(аргумент1, аргумент2, ...)
Логическое «Не». Инвертирует аргументы.