> arcsin(1/2);
> arcsin(1/3);
Нетрудно заметить, что есть и исключения из этого правила — например, на экране монитора ехр(1) будет выведено как константа е, а значение функции arcsin(1/2) все же вычислено и результат получен как 1/6 от константы Pi. Вообще говоря, если результат выражается через фундаментальную математическую константу, то он будет вычислен и представлен ею. В противном случае функция с целочисленным и рациональным аргументом или с константой просто повторяется в строке вывода в установленном для этой строки формате.
Для получения подробной информации о некоторой произвольной функции <f> достаточно задать команду
> ? <f>
Например, команда
> ? sin
открывает окно справки по тригонометрическим функциям, включая функцию синуса.
Ввиду общеизвестности элементарных функций мы не будем обсуждать ни их свойства, ни допустимые для них пределы изменения аргумента. Эти вопросы отражаются в любом учебнике по элементарной математике.
3.2.4. Некоторые целочисленные функции и факториал
Ниже представлены наиболее распространенные
• factorial(n) — функция вычисления факториала (альтернатива — оператор !);
• iquo(a,b) — целочисленное деление а на b;
• irem(a,b) — остаток от деления а на b;
• igcd(a,b) — наибольший общий делитель;
• lcm(a,b) — наименьшее общее кратное.
Факториал целого числа N задается как N= 1*2*3*...*N при особых случаях 0!=1 и 1!=1. Примеры применения функций, отмеченных выше (файл calcfun):
> [factorial(10),10!];
> iquo(234,5);
> irem(234,5);
> lcm(124,3);
> [3!!, (3!)!];
В последних двух примерах применения оператора факториала полезно обратить внимание, что запись n!! означает лишь (n!)!, а не n!! = 2*4*6*…, то есть произведение четных целых чисел. Действие других функций очевидно. Целочисленные функции, хотя и не все, не могут использоваться для символьных операций, например интегрирования или дифференцирования.
Полезность возможности Maple вычислять факториалы больших чисел демонстрирует следующий пример. Пусть в группе студентов 25 человек, а в году 365 дней. Тогда вероятность того, что ни у кого из студентов дни рождения не совпадают, составит:
> evalf(%);
При обычной арифметике был бы получен 0 или сообщение о некорректности операций из за превышения разрядной сетки компьютера.
А вот еще более характерный пример такого рода. Пусть вероятность рождения мальчика 0.515. Какова вероятность того, что среди 1000 новорожденных мальчиков будет не менее половины. Расчетная формула требует вычисления факториала 1000!:
> evalf(%);
Если увеличить число рождаемых мальчиков до 10 или 100 тысяч, то такая задача может послужить хорошим тестом не только на работу с очень большими числами, но и на скорость вычислений. Решение таких задач без применения аппарата точной арифметики больших чисел встречает большие трудности, а подчас и просто невозможна.
3.2.5. Функции с элементами сравнения и их применение
Несколько хорошо известных функций использует при вычислениях средства сравнения чисел. Для действительного аргумента х это следующие функции:
• trunc(x) — при х>=0 возвращает наибольшее целое, меньшее или равное х, при x<0, trunc(x) = -trunc(-x).
• round(x) — округляет x до ближайшего целого.
• frac(x) — возвращает дробную часть
• floor(x) — возвращает наибольшее целое, меньшее или равное х.
• ceil(x) — возвращает наименьшее целое, большее или равное
Эти функции могут использоваться и для комплексного аргумента х. При этом справедливы следующие соотношения:
trunc(x) = trunc(Re(x)) + I*trunc(Im(x))
round(x) = round(Re(x)) + I*round(Im(x))
frac(x) = frac(Re(x)) + I*frac(Im(x))
ceil(x) = -floor(-x)
К этой категории относится и функция знака, синтаксис которой:
signum(x) signum(1,x) signum(0, х, у)
В основной (первой) форме она возвращает значение x/abs(x), где функция abs(x) — возвращает абсолютное значение действительного
Действия, выполняемые этими функциями, вполне очевидны и читатель может легко проверить это на практике. Данные функции можно использовать для моделирования периодически повторяющихся зависимостей (сигналов). Несколько таких примеров представлено ниже (файл modsig — рис. 3.1):
> restart;
RC:=2-2*ехр(3*(floor(t/2)-t/2));
upside:=1/(3+2*sin(Pi*t));
sawtooth:=t-floor(t):
roundsquare: = (tanh(100*sin(Pi*t) )+1) /2:
squarewave:= (1+signum(sin (Pi*t)))/2;
blimps:=squarewave*sawtooth;