Глава 7. Математическая система Mathcad 2000
 
 
 
 

После запуска Mathcad на рабочем столе Windows 95/98/NT появляется основное окно системы с советом дня — окном Tip of the day (рис. 7.1), которое позволяет ознакомиться с основными возможностями Mathcad. Для переключения тем служит кнопка Next Tip, а для перехода к работе с Mathcad — кнопка Close. Окна Mathcad имеют стандартные средства управления.

 

Рис. 7.1. Окно системы Mathcad 2000 Professional


Сразу после запуска система готова к созданию документа с вычислениями. Первая же кнопка панели инструментов New Worksheet позволяет инициировать подготовку нового документа с заданным стилем. Соответствующее ему окно получает название Untitled: N, где N = 1,2,3... В окне редактирования видны курсор ввода в виде красного крестика и вертикальная черта, отделяющие текущую страницу от соседней (справа). Для установки курсора ввода требуется щелкнуть на нужной точке мышью. Курсор ввода намечает места ввода блоков текущего документа, которые мы рассмотрим позже.

 

Интерфейс пользователя системы Mathcad 2000

В основном интерфейс пользователя системы Mathcad достаточно характерен для систем компьютерной математики (см. главу 5). Поэтому ниже описаны лишь его специфические детали. Одна из них — характерная вешка в начале панелей, которая позволяет перетаскивать панели мышью, делая их “плавающими” или “приклеивая” к любой стороне окна (рис. 7.2).

 

Рис. 7.2. Основные элементы интерфейса системы Mathcad


В строке меню системы Mathcad, помимо уже описанных позиций, имеются два характерных для Mathcad меню: Math — управление процессом вычислений и Graphics — работа с графикой.

Элементы управления панели инструментов Mathcad (см. рис. 7.2) перечислены ниже.

- Кнопки операций с файлами:

• New — создание нового документа заданного стиля;

• Open — загрузка ранее созданного документа с помощью диалогового окна;

• Save — запись текущего документа с его именем.

- Печать и контроль документов:

• Print — печать документа;

• Print Preview — предварительный просмотр документа;

• Check Speling — проверка орфографии документа.

- Кнопки операций редактирования:

• Cut — перенос выделенной части документа в буфер обмена (Clipboard);

• Copy — копирование выделенной части документа в буфер обмена;

• Paste — перенос содержимого буфера обмена в окно редактирования на место, указанное курсором;

• Undo — отмена предшествующей операции редактирования;

• Redo — повторение отмененной операции.

- Кнопки размещения блоков:

• Align Across — блоки выравниваются по горизонтали;

• Align Down — блоки выравниваются по вертикали, располагаясь сверху вниз.

- Кнопки операций с выражениями:

• Insert Function — вставка функции из списка, появляющегося в диалоговом окне;

• Insert Utit — вставка размерных единиц;

• Calculate — вычисление выделенного выражения.

- Доступ к новым возможностям Mathcad 8/2000 PRO:

• Insert Giperlink — вставка гиперссылки;

• Component Wizard — открывает окно Мастера, дающего удобный доступ ко всем компонентам системы;

• Run MathConnex — запуск системы MathConnex, предназначенной для стимулирования блочно заданных устройств.

- Раскрывающийся список масштаба отображения документа Zoom.

- Кнопки управления ресурсами:

• Resource Center — доступ к центру ресурсов;

• Help — доступ к справочной системе.

Элементы управления панели форматирования (см. рис. 7.2) перечислены ниже

- Раскрывающиеся списки для задания параметров символов:

• Style — выбор стиля для текстовых блоков;

• Font — выбор шрифта для текстовых блоков;

• Font Size — выбор размера шрифта для текстовых блоков.

- Кнопки изменения начертания символов:

• Bold — полужирное начертание;

• Italic — курсив;

• Underline — подчеркивание.

- Кнопки задания режима выравнивания текста:

• Align Left — выравнивание текстов по левой границе;

• Align Center — выравнивание текстов по центру;

• Align Right — выравнивание текстов по правой границе.

- Кнопки для создания списков:

• Bullets — создание маркированного списка;

• Numbering — создание нумерованного списка.

В нижней части окна системы находится строка состояния системы. Если система не выполняет действий, то в этой строке появится надпись Press F1 for help — нажми клавишу F1 для вызова окна справочной системы.

 

Палитры математических знаков и документы Mathcad

Mathcad с помощью палитр спецзнаков (рис. 7.3) позволяет создавать документы, содержащие математические выражения в привычном для математиков виде. Они могут содержать текстовые комментарии, числа, таблицы, графики и рисунки. Любую палитру можно переместить в удобное место экрана или закрыть. Документы Mathcad похожи на страницы математических книг и научных статей (рис. 7.4). При этом большую часть математических выражений образуют операторы и функции, вводимые с помощью палитр. Самыми распространенными операторами являются оператор присваивания переменным значений := (быстро вводится клавишей двоеточия) и оператор вывода — знак равенства (его можно использовать и как знак первого присваивания). Едва ли требуют пояснения операторы арифметических операций.

 

Рис. 7.3. Окно Mathcad 2000 со всеми палитрами математических знаков

 

Рис. 7.4. Вид типичного документа Mathcad


Для ввода текстовых блоков достаточно ввести символ " (одна двойная кавычка — не путайте с одиночной кавычкой или апострофом). В появившийся прямоугольник можно начать вводить текст. Он редактируется стандартными приемами. Для англоязычных текстов предусмотрен даже орфографический контроль с применением встроенного словаря.

Ввод

На экране дисплея

1.234*2.345=

cos(0.5)=

е^2=

а=1

b:1

a+b=

2*cos(p) =

1/7=

1.234 • 2.345 = 2.894

cos(0.5) = 0.878

е2 = 7.389

а := 1

b := 1

а + b = 2

2 • cos(p) = -2

Уже из этих простых примеров (и рис. 7.4) можно заметить особенности работы с Mathcad:

• некоторые комбинированные операторы (например, :=) вводятся одним символом;

• оператор = используется как оператор вывода и как оператор первого присваивания значений переменным;

• Mathcad вставляет пробелы до и после арифметических операторов;

• оператор умножения вводится как звездочка, но представляется точкой в середине строки;

• оператор деления вводится как косая черта, но заменяется горизонтальной чертой;

• оператор возведения в степень вводится знаком ^, но число в степени представляется в обычном виде (степень как верхний индекс);

• по умолчанию десятичные числа имеют представление с тремя знаками после разделительной точки;

• наличие в записи числа десятичной точки делает его вещественным (например, 2 — целое число, а 2 — вещественное);

• Mathcad идентифицирует наиболее распространенные константы, например е — основание натурального логарифма или p.

Таким образом, даже без вмешательства пользователя Mathcad пытается придать математическим выражениям обычный вид. На рис. 7.4 показано также окно форматирования результатов вычислений. Введите в поле Number of decimal places число 15 вместо 3, и получите результат с 15 знаками после десятичной точки.

Следует помнить, что Mathcad интерпретирует блоки, просматривая их слева направо и сверху вниз. Это надо учитывать, задавая расположения блоков и перемещая их в окне документов. Нельзя вычислять блок, если не определены все входящие в него переменные и функции пользователя. Определения соответствуют операции локального присваивания, вводимой знаком := (знак = можно использовать для первого присваивания, но в основном он служит оператором вывода). Есть и оператор глобального присваивания º (например, хº 123 или f (а,х)º a•sin(х)), который позволяет размещать определения переменных и функций пользователя в любом месте документа.

Ввод сложных операторов (например, вычисления сумм, произведений, интегралов и т. д.) облегчается благодаря выводу шаблона нужного оператора с местами ввода — черными квадратиками. Можно щелкнуть на нужном месте ввода и ввести данные. На рис. 7.5 показано последовательное заполнение мест ввода в шаблоне вычисления определенного интеграла и в ряде других шаблонов.

 

Рис. 7.5. Примеры последовательного заполнения шаблонов


Шаблоны ряда операций вводятся с клавиатуры символами, которые напоминают вид оператора хотя бы в первом приближении. Например, оператор квадратного корня вводится клавишей \, шаблон определенного интеграла — клавишей &, знак произведения ряда — клавишей # и т. д. В то же время знак суммы членов ряда вводится комбинацией клавиш Ctrl+Shift+F4.

С помощью мыши с нажатой левой кнопкой строится расширяющийся прямоугольник выделения из пунктирных линий. Попавшие в него блоки выделяются также пунктирной линией. Они образуют блок выделенных объектов, который можно перетаскивать, копировать в буфер обмена и удалять.

При задании сложных вычислений работа системы может быть долгой. Для прерывания работы можно нажать клавишу Esc. Mathcad выведет окно с сообщением о прерывании вычислений и двумя кнопками: ОК — подтвердить прерывание и Cancel — отменить прерывание. После прерывания можно возобновить работу, нажав клавишу F9 или щелкнув на кнопке Calculate панели инструментов (кнопка с изображением жирного знака равенства).

 

Вызов встроенных функций

Mathcad имеет множество встроенных элементарных, специальных и статистических функций. Для облегчения ввода математических функций служит кнопка f(x), которая выводит окно с полным перечнем функций, разбитым на тематические разделы. Шаблон выделенной функции может быть перенесен в окно документа щелчком на кнопке Insert.

Функции имеют параметры (аргументы), которые записываются в круглых скобках после имени функции. Функции могут иметь один параметр, например sin(x) или cos(0.5), два параметра, например ln(m,х), или даже несколько параметров. Параметры могут иметь численное значение, быть константой, определенной ранее переменной или математическим выражением, возвращающим численное значение.

 

Элементы графической визуализации

Mathcad позволяет строить следующие типы графиков:

• графики функций одной переменной f(х);

• графики параметрически заданных функций в полярной системе координат;

• графики поверхности для функций двух переменных z(х,у);

• контурные графики для функций двух переменных z(х,у);

• столбиковые графики для функций двух переменных z(х,у);

• точечные графики поверхности для функций двух переменных z(x,у);

• графики векторного поля (в виде стрелок).

Построение графиков в системе Mathcad предельно упрощено. Так, для графика функции f(х) достаточно ввести функцию и затем — шаблон графика (с помощью команд меню Insert или панели инструментов). После этого в место ввода на шаблоне графика надо вставить имя переменной х. После щелчка вне шаблона график будет построен (первый график на рис. 7.6).

 

Рис. 7.6. Основные виды графиков


Выделив график, его можно перетаскивать и менять его размеры. В выделенном графике появляются места ввода для задания пределов по осям, что позволяет изменить масштаб графиков.

Для контурных графиков параметрически заданных функций надо ввести шаблон трафика и задать два выражения — по осям X и Y. Для графиков функций двух переменных надо ввести функцию f(х,у), выбрать нужный шаблон графика (в палитре графиков) и в месте ввода задать имя функции f. Построение таких графиков также показано на рис. 7.6 (графики 2-6).

Вид графика зависит от его форматирования. Команды форматирования сосредоточены в меню Format Окна форматирования можно также вызывать с помощью контекстных меню, появляющихся при щелчке правой кнопкой или при двойном щелчке на области графика. Для наиболее сложных трехмерных графиков предусмотрена возможность задания графика со всеми нужными параметрами форматирования с помощью Мастера — команда 3D Plot Wizard меню Insert.

В Mathcad есть возможность построения на одном графике ряда поверхностей. На рис. 7.7 показан пример построения графика пересекающихся параболических поверхностей — одна из них поднята по вертикали, а другая опущена. Обратите внимание на запись функций z1(x,y) и z2(x,y).

 

Рис. 7.7. Построение двух пересекающихся объемных парабол


Вид трехмерного графика зависит от того, как он развернут относительно точки просмотра. Помимо задания углов обзора из окна форматирования графиков, Mathcad позволят вращать графики мышью. При нажатой клавише Ctrl можно мышью удалять или приближать объект к наблюдателю. При нажатой клавише Shift можно мышью инициировать анимированную (“живую”) картину вращения графика. Для остановки вращения надо щелкнуть левой кнопкой мыши.

 

Ошибки в вычислениях и отладка вычислений

Вычисления в системах Mathcad иногда сопровождаются ошибками. Mathcad выявляет только синтаксические ошибки, например ошибочную запись sinus(x) вместо sin(x) и т. д. Индикация ошибок задается двумя признаками: ошибочное выражение или его часть окрашиваются ярко-красным цветом; при наведении в область ошибки указателя мыши появляется всплывающая подсказка с описанием ошибки. Если в области ошибки щелкнуть правой кнопкой мыши, появится контекстное меню, одной из команд которого является команда трассировки ошибок — Trace Error. Выбор этой команды открывает панель трассировки ошибок (рис. 7.8). Панель трассировки имеет четыре кнопки для перемещения по трассе ошибок с очевидным назначением (перемещение вперед или назад).

 

Рис. 7.8. Панель трассировки ошибок

 

Основные объекты входного языка

 

Алфавит, константы и переменные

Общение пользователя с системой Mathcad происходит посредством входного языка системы. К обычным средствам входного языка относится его алфавит, который в Mathcad составляют: все символы ASCII, греческие буквы, операторы, функции и директивы. Эти средства полностью представлены в палитрах математических спецзнаков. Mathcad оперирует также с рядом типов данных: целыми, вещественными и комплексными числами, векторами и матрицами, строковыми и символьными (формульными) данными. Арифметические операторы в Mathcad обычные и здесь не обсуждаются.

К специальным, предварительно определенным переменным относятся системные переменные.

p = 3,14159...

е = 2.71828...

¥

% = 0.01

i или j

TOL = 10-3


CTOL = 10-3


 
ORIGIN = 0

PRNCOLWIDTH = 8


PRNPRECISION = 4


FRAME = 0

CWD

Число p (до 15 значащих цифр)

Основание натуральных логарифмов (до 15 значащих цифр)

Бесконечность (число большее 10307)

Процент (0.01)

Мнимая единица — корень квадратный из минус единицы

Допускаемая погрешность для различных численных вычислений

Погрешность для условий ограничения при решении оптимизационных задач с применением функций Maximize, Minimize, Find и Minerr

Индекс первого элемента массива

Ширина столбца, используемая при записи файлов функцией WRITEPRN

Число значащих цифр, используемых при записи файлов функцией WRITEPRN

Счетчик кадров анимации

Положение текущей папки в виде строки

Данные могут быть размерными, то есть характеризоваться не только своим значением, но и указанием физической величины, значение которой они хранят (рис. 7.9). Для задания единицы измерения размерной переменной можно использовать окно размерных величин, которое появляется при щелчке на кнопке панели инструментов с изображением мерной кружки. Можно также вызвать это окно, выбрав команду Units в меню Insert.

 

Рис. 7.9. Примеры задания и применения размерных переменных


В Mathcad используются также так называемые ранжированные переменные, имеющие множественные значения:

Name := Nbegin..Nend

Здесь Name — имя переменной, Nbegin — ее начальное значение, Nend — конечное значение, .. — символ, указывающий на изменение переменной в заданных пределах (он вводится клавишей точки с запятой ;). Если Nbegin < Nend, то шаг изменения переменной будет равен +1, в противном случае -1 (например, k:= 5 .. 0).

Для создания ранжированной переменной общего вида используется выражение

Name := Nbegin, (Nbegin + Step)..Nend

Здесь Step — заданный шаг изменения переменной (он должен быть положительным, если Nbegin<Nend, или отрицательным в противном случае). Заметим, что Mathcad позволяет задавать и ранжированные размерные переменные, каждый компонент которых — размерная величина.

 

Операторы сравнения и логические операторы

Обычный вид имеют операторы сравнения и (в Mathcad 2000) логические (булевы) операторы.

Оператор

Обозначение

Клавиша

Описание

Больше чем

х>у

>

Возвращает 1, если х>у, иначе возвращает 0

Меньше чем

х<у

<

Возвращает 1, если х<у, иначе возвращает 0

Больше чем или равно

х³ у

Ctrl+0

Возвращает 1, если х³ у, иначе возвращает 0

Меньше чем или равно

х£ у

Ctrl+9

Возвращает 1, если х£ у, иначе возвращает 0

Не равно

z¹ w

Ctrl+3

Возвращает 1, если z¹ y, иначе возвращает 0

Равно

z=w

Ctrl+=

Возвращает 1, если z=w, иначе возвращает 0

Булево not

b Ø

 

Возвращает инверсное значение булева операнда b

Булево and

b1 Ù b2

 

Возвращает логическую 1, если b1 и b2 логические 1, иначе возвращает логический 0

Булево оr

b1 Ú b2

 

Возвращает логическую 1, если b1 или b2 логическая 1, иначе возвращает логический 0

Булево хоr

b1 Ä b2

 

Возвращает логический 0, если b1=b2 (0=0 или 1=1), иначе возвращает логическую 1

 

Специальные операторы входного языка

В Mathcad имеется ряд специальных операторов, список которых представлен ниже. Общеизвестные операторы вычисления факториала n!, возведения в степень zw (оператор ^) и смены знака -х в эту таблицу не помещены.

Оператор

Обозначение

Клавиша

Описание

Круглые скобки

(X)

'

Изменение приоритета операций

Нижний индекс

Аn

[

Задание индексированной переменной

Верхний индекс

A<n>

Ctrl+6

Выбор n-го столбца n из массива А

Векторизация

Ctrl+-

Векторизация — выполнение заданной операции для всех элементов вектора или матрицы X

Сопряженное комплексное число

"

Вычисление сопряженного комплексного числа

Транспонировать

Ат

Ctrl+1

Транспонирование матрицы А

Возведение в степень

Мn

^

Возведение в n-ю степень квадратной матрицы М (при n=-1 получение обратной матрицы)

Сумма элементов вектора

S v

Ctrl+4

Вычисление суммы элементов вектора v (возвращается скалярное значение)

Квадратный корень

\

Вычисление квадратного корня

Корень n-й степени

Ctrl+\

Вычисление n-го корня z

Модуль комплексного числа

|z|

|

Размер вектора

|v|

|

если элементы в v являются реальными, и
, если элементы в v являются комплексными

Детерминант матрицы

|М|

|

Возвращение определителя квадратной матрицы М

Деление

X/z

/

Деление выражения X на скаляр z, не равный нулю (если X является массивом, то на z делится каждый элемент массива)

Умножение

XY

*

Дает произведение X на Y, если X и Y являются скалярами. Умножает каждый элемент Y на X, если Y является массивом и X — скаляром. Вычисляет точечное произведение, если X и Y — векторы одинакового размера. Выполняет умножение матрицы, если X и Y являются подобными матрицами

Кросс-произведение

u•v

Ctrl+8

Вычисляет кросс-произведение векторов u и v

Суммирование для конечного ряда

Ctrl+Shift+4

Вычисляет сумму членов X для i=m, m+1, ..., n, причем X может быть любым выражением

Произведение для конечного ряда

Ctrl+Shift+3

Выполняет произведения членов X для i=m, m+1, ..., n, где X может быть любым выражением

Суммирование для бесконечного ряда

$

Вычисляет сумму членов X бесконечного ряда

Произведение для бесконечного ряда

#

Возвращение итераций произведений X над рядом переменных i. X может быть любым выражением. Нет необходимости возводить в степень i, но обычно это делают

Предел функции в заданной точке

Ctrl+L

Вычисляет предел функции f(x) при х, стремящемся к а (в режиме символьных вычислений)

Предел функции слева от заданной точки

Ctrl+В

Вычисляет предел функции f (х) при х, приближающемся к а слева (только в режиме символьных вычислений)

Предел функции справа от заданной точки

Ctrl+A

Вычисляет предел функции f(x) при х, приближающемся к а справа (только в режиме символьных вычислений)

Определенный интеграл

&

Вычисляет определенный интеграл от подынтегральной функции f(t) с пределами — нижним а и верхним b

Неопределенный интеграл

Ctrl+I

Вычисляет в символьном виде неопределенный интеграл для подынтегральной функции f(t)

Производная заданной функции по переменной t

?

Вычисляет первую производную функции f (t) по переменной t

n-я производная заданной функции по переменной t

Ctrl+?

Вычисляет n-ю производную функции f (t) по переменной t

Сложение

X+Y

+

Выполняет скалярное, векторное или матричное сложение X и Y

Вычитание

X-Y

-

Выполняет скалярное, векторное или матричное вычитание Y из X

Линия разрыва

X...
+Y

Ctrl+Enter

Вводится для переноса части выражения на следующую строку

 

Сохранение и использование данных

Mathcad может успешно использоваться в физических и измерительных установках для обработки данных эксперимента. Для этого Mathcad имеет специальный тип данных — файловые данные. Работу с ASCII-файлами обеспечивают следующие функции:

• READ("Имя_файла") — считывание данных из файла с указанным именем (например, V := READ("DATA"));

• WRIТЕ("Имя_файла") — запись данных в файл с указанным именем (например, WRIТЕ("Имя_файла") := Выражение);

• АРРЕND("Имя_файла") — дописывание данных в конец существующего файла. Нельзя использовать другие функции для дописывания данных, поскольку они удаляют прежние данные и заносят новые.

Функции READ, WRITE и APPEND в версии Mathcad 8/2000 сохранены только ради совместимости с программами предшествующих версий Mathcad. Их применение не рекомендуется, хотя и вполне возможно. Основными являются функции:

• READPRN("Имя_файла") — считывание данных в виде двухмерного массива — матрицы;

• WRITEPRN("Имя_фaйлa") — запись матрицы в файл с указанным именем;

• АРРЕNDРRN("Имя_файла") — дописывание данных в существующий матричный файл;

• READRGB("Имя_файла") — считывание изображения из RGB-файла и возвращение массива из трех подмассивов (красного, зеленого и синего цветов).

Рис. 7.10 иллюстрирует эффективные возможности Mathcad по занесению данных в файл и их последующему считыванию.

 

Рис. 7.10. Основные операции с данными файлового типа


В Mathcad 8.0/2000 PRO данные файлового типа существенно расширены. С новыми функциями файлового типа можно ознакомиться с помощью справочной системы.

 

Работа со встроенными функциями

 

Типовые элементарные функции

Mathcad имеет стандартный набор встроенных элементарных функций с комплексными или действительными аргументами: exp(z), ln(z), log(z,[b]), sin(z) и т. д. Особо стоит отметить функции двух переменных: log(z,b) — вычисляет логарифм z по основанию b (если z опущено, вычисляется логарифм по основанию 10), angle(x,у) — возвращает угол (от 0 до 2p) радиус-вектора, имеющего начало в точке (0,0) и конец в точке (х, у).

Имеется ряд типовых функций комплексного аргумента: arg(z) — вычисление аргумента; csgn(z) — возвращает, если z=0, 1, если Re(z)>0 или Re(z)=0 и Im(z)>0, и -1 в других случаях; signum(z) — возвращает 0, если z=0, и z/|z| в ином случае; Im(z) — выделение мнимой части z; Re(z) — выделение действительной части z.

Следующие примеры иллюстрируют работу с элементарными функциями:

ехр(1) = 2.718
sin(1) = 0.841
asin(2) = 1.571 + 1.317i
angle(1,1) = 0.785
z := 2+3i
cos(z) = 4.19+ 9.109i
signum(z) = 0.555 + 0.832i

Обратите внимание на то, что большинство элементарных функций может работать с комплексным аргументом в виде числа z = а + b•i (i или j надо определить как мнимую единицу).

 

Функции комбинаторики и теории чисел

Несколько функций Mathcad относятся к комбинаторике и теории чисел:

• combin(n,k) — возвращает число сочетаний k из n>k;

• lcm(v) — возвращает наименьший положительный целый множитель для всех элементов вектора v, имеющего не менее двух элементов типа real или целых неотрицательных чисел;

• gcd(v) — возвращает наибольший целый делитель всех элементов вектора v, содержащего не менее двух элементов типа real или целых неотрицательных чисел;

• mod(x,у) — возвращает остаток от деления х/у со знаком х;

• permut(n,k) — возвращает число размещений из n элементов по k n!/(n-k)!, причем n и k должны быть целыми числами, больше или равными 0.

Аргументы этих функций задаются целыми числами, и работа с ними очевидна.

 

Функции Бесселя и гамма-функция

Mathcad имеет немало встроенных специальных функций. Наиболее полно представлены функции Бесселя с вещественным аргументом, например: J0(x) — функция Бесселя первого рода нулевого порядка; I0(х) — модифицированная функция Бесселя первого рода нулевого порядка и т. д. Имеются функции Бесселя Y0(x), K0(x), J1(x), I1(x), Y1(x), K1(x), Jn(n,x), In(n,x), Yn(n,x) и Kn(n,x). Предусмотрено и вычисление гамма-функции комплексного аргумента Г(z ).

В Mathcad 8.0/2000 PRO было введено около 50 новых функций. Среди них ряд функций Бесселя, гипергеометрические функции и др. Особо следует отметить вычисление ортогональных многочленов Эрмита Неr(n, х), Якоби Jac(n, a, b, х), Лaгeppa Lag(n, х), Лежандра Leg(n, x) и Чебышева Тсheb(n, x) и Ucheb(n, х). Примеры работы с этими функциями даны ниже:

I0(0.5) = 1.063
Yn(5,1) = -260.406
Неr(5,1) = -8
Tcheb(3, 2) = 26
Ucheb(3, 2) = 56

 

Дополнительные неактивные функции

При загрузке символьного процессора система допускает использование ряда дополнительных специальных функций: FresnelC(x) — интеграл Френеля С(х); FresnelS(x) — интеграл Френеля S(x); Ci(x) — интегральный косинус; Si(x) — интегральный синус; Ei(x) — интегральная показательная функция; dilog(x) — дилогарифм; erf (z) — интеграл ошибок для комплексного аргумент z и др. Например, при получении символьного значения интеграла с подынтегральной функцией sin(x)/x с помощью оператора символьного вывода —> получим

В данном случае значение интеграла представлено как интегральный синус Si(x). К сожалению, статус этих функций необычен, они могут фигурировать в результатах символьных операций, но недоступны в качестве операндов.

 

Функции с условиями сравнения

К числовым функциям с условиями сравнения относятся: ceil(x) — наименьшее целое, большее или равное х; floor(x) — наибольшее целое, меньшее или равное х; round(x, n) — округленное значение вещественного х с точностью до n знаков после десятичной точки (если n<0, х округляется слева от десятичной точки); Ф(х) — функция Хевисайда, которая возвращает 0 при х<0 и 1 в ином случае; 6(m, n) — функция, именуемая символом Кронекера, возвращающая 1 при m=n и 0 в ином случае. Назначение этих функций довольно очевидно. К примеру, функция Хевисайда может использоваться для задания прямоугольного импульса с шириной w:

pulse(t,w) := Ф(t) - Ф(t-w)

В Mathcad 8.0/2000 введены следующие новые функции этого класса: csgn(z) — функция знака, аргумент — комплексное число (возвращает 0, если z=0, возвращает 1,если Re(z)>0 или Re(z)=0 и Im(z)>0, возвращает -1 в иных случаях); sign(x) — функция знака (возвращает 0, если х=0, возвращает 1, если х>0, и возвращает -1 в ином случае); signum(z) — возвращает 1, если z=0, и z/|z| в ином случае; trunc(x) — целая часть от действительного числа х. Эти довольно очевидные функции призваны сократить работу пользователя по их заданию в тех задачах, где такие функции встречаются.

 

Функция условных выражений

Довольно широкие возможности дает функция if для создания условных выражений:

if(условие, выражение 1, выражение 2)

Если в этой функции условие выполняется, то будет вычисляться выражение 1, в противном случае — выражение 2. Заметим, что эта функция широко распространена в языках программирования, и ее работа очевидна.

 

Функции строковых данных

В Mathcad включен новый тип данных — строковый, для обработки данных которого используются строковые функции: concat(S1, S2) — объединение строк S1 и S2; num2str(z) — строковое представление числа z; str2num(S) — преобразование строки в число; str2vec(S) — преобразование строки в вектор; strlen(S) — количество знаков в строке S; vec2str(v) — строковое представление вектора v. Строка S задается как цепочка символов, заключенная в кавычки, например "Hello!".

 

Функции контроля типа переменных

Для контроля типа переменных служат следующие функции:

• IsArray(x) — возвращает 1, если х — матрица или вектор, иначе возвращает 1; • IsScalar(x) — возвращает 1, если х — скаляр, иначе возвращает 0;

• IsString(x) — возвращает 1, если х — строка, иначе возвращает 0;

• UnitsOf (х) — возвращает размерность х, если х — размерная переменная, иначе возвращает 1.

Работа этих функций вполне очевидна, и мы не будем комментировать ее более подробно.

 

Функции пользователя и рекурсивные функции

Функции пользователя в Mathcad задаются в виде

Имя(список параметров);=тело функции

Список параметров задается перечнем переменных, разделенных запятыми. Эти переменные являются локальными, то есть действуют в пределах тела функции. Примеры задания функций:

fun(x) := 5•(1 - ехр(х))

Mathcad допускает обращение к функции пользователя внутри тела этой функции. Это означает возможность задания рекурсивных функций, порой заметно упрощающих реализацию различных алгоритмов. Функция if также позволяет создавать рекурсивные алгоритмы:

fact(n) := if(n=0, 1, n•fact(n-1))
fact(0) = 1
fact(5) = 120

Этот пример носит чисто познавательное значение, поскольку в Mathcad для вычисления факториала имеется оператор — n!. Другой пример иллюстрирует функцию, порождающую линейно спадающее периодическое пилообразное колебание Р(х) с периодом Т:

F(x) := 1-х
Р(х) := if(x<T,
F(x), P(x-T))

Хотя рекурсия — мощный математический прием, в большинстве случаев более эффективным является решение задач без ее применения.

 

Работа с массивами, векторами и матрицами

 

Типы массивов и доступ к их элементам

Массивы — важный тип множественных данных с доступом к любому его элементу. Mathcad работает с одномерными массивами — векторами и двухмерными — матрицами. Массивы могут содержать как числовые, так и символьные данные. В Mathcad 2000 векторы и матрицы отображаются в длинных скругленных скобках.

Каждый элемент массива представлен индексированной переменной с одним целочисленным индексом для вектора или двумя — для матрицы (например, M1,1 или М2,2). Нижняя граница индексации определяется системной переменной ORIGIN, которая может принимать значение 0 или 1 (по умолчанию 0). Для ввода индекса используется знак [ (квадратная открывающая скобка).

Не следует путать индексированные переменные со скалярными переменными с индексом в имени переменной. Например, ток I1( где нижний индекс имени означает просто “первый ток”, например — ток в ветви 1 некоторой электрической схемы. Подобные индексы — индексы в имени переменной — вводятся с помощью точки, причем синий уголок курсора ввода при этом охватывает все имя, а не только область ввода индекса.

Векторы и матрицы можно задавать путем ввода их элементов — индексированных переменных. Для задания векторов и матриц можно воспользоваться командой Matrices меню Math, нажатием клавиш Ctrl+V или щелчком на кнопке с изображением шаблона матрицы. Это вызывает вначале появление диалогового окна, в котором надо указать размер матрицы, то есть количество ее строк m и столбцов n.

 

Векторные и матричные функции

Встроенные векторные и матричные функции облегчают решение задач линейной алгебры и других сфер приложения векторов и матриц. Приведем основные векторные функции, входящие в систему Mathcad: length(V) — число элементов вектора; last(V) — номер последнего элемента; max(V) — максимальный по значению элемент вектора (или матрицы); min(V) — минимальный по значению элемент вектора (или матрицы); Re(V) — вектор действительных частей вектора с комплексными элементами; Im(V) — вектор мнимых частей вектора с комплексными элементами. Примеры:

V := ( 2 6 3 4 1)T
length(V) = 5
max(V) = 6
last(V) = 4
Re(V)T =(26341)

Имеется также функция e(i, j, k), которая возвращает единичный полностью антисимметричный тензор третьего ранга; i, j и k должны быть целыми числами от 0 до 2 (или между ORIGIN и ORIGIN+2, если ORIGIN¥ 0). Возвращает 0, если любые два аргумента равны, 1 — если три аргумента являются четной перестановкой (0, 1, 2), и -1 — если три аргумента являются нечетной перестановкой (0, 1, 2). Для работы с матрицами также существует ряд встроенных функций: augment (М1, М2) — объединяет в одну матрицы М1 и М2, имеющие одинаковое число строк; identity(n) — создает единичную квадратную матрицу размером n*n; stack(M1, М2) — объединяет две матрицы М1 и М2, имеющие одинаковое число столбцов, размещая M1 над М2; submatrix(A, ir, jr, ic, jc) — возвращает субматрицу, состоящую из всех элементов, содержащихся в строках от ir по jr и столбцов с ic по jc (ir£ jr и ic£ jc); diag(V) — создает диагональную матрицу, элементы главной диагонали которой равны элементам вектора V; matrix(m, n, f) — создает матрицу, в которой (i, j)-й элемент равен f(i, j), где i=0, 1, ..., m и j=0, 1, ..., n, a f(i, j) — некоторая функция.

Следующие функции возвращают ряд важных характеристик матрицы M: cols(M) — число столбцов; rows(M) — число строк; rank(M) — ранг; tr(M) — след (сумму диагональных элементов); mean(M) — среднее значение элементов; median(M) — медиану элементов; соnd1(М) — число обусловленности матрицы, вычисленное в норме L1; cond2(M) — число обусловленности матрицы, вычисленное в норме L2; conde(M) — число обусловленности матрицы в норме евклидового пространства; condi(M) — число обусловленности матрицы в равномерной норме; norm1(M) — норму L1; norm2(M) — норму L2; norme(M) — евклидову норму; normi(M) — неопределенную норму.

 

Дополнительные матричные функции

В профессиональные версии Mathcad включен ряд дополнительных матричных функций:

• lu(M) — выполняет треугольное разложение матрицы М: P•M=L•U, где L и U — соответственно, нижняя и верхняя треугольные матрицы (все четыре матрицы квадратные одного порядка);

• qr(A) — дает разложение матрицы A: A=Q•R, где Q — ортогональная матрица и R — верхняя треугольная матрица;

• svd (А) — дает сингулярное разложение матрицы А размером n´ m: A=U•S•VT, где U и V — ортогональные матрицы размером m´ m и n´ n соответственно; S — диагональная матрица, на диагонали которой расположены сингулярные числа матрицы А;

• svds(A) — возвращает вектор, содержащий сингулярные числа матрицы А размером m´ n, где m³ n;

• geninv(A) — левая обратная к матрице А. L•А=Е, где Е — единичная матрица размером n´ n, L — прямоугольная матрица размером n´ m, A — прямоугольная матрица размером m´ n.

Для решения проблемы собственных значений служат функции: eigenvals(M) — вектор собственных значений матрицы М; eigenvec(M, Z) — вектор, принадлежащий собственному значению Z матрицы М; eigenvecs(M) — матрица, столбцы которой — собственные векторы матрицы М; genvals(M, N) — вектор обобщенных собственных значений vi, соответствующий решению уравнения M•x=vi•N•x; genvals(M, N) — матрица, столбцы которой — нормированные обобщенные собственные векторы.

Есть также функции сортировки элементов векторов и матриц: sort(V) — сортировка значений по возрастанию; reverse(V) — сортировка значений по убыванию; csort(M, n) — перестановка строк матрицы М таким образом, чтобы отсортированным оказался n-й столбец; rsort(M, n) — перестановка столбцов матрицы М таким образом, чтобы отсортированной оказалась n-я строка.

 

Решение систем линейных уравнений

Векторные и матричные операторы и функции системы Mathcad позволяют решать широкий круг задач линейной алгебры. К примеру, если заданы матрица А вектор В для системы линейных уравнений в матричной форме А´ Х=В, то вектор решения можно получить из очевидного выражения Х=А-1•В (рис. 7.11).

 

Рис. 7.11. Решение системы линейных уравнений


Для решения этой задачи есть и встроенная функция lsolve(A, В), которая возвращает вектор X для системы линейных уравнений А•Х=В (см. последний пример на рис. 7.11).

 

Проведение линейной и сплайновой аппроксимаций

 

Одномерная линейная аппроксимация

Часто зависимости вида у(х) представлены отдельными узловыми точками. При кусочно-линейной интерполяции вычисления дополнительных точек выполняются по линейной зависимости. Для этого используется функция linterp (VX, VY, x). Для заданных векторов VX и VY узловых точек и заданного аргумента x функция linterp(VX, VY, x) возвращает значение функции при ее линейной аппроксимации.

 

Сплайн-интерполяция и аппроксимация

Часто хорошие результаты дает сплайн-аппроксимация отрезками кубических полиномов, проходящих через три смежные узловые точки. Коэффициенты полиномов рассчитываются так, чтобы непрерывными были первая и вторая производные. Линия, которую описывает сплайн-функция, напоминает по форме гибкую линейку, закрепленную в узловых точках (откуда и название аппроксимации: splain — гибкая линейка). Для осуществления сплайн-аппроксимации система Mathcad предлагает следующие функции:

• cspline(VX, VY) — возвращает вектор VS вторых производных при приближении в опорных точках отрезками кубических полиномов;

pspline(VX, VY) — возвращает вектор VS вторых производных при приближении к опорным точкам отрезками парабол;

• lspline(VX, VY) — возвращает вектор VS вторых производных при приближении к опорным точкам отрезками прямой;

interp(VS, VX, VY, x) — возвращает значение у(х) для заданных векторов VS, VX, VY и значения х.

Сплайн-аппроксимация проводится в два этапа. Вначале с помощью функций cspline, pspline или lspline отыскивается вектор вторых производных функции у(х), заданной векторами VX и VY ее абсцисс и ординат. Затем для каждой точки вычисляется у(х) с помощью функции interp.

При линейной аппроксимации график оказывается слишком грубым — отчетливо видны точки перегибов. В то же время сплайн-аппроксимация, несмотря на малое число точек (даже если их 5 или 6), дает прекрасные результаты: график функции оказывается плавным и точки его перегиба вообще незаметны.

 

Статистическая обработка данных

С помощью системы Mathcad можно проводить наиболее распространенные статистические расчеты с данными, представленными векторами их значений. Существует также ряд статистических функций для скалярного аргумента. С них и начнем обсуждение статистических расчетов.

 

Типовые статистические функции

Помимо уже упомянутой гамма-функции, широко применяемой в статистических расчетах, существуют следующие встроенные статистические функции скалярного аргумента х: cnorm(x) — кумулятивная нормальная функция; erf(х) — функция ошибок (или интеграл вероятности); rnd(x) — функция генерации случайных чисел с равномерным распределением; corr(VX, VY) — коэффициент корреляции двух векторов — VX и VY; cvar(X, Y) — коэффициент ковариации X и Y. Через функцию erf(х) легко вычисляется дополнительная функция ошибок erfc(x) = 1- erf(x).

Следующая группа функций относится к вычислению основных статистических параметров одномерного массива данных — вектора: mean(V) — среднее значение; var(V) — дисперсия (вариация); side(V) — среднеквадратичная погрешность (квадратный корень из дисперсии); stdev(V) — стандартное отклонение; hist(int,V) — вектор частот попадания данных V в заданные интервалы int (служит для построения гистограмм). На рис. 7.12 представлен документ, в котором организована генерация вектора X из 1000 случайных чисел, представлено их распределение и вычислены основные статистические параметры массива случайных чисел — вектора X. Этот документ демонстрирует и применение функции hist.

 

Рис. 7.12. Работа со случайными числами


При достаточно большом количестве случайных чисел вид гистограммы приближенно говорит о законе их распределения.

 

Статистические функции для распределений вероятности

Функции для плотности вероятности распределения представлены следующим набором:

• dbeta(x, s1, s2) — (b -распределение (s1, s2>0 — параметры формы, 0<х<1);

• dbinom(k, n, p) — биномиальное распределение (возвращает значение вероятности P(x=k), где n и k целые числа, причем 0£ k£ n и 0£ р£ 1);

• dcauchy(x, l, s) — распределения Коши (l — параметр разложения, s>0 — параметр масштаба);

• dchisq(x, d) — Хи-квадрат-распределение (х, d>0, причем d — число степеней свободы);

• dexp(x, r) — экспоненциальное распределение (r, х>0);

• dF(x, d1, d2) — распределение Фишера (d1, d2>0 — числа степеней свободы, x>0);

• dgamma(x, s) — гамма-распределение (s>0 — параметр формы, х³ 0);

• dgeom(k, p) — геометрическое распределение (0<р£ 1 — вероятность успеха в отдельном испытании, k — целое неотрицательное число);

• dlnorm(x, m , s ) — логнормальное распределение (m  — натуральный логарифм среднего значения, s >0 — натуральный логарифм среднеквадратичного отклонения, х>0);

• dlogis(x, l, s) — логистическое распределение (l — параметр разложения, s>0 — параметр масштаба);

• dnbinom(k, n, р) — отрицательное биномиальное распределение (n>0 и k>0 — целые числа, 0<р£ 1);

• dnorm(x, m , s ) — нормальное распределение (m  — среднее значение, s >0 — среднеквадратичное отклонение);

• dpois(k, l ) — распределение Пуассона (l >0, k — целое неотрицательное число);

• dt(x, d) — распределение Стьюдента (d>0 — число степеней свободы, х — вещественное число);

dunif(x, a, b) — равномерное распределение (а и b — граничные точки интервала, причем а<b и а£ х£ b);

• dweibull(x, s) — распределение Вейбулла (s>0 — параметр формы).

Функции распределения дают вероятность того, что случайная величина будет иметь значения, меньшие или равные определенной величине. Они представлены аналогичным набором функций и отличаются от приведенных тем, что первой буквой имени является буква р, а не d (например, pbeta(x, s1, s2) и т. д.). При экстраполяции используются отрезки прямых, проведенных через две крайние точки.

Следующая группа задает обращения (квантили) функций распределения случайных величин. Они начинаются с буквы q — qbeta(p, s1, s2) и т. д. и позволяют по заданной вероятности вычислить такое значение х, при котором вероятность равна или меньше заданного значения р. Последняя группа статистических функций служит для создания векторов с определенными законами распределения значений их элементов. Они начинаются с буквы r — rbeta(m, s1, s2) и т. д. Указанные функции есть и в более ранних версиях Mathcad. Набор статистических функций в Mathcad 2000 PRO несколько расширен. С дополнительными функциями можно ознакомиться с помощью справочной системы.

 

Выполнение регрессии разного вида

Другой широко распространенной задачей обработки данных является представление их совокупности некоторой функцией у(х). Задача регрессии заключается в получении параметров этой функции такими, чтобы функция приближала бы облако исходных точек (заданных векторами VX и VY) с наименьшей среднеквадратичной погрешностью.

Чаше всего используется линейная регрессия, при которой функция у(х) имеет вид y(x) = a + b•х и описывает отрезок прямой. К линейной регрессии можно свести многие виды нелинейной регрессии при зависимостях вида у(х). Для проведения линейной регрессии в систему встроен ряд приведенных ниже функций: corr(VX, VY) — возвращает скаляр — коэффициент корреляции Пирсона; intercrpt(VX, VY) — возвращает значение параметра а (смещение линии регрессии по вертикали); slope(VX, VY) — возвращает значение параметра b (угловой коэффициент линии регрессии).

Как видно на рис. 7.13, прямая регрессии проходит в “облаке” исходных точек с максимальным среднеквадратичным приближением к ним. Чем ближе коэффициент корреляции к 1, тем точнее представленная исходными точками зависимость приближается к линейной.

 

Рис. 7.13. Пример линейной регрессии


В Mathcad реализована возможность выполнения линейной регрессии общего вида. При ней заданная совокупность точек приближается функцией вида

F(x, K1, K2, ..., Kn)=K1•F1(x)+K2•F2(x)+...+Kn•Fn(x)

Таким образом, функция регрессии является линейной комбинацией функций F1(x), F2(х), ..., Fn(x), причем сами эти функции могут быть нелинейными. Для реализации линейной регрессии общего вида используется функция linfit(VX, VY, F). Она возвращает вектор коэффициентов линейной регрессии общего вида К, при Котором среднеквадратичная погрешность приближения “облака” исходных точек, координаты которых хранятся в векторах VX и VY, оказывается минимальной. Вектор F должен содержать функции F1(x), F2(x), ..., Fn(x), записанные в символьном виде (см. пример на рис. 7.14). Вектор VX должен содержать координаты, упорядоченные в порядке их возрастания, а вектор VY — содержать ординаты, соответствующие абсциссам в векторе VX.

 

Рис. 7.14. Пример линейной регрессии общего вида


В Mathcad введена и функция для обеспечения полиномиальной регрессии при произвольной степени полинома регрессии: regress(VX, VY, n). Она возвращает вектор VS, запрашиваемый функцией interp(VS, VX, VY,x), содержащий коэффициенты многочлена n-й степени, который наилучшим образом приближает “облако” точек с координатами, хранящимися в векторах VX и VY (рис. 7.15). Для вычисления коэффициентов полинома регрессии используется функция submatrix. На практике не рекомендуется делать степень аппроксимирующего полинома выше 4-6, поскольку погрешности реализации регрессии сильно возрастают.

Функция regress создает единственный приближающий полином, коэффициенты которого вычисляются по всей совокупности заданных точек. Иногда полезна другая функция полиномиальной регрессии, дающая локальные приближения отрезками полиномов второй степени: loess(VX, VY, span) — возвращает вектор VS, используемый функцией interp(VS, VX, VY, x) для наилучшего приближения данных VX и VY отрезками полиномов второй степени. Аргумент span>0 указывает размер локальной области приближаемых данных (рекомендуемое начальное значение — 0,75). Чем больше span, тем сильнее сказывается сглаживание данных. При больших span эта функция приближается к regress(VX, VY, 2). Mathcad 8.0/2000 PRO с помощью этих функций позволяет выполнять также многомерную регрессию.

 

Рис. 7.15. Полиномиальная регрессия


Под нелинейной регрессией общего вида подразумевается нахождение вектора К параметров произвольной функции F(x, К1, К2, ..., Кn), при котором обеспечивается минимальная среднеквадратичная погрешность приближения “облака” исходных точек. Для проведения нелинейной регрессии общего вида используется функция genfit(VX, VY, VS, F). Она возвращает вектор К параметров функции F, дающий минимальную среднеквадратичную погрешность приближения функцией F(x, К1, К2..... Кn) исходных данных. F должен быть вектором с символьными элементами, причем они должны содержать аналитические выражения для исходной функции и ее производных по всем параметрам. Вектор VS должен содержать начальные значения элементов вектора К, необходимые для решения системы нелинейных уравнений регрессии итерационным методом. На рис. 7.16 показан пример выполнения нелинейной регрессии общего вида с помощью нелинейной функции F(x, a, b)=a•exp(-b•x)+a•b.

При решении этой задачи возникают две проблемы. Прежде всего, надо вычислить значения производных по переменным а и b. В документе на рис. 7.16 это сделано c помощью символьных операций (первая строка документа после заголовка), что наглядно показывает пользу от таких операций. Вторая проблема связана с необходимостью применения функции genf it в ее стандартном виде. Поэтому пришлось заменить параметр а на k1, а параметр b на k2.

 

Рис. 7.16. Пример нелинейной регрессии общего вида

 

Новые функции Mathcad 2000 для проведения регрессии

В Mathcad 2000 PRO введен ряд новых функций регрессии:

• expfit(vx, vy, vg)—возвращает вектор, содержащий коэффициенты (a, b и с) аппроксимирующего выражения вида a•e(bx)+c, которое лучшим образом приближается к точкам, координаты которых хранятся в векторах vx и vy (вектор vg содержит первое приближение к решению);

• lgsfit(vx, vy, vg) — то же для выражения a/(1+b•e(-c•x));

• logfit(vx, vy) — то же для выражения a•ln(x+b)+c (начального приближения не требуется);

• medf it(vx, vy) — то же для выражения a+b•х (начального приближения не требуется);

• pwrfit(vx, vy, vg) — то же для выражения а•хb+с, вектор vg содержит первое приближение к решению;

sinfit(vx, vy, vg) — то же для выражения a•sin(x+b)+c (рис. 7.17).

В примере на рис. 7.17 регрессия реализуется функцией sinfit. Подобным образом можно реализовать и другие варианты регрессии.

 

Рис. 7.17. Пример синусоидальной регрессии

 

Функции сглаживания и предсказания

Данные большинства экспериментов имеют случайные составляющие. Поэтому часто возникает необходимость статистического сглаживания данных. Ряд функций Mathcad предназначен для выполнения операций сглаживания данных различными методами. В их названии имеется слово smooth (гладкий): medsmooth(VY, n), ksmooth(VX, VY, b) и supsmooth(VX, VY). Они реализуют, соответственно, метод скользящей медианы, распределения Гаусса и линейного сглаживания. Параметры n и b задают ширину окна сглаживания. На рис. 7.18 показан пример применения функции subsmooth(X, Y).

 

Рис. 7.18. Сглаживание данных, полученных генератором случайных чисел


Для предсказания поведения некоторой зависимости служит функция predikt(data, k, N), где data — вектор данных, k — степень полинома регрессии и N — число точек. Она по ряду заданных равномерно расположенных точек позволяет рассчитать некоторое число N последующих точек, то есть, по существу, осуществляет экстраполяцию произвольной (но достаточно гладкой и предсказуемой) зависимости
(рис. 7.19).

 

Рис. 7.19. Применение функции предсказания — экстраполяции


Функция предсказания обеспечивает высокую точность при монотонных исходных функциях или функциях, представляемых полиномом невысокой степени. Кроме того, что иллюстрируется рис. 7.19, она неплохо предсказывает и функции, содержащие явную колебательную компоненту.

 

Решение нелинейных уравнений и систем

 

Функция поиска корня нелинейного уравнения

Многие уравнения, например трансцендентные, и системы из них не имеют аналитических решений. Однако они могут решаться численными методами с заданной погрешностью (не более значения, заданного системной переменной TOL). Для простейших уравнений вида F(x)=0 решение находится с помощью следующей функции:

root(выражение, имя переменной[,а,b])

Эта функция возвращает значение переменной, при котором выражение равно 0, с заданной точностью. Функция реализует вычисления итерационным методом, причем можно задать начальное значение переменной, как показано ниже:

х:=-10 root(x2 - х - 21, х) = -4.11
х:=
10 root(x2 - х - 21, х) = 5.11

Можно также (только в Mathcad 2000) задать интервал от а до b поиска корня. В записи функции root квадратные скобки указывают на необязательные параметры — вводить эти скобки не нужно! Возможно решение систем нелинейных уравнений — в этом случае параметры функции надо задавать в векторной форме.

 

Функция поиска всех корней многочлена

Для поиска корней обычного полинома р(х) степени n Mathcad содержит очень удобную функцию polyroots(V). Она возвращает вектор всех корней многочлена (полинома) степени n, коэффициенты которого находятся в векторе V, имеющем длину, равную n+1. Пример:

Здесь найдены корни многочлена 4-й степени. Из них два корня действительные, два другие комплексно-сопряженные.

 

Директива Given для подготовки блока решения системы уравнений

При решении систем нелинейных уравнений используется специальный вычислительный блок, открываемый служебным словом — директивой Given и имеющий следующую структуру:

Начальные условия (вида var := value)
Given
    Уравнения (вида expr_left = expr_right)
    Ограничительные условия (вида х>0 и т. д.)
    Выражения с функциями Find, Minerr, Maximize и Minimize

Возможно задание уравнений и ограничительных условий в векторной форме.

 

Функции Find и Minerr для решения систем нелинейных уравнений

В блоке используется одна из следующих двух функций: Find(v1, v2, ..., vn) — возвращает значение одной или ряда переменных для точного решения и Minerr(v1, v2, ..., vn) — возвращает значение одной или ряда переменных для приближенного решения методом наименьших квадратов. Рис. 7.20 иллюстрирует решение задачи на поиск точек пересечения параболы и прямой. В нашем случае с помощью функции Find решается система из двух уравнений (одно из них нелинейное) с ограничительными условиями, задающими область поиска корня (х<0 для отрицательного корня и х>0 для положительного корня).

 

Рис. 7.20. Вычисление координат точек пересечения параболы и прямой


При использовании функции Minerr для решения систем нелинейных уравнений надо проявлять известную осторожность и обязательно предусматривать проверку решений. Нередки случаи, когда решения могут оказаться ошибочными, чаще всего из-за того, что из нескольких корней система предлагает нереальный (или не представляющий интереса) корень. Полезно как можно точнее указывать начальные приближения к решению.

 

Реализация итерационных вычислений

Система Mathcad позволяет реализовать вычисления, осуществляемые по рекуррентным соотношениям, — это когда значение некоторой функции находится по одному или нескольким предшествующим ее значениям (см. пример ниже на числа Фибоначчи):

ORIGIN:=1 x1:=1 i:=3..10 xi:=x(i-2)(i-1)
xT=(1 0 1 1 2 3 5 8 13 21)

Как известно, два первых числа Фибоначчи определены как 1, а последующие есть сумма двух предыдущих. Результат задан как вектор-строка чисел Фибоначчи. Более актуальна задача реализации вычислений, в том числе итерационных, с их окончанием по некоторому заданному условию. Для этого система Mathcad содержит специальную функцию вида

until(выражение 1, выражение 2)

Она позволяет повторять вычисления с возвратом значения выражения 2 до тех пор, пока выражение 1 больше или равно 0. В противном случае вычисления прекращаются. Ниже показано действие этой функции на другом классическом примере — вычислении квадратного корня из числа а итерационным методом Ньютона:

i := 0..12 q0 := 1
err := .01 а := 64

qT = (1 32.5 17.235 10.474 8.292 8.005 8 0)

Этот пример позволяет наглядно проследить динамику схождения к точному результату вычислений по итерационной формуле Ньютона. В общем случае рекуррентные вычисления могут осуществляться по нескольким формулам, причем возможно перекрестное применение в них переменных. Такого рода вычисления в системе Mathcad необходимо реализовать в векторной форме (рис. 7.21). В этом случае уточнение значений переменных идет не по строкам, а по столбцам.

 

Рис. 7.21. Динамика протекания процесса эпидемии (параметр р характеризует меры профилактики)


Возможны и более сложные реализации рекуррентных и других подобных вычислений. Например, к ним сводится решение систем дифференциальных уравнений любыми разностными методами, например Эйлера, Рунге — Кутта и др.

 

Решение задач оптимизации и линейного программирования

Решение задач оптимизации — одна из важнейших сфер применения математических методов. Такое решение легко дается с помощью функции Minerr, однако в Mathcad 2000 имеются специальные функции для решения задач оптимизации и линейного программирования. Так, для поиска значений переменных х1, х2, ..., хn, при которых некоторая функция f(x1, x2, ..., хn) имеет максимальное или минимальное значение, используются функции maximize(f, х1, х2, ..., хn) и minimize (f,x1, x2, ..., хn). Обе эти функции реализованы достаточно универсальными алгоритмами оптимизации, которые не требуют вычисления производных функции f(х1, х2, ..., хn), что не только упрощает запись алгоритмов, но и позволяет решать задачи, в которых вычисление производных по тем или иным причинам невозможно(см. рис. 7.22).

 

Рис. 7.22. Пример решения задачи линейного программирования


Ниже дан пример на поиск минимума и максимума с применением функций Maximize и Minimize.

Функции Maximize и Minimize могут успешно применяться при решении задач линейного программирования, которые широко используются в экономических и производственных расчетах. На рис. 7.22 представлен пример решения такой конкретной задачи с соответствующим описанием ее постановки:

f(x,y):=100•(у-х2)2+(1-х)2
х:=0 у:=0
Given
P:=Minimize(f,х,у)
            
Given
    х>=0   у>=0   у=<9-х
R:=Maximize(f,х,у)
            

Приведенный пример показывает, что введение в Mathcad 8/2000 новых функций оптимизации Maximize и Minimize расширяет круг решаемых системой задач при минимальных затратах времени на подготовку средств их решения.

 

Быстрые преобразования Фурье и волновые преобразования

Переход от некоторой функции f(t) к параметрам ее ряда Фурье (амплитудам и фазам гармоник) называется прямым преобразованием Фурье, а обратный переход — обратным преобразованием Фурье. В Mathcad использованы специальные методы быстрого (или дискретного) преобразования Фурье (БПФ или ДПФ).

Функция fft(V) системы Mathcad выполняет прямое БПФ (ее название происходит от слов Fast Fourier Transform — быстрое преобразование Фурье) для данных, представленных действительными числами — значениями составляющих исходного вектора V. Однако при этом вектор V должен иметь 2n составляющих, где n — целое число. Если число составляющих иное, функция отказывается от быстрого преобразования и вычисляет прямое преобразование Фурье гораздо медленнее.

Другая функция, cfft(A), аналогична предыдущей, но реализует прямое преобразование Фурье для вектора А с комплексными элементами. Если А — матрица, реализуется двухмерное преобразование. Введение функции fft(V) обусловлено тем, что преобразование для векторов с действительными элементами реализуется по более быстрому алгоритму (БПФ) и занимает меньше времени (при числе составляющих вектора, равном 2n, где n — целое число). В этом случае более прост и ввод исходных данных.

Функция ifft(V) реализует обратное преобразование Фурье для вектора V с действительными элементами. Вектор V здесь имеет 2m+1 элементов. Функция возвращает вектор D с действительными элементами. Другая функция, icfft(B), выполняет обратное преобразование Фурье по полному алгоритму, при котором как исходный, так и результирующий векторы или матрицы содержат элементы с комплексными значениями. Если задана матрица В, реализуется двухмерное обратное преобразование Фурье.

На рис. 7.23 показан пример на применение прямого и обратного преобразований Фурье. Здесь для преобразования использована сложная трехкомпонентная функция, содержащая две синусоидальные компоненты и компоненту в виде случайных чисел. Прямое БПФ переводит временное представление функции в частотное и позволяет строить спектр сигнала. Обратное преобразование восстанавливает из спектра временной образ сигнала. На левом рисунке показан как исходный сигнал, так и восстановленный после прямого и обратного БПФ.

 

Рис. 7.23. Пример БПФ для сложной функции


Помимо описанных функций Mathcad содержит ряд функций альтернативного преобразования Фурье. Они записываются прописными буквами: FFT, IFFT, CFFT и ICFFT. При альтернативных преобразованиях используются иные нормирующие множители. Выражения, определяющие суть преобразований Фурье, можно легко найти в справочной базе данных системы.

В системы Mathcad 7.0/8.0/2000 включены еще две функции дискретных волновых преобразований: wave(V) — дискретное волновое преобразование действительных чисел с использованием 4-коэффициентного волнового базиса Даубечи (вектор V должен содержать 2n действительных значений, где n — целое число);

iwave(V) — обратное волновое преобразование (V — вектор с числом элементов 2n). В настоящее время дискретные волновые преобразования стали крупным направлением в технике обработки информации, названным Wavelet. В Mathcad есть специальное расширение Wavelet для работы с волновыми преобразованиями.

 

Решение дифференциальных уравнений

 

Функции для решения ДУ различного вида

Для численного решения обыкновенных дифференциальных уравнений (ОДУ) в Mathcad введены следующие функции:

• rkadapt(y, х1, х2, асc, n, F, k, s) — возвращает матрицу решения на интервале от х1 до х2 для системы ОДУ, вычисленную методом Рунге-Кутта с переменным шагом и начальными условиями в векторе у (правые части системы записаны в векторе F, n — число шагов, k — максимальное число промежуточных точек решения и s — минимально допустимый интервал между точками);

• Rkadapt(y, х1, х2, n, F) —возвращает матрицу решений методом Рунге-Кутта с переменным шагом для системы ОДУ с начальными условиями в векторе у, правые части которых записаны в символьном векторе F, на интервале от х1 до х2 (n — число шагов);

• rkfixed(y, x1, x2, n, F) —возвращает матрицу решений методом Рунге-Кутта системы обыкновенных ОДУ с начальными условиями в векторе у, правые части которых записаны в символьном векторе F, на интервале от х1 до х2 при фиксированном числе шагов n.

Рис. 7.24 иллюстрирует технику решения системы из двух дифференциальных уравнений и представление решения в виде фазового портрета колебаний, которые описывает рассматриваемая система уравнений, а также временных зависимостей решения.

 

Рис. 7.24. Решение системы дифференциальных уравнений с применением функции rkfixed


Много других примеров решения дифференциальных уравнений можно найти в электронных книгах системы. Если решение системы дифференциальных уравнений имеет вид гладких функций, то вместо описанной ранее функции rkfixed целесообразно применять функцию Bulstoer(y, x1, x2, n, F), реализующую метод Булириша—Штера.

Система дифференциальных уравнений, записанная в матричной форме у=А•х, где А — почти вырожденная матрица, называется жесткой. Для решения систем жестких дифференциальных уравнений в последние версии Mathcad введен ряд функций: bulstoer(y, х1, х2, асc, n, F, k, s), Stiffb(y, x1, x2, n, F, J), stiffb(y, x1, x2, acс, n, F, J, k, s), Stiffr(y, x1, x2, n, F, J) и stiffr(y, x1, x2, acс, n, F, J, k, s). Они возвращают матрицу решения в интервале от х1 до х2, векторе начальных условий у и других отмеченных выше параметров. Используется метод Булириша—Штера и Розенброка (последний требует определения матрицы Якобиана J). В приведенных функциях: асс — погрешность решения (рекомендуется порядка 0,001), k — максимальное число промежуточных точек и s — минимально допустимый интервал между точками, в которых ищется решение. Функции, начинающиеся со строчной буквы, дают решения только для конечной точки.

Для решения дифференциальных уравнений Пуассона (в частных производных второго порядка) и уравнений Лапласа в систему введены следующие функции: multigrid(M, n) — возвращает матрицу решения уравнения Пуассона, у которого решение равно нулю на границах; relax(M1, М2, МЗ, М4, М5, A, U, r) — возвращает квадратную матрицу решения уравнения Пуассона для спектрального радиуса r. Для решения двухточечных краевых задач предназначены функции bvalfit и sbval.

 

Функция odesolve

Для унификации решения дифференциальных уравнений в составе блока решения Given в Mathcad 2000 PRO была введена новая функция odesolve(x, b[, steps]). Она возвращает вектор решения ОДУ при заданных начальных условиях и конце интервала интегрирования b. Если указано число шагов steps, то решение выполняется с фиксированным шагом, иначе — решение выполнятся адаптивным методом. Хотя аналитическое выражение для этой функции не выводится, с ней можно выполнять математические преобразования, например дифференцировать (рис. 7.25).

 

Рис. 7.25. Решение дифференциального уравнения второго порядка с помощью функции odesolve


В этом примере решение дифференциальных уравнений выглядит более логично и привычно — так же, как в блоках, решающих нелинейные уравнения.

 

Символьные вычисления и оптимизация

Весьма важной в Mathcad является способность выполнять символьные (аналитические) вычисления. Лучше всего для этого использовать специальный оператор вывода символьных результатов ® и палитру символьных операций (кнопка с академической шапочкой). Выполняемые операции перечислены ниже.

Операция

Описание

Simplify

expand

factor

complex

assume

series

float

parfac


coeffs


fourier

laplace


ztrans

invfourier


invlaplace


invztrans

MT®

M-1®

|M|®


Modifier

Упрощение выражений

Разложение выражения по степеням

Разложение выражения на простые дроби

Преобразования в комплексной форме

Придание переменным заданных свойств и ограничений

Разложение в ряд по заданным переменным

Преобразование в формат чисел с плавающей точкой

Разложение на элементарные дроби (только в профессиональных версиях)

Возвращение коэффициента полинома (только в профессиональных версиях)

Прямое преобразование Фурье (только в профессиональных версиях)

Прямое преобразование Лапласа (только в профессиональных версиях)

Прямое z-преобразование (только в профессиональных версиях)

Обратное преобразование Фурье (только в профессиональных версиях)

Обратное преобразование Лапласа (только в профессиональных версиях)

Обратное z-преобразование (только в профессиональных версиях)

Транспонирование матрицы (только в профессиональных версиях)

Инвертирование матрицы (только в профессиональных версиях)

Вычисление детерминанта матрицы (только в профессиональных версиях)

Модифицированные команды (только в профессиональных версиях):

• assume — вводное слово для приведенных ниже определений;

• real — для var=real означает вещественное значение var;

• RealRange — для var=RealRange(a, b) означает принадлежность вещественной переменной var к интервалу [а, b];

• trig — задает направление тригонометрических преобразований

Большую часть из этих операций можно выполнять с помощью команд меню Symbolics. Последняя команда в этом меню — Evalution Style — выводит окно установки стиля вывода: снизу исходного выражения (с пустой строкой и без нее), справа от исходного выражения, на его месте и с комментарием или без него. Примеры символьных операций в командном режиме (дифференцирование, интегрирование и разложение в ряд Тейлора) представлены ниже:

Differentiate   Integrate                Expand to series...

xn              xn                        sin(x)

                by integration, yields   converts to the series

Полезно обратить внимание на то, что часть операций выполняется над выделенным выражением, а часть — над выделенной переменной. В командном режиме символьных вычислений нельзя преобразовывать выражения, содержащие функции пользователя. Однако при использовании оператора символьного вывода это возможно. Ниже представлены типовые операции символьной математики на вычисление производной, интеграла, синуса кратных углов, решение квадратного уравнения и осуществление подстановки:

Нетрудно заметить возможность комбинирования символьных операций и их объединения вертикальной чертой. Возможно символьное вычисление пределов функций:

Более подробно о применении символьных операций вы прочтете в главе 8, посвященной системе символьной математики Maple V (ядро этой системы использовано для проведения символьных вычислений в Mathcad). Здесь же приведем эффектный прием применения символьных операций — решение в аналитическом виде системы нелинейных уравнений, заданных в векторной форме:

Mathcad имеет весьма полезное средство оптимизации вычислений. Его суть заключается в получении аналитического представления вычисляемого выражения, например интеграла, производной и т. д. После этого вычисления выполняются уже не медленными численными методами, а быстро по аналитическим выражениям. Оптимизация включается командой Optimization меню Math. Оптимизируемые выражения помечаются красной звездочкой (*).

 

Средства обычного программирования

Как уже отмечалось, Mathcad, по существу, является системой визуального программирования. Однако есть и палитра со средствами обычного программирования, кнопки которой описаны ниже.

Кнопка

Описание

Add Line

 

¬

if

for

while

otherwise

break

continue

return

on error

Создает и при необходимости расширяет жирную вертикальную линию, справа от которой в шаблонах задается запись программного блока

Локальное присваивание в теле модуля программы

Создание условного выражения

Задание цикла с фиксированным числом повторений

Задание цикла типа “до тех пор, пока”

Иной выбор (обычно применяется с оператором if)

Прерывание

Продолжение

Возврат

Обработка ошибок

Оператор ¬ выполняет функции внутреннего, локального присваивания. Пример его применения для задания программного модуля — функции пользователя — дан ниже:

Инструкция if предназначена для создания условных выражений:

выражение if условие

Если условие выполняется, то возвращается значение выражения. Пример:

Совместно с этим оператором часто используются операторы прерывания break и оператор иного выбора otherwise. Оператор for служит для организации циклов с заданным числом повторений выражений, помещаемых в шаблон:

for Var e Nmin .. Nmax

Ниже дан пример (чисто учебный) вычисления суммы n членов натурального ряда чисел с применением оператора for:

Инструкция while служит для организации циклов, действующих до тех пор, пока выполняется некоторое условие:

while условие

Ниже представлен учебный пример на задание функции вычисления факториала F(n) с применением двухступенчатого программного модуля с циклом while:

Инструкция иного выбора otherwise обычно используется совместно с инструкцией if. Это поясняет следующая программная конструкция:

f(x) := | 1 if x>0 возвращает 1, если х > 0
        | -1 otherwise возвращает -1 во всех иных случаях

Инструкция продолжения используется для продолжения работы после прерывания программы (чаще всего совместно с инструкциями задания циклов while и for), обеспечивая возврат в точку прерывания и продолжение вычислений. Особая инструкция return прерывает выполнение программы и возвращает значение выражения, стоящего следом за инструкцией. Например, в выражении return 0 if x<0 будет возвращаться значение 0 при любом х<0. В представленном ниже примере инструкция return используется для вычисления sin(x)/x в особой точке х=0:

Инструкция обработки ошибок позволяет создавать конструкции обработчиков ошибок:

выражение 1 on error выражение 2

Здесь, если при выполнении выражения 1 возникает ошибка, то выполняется выражение 2. Для обработки ошибок полезна и функция error(S), которая при возникновении ошибки в программном модуле возвращает окно с сообщением, хранящимся в символьной переменной S.

 

Системный интегратор MathConnex

Для интеграции с рядом программных систем (Excel, Axum, MATLAB и др.) в Mathcad введено специальное приложение — системный интегратор MathConnex. Учтите, что при работе с ним требуется объем оперативной памяти не менее 32 Мбайт. MathConnex реализует визуальное программирование и позволяет из набора блоков создать блочную схему алгоритма или вычислительной системы. Блоки могут принадлежать к разным программным системам. Между ними выполняются нужные соединения. MathConnex имеет свой язык программирования. MathConnex, по существу, является самостоятельным приложением. Для его связи с другими системами в Mathcad предусмотрены системные переменные входа inN и выхода outN, где N=0, 1, 2 и т. д. В поставку Mathcad входит множество примеров работы в среде MathConnex, в связи с чем ограничимся этим кратким описанием MathConnex.

 

Центр управления ресурсами и работа в Интернете

Mathcad имеет довольно обширную, но вполне обычную справочную систему, доступ к которой открывает меню Help. Новым является центр управления ресурсами и возможность доступа к электронным книгам и пакетам расширения системы.

Для доступа к центру управления ресурсами достаточно выбрать команду Resource Center в меню Help. Появится окно этого центра, показанное на рис. 7.26.

 

Рис. 7.26. Окно центра управления ресурсами системы Mathcad 2000

Как видно на рис. 7.26, центр управления ресурсами дает доступ к учебнику по системе Mathcad, быстрым “шпаргалкам” (QuickSheet) и описанию пакетов расширения системы Mathcad — большие кнопки в центре окна. В левой части имеется группа кнопок, дающая прямой доступ в Интернет на сайт разработчика Mathcad — фирмы MathSoft Inc. Это позволяет следить за модернизацией системы Mathcad, получать файлы примеров и принимать участие в работе над совместными научными и учебными проектами. Подробное описание системы Mathcad 8 PRO можно найти в книге В. П. Дьяконова и И. В. Абраменковой “Mathcad 8 PRO в математике, физике и в Internet” (M.: Нолидж, 1999).