пятница, 28 марта 2014 г.

Freemat. Функции

Рассмотрим, вкратце, основные функции, которые предоставляет Freemat.


abs(a) - модуль числа a.
sqrt(a) - квадратный корень из числа a.
exp(a) - возвращает число e в степени a.
log(a) - натуральный логарифм числа a.
log10(a) - десятичный логарифм числа a.
Обращаться с комплексными числами в программе можно так же, как с обычными (умножать, складывать и др.). Однако, есть и специализированные функции.
real(q) -  действительная часть числа q.
imag(q) - мнимая часть числа q.
angle(q) - показатель экспоненты при тригонометрической форме записи.
conj(q) - комплексно-сопряжённое к q число.
Для генерации случайных чисел предусмотрен целый ансамбль функций. Вот лишь небольшая выборка.
rand() - возвращает случайное число в диапазоне от 0 до 1 (равномерное распределение).
rand(n1,n2,...nm) - возвращает массив случайных чисел размерности n1 x n2 x ... nm.
randi(a,b) - возвращает случайное целое число из интервала от a до b.
Тригонометрические функции представлены в полном составе. В том числе:
sin(a), cos(a), tan(a), cot(a) - синус, косинус, тангенс и котангенс числа a.
asin(a), acos(z), atan(a) - арксинус, арккосинус, арктангенс числа a.

По умолчанию, размерность угла - радианы. Однако, если добавить к имени функции букву "d", т.е. написать, например, sind(a), atand(a), расчёт будет происходить в градусах.
Аналогично, есть возможность работать с гиперболическими функциями.
sinh(a), cosh(a), tanh(a), coth(a) - гиперболические синус, косинус, тангенс и котангенс числа a.
asinh(a), acosh(a), atanh(a) - обратные гиперболические функции.
Встроенные функции - это хорошо, но чаще приходится работать с собственными выражениями. Для этого вам предоставлено две возможности. Если функция несложная, и вы не планируете использовать её ещё когда-нибудь, можно создать "анонимную" функцию в виде
    func = @(arg1, arg2, ... argN) expr,
где func - имя функции, arg1...argN - её аргументы, а expr - выражение, связывающее выходной параметр с аргументами.
Вторым вариантом является создание исполняемого m-файла. Его можно написать и в блокноте, но лучше воспользоваться встроенным редактором Freemat, который может быть вызван из панели инструментов Tools - Editor или комбинацией клавиш Ctrl+E. Общий вид файла следующий:
function [a1,a2...aN]=func(x1,x2...xM)
        expr
Здесь x1 - xM - входные параметры, a1 - aN - выходные параметры, func - имя функции,  expr - выражение, описывающее связь входных и выходных параметров.

Можно сложную функцию разбить на несколько простых и описать их в одном файле. При этом все функции, расположенные следом за первой, являются вспомогательными. Все имена переменных определены только внутри функции. Если строка не заканчивается ";", её результат будет отображён в основном окне. Можно начать файл с комментария, который будет показан при использовании функции help, но нужно помнить, что кириллица в основном окне не отображается. Да, чуть не забыл: имена m-файла и функции должны совпадать!

Рассмотрим пару примеров создания m-файлов функций. Как я уже говорил, Freemat не содержит некоторых полезных функций. Однако, если проблему можно решить, переживать о ней не стоит... Для начала напишем функцию, осуществляющую численное интегрирование методом "трапеций". Её можно использовать как для функции, заданной таблично, так и для аналитической функции, если предварительно вычислить вектор значений. Кстати, в Windows-версии эта функция доступна по умолчанию, хотя и не задокументирована. 
Несмотря на мой корявый английский, суть, думаю, ясна. Всё, что находится выше слова function, является вспомогательной информацией, отображаемой при вызове help. Последующие комментарии можно писать как угодно. Функция определяет величину шага через число точек, после чего производится суммирование площадей  (sum(y) - сумма элементов вектора y).

Второй пример находит численное значение производной функции, заданной аналитически. Freemat предлагает использовать для этой цели конечные разности. Дополним их интерполяционным полиномом Ньютона, чтобы повысить точность вычислений.
Здесь используется функция inline(), которая преобразует выражение в скобках в функцию. Затем мы создаём вектор из 4-х точек и находим значения функции в этих точках. diff(Y,n) формирует векторы конечных разностей порядка n из исходной последовательности Y. В заключении используется та самая формула Ньютона, которая упоминалась раньше.
Вот как это работает.




Комментариев нет:

Отправить комментарий