Встроенные объекты
Мощь современных языков программирования объясняется в значительной степени наличием большого количества встроенных объектов, которые мы можем
использовать в наших программах и которые нам не нужно создавать. Поскольку не мы их создавали, то мы не можем видеть устройства этих объектов,
как правило, они устроены сложно. Но нам даны в инструкциях свойства и методы этих объектов, и мы можем ими пользоваться не зная их устройства.
С одной категорией таких встроенных объектов мы уже знакомы: это слова. Другим встроенным объектом является объект math, который содержит в качестве
своих элементов (методов) многие стандартные математические функции, например, тригонометрические функции. В качестве примеров вы можете испробовать в редакторе
следующие функции:
show(math.sin(2));
show(math.cos(3.14159/2));
show(math.sqrt(2));
show(math.abs(-5));
show(math.exp(2));
Это лишь небольшая часть того множества полезных математических функций, которые содержатся в объекте math. Напечатайте в редакторе следующую команду и нажмите кнопку "Пуск" несколько раз:
show(math.random());
Этот метод порождает случайные числа в интервале от 0 до 1.
Вот полный список методов встроенного объекта math:
sin(x) - синус x,
cos(x) - косинус x,
abs(х) - модуль x,
tan(х) - тангенс x,
asin(х) - арксинус x,
acos(х) - арккосинус x,
atan(х) - арктангенс x,
atan2(y, x) - угол между осью x и направлением на точку (x, y),
pow(y, x) - возведение в степень yx,
random() - датчик случайных чисел в интервале (0, 1),
round(х) - округление числа x до ближайшуго целого, 0.5 округляется в большую сторону,
exp(х) - экспонента ex,
sqrt(x) - квадратный корень числа x.
matr = pair(pair(1,2),pair(3,4));
где pair = {x:,y:}. Математики записывают матрицы в виде таблицы:
или в более общем виде:
Важнейшую роль во многих вопросах математики и, особенно, геометрии играет следующая операция перемножения матриц:
Так пишут математики, но мы не математики, а программисты, и мы пишем так:
l11 = m11n11+m12n21;
l21 = m21n11+m22n21;
l12 = m11n12+m12n22;
l22 = m21n12+m22n22;
matr = pair(pair(l11,l21),pair(l12,l22));
Для произвольного числа α обозначим через turn(α) матрицу, определяемую формулами:
l11 = math.cos(α);
l21 = math.sin(α);
l12 = -math.sin(α);
l22 = math.cos(α);
turn(α) = pair(pair(l11,l21),pair(l12,l22));
Для любых двух чисел α и β имеет место следующая формула:
turn(α + β) = turn(α) * turn(β)
Перейдём к упражнениям. Задача состоит в том, чтобы создать две функции, функцию turn(α), аргументом которой является число, а значением - матрица и функцию перемножения матриц:
mul(m, n),
аргументами которой являются две матрицы, а значением - матрица, являющаяся их произведением. Начните так:
starttest;
pair={x:,y:};
turn=function(x){
а закончите так:
alfa=1;
beta=2;
show(mul(turn(alfa),turn(beta)).x.x);
show(mul(turn(alfa),turn(beta)).x.y);
show(mul(turn(alfa),turn(beta)).y.x);
show(mul(turn(alfa),turn(beta)).y.y);
а в промежутке между началом и концом должно быть определение функции перемножения матриц:
mul=function(m,n){
...
}
Перейдите в редактор и приступайте, создайте требуемую программу, запустите её и следите за инструкциями в консоли.
show(math.sin(2));
show(math.cos(3.14159/2));
show(math.sqrt(2));
show(math.abs(-5));
show(math.exp(2));
Это лишь небольшая часть того множества полезных математических функций, которые содержатся в объекте math. Напечатайте в редакторе следующую команду и нажмите кнопку "Пуск" несколько раз:
show(math.random());
Этот метод порождает случайные числа в интервале от 0 до 1.
Вот полный список методов встроенного объекта math:
sin(x) - синус x,
cos(x) - косинус x,
abs(х) - модуль x,
tan(х) - тангенс x,
asin(х) - арксинус x,
acos(х) - арккосинус x,
atan(х) - арктангенс x,
atan2(y, x) - угол между осью x и направлением на точку (x, y),
pow(y, x) - возведение в степень yx,
random() - датчик случайных чисел в интервале (0, 1),
round(х) - округление числа x до ближайшуго целого, 0.5 округляется в большую сторону,
exp(х) - экспонента ex,
sqrt(x) - квадратный корень числа x.
Перемножение матриц
Напомним, что мы называли матрицами объекты видаmatr = pair(pair(1,2),pair(3,4));
где pair = {x:,y:}. Математики записывают матрицы в виде таблицы:
(
1 2
3 4
)
(
m11 m12
m21 m22
)
(
m11 m12
m21 m22
)
*
(
n11 n12
n21 n22
)
=
=
(
m11n11+m12n21 m11n12+m12n22
m21n11+m22n21 m21n12+m22n22
)
l11 = m11n11+m12n21;
l21 = m21n11+m22n21;
l12 = m11n12+m12n22;
l22 = m21n12+m22n22;
matr = pair(pair(l11,l21),pair(l12,l22));
Для произвольного числа α обозначим через turn(α) матрицу, определяемую формулами:
l11 = math.cos(α);
l21 = math.sin(α);
l12 = -math.sin(α);
l22 = math.cos(α);
turn(α) = pair(pair(l11,l21),pair(l12,l22));
Для любых двух чисел α и β имеет место следующая формула:
turn(α + β) = turn(α) * turn(β)
Перейдём к упражнениям. Задача состоит в том, чтобы создать две функции, функцию turn(α), аргументом которой является число, а значением - матрица и функцию перемножения матриц:
mul(m, n),
аргументами которой являются две матрицы, а значением - матрица, являющаяся их произведением. Начните так:
starttest;
pair={x:,y:};
turn=function(x){
а закончите так:
alfa=1;
beta=2;
show(mul(turn(alfa),turn(beta)).x.x);
show(mul(turn(alfa),turn(beta)).x.y);
show(mul(turn(alfa),turn(beta)).y.x);
show(mul(turn(alfa),turn(beta)).y.y);
а в промежутке между началом и концом должно быть определение функции перемножения матриц:
mul=function(m,n){
...
}
Перейдите в редактор и приступайте, создайте требуемую программу, запустите её и следите за инструкциями в консоли.