Министерство образования РФ Восточно-Сибирский государственный технологический университет Кафедра Инженерная и компьюте...
27 downloads
188 Views
1007KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Министерство образования РФ Восточно-Сибирский государственный технологический университет Кафедра Инженерная и компьютерная графика
Методическое пособие по решению задач геометрического моделирования в системе MathCAD Под редакцией проф., д.т.н. В.В. Найханова
Улан-Удэ, 2002
2
УДК 681.3.06 Методическое пособие по решению моделирования в системе MathCAD.
задач
геометрического
Для студентов специальностей: . А.А. Дубанов, Д.В. Базархандаев, Ц.Ц. Цыдыпов, Б.Б. Будажапова. Рецензент: П.В. Мотошкин.
© ВСГТУ, 2002
3
Содержание Введение................................................................................................. 4 Основные возможности....................................................................................... 4 Состав системы MathCAD .................................................................................. 4 Общий обзор деталей интерфейса ..................................................................... 4 Строка меню ......................................................................................................... 5 Панель инструментов .......................................................................................... 5 Панель форматирования ..................................................................................... 6 Палитры математических знаков ....................................................................... 7 Центр информационных ресурсов ..................................................................... 7 Работа с текстовым редактором ......................................................................... 7 Ввод математических выражений и работа с формульным редактором ....... 8 Операции вывода и присваивания ..................................................................... 8 Использование шаблонов математических операторов и символов.............. 9 Вычисление математических функций ............................................................. 9 Понятие о ранжированных переменных ........................................................... 9 Построение двумерного графика одной функции.......................................... 10 Построение графиков ряда функций ............................................................... 10 Ошибки и их виды ............................................................................................. 10 Редактирование в MathCAD ............................................................................. 10
Численные методы ............................................................................ 11 1. Полином Лагранжа ........................................................................................ 11 2. Полином Эрмита............................................................................................ 14 3. Кубический сплайн........................................................................................ 20 4. Метод прогонки ............................................................................................. 22 5. Построение замкнутых кривых .................................................................... 24
Геометрическое моделирование...................................................... 31 1. Прямые в пространстве ................................................................................. 31 2. Прямая и плоскость в пространстве ............................................................ 34 3. Вращение вектора .......................................................................................... 36 4. Центральная проекция .................................................................................. 38
Лабораторный практикум ............................................................... 43 Лабораторная работа № 1................................................................................. 43 Лабораторная работа № 2 ................................................................................. 46 Лабораторная работа № 3 ................................................................................. 47 Лабораторная работа № 4 ................................................................................. 47 Лабораторная работа № 5 ................................................................................. 47 Лабораторная работа № 6 ................................................................................. 48 Лабораторная работа № 7 ................................................................................. 48 Лабораторная работа № 8 ................................................................................. 49
ПРИЛОЖЕНИЯ ................................................................................. 50 Список литературы ........................................................................... 64
4
Введение Основные возможности MathCAD – это мощная и гибкая универсальная система компьютерной математики, предназначенная для автоматизации решения массовых математических задач в самых различных областях. Помимо собственно вычислений, как численных, так и аналитических, она позволяет решать сложные оформительские задачи, которые с трудом даются популярным текстовым редакторам или электронным таблицам. А применение библиотек и пакетов расширения обеспечивает профессиональную ориентацию MathCAD на любую область науки, техники и образования. Итак, уникальное свойство MathCAD – возможность описания математических алгоритмов в естественной математической форме с применением общепринятой символики для математических знаков. MathCAD переводит в категорию простых вычислений даже сложные математические расчеты, требующие применения специальных численных методов.
Состав системы MathCAD Как интегрированная система MathCAD содержит следующие основные компоненты: ¾ Редактор документов – редактор с возможностью вставки математических выражений, шаблонов графиков и текстовых комментариев; ¾ MathConnex – системный интегратор, обеспечивающий интеграцию MathCAD с рядом иных программных продуктов; ¾ Центр ресурсов – система управления ресурсами системы; ¾ Электронные книги - Электронные книги с описанием типовых расчетов в различных областях науки и техники; ¾ Справочная система – система для получения справочных данных по тематическому или индексному каталогу, а также для поиска нужных данных по ключевому слову или фразе; ¾ “Быстрые шпаргалки” QuickSheets – короткие примеры с минимальными комментариями, описывающие применение всех встроенных операторов и функций системы; ¾ Броузер Интернета – собственное средство выхода в Интернет.
Общий обзор деталей интерфейса В рабочем окне системы MathCAD видны семь характерных элементов интерфейса: ¾ строка заголовка – строка с именем системы и текущего документа, а также с кнопками управления окном системы;
5
¾ строка меню – строка открывающая доступ к пунктам меню с различными командами; ¾ панель инструментов – панель с кнопками, обеспечивающими быстрое исполнение наиболее важных команд при работе с системой; ¾ панель форматирования - панель с кнопками, обеспечивающими быстрое форматирование текстовых и формульных блоков в документах; ¾ панель вывода палитр математических знаков - панель с кнопками, выводящими палитры специальных математических знаков и греческих букв; ¾ координатная линейка – линейка с делениями, позволяющая точно располагать блоки по горизонтали; ¾ строка состояния – строка, где приводится информация о текущих режимах. Для удобства работы с большими листами имеются линейки вертикальной и горизонтальной прокрутки.
Строка меню Строка меню системы MathCAD представлены следующие позиции: ¾ File – работа с файлами, сетью Интернет и электронной почтой; ¾ Edit- редактирование документов; ¾ View – изменение способов представления документа и скрытие / отображение элементов интерфейса; ¾ Insert – вставка объектов и их шаблонов (включая графику); ¾ Format – изменение формата объектов; ¾ Math – управление процессом вычислений; ¾ Graphics – работа с графическим редактором; ¾ Symbolic – выбор операции символьного процессора; ¾ Window – управление окнами системы; ¾ Help – работа со справочной базой данных о системе, центром ресурсов и электронными книгами. Меню MathCAD – контекстные. Это значит, что число позиций в них и их назначение зависят от состояния системы.
Панель инструментов Панель инструментов содержит несколько групп кнопок управления, каждая из которых дублирует наиболее важные команды меню. Кнопки операций с файлами. ¾ New (создать) – создание нового документа с очисткой окна редактирования; ¾ Open (открыть) – загрузка раннее созданного документа с выбором его файла из диалогового окна; ¾ Save (сохранить) – запись текущего документа с его текущим именем; Печать и контроль документов. ¾ Print (печать) – распечатка документа на принтере;
6
¾ Print Preview (просмотр) – предварительный просмотр документа; ¾ Check Spelling (проверка) – проверка орфографии в документе. Кнопки операций редактирования. ¾ Cut (вырезать) – перенос выделенной части документа в буфер обмена с очисткой этой части документа; ¾ Copy (копировать) – перенос выделенной части документа в буфер обмена с сохранением выделенной части документа; ¾ Paste (вставить) – перенос содержимого буфера обмена в окно редактирования на место, в котором находится курсор ввода. Кнопки размещения блоков. ¾ Align Across (выровнять по горизонтали) – блоки выравниваются по горизонтали; ¾ Align Down (выровнять вниз) – блоки выравниваются по вертикали, располагаясь сверху вниз. Кнопки операций с выражениями. ¾ Insert Function (вставить функцию) – вставить функцию из списка, появляющегося в диалоговом окне; ¾ Insert Unit (вставить единицу) – вставка размерных единиц; ¾ Calculate (пересчитать) – вычисление выделенного выражения; ¾ Insert Hyperlink (вставка гиперссылки) – обеспечивает создание гиперссылки; ¾ Component Wizard (Мастер компонентов) – открывает окно мастера, дающего удобный доступ ко всем компонентам системы; ¾ Run MathConnex (запуск системы MathConnex) – запуск системы для симулирования блочно заданных устройств. Кнопки управления ресурсами. ¾ Resource Center (центр ресурсов) – обеспечивает доступ к центру ресурсов; ¾ Help (справка) – обеспечивает доступ ресурсам справочной базы данных системы.
Панель форматирования Для выбора различных вариантов отображения текстовых блоков и символов служат три раскрывающихся списка: ¾ Style (стиль) – выбор стиля отображения текстовых блоков; ¾ Font (шрифт) – выбор шрифта для символов; ¾ Font Size (размер шрифта) – выбор размера шрифта. Для изменения начертания символов предназначены три кнопки: ¾ Bold (полужирный) – полужирное начертание; ¾ Italic (курсив) – наклонное начертание; ¾ Underline (подчеркнутый) – подчеркнутое начертание. Три следующие кнопки задают режим выравнивания текста: ¾ Align Left (по левому краю) – выравнивание текстов по левой границе; ¾ Align Center (по центру) – выравнивание текстов по центру; ¾ Align Right (по правому краю) – выравнивание текстов по правой границе.
7
Две последние кнопки предназначены для создания списков: ¾ Bullets (маркированный) – создание маркированного списка; ¾ Numbering (нумерованный) – создание нумерованного списка.
Палитры математических знаков Палитры математических знаков служат для вывода шаблонов математических операторов, функций системы и отдельных символов.
Рис.1 Палитры математических знаков
Центр информационных ресурсов Кнопка Resource Center открывает доступ к центру информационных ресурсов. Центр ресурсов – мощная база данных, объединяющая в себе встроенные в систему электронные книги, обучающую систему, справочную систему, многочисленные примеры применения – “шпаргалки”. В левой части главного окна центра ресурсов расположена группа небольших кнопок, дающих прямой доступ в Интернет. Также имеются три большие кнопки, открывающие доступ к следующим основным разделам центра: ¾ OVERVIEW and TUTORIALS – данные о новых возможностях MathCAD и доступ к электронному учебнику; ¾ QUICKSHEETS and REFERENCE TABLES – “быстрые шпаргалки” и справочные таблицы; ¾ EXTENDING MATHCAD – данные о расширениях системы.
Работа с текстовым редактором Для ввода текстового комментария необходимо выбрать команду Текстовая область из меню Вставка. В появившемся прямоугольнике можно вводить текст. В текстовом блоке курсор имеет вид красной вертикальной черты и отмечает место ввода. Текст редактируется
8
общепринятыми средствами – перемещением курсора ввода клавишами управления курсором, установкой режима вставки или замещения символов, стиранием (клавиши Del и Backspace), выделением, копированием в буфер, вставкой из буфера и т.д. Ограничимся простейшими правилами ввода текста. 1. Создайте текстовую область. 2. Семинарские занятия помощью раскрывающегося списка выбора шрифта на панели форматирования установите необходимый шрифт. 3. Начните посимвольно набирать текст, используя типовые средства текстового редактора (клавиши Пробел, Del, Backspace и т.д.). 4. Нажимайте клавишу Enter для перехода на новую строку (если этого не делать, переход на новую строку будет осуществляться автоматически). 5. Для завершения ввода текста отведите указатель мыши в сторону от текстового блока и щелкните левой кнопкой мыши.
Ввод математических выражений и работа с формульным редактором Фактически система MathCAD интегрирует в себе три редактора: формульный, текстовой и графический. Для запуска формульного редактора достаточно установить указатель мыши на любом свободным месте окна редактирования и щелкнуть левой кнопкой. Курсор ввода в виде маленького красного крестика окажется перенесенным на это место, с которого можно начинать набор формул – вычислительных блоков. В области формул он превращается в синий уголок, указывающий направление и место ввода. Его также можно перемещать клавишами перемещения курсора. Для расширения охваченной уголком области можно пользоваться клавишей Пробел.
Операции вывода и присваивания Для вычисления любого выражения достаточно установить после него оператор вывода (знак = ). Для ввода десятичных чисел в качестве разделителя целой и дробной части используется точка, а не запятая. Рассмотрим некоторые особенности работы MathCAD при выполнении простых вычислений: ¾ некоторые комбинированные операторы (например := ) вводятся одним символом (двоеточие : ); ¾ MathCAD вставляет пробелы до и после арифметических операторов; ¾ оператор умножения вводится знаком *, но представляется точкой в середине строки; ¾ оператор деления вводится знаком /, но заменяется горизонтальной чертой; ¾ оператор возведения в степень вводится знаком ^, но число в степени представляется в обычном виде (степень как верхний индекс); ¾ по умолчанию десятичные числа имеют представление с тремя знаками после разделительной точки;
9
¾ MathCAD идентифицирует наиболее распространенные константы, например e – основание натурального логарифма; ¾ математические выражения могут редактироваться внутри формульного блока с использованием для этого курсора ввода и типовых приемов редактирования.
Использование символов
шаблонов
математических
операторов
и
Подготовка вычислительных блоков облегчается благодаря выводу шаблонов при задании того или иного оператора. Для этого в MathCAD служат палитры математических знаков операторов и функций. В составе сложных шаблонов часто встречаются меньшие шаблоны для вывода отдельных данных. Рассмотрим процесс работы с шаблонами немного подробнее. После вывода шаблона он появляется с пустыми местами ввода. Для ввода данных можно установить указатель мыши на нужный шаблон данных, щелкнуть ее левой кнопкой для фиксации места ввода и ввести данные.
Вычисление математических функций MathCAD имеет множество встроенных элементарных, специальных и статистических функций. Для облегчения ввода математических функций служит кнопка f(x), которая выводит окно с полным перечнем функций, разбитым на тематические разделы. Выбранная выделением функция может быть перенесена в окно документа щелчком на кнопке внизу окна с перечнем функций. Функции имеют параметры, которые записываются в круглых скобках после имени функции. Функции могут иметь один (например sin(x)), два (например ln(m,x)) или даже несколько параметров. Параметры могут иметь численное значение, быть константой, определенной раннее переменной или математическим выражением, возвращающим численное значение.
Понятие о ранжированных переменных Ранжированные переменные имеют множественные значения. Например, если записать n:=1..5, то переменная n будет представлять целые числа от 1 до 5 с шагом 1, то есть значения 1,2,3,4 и 5. Доступ отдельно к каждому значению отсутствует. Если требуется задать ряд чисел с шагом d, то ранжированная переменная записывается следующим образом: X:=Xstart, d . . Xend Здесь Xstart – начальное значение переменной X, Xend – конечное значение переменной X. Например, X:=1, 1.25 . . 2 дает ранжированную переменную X со значениями 1, 1.25, 1.5 ,1.75 и 2.
10
Построение двумерного графика одной функции 1. 2. 3. 4. 5.
Рассмотрим пример построения графика функции sin(x)3. Введите функцию, набрав выражение sin(x)^3. На панели математических знаков щелкните на кнопке с изображением графика – на экране появится палитра графиков. В палитре графиков щелкните на кнопке с изображением двумерного графика – на экране появится шаблон графика с уже введенной по оси Y функцией. Введите в место ввода шаблона по оси X имя независимого аргумента –x. Щелкните вне пределов графика левой кнопкой мыши – график построен.
Построение графиков ряда функций Для того, чтобы в полученном графике отобразить еще две функции, например sin(x)2 и cos(x),их надо просто перечислить после первой функции у оси Y графика, отделяя выражения функций запятыми.
Ошибки и их виды Есть ошибки, в которых система MathCAD не повинна. Прежде всего это ошибки в записях алгоритмов пользователем. Другой распространенный вид ошибок – синтаксические ошибки, или, попросту говоря, неправильные записи операторов и функций. Особенно коварны в MathCAD ошибки, связанные с использованием индексов. Часто путается подстрочное написание символов в именах переменных с индексом массивов – векторов и матриц. Несоответствие типов переменных – еще один повод для многочисленных ошибок.
Редактирование в MathCAD 1. 2. 3.
1. 2. 3.
Выделение областей: Щёлкните мышью рядом с областями, которые нужно выделить. Это закрепит один угол выделяющего прямоугольника. Нажав и удерживая левую кнопку мыши, переместите мышь. Пунктирный выделяющий прямоугольник возникнет из закреплённой точки. Когда выделяющий прямоугольник достигнет всех требуемых областей, отпустите кнопку мыши. Каждая выделенная область окажется охваченной пунктирным выделяющим прямоугольником. Перемещение областей: Поместите указатель мыши над одной из областей, выделенной пунктирным прямоугольником. Указатель мыши изменит форму со стрелки на крестик. Нажав и удерживая левую кнопку мыши, переместите мышь. Контуры областей последуют за движением мыши. Когда контуры достигнут желаемого расположения, отпустите кнопку мыши.
11
1. 2. 3. 4. 1. 2. 1. 2. 3.
Копирование областей: Выделите области. Выберите команду Копировать из меню Правка, чтобы скопировать выделенные области в Буфер Обмена. Щелкните мышью там, куда нужно поместить копию областей. Убедитесь, что выбрано свободное место – курсор должен иметь форму визира. Выберите команду Вставить из меню Правка. Удаление областей: Выделите области. Выберите команду Удалить из меню Правка. Выравнивание областей: Выделите области. Выберите команду Выровнять Области из меню Формат. Задать направление выравнивания – По верхней или По левой границе.
Численные методы 1. Полином Лагранжа Согласно своему определению, формула полинома Лагранжа выглядит n
⎛
i =0
⎝
следующим образом: L( x) = ∑ y i ⋅ ⎜⎜ ∏ j ≠i
x − xj ⎞ ⎟ , где целочисленные индексы i и j xi − x j ⎟⎠
∈ 0..n, ( xi , y i ) - массив узловых точек, через который проходит интерполяционный полином Лагранжа, а переменная x является аргументом функции. Ниже будет показано, каким образом можно определить полином Лагранжа в математическом пакете «MathCAD 2001».
12 m := ORIGIN i := m .. n
n := 10 j := i
y i := sin ( xi )
xi := i
n
Lagr ( t ) := y m ⋅
∏ j
=
m+ 1
(t
n− 1
− xj)
+ yn ⋅
xm − xj
∏ j
=
m
(t
− xj )
xn − xj
n− 1
+
∑ i
= m+ 1
i− 1
yi ⋅
∏ j
=
m
(t
− xj )
xi − x j
n
⋅
∏ j
= i+ 1
(t
− xj )
xi − x j
1
Lagr ( t ) yi
0
1
0
5
10
t , xi
В данном примере используются встроенные средства работы с массивами элементов, такие как: суммирование, произведение элементов массива. Инструментальные средства системы «MathCAD 2001» не позволяют ввести формулу полинома Лагранжа в том виде, в каком она понимается математиками. Основная сложность заключается в накоплении произведения по индексу j, исключая случай, когда j не должно быть равно текущему значению i. Этим объясняется присутствие дополнительных слагаемых в самой вычислительной формуле. Поясним, что переменные m и n определяют размерность массива узловых точек. В «MathCAD 2001» системная переменная «ORIGIN» отвечает за нумерацию первого элемента массива. По умолчанию нумерация элементов массива начинается с 0. Далее, будем считать, что индекс i ответственен за суммирование в формуле полинома Лагранжа, а индекс j – за накопление элементов произведения. Как и любой другой программный пакет, «MathCAD 2001» позволяет достаточно разнообразно подходить к решению задач. Пример вычисления полинома Лагранжа является поучительным, поскольку необходимо корректное построение вычислительного алгоритма, использующего несколько вложенных циклов. Ниже приведен фрагмент документа «MathCAD 2001», использующего программный способ определения полинома Лагранжа.
13 m := ORIGIN i := m.. n
j := i i
( i)2
L( t) :=
l←0
x := i i
n := 10
y := x
Цикл суммирования
for i ∈ m.. n
Цикл произведения
p←1 for j ∈ m.. n
(t − xj) p←p⋅ (xi − xj)
if i ≠ j
Накопление суммы
l←l+ y ⋅p i
Накопление произведения по условию
l 100 L( t ) y
50
0
0
5
10
t,x
Фактически, в данном примере использован алгоритм, который можно реализовать на любом языке программирования. Возможно также использование интерполяционного полинома Лагранжа при построении параметрических кривых, но при этом необходимо учитывать, что за пределами области определения полином Лагранжа не отображает характерные особенности интерполируемой функции. Поэтому при использовании полинома Лагранжа как параметрической функции необходимо корректно определить область допустимых значений параметра. Ниже приведен пример с использованием полинома Лагранжа в качестве интерполирующей параметрической кривой. Узловые точки, через которые проходит параметрическая кривая, принадлежат окружности радиуса 1 и с центром в начале координат. В данной ситуации полином Лагранжа как функцию необходимо определить не только как функцию от параметра t, но и от массивов узловых точек X и Y. В качестве параметра используется переменная p. Массив узловых точек теперь определяется тремя массивами: X, Y и T.
14 m := ORIGIN i := m.. n x := i
n := 10 j := i
( i)
y := sin x
i
i
(t − xj) + y
n
Lagr( t , x, y ) := y ⋅ m
T := i ⋅ 2 i
x −x
j
j=m
i = m+ 1
i− 1
y ⋅ i
∏
j=m
(t − xj) ⋅ x −x i
j
n
∏
j = i+ 1
(t − xj x −x i
π n
( i)
X := cos T i
∏
j = m+ 1 m
t − x ) n−1 ( j ⋅ + ∑ n ∏ x −x n j n− 1
( i)
Y := sin T i
k := 0 .. 200
(
p := T + T − T k
0
n
) ⋅ 200 k
0
Lx( p ) := Lagr( p , T , X)
Ly( p ) := Lagr( p , T , Y)
2
Ly ( p k) Yi
0
2
2
0
Lx( p k) , Xi
2
2. Полином Эрмита Рассмотрим случай интерполяции массива узловых точек ( xi , yi ) сегментами полиномов третьей степени. Как показывает практическая работа с массивами точек, необходимо очень корректно работать с индексами массивов и каждый раз четко представлять себе, что означает каждый индекс и в каких пределах он меняется, а также установить зависимость между разными индексами. В данной ситуации мы рассматриваем случай, представленный на рисунке 2.
15 Y
X
X
0
X1
X i −1
Xi
X i +1
X
X
N −1
N
Рисунок 2. К индексации массива точек.
В данном случае массив Yi является функцией от массива X i , поэтому при построении составной кривой через узловые точки ( xi , yi ) мы будем моделировать не параметрическую, а функциональную зависимость y = y (x) . На отрезке [X i ; X i +1 ] полиномиальный сегмент можно представить в таком каноническом виде: Pi ( x) = aˆ i 0 + aˆ i1 ⋅ x + aˆ i 2 ⋅ x 2 + aˆ i 3 ⋅ x 3 . Но для целей, которые мы преследуем, такой вид кубического полинома усложнит вычисления. Для дальнейшей работы более предпочтительна следующая запись полинома: Pi ( x) = ai 0 + ai1 ⋅ ( x − xi ) + ai 2 ⋅ ( x − xi ) 2 + ai 3 ⋅ ( x − xi ) 3 . Следует понимать, что оба представления кубического полинома на данном отрезке абсолютно идентичны. Путем трудоемких арифметических преобразований всегда можно придти от одного вида к другому. Введем массив hi = X i +1 − X i , где i = 0..N − 1 . Тогда на отрезке [X i ; X i +1 ] полиномиальный i-тый сегмент Pi (x) можно представить в виде: 2
2
⎛h ⎞ ⎛h ⎞ h Pi ( x) = ai 0 + ai1 ⋅ ( x − xi ) ⋅ i + ai 2 ⋅ ( x − xi ) 2 ⋅ ⎜⎜ i ⎟⎟ + ai 3 ⋅ ( x − xi ) 3 ⋅ ⎜⎜ i ⎟⎟ . hi ⎝ hi ⎠ ⎝ hi ⎠ x полинома по Pi′( x) = ai1 + 2ai 2 ⋅ ( x − xi ) + 3ai 3 ⋅ ( x − xi ) . Рассмотрим значения полинома и его производной на концах отрезка [X i ; X i +1 ] , это позволит нам определить
Первая
производная
2
x = Xi
коэффициенты полинома:
Yi = ai 0 Yi′ = ai1
. Таким образом, все
x = X i +1 Yi′+1 = ai 0 + ai1 ⋅ hi + ai 2 ⋅ hi + ai 3 ⋅ hi 2
Yi′+1 = ai1 + 2ai 2 ⋅ hi + 3ai 3 ⋅ hi
3
2
коэффициенты полинома ai 0 , ai1 , ai 2 , ai 3 можно выразить через значения Yi , Yi +1 , Yi′, Yi′+1 . Подстановка значений коэффициентов позволяет преобразовать
16
формулу
полинома: Pi (u ) = Yi ⋅ (1 − 3u + 2u ) + Yi +1 ⋅ (3u − 2u ) + Yi′ ⋅ (u − 2u + u ) ⋅ hi + Yi′+1 ⋅ (−u + u ) ⋅ hi , где 2
u=
3
2
3
2
3
2
3
x − Xi . hi
Полином
Эрмита
принято
записывать
в
виде:
α 0 (u ) = 1 − 3u + 2u 3 2
Pi (u ) = α 0 (u ) ⋅ Yi + α 1 (u ) ⋅ Yi +1 + β 0 (u ) ⋅ Yi′ ⋅ hi + β 1 (u ) ⋅ Yi′+1 ⋅ hi , где
α 1 (u ) = 3u 2 − 2u 3 β 0 (u ) = u − 2u 2 + u 3
. В
β 1 (u ) = −u 2 + u 3
литературе функции α 0 ,α 1 , β 0 , β 1 также называются функциями смешения. Отметим некоторые особенности составных кривых, где отдельными сегментами являются интерполяционные полиномы Эрмита. Во-первых, при использовании полиномов Эрмита необходимо знать производные в узловых точках. Во-вторых, вид функции на каждом сегменте является оригинальным, что может затруднить теоретический анализ, когда необходим общий вид функции в символьном виде. В третьих, очень удобно пользоваться полиномами Эрмита при построении составных пространственных кривых. Ниже приведен фрагмент документа «MathCAD 2001», реализующий алгоритм построения полиномов Эрмита на массиве узловых точек при заданных производных. Отметим, что система «MathCAD 2001» позволяет достаточно тонко обходить ситуацию, когда вид функции зависит от сегмента и когда параметр u тоже изменяется при переходе от сегмента к сегменту. В данной программе определение параметра u как функции сегмента носит лишь демонстрационный характер, поскольку сам цикл построения полиномов Эрмита включает в себя это автоматически. ORIGIN:= 0
M := 5
i := 0 .. M
f ( t) := t
X := i
i
( i)
i
i+ 1
i
2
a0( v ) := 1 − 3v + 2v
3
( i)
pY := p X
h := X
i := 0 .. M − 1
Определение функций смешения
−X
i 2
a1( v ) := 3v − 2v
u←0 t−X
u
i
h
i
3
2
b0( v ) := v − 2v + v
3
2
b1( v ) := −v + v
3
Демонстрация зависимости параметра u от сегмента
for i ∈ 0 .. M − 1 u←
Определение массива узловых точек и производных
d p ( t) := f ( t) dt
Y := f X
i
u ( t) :=
2
if X ≤ t < X i
i+ 1
17 2 1 u( t ) 0 1
2
1
0
1
2
3
4
5
6
7
8
9
10
t
Ermit( t) :=
Определение функции, состоящей из полиномов Эрмита и построение ее графика
E← 0 for i ∈ 0 .. M − 1 if X ≤ t < X
i+ 1
i
t−X
i
z←
h
i
E ← Y ⋅ a0( z) + Y
i+ 1
i
⋅ a1( z) + pY ⋅ b0( z) ⋅ h + pY i
i
i+ 1
⋅ b1( z) ⋅ h
i
E
20 Ermit( t ) Yi
10
0
0
2
4 t , Xi
Небольшие изменения позволяют построить векторную функцию. Особенность состоит в построении полиномов Эрмита для каждой координаты в отдельности, в зависимости от параметра t. В данном случае построена винтовая линия. ORIGIN:= 0
M := 50
i := 0 .. M
T := i ⋅ i
2
a0( v ) := 1 − 3v + 2v x( t) := cos ( t) px( t) :=
d x( t) dt
( i) pX := px( T ) i i X := x T i
8π
k := 1
M
3
2
a1( v ) := 3v − 2v
y ( t) := sin ( t) py ( t) :=
d d y ( t) pz( t) := z( t) dt dt
( i)
( i)
Z := z T i
( i)
pY := py T i
2
b0( v ) := v − 2v + v
z( t) := k ⋅ t
Y := y T i
3
( i)
pZ := pz T i
3
2
b1( v ) := −v + v
3
18 Ermit( t , T , A , dA ) :=
E← 0 for i ∈ 0 .. M − 1 if T ≤ t ≤ T i
l ←T i
i+ 1
i+ 1
−T
t−T g←
i
i
l
i
E ← A ⋅ a0( g ) + A i
i+ 1
⋅ a1( g ) + dA ⋅ b0( g ) ⋅ l + dA i
i
i+ 1
⋅ b1( g ) ⋅ l
i
E ErX( t) := Ermit( t , T , X , pX)
ErY( t) := Ermit( t , T , Y , pY)
ErZ( t) := Ermit( t , T , Z , pZ )
⎛ ErX( t) ⎞ F( t) := ⎜ ErY( t) ⎟ ⎜ ⎟ ⎝ ErZ( t) ⎠
CreateSpace ( F , 0 , 8π , 200)
Если с помощью полиномов Эрмита строить пространственные кривые r r через точечный базис Ri , то формула отдельного сегмента Pi (t ) на отрезке r r r r [Ti ; Ti +1 ] выглядит: Pi (u ) = α 0 (u ) ⋅ Ri + α1 (u ) ⋅ Ri +1 + β 0 (u ) ⋅ Ri′ ⋅ hi + β 1 (u ) ⋅ Ri′+1 ⋅ hi , где hi = Ti +1 − Ti , u =
t − Ti . Векторный аппарат системы «MathCAD 2001» позволяет hi
в достаточно изящной форме определить составную пространственную кривую из полиномов Эрмита.
19 2
a0( v ) := 1 − 3v + 2v
3
2
a1( v ) := 3v − 2v
T := i ⋅ i
2
b0( v ) := v − 2v + v
3
2
b1( v ) := −v + v
3
⎛ d cos ( t) ⎞ ⎜ dt ⎟ ⎜ ⎟ d ⎜ sin ( t) ⎟ df ( t) := ⎜ dt ⎟ ⎜ ⎟ ⎜ dt ⎟ ⎝ dt ⎠
⎛ cos ( t) ⎞ f ( t) := ⎜ sin ( t) ⎟ ⎜ ⎟ ⎝ t ⎠ M := 50
3
i := 0 .. M 8π
( i)
R := f T i
M
( i)
dR := df T i
⎛0⎞ Ermit( t) := E ← ⎜ 0 ⎟ ⎜ ⎟ ⎝0⎠ for i ∈ 0 .. M − 1 if T ≤ t < T i
l ←T i
i+ 1
i+ 1
−T
t−T g←
i
i
l
i
E ← R ⋅ a0( g ) + R i
i+ 1
⋅ a1( g ) + dR ⋅ b0( g ) ⋅ l + dR i
i
i+ 1
⋅ b1( g ) ⋅ l
i
E
Вопрос о сокращении времени вычислений остается открытым, но математическая наглядность и логика векторного исчисления налицо. Естественно, данный аппарат позволяет также моделировать составные плоские параметрические кривые. Математический аппарат остается таким же, только используемые векторы будут иметь не три координаты, а две. Следует отметить, что при заданном массиве производных полиномы Эрмита обеспечивают только первый порядок гладкости. Для большей степени гладкости массив первых производных необходимо высчитывать другим способом, который подразумевает более низкий дефект сплайна. Одним из методов является метод прогонки. Он позволяет строить сплайны третьей
20
степени, дефекта 1. Для грубого приближения можно использовать метод разделенных разностей.
3. Кубический сплайн Согласно, выведенным в предыдущем параграфе формулам, при имеющемся массиве узловых точек X i , Yi , заданном массиве производных Yi′ в каждой точке, кубический полином Эрмита на отрезке [X i ; X i +1 ] записывается в следующем виде: Pi ( x) = α 0 (u ) ⋅ Yi + α 1 (u ) ⋅ Yi +1 + β 0 (u ) ⋅ Yi′ ⋅ hi + β 1 (u ) ⋅ Yi′+1 ⋅ hi ,
где
u=
x − Xi , hi
а
hi = X i +1 − X i .
Рассмотрим вопрос о вычислении массива производных Yi′ другим способом, чем применение метода разделенных разностей. В теории сплайнов существуют много методов для построения кусочно-гладких линий, где производные в узловых точках вычисляются по известным алгоритмам. Это и интегро-дифференциальные сплайны, и напряженные сплайны и много других методов. Естественно, что для вычисления производных Yi′ в узловых точках X i , Yi необходимы дополнительные условия. Таким условием может являться непрерывность второй производной в каждой узловой точке X i , Yi . Рассмотрим первую и вторую производные полинома Эрмита по переменной Pi′( x) = x:
Pi′′( x) =
α 0′
hi α 0′′ hi
2
Yi + Yi +
α 1′ hi
Yi +1 + β 0′Yi′ + β 1′Yi′+1
α 1′′ hi
2
Yi +1 +
β 0′′ hi
Yi′ +
β 1′′ hi
.
Производные
функций
смешения
Yi′+1
берутся уже по параметру u . В точке X i , Yi при расчете второй правой односторонней производной справа Pi′′( X i + 0) рассматривается полином Pi (x) , когда u = 0 . Левая односторонняя вторая производная Pi′′( X i − 0) получается из Pi −1 ( x) полинома, когда u = 1 . Требование непрерывности второй производной в узловых точках Pi′′( X i − 0) = Pi′′( X i + 0) после все вычислений приводит к следующему результату: ⎛
λ i Y i ′− 1 + 2 Y i ′ + μ i Y i ′+ 1 = 3 ⎜⎜ μ ⎝
λi =
i
Yi+1 − Yi Y − Yi−1 + λi i hi hi−1
⎞ ⎟⎟ , ⎠
где
hi hi −1 , μi = . hi + hi −1 hi + hi −1
Напомним, что массив точек X i , Yi имеет нумерацию i ∈ 0..M . Коэффициенты hi = X i +1 − X i вычисляются для значений индекса i ∈ 0..M − 1 . Коэффициенты λi = i ∈ 1..M − 1 .
hi hi −1 , μi = вычисляются для значений индекса hi + hi −1 hi + hi −1
Формула, вытекающая из условия непрерывности вторых производных действительна для узловых точек, соответствующих значениям
21
индекса i ∈ 1..M − 1 . Такое множество условий действительно необходимо при практической реализации алгоритмов построения сплайн-функций. Рассмотрим краевые условия первого рода, когда на крайних узловых точках X 0 , X M заданы первые производные f 0′, f M′ . Тогда для определения 2Y0′ + μ 0Y1′ = 2 f 0′ , откуда λ M YM′ −1 + 2YM′ = 2 f M′
коэффициентов μ 0 , λ M можем сделать следующее: следует
μ0 = 0 . λM = 0
Таким образом, мы имеем систему уравнений относительно первых производных в узловых точках с трехдиагональной матрицей ⎡2 ⎢λ ⎢ 1 ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣
коэффициентов:
μ0
0
2
μ1 0
0
λi
2
μi
⎤ ⎡ Y0′ ⎤ ⎡ c0 ⎤ ⎥ ⎢ Y′ ⎥ ⎢ c ⎥ ⎥ ⎢ 1 ⎥ ⎢ 1 ⎥ ⎥ ⎢ ⎥ ⎢ ⎥ ⎥ ⎢ ⎥ ⎢ ⎥ ⎥ • ⎢ Yi′ ⎥ = ⎢ ci ⎥ , ⎥ ⎢ ⎥ ⎢ ⎥ ⎥ ⎢ ⎥ ⎢ ⎥ μ M −1 ⎥ ⎢YM′ −1 ⎥ ⎢c M −1 ⎥ 2 ⎥⎦ ⎢⎣ YM′ ⎥⎦ ⎢⎣ c M ⎥⎦
0
0 λ M −1
2
λM
0
где
μ 0 = 0, c0 = 2 f 0′ hi = X i +1 − X i , i ∈ 0..M − 1
λi =
hi hi −1 , μi = , i ∈ 1..M − 1 hi −1 + hi hi −1 + hi
⎛μ ⎞ λ ci = 3⎜⎜ i (Yi +1 − Yi ) + i (Yi − Yi −1 )⎟⎟, hi −1 ⎝ hi ⎠ i ∈ 1..M − 1 λ M = 0, c M = 2 f M′
.
Рассмотрим краевые условия второго рода, когда на крайних узловых точках X 0 , X M заданы вторые производные f 0′′, f M′′ . Тогда мы можем сделать f 0′′ = P0′′( X 0 + 0) =
следующие вычисления:
6 h0
2
(Y1 − Y0 ) −
f M′′ = PM′′ −1 ( X M − 0) = −
Дальнейшие
преобразования
h 3 2Y0′ + Y1′ = (Y1 − Y0 ) − 0 f 0′′ h0 2
(YM − YM −1 ) + hM −1 f M′′ YM′ −1 + 2YM′ = hM −1 2 3
соотношения
для
μ 0 = 1, c0 =
массива: λ M = 1, c M
приводят .
Откуда
коэффициентов,
hM −1
(YM
− YM −1 ) +
(YM − YM −1 ) + hM −1 f M′′ = hM −1 2
.
2 hM −1
следующему
можно
получить
соответствующих
3 (Y1 − Y0 ) − h0 f 0′′ h0 2 3
к
6
2 (2Y0′ + Y1′) h0
(YM′ −1 + 2YM )
.
результату: следующие
крайним
точкам
22
Ниже приведен фрагмент документа «MathCAD 2001», реализующий алгоритм построения кубического сплайна с краевыми условиями первого рода. Отметим, что система уравнений относительно узловых первых производных решается матричным способом. ORIGIN:= 0
M := 10
2
a0( v ) := 1 − 3v + 2v i := 0 .. M
3
2
a1( v ) := 3v − 2v
f ( t) := t
2
X := i
h := X
i := 1 .. M − 1
μ i :=
h +h i
μ 0 := 0
λM := 0
i := 0 .. M
pY := A
−1
Ermit( t) :=
A
i , i− 1
i
i− 1
i, j
M
3
Y
i+ 1
h
−Y
i
Y −Y
i− 1 ⎞ ⎟
i
+ λi ⋅
h
i
i− 1
⎟ ⎠
:= 4 X
M
:= 0
:= λi
⎛ ⎜ ⎝
c := 3 ⋅ ⎜ μ i ⋅
λi := 1 − μ i
0
A
2
b1( v ) := −v + v
( i)
i
i
c := 0 c
j := 0 .. M
i := 1 .. M − 1
3
−X
i+ 1 h i− 1
i
2
b0( v ) := v − 2v + v
Y := f X
i
i := 0 .. M − 1
3
A A
i, i
i , i+ 1
:= 2 := μ i
A
0, 1
:= μ 0
A
M , M −1
:= λM
⋅c
E← 0 for i ∈ 0 .. M − 1 if X ≤ t < X
i+ 1
i
t−X z←
i
h
i
E ← Y ⋅ a0( z) + Y
i+ 1
i
⋅ a1( z) + pY ⋅ b0( z) ⋅ h + pY i
i
i+ 1
8
10
⋅ b1( z) ⋅ h
i
E 100
Ermit( t ) Yi
50
0
0
2
4
6 t , Xi
4. Метод прогонки Для решения линейных систем уравнений существует множество различных методов. Конечно, систему уравнений для значений первых производных с трехдиагональной матрицей коэффициентов, полученных в предыдущем параграфе можно решить матричным способом. Но специально
23
для такого случая разработан метод прогонки. Суть его заключается в следующем. Мы имеем следующую систему уравнений, записанную в таком ⎡a0 ⎢λ ⎢ 1 ⎢ ⎢ матричном виде: ⎢ ⎢ ⎢ ⎢ ⎢ ⎣
μ0
0
a2
μ1
0
0
λi
ai 0
μi
0
λ M −1 a M −1 0 λM
⎤ ⎡ P0 ⎤ ⎡ c0 ⎤ ⎥ ⎢ P ⎥ ⎢ c ⎥ ⎥ ⎢ 1 ⎥ ⎢ 1 ⎥ ⎥ ⎥ ⎢ ⎥ ⎢ ⎥ ⎥ ⎢ ⎥ ⎢ ⎥ • ⎢ Pi ⎥ = ⎢ ci ⎥ . Рассмотрим ⎥ ⎥ ⎢ ⎥ ⎢ ⎥ ⎥ ⎢ ⎥ ⎢ μ M −1 ⎥ ⎢ PM −1 ⎥ ⎢c M −1 ⎥ a M ⎥⎦ ⎢⎣ PM ⎥⎦ ⎢⎣ c M ⎥⎦
первое уравнение этой системы: a0 P0 + μ 0 P1 = c0 . Из него можно выразить P0 и подставить во второе уравнение системы. Таким образом, возможно из i-го уравнения системы исключить переменную Pi −1 , а переменную Pi выразить через Pi +1 . То есть можно составить следующую вычислительную схему: Pi −1 = k i −1 Pi + bi −1 . А также имеем: Pi = k i Pi +1 + bi . Рассмотрим уравнение системы: λi Pi −1 + ai Pi + μ i Pi +1 = ci . Подставив в него уравнение Pi −1 , получим следующее: Pi = − выражением ki = −
Pi = k i Pi +1 + bi ,
можем
μi λi k i −1 + ai
вывести
Pi +1 +
ci − λi bi −1 . Сравнивая с λi k i −1 + ai
следующие
соотношения:
μi
λi k i −1 + ai , где i ∈ 1..M − 1 . Анализируя первое уравнение системы, можно ci − λi bi −1 bi = λi k i −1 + ai μ0 k0 = −
сделать вывод, что
a0
c b0 = 0 a0
. Таким образом, составлена рекуррентная схема
для вычисления коэффициентов k i , bi . Данная последовательность вычислительных действий называется прямым ходом прогонки. Рассматривая предпоследнее уравнение системы, можно преобразовать его к виду PM −1 = k M −1 PM + bM −1 . Подставив его непосредственно в последнее уравнение системы, можно получит выражение для значения PM : PM =
c M − λ M bM −1 . λ M k M −1 + a M
Прогоночные коэффициенты k i , bi
нам известны. По
итерационной схеме Pi −1 = k i −1 Pi + bi −1 , где i ∈ M ..1 , мы можем найти весь вектор неизвестных Pi . Ниже представлен фрагмент документа «MathCAD 2001», в котором реализован метод прогонки для расчета первых производных в узловых точках с краевыми условиями второго рода.
24 ORIGIN:= 0
M := 10 d p ( t) := f ( t) dt
f ( t) := cos ( t) 2
a0( v ) := 1 − 3v + 2v i := 0 .. M
X := i
2
μ i :=
λM := 1
h +h
i
i
i− 1
c
−μ 0
0
a
b := 0
0
−μ i λi ⋅ k
i− 1
i− 1
⎛ ⎜ ⎝
3
:= k
i− 1
+a
a
2
b1( v ) := −v + v
3
c
⋅ pY + b i
M
i+ 1
h
:= 3 ⋅
−Y
i
i− 1 ⎞ ⎟
Y −Y i
+ λi ⋅
h
i
i− 1
⎟ ⎠
(YM − YM −1) + p2 X ⋅ hM − ( M) 2 h M −1
0 0
b := i
i
Y
c := 3 ⋅ ⎜ μ i ⋅
λi := 1 − μ i
0
k :=
i
Ermit( t) :=
2
b0( v ) := v − 2v + v
(Y1 − Y0) − p2 X ⋅ h0 ( 0) 2 h
0
a := 2
pY
3
i
i
c := 3
i := 1 .. M − 1 k := i := M .. 1
f ( t)
−X
i+ 1
i
i
i := 0 .. M
2
( i)
i
h
μ 0 := 1
dt
a1( v ) := 3v − 2v
h := X
i := 1 .. M − 1
2
Y := f X
i
i := 0 .. M − 1
3
d
p2( t) :=
c − λi ⋅ b i
λi ⋅ k
i− 1
i− 1
+a
c pY
i
M
:=
a
M
− λM ⋅ b
M
+ λM ⋅ k
M −1 M −1
i− 1
E← 0 for i ∈ 0 .. M − 1 if X ≤ t < X
i+ 1
i
t−X z←
i
h
i
E ← Y ⋅ a0( z) + Y
i+ 1
i
⋅ a1( z) + pY ⋅ b0( z) ⋅ h + pY i
i
i+ 1
⋅ b1( z) ⋅ h
i
E 2
Ermit( t ) Yi
0
2
0
2
4
6
8
10
t , Xi
5. Построение замкнутых кривых Рассмотрим вопрос о построении замкнутых кривых на заданном точечном базисе X i , Yi . В имеющемся точечном базисе должны совпадать начальная и конечная точки: X 0 = X M , Y0 = YM .
25 Y X 0 , Y0
X M , YM
X X i , Yi
Рис. 3 Построение замкнутых линий
Естественно предположить, что моделируемая замкнутая линия как r
⎧ x(t ) . Поскольку ⎩ y (t )
функция будет представлена в параметрическом виде: R(t ) = ⎨
мы моделируем составную функцию, то необходимо оговорить ее степень гладкости. В большинстве практических задач требуется гладкость второго порядка. При моделировании замкнутых линий это условие также должно соблюдаться. Первая rи вторая производные в начальной и конечной точке r r r должны быть равны: R0′ = RM′ , R0′′ = RM′′ . В дальнейшем, задача сводится к построению кусочно-гладкой функции по каждой координате в отдельности в зависимости от параметра t . X X i −1 X
Xi
X1 0
X i +1
X X
N
N −1
T
T0
T1
T i −1
Ti
T i +1
TN −1
TN
Рис.4 Покоординатное построение сплайна
Требование гладкости по первой и второй производной в узловых точках приводит к аналогичной итерационной схеме, что и при построении кубического сплайна. Требование равенства первой производной в начальной и конечной точках приводит к уравнению: X 0′ = X M′ . Аналогичное требование для второй производной P0′′(T0 + 0) = PM′′ −1 (TM − 0) приводит к уравнению:
26
2 X 0′ + X 1′ X M′ −1 + 2 X M′ Y −Y Y − YM −1 + =3 1 2 0 +3 M . 2 h0 hM −1 h0 hM −1
Другими
словами
мы
имеем
систему из M + 1 уравнений для M + 1 неизвестных X 0′ ,.., X M′ . Для i-го уравнения такой системы, где i ∈ 1..M − 1 , имеем: ⎛
λ i Y i ′− 1 + 2 Y i ′ + μ i Y i ′+ 1 = 3 ⎜⎜ μ ⎝
λi =
i
Yi+1 − Yi Y − Yi−1 + λi i hi hi−1
⎞ ⎟⎟ , ⎠
где
hi hi −1 , μi = . Напомним, что в данном случае hi = Ti +1 − Ti , где hi + hi −1 hi + hi −1
i ∈ 0..M − 1 . Матричная запись такой системы уравнений выглядит следующим −1 ⎤ 0 0 0 ⎡1 ′ ⎢λ ⎥ ⎡ X 0 ⎤ ⎡ c0 ⎤ μ 2 0 1 ⎢ 1 ⎥ ⎢ X 1′ ⎥ ⎢ c1 ⎥ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ λ μ 0 2 0 i i ⎢ ⎥ • X i′ = ci ⎥ . Значения образом: ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎢ ⎥ ⎢ ⎥ λ μ 0 2 ⎢ M −1 M −1 ⎥ X M′ −1 ⎥ ⎢c M −1 ⎥ ⎢ 1 1 2 ⎥ ⎢2 ⎢ X′ ⎥ ⎢ c ⎥ 0 0 ⎢h hM −1 hM −1 ⎥⎦ ⎣ M ⎦ ⎣ M ⎦ ⎣ 0 h0 c0 = 0
hi = Ti +1 − Ti , i ∈ 0..M − 1,
коэффициентов равны: λi =
hi hi −1 , μi = , i ∈ 1..M − 1, . Еще раз отметим, hi −1 + hi hi −1 + hi
⎛μ ⎞ λ ci = 3⎜⎜ i ( X i +1 − X i ) + i ( X i − X i −1 )⎟⎟, hi −1 ⎝ hi ⎠ X −X X − X M −1 cM = 3 1 2 0 + 3 M 2 h0 hM −1
что первое уравнение отражает равенство первых производных в концевых точках, а последнее уравнение системы удовлетворяет условию равенства вторых производных. Ниже приведен фрагмент документа «MathCAD 2001», который реализует построение замкнутой кусочно-гладкой кривой на массиве узловых точек принадлежащих линии, заданной уравнениями:
x(t ) = sin(2t ) , y (t ) = sin(3t )
где параметр t принадлежит отрезку [0;2π ] . В данном примере следует обратить внимание на поведение кривой в зависимости от числа узловых точек.
27 ORIGIN:= 0
M := 50 2
a0( v ) := 1 − 3v + 2v
3
2
a1( v ) := 3v − 2v
i := 0 .. M
T := i ⋅
i := 0 .. M − 1
h := T
i := 1 .. M − 1
μ i :=
2π
i
i
i
−T
h
h +h
j := 0 .. M
i := 1 .. M − 1 A A
0, 0
A
:= 1 A
M,0
:=
2 h
0, M
A
0
i := 0 .. M
:= 1
B
:=
0, 0
M,0
pX := A x( t ) :=
:=
2
1 h
h
0
−1
i, j
:= 2
i , i+ 1
⎛ ⎜ ⎝
i
i+ 1
h
:=
2 h
A
M −1
M,M
:=
1 h
c
B
i, i
B
M , M −1
0
−1
M −1
⎡ X1 − X0
M
if T ≤ t < T i
:= 2
B
i , i+ 1
⎛ ⎜ ⎝
d := 3 ⋅ ⎜ μ i ⋅
:= μ i
i
i+ 1
:=
2 h
B
M,M
M −1
:=
1 h
d
2
M
(
h
−X
M −1 ⎤
)
2
M −1
⎥ ⎥ ⎦
Y −Y + λi ⋅
M −1
⎡ Y1 − Y0
M
⎢ ⎣
i
i+ 1
i
⋅ a1( z) + pX ⋅ b0( z) ⋅ h + pX i
i
i+ 1
⋅ b1( z) ⋅ h
i
E E← 0 for i ∈ 0 .. M − 1 if T ≤ t < T
i+ 1
t−T
i
i
E ← Y ⋅ a0( z) + Y E
⎟ ⎠
i− 1
X +
i
:= 3 ⋅ ⎢
i
h
h
i
h
⋅d
E ← X ⋅ a0( z) + X
i
h
−Y
Y
i+ 1
t−T
i
( 0)
⎢ ⎣
E← 0
z←
i− 1 ⎞ ⎟
i
i
:= 3 ⋅ ⎢
for i ∈ 0 .. M − 1
y ( t) :=
X −X + λi ⋅
⎞ i− 1 ⎟
i
h
⎟ ⎠
i− 1
0
h
h
i
:= 0
pY := B
z←
−X
X
c := 3 ⋅ ⎜ μ i ⋅
d := 0
1
⋅c
i, i
M , M −1
:= λi
:= −1
M,1
A
A
B
:=
:= μ i
:= 0
0
i , i− 1
B
A
)
i
0
B 0, M
(
i
3
c := 0
j := 0 .. M
B
Y := sin 3 ⋅ T
2
b1( v ) := −v + v
λi := 1 − μ i
i, j
:= −1
)
i
3
i− 1
:= λi
i , i− 1
M,1
i := 1 .. M − 1 B
A
2
b0( v ) := v − 2v + v
i
i
i
i := 0 .. M
(
X := sin 2 ⋅ T
M
i+ 1
3
i+ 1
⋅ a1( z) + pY ⋅ b0( z) ⋅ h + pY i
i
i+ 1
⋅ b1( z) ⋅ h
i
( h 0)
2
Y +
M
M −1 ⎤
−Y
( h M − 1)
2
⎥ ⎥ ⎦
28
Координатные, кусочно-гладкие функции, в зависимости от параметра t График кусочно-гладкой замкнутой кривой и массив узловых точек
1
y ( t) 0
x( t )
1
0
5
Параметрическая кривая, заданная уравнениями x(t ) = sin( 2t )
10
y (t ) = sin(3t )
t 1
1
y ( t) Yi
sin( 3t )
0
1
1
0 x( t ) , X i
1
0
1
1
0
1
sin( 2t )
В данном случае нам была известна параметрическая функция, которой принадлежат узловые точки. В большинстве практических случаев, вид параметризации нам приходится выбирать самим. В дифференциальной геометрии существует такое понятие, как задание параметрической функции от ее естественного параметра. В качестве естественного параметра служит длина дуги от фиксированной точки на кривой. Но для такого характера параметризации необходимо знать уравнения функции от какого-либо другого параметра. Что в большинстве случаев практически невыполнимо. С некоторой степенью приближения вместо параметра длины дуги можно использовать накопленную длину хорд. Накопление длины хорд по сути своей означает создание массива Ti , который образуется по следующим правилам: T0 = 0, Ti = Ti −1 + ( X i − X i −1 )2 + (Yi − Yi −1 )2 , где i ∈ 1..M . Ниже приведен фрагмент документа «MathCAD 2001», реализующий построение замкнутой кривой на имеющемся точечном базисе. Данный алгоритм отличается от предыдущего только определением массива Ti , который теперь означает накопление длины хорд между узловыми точками. Следует обратить внимание на поведение координатных функций от параметра длины хорд. Оно несколько отличается от поведения тех функций, которым принадлежат узловые точки, что и следовало ожидать, так смысл параметра иной.
29 ORIGIN:= 0
M := 30 2
a0( v ) := 1 − 3v + 2v i := 0 .. M
2
i
i
T := T i
i := 0 .. M − 1
h := T
i := 1 .. M − 1
μ i :=
i
−T
i+ 1
h
h +h
j := 0 .. M
i := 1 .. M − 1 A
A
0, 0
:= 1 A
i , i− 1
0, M
A
i− 1
2
(
Y := sin 3 ⋅ G i
)
( Xi − Xi−1)2 + (Yi − Yi−1)2
+
λi := 1 − μ i
i− 1
:= λi A
i, i
:= 2
A
c := 0
A
0
j := 0 .. M
i := 1 .. M − 1 B
0, 0
:= 1
B
B
i, j
i , i− 1
B
0, M
i , i+ 1
M,0
:=
i
2 h
⎛ ⎜ ⎝
c := 3 ⋅ ⎜ μ i ⋅
:= μ i
A
0
M,1
:=
pX := A
−1
x( t) :=
B
i, i
:= −1 d := 0 B
:=
1 h
i+ 1
h A
0
−X
X −X
i
M , M −1
⎢ ⎣
pY := B
h
( h 0)
2
i , i+ 1
h
B
M,1
0
Y +
M
:=
−Y
i
1 h
⎛ ⎜ ⎝
B
M , M −1
0
:=
i+ 1
h
h
E
M −1
M,M
:=
2 h
M −1
1 h
B
M,M
M −1
M −1 ⎤
(hM −1)
2
⎥ ⎥ ⎦
i
i i+ 1
⋅ a1( z) + pX ⋅ b0( z) ⋅ h + pX i
i
i+ 1
Y −Y
⋅ b1( z) ⋅ h
i
:=
i− 1 ⎞ ⎟
i
+ λi ⋅
h
i
⋅d
E ← X ⋅ a0( z) + X i
A
i
i+ 1
t−T z←
⎟ ⎠
i− 1
−Y
Y
for i ∈ 0 .. M − 1 i
h 1
:=
E← 0 if T ≤ t < T
i− 1 ⎞ ⎟
i
+ λi ⋅
i
d := 3 ⋅ ⎜ μ i ⋅
:= μ i
B 2
⎡ Y1 − Y0
:= 3 ⋅ ⎢
−1
⋅c
:= 2
M,0
0
M
X
:= 0
:= λi
d
3
i
⎡ X1 − X0 XM − XM −1 ⎤ ⎥ c := 3 ⋅ ⎢ + M 2 ⎥ ⎢ (h )2 ( h M − 1) ⎦ 0 ⎣ i := 0 .. M
2
b1( v ) := −v + v
:= 0
i, j
:= −1
)
i
3
i
i− 1
i
i := 0 .. M
(
X := sin 2 ⋅ G
M
i := 1 .. M
0
3
a1( v ) := 3v − 2v b0( v ) := v − 2v + v
2π
G := i ⋅
T := 0
3
i− 1
2 h
M −1
⎟ ⎠
30 y ( t) :=
E← 0 for i ∈ 0 .. M − 1 if T ≤ t < T i
i+ 1
t−T z←
h
i
i
E ← Y ⋅ a0( z) + Y
i+ 1
i
⋅ a1( z) + pY ⋅ b0( z) ⋅ h + pY i
i
i+ 1
⋅ b1( z) ⋅ h
i
E 1
y ( t) 0
x( t )
1
0
5
10
15
20
t
N := 500
i := 0 .. N
p := T + i ⋅ i
0
(TM − T0) N
1
1
y ( p i) Yi
0
1
sin( 3t )
1
0
x( p i) , Xi
1
0
1
1
0
1
sin( 2t )
Обратите внимание как организовано изменение параметра по всему диапазону допустимых значений [T0 ; TM ] . В данном фрагменте приведены графики координатных функций от параметра накопленной длины хорд, кусочно-гладкая кривая, как результат интерполяции, массив узловых точек и непосредственно та кривая, которой принадлежат узловые точки. Она приведена только для сравнения с результатом моделирования.
31
Геометрическое моделирование 1. Прямые в пространстве Из курса аналитической геометрии известно, что прямую на плоскости можно задать уравнением: Ax + Bx + C = 0 . Если рассматривать прямую в трехмерном пространстве, то её уравнение есть: x − x1 y − y1 z − z1 , если она определена двумя точками = = x2 − x1 y2 − y1 z2 − z1
( x1 , y1 , z1 )
и
( x2 , y2 , z z ) . В плоском случае для прямой существует аналогичное уравнение: x − x1 y − y1 , которое можно преобразовать к виду: Ax + Bx + C = 0 . В = x2 − x1 y2 − y1
трехмерном же случае объединить в одном уравнении все три координаты не получится. Это можно объяснить следующим образом. В плоском случае, прямая является одномерным многообразием пространства размерности 2, в трехмерном случае она является одномерным многообразием пространства размерности 3. Но существует иное представление прямой, которое имеет один и тот же вид, независимо от размерности пространства. Согласно своему определению, прямая – это наикратчайшая линия, соединяющая две точки A и B . Положение любой точки на прямой l можно задать значением
r r ( B − A) r r параметра t : l (t ) = A + t * r r или l (t ) = A + t * n , где n – единичный вектор по B−A
направлению от точки A к точке B . Таким образом, мы задали прямую как функциональную r параметрическую зависимость. Вообще, вектор n не должен быть обязательно единичным. Но в этом случае параметр t не достаточно наглядно отображает размерность пространства, в котором расположена исследуемая прямая. Представление прямой как параметрической функции удобно для различных изысканий. Весьма удобно этим пользоваться при проведении математических исследований, связанных с компьютерной обработкой. Как правило, не возникает неожиданных ситуаций, когда прямая параллельна координатным осям или плоскостям. Для тех, кто имеет опыт работы с прямыми при компьютерной обработке, помнят, что часто приходилось искусственно исключать такие ситуации, чтобы избежать деления на 0,что вызывает сбой программ. Это возникает при использовании представления прямой: y = ax + b . Рассмотрим rнебольшой пример. Пусть заданы две прямые: r r r r r l1 (t ) = T1 + t * n1 , l2 (t ) = T2 + t * n2 , проходящие через точки T1 , T2 соответственно. Пусть точка P является точкой пересечения этих прямых. Поставим перед собой задачу найти точку P пересечения прямых l1 (t ) и l2 (t ) . Будет ошибкой r r r r сразу составить векторное уравнение: T1 + t * n1 = T2 + t * n2 . Дальнейшая обработка такого уравнения непременно приведет к ошибке. Пример на
32
r
r
рисунке показывает, что из точки T1 единичный вектор n1 откладывается два r r раза, а из точки T2 единичный вектор n 2 откладывается три раза до точки P пересечения. Это наводит на мысль, что в уравнениях l1 (t ) и l2 (t ) назначение параметра t совершенно разное. Другими словами для определения точки P пересечения прямых l1 и l 2 необходимо решить векторное уравнение: r r r r T1 + t1 * n1 = T2 + t 2 * n 2 .
T1
P
r n1
T2
r n2
Рис.5 Пересекающиеся прямые
Рассмотрим плоский случай, когда векторное уравнение распадается
r r r r T1x + t1 * n1x = T2 x + t 2 * n 2 x на систему из двух уравнений: r r r r (1) , решение которой T1 y + t1 * n1 y = T2 y + t 2 * n 2 y
позволяет определить и t1 , и t 2 . Если данная система не имеет решения, то это говорит о параллельности прямых или об их совпадении. В пространственном случае дело обстоит несколько сложнее. В пространстве прямые могут быть параллельны, пересекаться или скрещиваться. Конечно, можно анализировать исходные данные для установления взаимного расположения прямых. Но обратим внимание на следующее. Рассмотрим случай, когда l1 и l 2 скрещиваются. r P2 r n1
T1
T2
r n2
r P1
Рис.6 Скрещивающиеся прямые
Решим задачу о нахождении взаимного перпендикуляра P1 , P2 . Если точка P1 и точка P2 есть концы искомого отрезка, то они должны удовлетворять
33
r r r r l1 (t1 ) = T1 + t1 * n1 уравнениям прямых P . Поскольку отрезок r 1 − P2 r l 2 (t 2 ) = T2 + t 2 * n2 перпендикулярен обеим прямым, то имеем следующую систему уравнений: ( P2 − P1 ) * n1 = 0 (2) . Естественно, что это система из двух уравнений ( P2 − P1 ) * n2 = 0 относительно параметров t1 и t 2 . Во-первых, очевидно, что система (2) является однородной. Во-вторых, относительно разрешимости данной системы могут быть следующие варианты: система не имеет решения, система имеет единственное решение, система имеет бесконечное множество решений. ⎛1⎞ ⎛ 10 ⎞ ( B1 − A1) ⎜ ⎟ A1 := 1 B1 := ⎜ 10 ⎟ n1 := ⎜ ⎟ ⎜ ⎟ B1 − A1 ⎝1⎠ ⎝ 10 ⎠ ⎛2⎞ ⎛1⎞ ( B2 − A2) ⎜ ⎟ A2 := 1 B2 := ⎜ 15 ⎟ n2 := ⎜ ⎟ ⎜ ⎟ B2 − A2 ⎝4⎠ ⎝6⎠ t1 := 0
f1( t) := A1 + t⋅ n1
f2( t) := A2 + t⋅ n2
Line1 := CreateSpace ( f1, 0 , 10, 50)
Line2 := CreateSpace ( f2, −10, 10, 50)
t2 := 0
Given
( f1( t1) − f2( t2) ) ⋅ n1
0
( f1( t1) − f2( t2) ) ⋅ n2
0
⎛ 3.34 ⎞ ⎟ ⎝ 1.688 ⎠
S=⎜
S := Find( t1 , t2) t1 := S
0
t2 := S
1
P1 := f1( t1)
P2 := f2( t2)
Perpendicular := CreateSpace ( G, 0 , 1 , 20)
Line1, Line2, Perpendicular
G( t) := P1 + t⋅ ( P2 − P1)
34
2. Прямая и плоскость в пространстве Любую плоскость в пространстве можно задать точкой O и парой r r векторов n1 и n2 . в Параметрическое уравнение плоскости выглядит r r следующим образом: C = O + t1 * n1 + t 2 * n2 . Рассмотрим прямую, заданную в r r параметрическом виде: l (t ) = T + t * n .
k
l
Σ
C P
r n2 O
r n1
T
r n
Рис.7 Пересечение прямой и плоскости
Пусть прямая l пересекает плоскость Σ в точке P . Найдем эту точку P . Для этого проведем прямую k через точку O , принадлежащую плоскости Σ, и найдем общий перпендикуляр СP между прямыми l и k . Если точки P r r и C совпадают, т.е. P − C = 0 , то данную задачу можно решить двумя способами. Рассмотрим первый случай. По условию прямая k проходит через r r точку O . А так как вектор [n1 × n2 ] является нормалью к векторам n1 и n2, то r r r r (C − O) ⋅ [n1 × n2 ] = 0 . Далее, мы допустили, что CP перпендикулярен прямой l , r r r т.е. ( P − C ) ⋅ n = 0 . А так как мы стремимся к тому, чтобы точки P и C r r совпадали, то имеем P − C = 0 . Таким образом, мы получили систему r r ⎧(C − O) ⋅ [nr × nr ] = 0 ⎪⎪ r r r 1 2 )⋅n = 0 уравнений: ⎨(P − C . Отсюда при помощи элементарных r r ⎪ ⎪⎩ P − C = 0 преобразований можно найти точку C и параметр t . Рассмотрим второй случай. Он отличается лишь тем, что в нем мы r r r вместо перпендикулярности векторов ( P − C ) и n взяли условие, что
35
r r r векторы (C − T ) и n коллинеарные. А далее находим решение системы аналогично предыдущему случаю. Ниже приведен фрагмент документа «MathCAD 2001», который наглядно демонстрирует построение плоскости и пересекающей ее прямой. ⎛1⎞ ⎛5⎞ ⎛3⎞ P1 − O ⎜ ⎟ ⎜ ⎟ O := 2 P1 := 4 P2 := ⎜ 2 ⎟ n1 := ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ P1 − O ⎝3⎠ ⎝6⎠ ⎝3⎠
n2 :=
P2 − O P2 − O
Σ ( t1 , t2) := O + t1⋅ n1 + t2⋅ n2
Plane := CreateMesh ( Σ , −5 , 5 , −5 , 5 , 40, 40)
⎛ −1 ⎞ T := ⎜ 3 ⎟ ⎜ ⎟ ⎝6⎠
⎛2⎞ T1 := ⎜ 1 ⎟ ⎜ ⎟ ⎝1⎠
n :=
T1 − T T1 − T
L( t) := T + t⋅ n
Line := CreateSpace ( L, −5 , 15, 40)
( n1 × n2) ⋅ n = 0.12
Plane , Line Cлучай 1
⎛0⎞ v0 := ⎜ 0 ⎟ ⎜ ⎟ ⎝0⎠
C := v0 Given
h := 0 ( C − O) ⋅ ( n1 × n2) ( C − L( h ) ) ⋅ n C
S1 := Find( C, h )
0
0
L( h )
⎛ {3,1} ⎞ S1 = ⎜ ⎟ ⎝ 4.623 ⎠
V := S1
0
Cлучай 2
C := v0 Given
( C − O) ⋅ ( n1 × n2) ( C − T) × n
S2 := Find( C)
⎛ 1.25 ⎞ S2 = ⎜ 1.5 ⎟ ⎜ ⎟ ⎝ 2.25 ⎠
v0
0
⎛ 1.25 ⎞ V = ⎜ 1.5 ⎟ ⎜ ⎟ ⎝ 2.25 ⎠
36
3. Вращение вектора В процессе проектирования при помощи ЭВМ часто возникает необходимость описывать отдельные части проектируемого объекта, находящиеся в различных системах координат. Т.е. в базу данных компьютера необходимо ввести информацию, описывающую преобразование координат. Это делается для того, чтобы определить относительное положение и ориентацию частей объекта. Иногда возникают случаи, когда объект обладает той или иной симметрией. Тогда полное представление об объекте на основании симметрии можно получить при помощи вращений, сдвигов и отражений. Рассмотрим один из примеров преобразования координат: вращение r некоторого вектора n0 = BK относительно произвольной прямой AC , т.е. r r n0 ⋅ k = 0 .
r k
r n
A
N O r e1
С
B
r e3
r n0
ϕ
K
r e2
Рис.8 Поворот вектора вокруг заданной оси r Если вектор n 0 повернуть так, как показано на рисунке 8, то можно видеть,
что компонента BK при повороте на угол ϕ становится новой компонентой BN . Приведем теперь математическое обоснование данного действия. Для r r большей наглядности допустим, что векторы n 0 и n - единичные. Наряду с исходной системой координат O, e1 , e 2 , e3 зададим новую систему координат с началом в точке B . Ее единичные векторы h1 , h2 и h3 выразим следующим r r r n0 × k r образом: h1 = n 0 , h2 = r r , h3 = k . n0 × k
r
Определим координаты искомого вектора n в исходной системе координат O, e1 , e 2 , e3 относительно его координат в новой системе B, h1 , h2 , h3 . В силу единственностиr разложения вектора по базису получим: r r r r r r n = n1 ⋅ e1 + n 2 ⋅ e 2 + n3 ⋅ e3 = n1′ ⋅ h1 + n 2′ ⋅ h2 + n3′ ⋅ h3 . Выразим координаты n i через r r ni′ . Умножая вектор n скалярно сначала на единичный вектор e1 , а затем на
r r r r r r n1 = n1′ ⋅ h1 ⋅ e1 + n 2′ ⋅ h2 ⋅e 1 + n3′ ⋅ h3 ⋅ e1 r r r r r r r r r e 2 и на e3 , получили следующие выражения: n = n1′ ⋅ h1 ⋅ e 2 + n 2′ ⋅ h2 ⋅ e 2 + n3′ ⋅ h3 ⋅ e 2 . r r r r r r r n = n1′ ⋅ h1 ⋅ e3 + n 2′ ⋅ h2 ⋅ e3 + n3′ ⋅ h3 ⋅ e3 r r Т.е. получили: ni = ∑ n ′j ⋅ h j ⋅ ei . Отсюда следует, что матрица перехода A j
37
выглядит следующим образом: Ai , j
⎡ e1 ⎤ r r′ = ei ⋅ h j . Значит n = E ⋅ H ⋅ n , где E = ⎢⎢e 2 ⎥⎥ и ⎢⎣e3 ⎥⎦
⎡ h1 ⎤ r H = ⎢⎢h2 ⎥⎥ . Иначе говоря, вектор n выглядит следующим образом: ⎢⎣ h3 ⎥⎦ ⎡ h1 ⎤ ⎡cos ϕ ⎤ r ⎢ ⎥ n = ⎢h2 ⎥ ⋅ [e1 e2 e3 ]⋅ ⎢⎢ sin ϕ ⎥⎥ . Для того чтобы разрешить данную задачу, составим ⎢⎣ h3 ⎥⎦ ⎢⎣ 0 ⎥⎦
следующую систему уравнений. Мы рассматриваем вращение некоторого r r вектора вокруг произвольной оси, поэтому nr0 ⋅ k = 0 и nr ⋅ k = 0 , или что r r r равносильно [nr × nr0 ] × k = 0 . По условию, вектор n - единичный, а угол между r
r
[nr × nr0 ] × k = 0
r r векторами n 0 и n равен ϕ , т.е. nr ⋅ nr0 = cos ϕ . Отсюда имеем: nr ⋅ nr0 = cos ϕ . n =1
Произведя элементарные преобразования, не составляет особого труда вычислить координаты вектора n(n x , n y , n z ) . Как иллюстрацию проведенных выкладок, рассмотрим простой реальный пример построения центральной проекции эллипсоида в программной среде «MathCAD». В среде программирования «MathCAD 2001» операторы языка очень сильно похожи на язык математических формул. Поэтому этот документ можно считать иллюстрацией выше приведенных аналитических выражений. ⎛1⎞ ⎛0⎞ ⎛0⎞ ⎛ −5 ⎞ ⎛5⎞ ⎛2⎞ ⎛0⎞ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ e1 := 0 e2 := 1 e3 := 0 A := 5 C := 1 D := 1 B := ⎜ 0 ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎝0⎠ ⎝0⎠ ⎝1⎠ ⎝6⎠ ⎝1⎠ ⎝5⎠ ⎝0⎠ ⎛0⎞ ⎛ 1.454 ⎞ ⎜ ⎟ S = ⎜ 2.418 ⎟ Given ( D − B) ⋅ ( C − A ) 0 ( B − A ) × ( C − A ) 0 S := Find( B) ⎜ ⎟ ⎜ ⎟ ⎝0⎠ ⎝ 2.773 ⎠ ⎛ e1 ⎞ ⎛ h1 ⎞ D−S C−A h1 × h3 ⎜ ⎟ h1 := h3 := h2 := − E := e2 H := ⎜ h2 ⎟ ⎜ ⎟ ⎜ ⎟ D−S C−A h1 × h3 ⎝ e3 ⎠ ⎝ h3 ⎠ i := 0 .. 2
j := 0 .. 2
F
i, j
:= E ⋅ H i
j
⎛ cos ( t) ⎞
Nr( t) := ⎜ sin ( t)
⎜ ⎝ 0
⎟ ⎟ * ⎠
L( t) := A + t⋅ ( C − A )
N( t ) := F⋅ Nr( t) + S
Rot := CreateSpace ( N , 0 , 2π , 100)
Line := CreateSpace ( L, 0 , 1 , 100)
38
Rot , Line
При разработке систем технического зрения, возникает задача преобразования координат центральной проекции объекта при повороте плоскости изображения вокруг оптической оси устройства ввода графической информации. Другими словами, зафиксировав камеру в некоторой точке пространства, мы получаем изображение данного объекта. Это изображение далеко не всегда совпадает с изображениями эталонных объектов. Поэтому для нахождения наиболее оптимального изображения наблюдаемого объекта, приходится совершать вращение камеры вокруг своей оптической оси. С каждым этапом вращения устройства ввода изображения увеличивается возможность совпадения изображения данного объекта с эталонным. Если этого не происходит, то мы перемещаем камеру в другую точку пространства и также совершаем ее вращение.
4. Центральная проекция Рассмотрим вопрос о построении центральной проекции точки r r R( Rx , R y , Rz ) на заданную плоскость Σ . Центр проецирования С (С x , С y , С z ) также будем считать заданным.
Рис.9 Центральная проекция точки
Из всего многообразия способов задания плоскостей в пространстве, для решения рассматриваемых нами задач выберем, когда плоскость Σ r r r определяется точкой O(Ox , O y , Oz ) и двумя векторами n1 и n2 (Рис.9). Если решение данной задачи искать в наиболее общем виде, то взаимное
39
r r расположение векторов n1 и n2 не имеет значения. Будем считать, что эти r векторы являются единичными и ортогональными. Если точка Ri - есть r центральная проекция точки R на плоскость Σ , то она должна удовлетворять уравнению плоскости, а также условию коллинеарности с прямой, r r соединяющей точки C и R . Таким образом, можно составить систему r уравнений, позволяющую найти центральную проекцию точки R на r r r r ⎧⎪( Ri − O) ⋅ [n1 × n2 ] = 0 r плоскость Σ : ⎨ r (1) r r r r , где o - есть нулевой вектор. ⎪⎩( Ri − C ) × ( R − C ) = o r r Рассмотрим поверхность, заданную в параметрическом виде R = R (u , v) .
Рис.10 Центральная проекция поверхности
Для выполнения центральной проекции поверхности необходимо построить r касательную коническую поверхность с вершиной в точке C и найти r линию r ее пересечения с плоскостью Σ (рис.10). Если точка поверхности R = R (u , v) принадлежит также и касательной конической поверхности, то она должна r r r r удовлетворять уравнению: ( R − C ) ⋅ Ru × Rv = 0 . Данное уравнение устанавливает связь между параметрами u и v , которая определяет линию касания поверхностей. Добавив в систему уравнений (1) еще одно уравнение, получим систему, которая позволяет построить контур центральной проекции пространственного объекта на заданную плоскость Σ : r r r r ⎧( Ri − O) ⋅ [n1 × n2 ] = 0 r r r r r ⎪⎪ r ⎨( Ri − C ) × ( R − C ) = o , где R является в данном случае точкой, r ⎪ r r r ⎪⎩( R − C ) ⋅ Ru × Rv = 0 r r принадлежащей поверхности R = R (u , v) . Из первых двух уравнений системы r r r r r можно явно выразить Ri . Используя тот факт, что векторы Ri − C и R − C отличаются на масштабный множитель, получим: r r только r r r (O − C ) ⋅ [n × n ] r r r Ri = C + r r r1 r 2 ⋅ ( R − C ) . Отметим, что уравнение контура плоской ( R − C ) ⋅ [n1 × n2 ] проекции пространственного объекта, записаны в трехмерной пространственной системе координат. Желательно иметь уравнения r проекции Ri в системе координат, заданной на плоскости Σ . В качестве
[
[
]
]
40
r начала координат на плоскости Σ можно использовать точку O (Ox , O y , Oz ) , а r r координатные оси задать векторами n1 и n2 . Тогда можно преобразовать r уравнения проекции Ri в систему координат на плоскости Σ следующим r r r ⎧⎪ x = ( Ri − O) ⋅ n1 образом: ⎨ r r . r ⎪⎩ y = ( Ri − O) ⋅ n2 Как иллюстрацию проведенных выкладок, рассмотрим простой реальный пример построения центральной проекции эллипсоида в программной среде «MathCAD». В среде программирования «MathCAD 2001» операторы языка очень сильно похожи на язык математических формул. Поэтому этот документ можно считать иллюстрацией выше приведенных аналитических выражений.
41
Получить решение аналитически далеко не всегда возможно. В данном примере основная трудность заключается в следующем: уравнение, связывающее воедино параметры u , v на линии касания конуса и поверхности, если и разрешимо, то в очень частном случае. Даже на простом примере эллипса мы убедились, что приходится учитывать различные условия, связанные с уравнением поверхности объекта и характером выбранной параметризации. Но заметим, что при разработке разнообразных алгоритмов построения центральных проекций пространственных объектов, математическая сущность поставленной задачи не меняется, поэтому можно утверждать, что рассмотренные в данной работе аналитические выражения будут непременно использоваться, в той или иной форме. При использовании в алгоритмах распознавания пространственных объектов, предполагается наличие базы данных, в которую эталонные объекты будут занесены в виде точечного каркаса. В этом случае, аналитическое построение линии касания конической и исследуемой поверхностей практически невыполнимо из-за трудоемкости вычислений, но теоретически возможность существует. Если поверхность исследуемого объекта является кусочно-гладкой и состоит из порций поверхности по
42
Кунсу, то для отдельно взятого сегмента всегда можно разработать алгоритм построения искомой линии касания. Поэтому алгоритм построения центральной проекции пространственного объекта в дальнейшем будет адаптирован именно к такой ситуации, когда его поверхность является кусочно-гладкой, состоящей из порций поверхности по Кунсу.
43
Лабораторный практикум Лабораторная работа № 1 «Полином Лагранжа» Цель работы: Использование интерполяционного полинома Лагранжа при построении параметрических кривых. Задание к работе Дан массив узловых точек, через который проходит интерполяционный полином Лагранжа. Необходимо построить параметрическую кривую, проходящую через эти точки. Варианты индивидуальных заданий I.
Определить полином Лагранжа, используя формулу: ⎛1 3 4 5 10 ⎞ ⎟⎟ ⎝2 4 7 8 2⎠
4. ⎜⎜
⎛ −1 0 2 4 7 ⎞ ⎟⎟ ⎝ 8 − 7 5 8 − 3⎠
5. ⎜⎜
⎛ 8 40 45 89 112 ⎞ ⎟⎟ ⎝ 41 63 65 7 15 ⎠
6. ⎜⎜
1. ⎜⎜
2. ⎜⎜
3. ⎜⎜ II.
⎛15 27 39 44 47 ⎞ ⎟⎟ ⎝ 3 7 15 2 19 ⎠ ⎛ 2 13 26 43 51⎞ ⎟⎟ ⎝ 19 7 12 10 6 ⎠
Определить полином Лагранжа, используя программный способ: ⎛ 1 3 5 9 13 ⎞ ⎟⎟ ⎝ 2 4 7 2 − 3⎠
10. ⎜⎜
⎛ 7 11 13 19 22 ⎞ ⎟⎟ ⎝ 6 3 4 6 3 ⎠
11. ⎜⎜
⎛ 31 54 102 162 185 ⎞ ⎟⎟ ⎝ 0 12 1 16 43 ⎠
12. ⎜⎜
7. ⎜⎜ 8. ⎜⎜
9. ⎜⎜ III.
⎛1 9 15 39 46 ⎞ ⎟⎟ ⎝ 11 2 7 10 15 ⎠
Определить полином Лагранжа, параметрической кривой: ⎛ −6 0 3 4 6 ⎞ ⎟⎟ ⎝ 0 − 7 6 − 5 3⎠
13. ⎜⎜
⎛ 7 17 22 35 45 ⎞ ⎟⎟ ⎝ 2 6 − 3 −1 1 ⎠ ⎛ 26 38 57 88 120 ⎞ ⎟⎟ ⎝ 3 8 13 11 5 ⎠ ⎛15 31 39 56 63 ⎞ ⎟⎟ ⎝ 3 9 0 −8 − 4 ⎠
используя
его
в
⎛ 2 3 4.5 5 7 ⎞ ⎟⎟ ⎝ − 4 2 0 6 − 6⎠
14. ⎜⎜
качестве
44
⎛ 68 82 117 147 162 ⎞ ⎟⎟ ⎝ 60 62 78 4 103 ⎠
18. ⎜⎜
⎛19 27 34 50 73 ⎞ ⎟⎟ ⎝ 2 11 7 5 9 ⎠
⎛ 38 55 72 113 123 ⎞ ⎟⎟ ⎝ 29 17 12 − 3 5 ⎠
19. ⎜⎜
⎛ − 1 4 6 12 15 ⎞ ⎟⎟ ⎝ 5 8 −6 8 7 ⎠
20. ⎜⎜
15. ⎜⎜
⎛ − 1 2 6 11 15 ⎞ ⎟⎟ ⎝ 10 1 11 13 4 ⎠
16. ⎜⎜
⎛ 8 17 30 48 55 ⎞ ⎟⎟ ⎝ 3 0 1 6 4 ⎠
17. ⎜⎜
Варианты индивидуальных заданий для лабораторных работ № 2-4 1.
2. 1
2
3. 1
3
2
3
1
2
3
1
-0.871
-0.44
0.628
1
-0.871 -0.057
0.628
1
-0.871 -0.967
0.628
2
-0.993
0.718
1.257
2
-0.993 -0.633
1.257
2
-0.993
0.057
1.257
3
-0.736
0.884
1.885
3
-0.736 -0.967
1.885
3
-0.736
0.932
1.885
4
-0.198 -0.172
-0.198 -0.932
2.513
4
-0.198 -0.633
2.513
2.513
4
K= 5
0.416
-0.99
3.142
K= 5
0.416
-0.54
3.142
6
0.871
-0.44
3.77
6
0.871
0.057
7
0.993
0.718
4.398
7
0.993
0.633
K=
5
0.416
-0.54
3.142
3.77
6
0.871
0.967
3.77
4.398
7
0.993 -0.057
4.398
0.736 -0.932
5.027
8
0.736
0.884
5.027
8
0.736
0.967
5.027
8
9
0.198 -0.172
5.655
9
0.198
0.932
5.655
9
0.198
0.633
5.655
-0.99
6.283
10 -0.416
0.54
6.283
10 -0.416
0.54
6.283
1
2
3
1
0.809
0.588
0.628
2
0.309
0.951
1.257
2
3
-0.309
0.951
1.885
4
-0.809
0.588
K= 5
-1
10 -0.416
4.
5.
6. 1
2
3
1
2
3
0.628
1
0.809
0.203
0.628
0.294
1.257
2
0.309
0.86
1.257
3
-0.309 -0.294
1.885
3
-0.309
0.86
1.885
2.513
4
-0.809 -0.476
2.513
4
-0.809
0.203
2.513
0
3.142
K= 5
-1
0
3.142
K= 5
-1
0
3.142
6
-0.809 -0.588
3.77
6
-0.809
0.476
3.77
6
-0.809 -0.203
3.77
7
-0.309 -0.951
4.398
7
-0.309
0.294
4.398
7
-0.309
-0.86
4.398
8
0.309 -0.951
5.027
8
0.309 -0.294
5.027
8
0.309
-0.86
5.027
9
0.809 -0.588
5.655
9
0.809 -0.476
5.655
9
0.809 -0.203
5.655
6.283
10
6.283
10
10
1
0
1
0.809 0.309
1
0.476
0
1
0
6.283
7.
8. 1
2
9.
3
1
2
3
1
2
3
1
0.809
0.588
1.874
1
0.809
0.809
0.335
1
0.809
0.588
0.628
2
0.309
0.951
3.514
2
0.309
0.309
0.358
2
0.309
0.951
1.257
3
-0.309
0.951
6.586
3 -0.309 -0.309
0.286
3
-0.309
0.951
1.885
4
-0.809
0.588 12.345
0.204
4
-0.809
0.588
2.513
K= 5
-1
0 23.141
-1
0.136
K= 5
-1
0
3.142
6
-0.809
-0.588 43.376
6 -0.809 -0.809
0.087
6
-0.809 -0.588
3.77
7
-0.309
-0.951 81.307
7 -0.309 -0.309
0.054
7
-0.309 -0.951
4.398
8
0.309
-0.951 152.406
8
0.309
0.309
0.033
8
0.309 -0.951
5.027
9
0.809
-0.588 285.678
9
0.809
0.809
0.02
9
0.809 -0.588
5.655
10
1
0 535.492
0.012
10
10.
4 -0.809 -0.809
K= 5
-1
10
1
1
11. 1
2
1
0
6.283
12.
3
1
2
3
1
2
3
1
0.248
0.588
0.628
1
0.041
0.191
0.628
1
1.191
4.392
0.628
2
1.984
0.951
1.257
2
0.306
0.691
1.257
2
-4.163
-3.302
1.257
3
6.697
0.951
1.885
3
0.934
1.309
1.885
3
2.309
-1.4
1.885
4 15.875
0.588
2.513
4
1.925
1.809
2.513
4
3.663
3.216
2.513
K = 5 31.006
0
3.142
K= 5
3.142
2
3.142
K= 5
-7
0
3.142
6 53.579 -0.588
3.77
6
4.358
1.809
3.77
6
3.663
-3.216
3.77
7 85.081 -0.951
4.398
7
5.349
1.309
4.398
7
2.309
1.4
4.398
8 127.002 -0.951
5.027
8
5.978
0.691
5.027
8
-4.163
3.302
5.027
9 180.829 -0.588
5.655
9
6.243
0.191
5.655
9
1.191
-4.392
5.655
1 9·10 -15
6.283
10 248.05
0
6.283
13.
10 6.283
0
6.283
14. 1
2
10
15.
3
1
2
3
1
2
3
1
1.178 0.079
0.628
1
1.133
0.059
0.628
1
1.545
0.951
0.628
2
1.504 0.563
1.257
2
1.368
0.406
1.257
2
-0.809
2.939
1.257
3
1.484 1.534
1.885
3
1.357
1.059
1.885
3
-4.045
-0.588
1.885
4
0.668 2.621
2.513
4
0.868
1.72
2.513
4
0.309
-1 3.142
3.142
K= 5
0
2
3.142
K= 5
-4.755 5 7·10 -15
2.513
K= 5
6 -3.025 2.462
3.77
6 -0.868
1.72
3.77
6
0.309
4.755
3.77
7 -4.492 0.408
4.398
7 -1.357
1.059
4.398
7
-4.045
0.588
4.398
8 -4.472 -2.504
5.027
8 -1.368
0.406
5.027
8
-0.809
-2.939
5.027
9 -2.515 -5.163
5.655
9 -1.133
0.059
5.655
9
1.545
-0.951
5.655
1 -6.283
6.283
10
0
6.283
10
1
0
6.283
10
-1
3.142
46
16.
17. 1
2
18. 1
3
2
1
3
2
3
-3 0.001 2.87 87·10
0.628
1
1.191
2.041
0.628
1
1.874
0.588
0.395
1
2
-4.163
0.502
1.257
2
3.514
0.951
1.579
2
2.496
0.07
1.257
3
2.309
-5.204
1.885
3
6.586
0.951
3.553
3
1.927
0.225
1.885
4
3.663
5.568
2.513
4 12.345
0.588
6.317
4
1.234
0.492
2.513
3.142
K = 5 23.141
9.87
K= 5
0.5
0.866
3.142
3.77
6 43.376
-0.588 14.212
6
-0.191
1.314
3.77
-0.951 19.344
7
-0.769
1.781
4.398
K= 5 6
-739·10 -15 3.663
-5.568
0
7
2.309
5.204
4.398
7 81.307
8
-4.163
-0.502
5.027
8 152.406
-0.951 25.266
8
-1.187
2.197
5.027
9
1.191
-2.041
5.655
9 285.678
-0.588 31.978
9
-1.427
2.49
5.655
10
1
0
6.283
10 535.492
0 39.478
10
-1.5
2.598
6.283
2
3
19.
20. 1
2
3
1
1.309
2.127
0.628
2
1.427
2.49
1.257
21. 1
0
1
2
0
0.345
0.476
0.809
1
1
0.905
0.294
0.309
2
0.379
0.03
1.257
-0.193
0.094
1.885
-0.684
0.203
2.513
K= 5 -0.927
0.354
3.142
0.83 28·10 -3
0.628
0.191
1.314
1.885
2
0.905 -0.294 -0.309
3
4 -1.927
0.225
2.513
3
0.345 -0.476 -0.809
4
0
3.142
K= 4
0
6 -1.927 -0.225
3.77
5
0.345
0.476 -0.809
6
-0.845
0.53
3.77
0.191 -1.314
4.398
6
0.905
0.294 -0.309
7
-0.479
0.707
4.398
0.03
0.86
5.027
3
K= 5 7
-3
0
-1
8
1.427
-2.49
5.027
7
0.905 -0.294
0.309
8
9
1.309 -2.127
5.655
8
0.345 -0.476
0.809
9
0.493
0.964
5.655
6.283
9
1
10
0.75
1
6.283
10
1
0
0
0
Лабораторная работа № 2 «Полином Эрмита» Цель работы: Использование полинома Эрмита для построения составных кривых. Задание к работе Интерполировать массив узловых точек сегментами полиномов третьей степени. Для вариантов заданий № 1 – 7: построить полином Эрмита на массиве узловых точек при заданных производных; Для вариантов заданий № 8 – 14: используя полином Эрмита, построить векторную функцию; Для вариантов заданий № 15 – 21: построить с помощью полинома Эрмита составную пространственную кривую.
47
Лабораторная работа № 3 «Кубический сплайн» Цель работы: Использование полинома Эрмита для построения составных кривых. Задание к работе (для всех вариантов) Реализовать алгоритм построения кубического сплайна с краевыми условиями первого рода.
Лабораторная работа № 4 «Метод прогонки» Цель работы: Решить систему уравнений для значений первых производных с трехдиагональной матрицей коэффициентов методом прогонки. Задание к работе (для всех вариантов) Реализовать метод прогонки для расчета первых производных в узловых точках с краевыми условиями второго рода.
Лабораторная работа № 5 «Построение замкнутой прямой» Цель работы: Построение кусочно-гладкой функции на массиве узловых точек в зависимости от параметра t . Для вариантов заданий № 1 – 5: построить замкнутую кусочногладкую кривую на массиве узловых точек принадлежащих линии, заданной двумя уравнениями. Для вариантов заданий № 6 – 10: построить замкнутую кусочногладкую кривую на имеющемся точечном базисе, причем параметр Ti означает накопление длины хорд между узловыми точками. Варианты индивидуальных заданий 1. 2.
x(t ) = sin(2t ) , где t ∈ [0;2π ] ; y (t ) = sin(3t ) x(t ) = cos(t ) y (t ) = sin(2t )
, где t ∈ [− π ;π ] ;
6. 7.
x(t ) = sin( 2t ) , где t ∈ [− 2π ;2π ]; y (t ) = sin(3t ) x(t ) = sin(2t ) y (t ) = cos(3t )
, где t ∈ [0;4π ] ;
3.
x(t ) = cos(3t ) , где t ∈ [0;2π ] ; y (t ) = sin(t )
8.
x(t ) = cos(2t ) , где t ∈ [0;2π ] ; y (t ) = cos(3t )
4.
x(t ) = sin(2t ) , где t ∈ [0;2π ] ; y (t ) = cos(3t )
9.
x(t ) = sin( 2t ) , где t ∈ [− π ;π ] ; y (t ) = sin(3t )
5.
x(t ) = cos(t ) y (t ) = cos(t )
, где t ∈ [− 3π ;3π ] ;
10.
x(t ) = cos(5t ) y (t ) = sin(t )
, где t ∈ [0;2π ] .
48
Лабораторная работа № 6 «Прямые в пространстве» Цель работы: Построение прямых, представленных в виде параметрических функций, в пространстве. Задание к работе Установить взаимное расположение двух прямых l1 (A1 , B1 ) и l 2 (A 2 , B 2 ) , заданных через две точки, и в зависимости от разрешимости данной системы уравнений найти наикратчайшее расстояние (взаимный перпендикуляр) между ними. Варианты индивидуальных заданий 1. A1 (4,−3,0) , B1 (4,−3,0) и A 2 (2,3,4) , B 2 (5,8,14) ; 2. A1 (1,3,4) , B1 (2,4,7 ) и A 2 (− 1,0,2) , B 2 (8,−7,5) ; 3. A1 (5,3,10) , B1 (5,1,1) и A 2 (9,6,0) , B 2 (− 3,8,−2) ; 4. A1 (1,9,5) , B1 (11,2,7 ) и A 2 (5,4,9) , B 2 (3,2,7 ) ; 5. A1 (− 6,0,3) , B1 (0,−7,−5) и A 2 (2,3,4) , B 2 (− 4,2,0) ; 6. A1 (− 1,2,6) , B1 (10,1,11) и A 2 (4,6,12) , B 2 (8,7,6 ) ; 7. A1 (1,3,5) , B1 (2,2,−3) и A 2 (7,11,13) , B 2 (6,3,4) ; 8. A1 (4,8,5) , B1 (11,7,2) и A 2 (5,7,9 ) , B 2 (3,0,8) ; 9. A1 (6,12,15) , B1 (− 6,8,7 ) и A 2 (2,13,23) , B 2 (12,−3,3) ; 10. A1 (8,2,17 ) , B1 (0,−2,8) и A 2 (6,5,12) , B 2 (9,3,4 ) .
Лабораторная работа № 7 «Прямая и плоскость в пространстве» Цель работы: Построение прямой и плоскости, заданных в параметрическом виде. Задание к работе Установить взаимное расположение прямой l(A, B) и плоскости π(O, P1 , P2 ) в пространстве, т.е. найти их точку пересечения. Варианты индивидуальных заданий 1. A(0,4,0) , B(4,0,4) и O(3,3,3) , P1 (2,−4,0 ) , P2 (7,3,4) ; 2. A(− 2,7,−4) , B(2,10,−3) и O(5,2,0) , P1 (5,3,0) , P2 (5,1,5) ; 3. A(0,2,1) , B(− 3,−1,−2) и O(1,3,2) , P1 (4,1,−1) , P2 (0,−3,−2) ; 4. A(1,2,3) , B(7,6,2) и O(− 2,0,2 ) , P1 (0,−3,−1) , P2 (− 4,0,1) ;
49
5. A(2,−1,0) , B(5,−3,−1) и O(0,0,3) , P1 (− 2,−2,−2) , P2 (1,9,4 ) ; 6. A(− 7,2,7 ) , B(2,1,7 ) и O(− 1,2,1) , P1 (0,1,−6) , P2 (− 2,0,6) ; 7. A(2,−3,0) , B(− 1,0,1) и O(− 3,0,−3) , P1 (1,2,3) , P2 (− 1,4,−1) ; 8. A(0,−3,2) , B(− 3,4,−5) и O(0,2,4) , P1 (2,−7,−1) , P2 (5,9,−4) ; 9. A(2,14,−18) , B(10,−8,8) и O(− 9,6,12) , P1 (23,0,16 ) , P2 (3,−9,−12) ; 10. A(− 7,−4,5) , B(0,2,5) и O(6,8,−7 ) , P1 (15,−4,−5) , P2 (12,−3,4 ) .
Лабораторная работа № 8 «Вращение вектора» Цель работы: Построение центральной проекции эллипсоида, образованного вращением вектора. Задание к работе Реализовать алгоритм построения вектора, полученного вращением исходного вектора вокруг произвольной оси. Варианты индивидуальных заданий Дана прямая AC и вектор BD , причем точка B∈ AC . 1. A(3,4,2) , B(4,0,−2 ) и D(5,2,3) ; 2. A(2,0,2) , B(2,3,5) и D(0,3,2 ) ; 3. A(− 1,4,5) , B(− 6,2,1) и D(4,11,0 ) ; 4. A(1,2,3) , B(0,2,−3) и D(1,5,8) ; 5. A(4,7,1) , B(0,−1,−2) и D(3,7,3) ; 6. A(− 8,−5,−2) , B(2,4,6) и D(4,0,3) ; 7. A(− 6,1,8) , B(4,4,3) и D(2,5,4) ; 8. A(− 1,5,3) , B(6,3,1) и D(2,2,2 ) ; 9. A(− 2,−5,−1) , B(4,5,9 ) и D(1,9,1) ; 10. A(− 2,−4,−3) , B(3,4,6 ) и D(3,5,1) .
ПРИЛОЖЕНИЯ Приложение 1 Горячие клавиши MathCAD Операторы Приведённые нижи комбинации клавиш, используются для вставления операторов. За единственным исключением (клавишей кавычки [ " ]) результат нажатия этих клавиш одинаков в математической области и в пустом месте. Клавиша (и) ! " " # $ & ' , , ; ? [ \ ^ | Ctrl+1 Ctrl+3 Ctrl+4 Ctrl+9 Ctrl+0 Ctrl+8 Ctrl+Ctrl+= Ctrl+6 Ctrl+Shift+4 Ctrl+Shift+3 Ctrl+Shift+? Ctrl+\ Ctrl+Enter
Назначение
Факториал. В математической области создаёт оператор комплексного сопряжения. В пустом месте создаёт текстовую область. Произведение по дискретному аргументу. Суммирование по дискретному аргументу. Интеграл. Пара скобок. Разделяет выражения, откладываемые по одной оси графика. Предшествует второму числу при задании диапазона. Предшествует последнему числу при задании диапазона. Производная первого порядка. Нижний индекс. Квадратный корень Показатель степени. Абсолютное значение. Транспонирование. Не равно. Сумма элементов вектора. Меньше либо равно. Больше либо равно. Векторное произведение. Оператор векторизации. Равно. Верхний индекс. Суммирование по индексу. Произведение по индексу. Производная n-ного порядка. Корень n-ной степени. Сложение с переносом.
51
Окна и рабочие документы Следующие комбинации клавиш используются для манипуляции окнами и рабочими документами как целым. Клавиша (и) Alt+Esc Alt+Tab Ctrl+F4 Ctrl+F6 Alt+F4 Ctrl+R F1 F5 F6 F7 F9 Shift+F1
Назначение Переключиться на другую задачу Windows. Переключиться на перечень задач Windows Закрыть рабочий документ. Активизировать следующее окно. Выйти из MathCAD. Обновить экран. Открыть окно Справки. Открыть рабочий документ. Сохранить рабочий документ. Создать рабочий документ. Пересчитать результаты на экране. Включить контекстною Справку.
Редактирование Следующие комбинации клавиш используются для редактирования документов MathCAD. Клавиша (и) Ctrl+F9 Ctrl+F10 Ctrl+F5 Shift+F5 Alt+BkSp Ctrl+C Ctrl+V Ctrl+X Ctrl+U Ins
Назначение Вставляет чистую строку. Удаляет чистую строку. Вызывает диалоговое окно для поиска фрагмента строки. Вызывает диалоговое окно для поиска и замены фрагмента строки Отменяет последнее действие по редактированию документа. Копирует выделение в буфер обмена. Вставляет в документ содержимое буфера обмена. Вырезает выделение и помещает его в буфер обмена. Вызывает диалоговое окно для вставки встроенных единиц измерения. Переключает между режимами редактирования вставка и забивка.
52
Приложение 2 Встроенные функции В настоящее время MathCAD использует более 400 функций. В приложении приводятся наиболее часто используемые функции для научных и инженерных расчетов. Назначение таких элементарных функций, как sin(z), ln(x) и т.п. понятно без пояснений. Принятые обозначения:
♦ ♦ ♦ ♦ ♦ ♦ ♦ ♦
х и у – вещественные числа; z – вещественное либо комплексное число; m, n, I, j и k – целые числа; v, u и все имена, начинающиеся с v, – векторы; А и В – матрицы либо векторы; М и N – квадратные матрицы; F – вектор-функция; file – либо имя файла, либо файловая переменная присоединенная к имени файла.
Все углы измеряются в радианах. Имена приведенных функций нечувствительны к шрифту, но чувствительны к регистру – их следует печатать в точности, как они приведены. angle(x, у) – угол (в радианах) между положительным направлением оси х и радиусом-вектором точки (х, у). APPEND(file) – добавление значения одиночной переменной к существующему файлу file.dat на диске. APPENDPRN(file) – добавление матрицы к существующему файлу file.prn на диске. augment(A, В) – соединение двух матриц, обе матрицы должны иметь одинаковый размер. bulstoer(v, х1, х2, асе, n, F, k, s) – матрица решения системы обыкновенных дифференциальных уравнений, правая часть которых записана в символьном векторе F с заданными начальными условиями в векторе v на интервале от х1 до х2, используется метод Булирш-Штера с переменным шагом; параметры k и s задают шаг. Bulstoer(v, х1, х2, n, F) – матрица решения системы обыкновенных дифференциальных уравнений, правая часть которых записана в символьном векторе F с заданными начальными условиями в векторе v на интервале от х1 до х2, используется метод Булирш-Штера. bvalfit(vl, v2, х1, х2, xi, F, LI, L2, S) – устанавливает начальные условия для краевой задачи, заданной в векторах F, vl и v2 на интервале от х1 до х2, где решение известно в некоторой промежуточной точке xi. сеil(х) – наименьшее целое, не превышающее х. cfft(A) – быстрое преобразование Фурье массива комплексных чисел А. Возвращает массив такого же размера, как и его аргумент.
53
CFFT(A) – то же, что и выше, но использует другие норму и знак. cholesky(M) – треугольное разложение матрицы М методом Холецкого. М = L ( LT, где М – симметричная матрица, L – треугольная матрица. Возвращает L. cnorm(x) – интеграл от минус бесконечности до х от функции стандартного нормального распределения. cols(A) – число столбцов в матрице А. complex – ключевое слово режима автоматических символьных преобразований. condl(M) – число обусловленности матрицы, вычисленное в норме L1. cond2(M) – число обусловленности матрицы, вычисленное в норме L2. conde(M) – число обусловленности матрицы, вычисленное в норме евклидового пространства. condi(M) – число обусловленности матрицы, основанное на равномерной норме. corr(vx, vy) – коэффициент корреляции двух векторов – vx и vy csort(A, n) – сортировка матрицы А по столбцу п (перестановка строк по возрастанию значений элементов в столбце n). cspline(vx, vy) – коэффициенты кубического сплайна, построенного по векторам va и vy. cvar(X, Y) – ковариация Х и Y. diag(v) – диагональная матрица, элементы главной диагонали которой вектор v. dbeta(x, si, s2) – плотность вероятности для β-распределения. dbinom(k, n, p) – биномиальное распределение. Возвращает значение вероятности P(x=k), где k – случайная величина. dcauchy(x, I, s) – плотность вероятности для распределения Коши. dchisq(x, d) – плотность вероятности для Хи-квадрат- распределения. dexp(x, r) – плотность вероятности для экспоненциального распределения dF(x, dl, d2) – плотность вероятности для распределения Фишера. dgamma(x, s) – плотность вероятности для гамма-распределения. dgeom(k, p) – то же, что и выше, но для геометрического распределения. dlnorm(x, μ, δ) – плотность вероятности для лог-нормального распределения. dlogis(x, I, s) – плотность вероятности для логистического распределения. dnbinom(k, n, p) – то же, что и выше, но для отрицательного биномиального распределения. dnorm(x, μ, δ) – плотность вероятности для нормального распределение. dpois(k, X) – то же, что и выше, но для распределения Пуассона. dt(x, d) – плотность вероятности для распределения Стьюдента.
54
dunif(x, a, b) – плотность вероятности для равномерного распределения dweibull(x, s) – плотность вероятности для распределения Вейбулла. eigenvals(M) – собственные значения матрицы. eigenvec(M, z) – нормированный собственный вектор матрицы М, соответствующий ее собственному значению z. eigenvecs(M) – матрица, столбцами которой являются собственные векторы матрицы М. Порядок расположения собственных векторов соответствует порядку собственных значений, возвращаемых функцией eigen-vals. erf(x) – функция ошибок. Find(varl, var2, ...) – значения varl, var2 ,... , доставляющие решение системе уравнений. Число возвращаемых значений равно числу аргументов. fft(v) – быстрое преобразование Фурье вещественных чисел, v – вещественный вектор с 2n элементами, где n – целое число. Возвращает вектор размера 2n-l+l. FFT(v) – то же, что и fft(v), но использует другие норму и знак. floог(х) – наибольшее целое число, меньшее или равное х. х должно быть действительным. genfit(vx, vy, vg, F) – вектор, содержащий параметры, которые делают функцию F от х и п параметров U0, U1;, ... , un-i, наилучшим образом аппроксимированную к данным в vx и vy. F является функцией, которая возвращает вектор из n+1 элемента, содержащий f и его частные производные по его n параметрам, vx и vy должны быть того же самого размера, vg – вектор n элементов для приблизительных значений для n параметров. geninv(A) – левая обратная к матрице A, L*A=E, где Е – единичная матрица размером n (n, L – прямоугольная матрица размером n*m, A – прямоугольная матрица размером m* n). genvals(M, N) – вектор обобщенных собственных значений vi матрицы M: M(x=vi* N*х). М и N – матрицы с действительными элементами. genvecs(M, N) – матрица, содержащая нормированные собственные векторы, отвечающие собственным значениям в v, который в векторе возвращен в genvals. n-й столбец этой матрицы является собственным вектором х, удовлетворяющим собственному значению уравнения М*x=v*N * х. Матрицы М и N содержат действительные значения. Given – ключевое слово, работающее в паре с функциями Find и Minerr. hist(intervals, data) – гистограмма. Вектор intervals задает границы интервалов в порядке возрастания, data – массив данных. Возвращает вектор той же размерности, что и вектор intervals, и содержит число точек из data, попавших в соответствующий интервал. I0(x) – модифицированная функция Бесселя первого рода нулевого порядка.
55
I1(х) – модифицированная функция Бесселя первого рода первого порядка. icfft(A) – обратное преобразование Фурье, соответствующее cfft Возвращение массива такого же размера, как и его аргумент. ICFFT(A) – обратное преобразование, соответствующее CFFT. Возвращение массива такого же размера, как и его аргумент. linterp(vx, vy, x) – значение в точке х линейною интерполяционного многочлена векторов vx и vy Ioess(vx, vy, span) – вектор, используемый функцией interp для определения набора многочленов второй степени, которые наилучшим образом аппроксимируют часть данных из векторов vx и vy. Аргумент span указывает размер части аппроксимируемых данных. loess(Mxy, vz, span) – вектор, используемый функцией interp для определения набора многочленов второй степени, которые наилучшим образом аппроксимируют зависимость Z(x, у) по множеству Мху. Значение Z в массиве vz. span указывает размер области, на которой выполняется локальная аппроксимация. lsolve(M, v) – решение системы линейных алгебраических уравнений вида М*x=v. lspline(vx, vy) – коэффициенты линейного сплайна, построенного по векторам vx и vy. lu(M) – треугольное разложение матрицы М: Р*M=L*U. L и U – нижняя и верхняя треугольные матрицы соответственно. Все четыре матрицы квадратные, одного порядка. matrix(m, n, f) – матрица, в которой (i, j)-n элемент содержит f(i, j), где i=0, I, ... m и j=0, 1, ... n. max(A) – наибольший элемент в матрице А. mean(v) – среднее значение вектора v. median(X) – медиана. medsmooth(vy, n) – m-мерный вектор, сглаживающий vy методом скользящей медианы, vy – т-мерныи вектор вещественных чисел, n – ширина окна, по которому происходит сглаживание. min(A) – наименьший элемент в матрице А. Muierr(xl, x2, ...) – вектор значений для х1, х2, .... которые приводят к минимальной ошибке в системе уравнений. predict(v, m, n) – прогноз. Вектор, содержащий равноотстоящие предсказанные значения n переменных, вычисленных по m заданным в массиве v данным. pspline(vx, vy) – коэффициенты параболического сплайна, построенного по векторам vx и vy. pspline(Mxy, Mz) – вектор вторых производных для данных Мху и Mz. Этот вектор становится первым аргументом в функции interp. Результирующая поверхность является параболической в границах области, ограниченной хордой Мху.
56
pt(x, d) – значение в точке х функции распределения Стьюдента. d – степень свободы. х>0 и d>0. punif(x, a, b) – значение в точке х функции равномерного распределения, b и а – границы интервала. а0. qbinom(p, n, q) – количество успешных определений при n-ном количестве испытаний при решении уравнения Бернулли при условии, что вероятность этого количества успешных определений есть р. q – вероятность успеха при однократном испытании. 0[q[l и 0[р[1. qcauchy(p, I, q) – квантили обратного распределения Коши со шкалой параметров 1 и s. s>0 и 0<р<1. qchisq(p, d) – квантили обратного Хи-квадрат-распределения, при котором d>0, является характеристикой степеней свободы. 0<р<1. qexp(p, r) – квантили обратного экспоненциального распределения, при котором г>0, определяет частоту. 0<р<1. qF(p, dl, d2) – квантили обратного распределения Фишера, в котором dl и d2 – степени свободы. 0[р<1. qgamma(p, s) – квантили обратного гамма-распределения, при котором S>0 – параметры формы. 0[р<1. Re(z) – действительная часть комплексного числа. READ(file) – присваивание простой переменной значения из файла с именем file.prn. READPRN(file) – присваивание матрице значений из файла с именем file.prn. READRGB(file) – массив, состоящий из трех под-массивов, которые представляют красную, зеленую и синюю компоненты цветного изображения, находящегося в файле file. regress(Mxy, vz, n) – вектор, запрашиваемый функцией interp для вычисления многочлена n-й степени, который наилучшим образом приближает множества Мху и vz. Мху – матрица m*2, содержащая координаты х-у. vz – т-мерный вектор, содержащий z координат, соответствующих m точкам, указанным в Мху. ге1ах(М1, М2, МЗ, М4, М5, A, U, х) - квадратная матрица решения уравнения Пуассона. reverse(v) – перевернутый вектор v. rexp(m, r) – вектор m случайных чисел, имеющих экспоненциальное распределение. r>0 является частотой. rF(m, dl, d2) – вектор m случайных чисел, имеющих распределение Фишера. dl, d2>0 определяет степени свободы. rgamnia(m, s) – вектор m случайных чисел имеющих гаммараспределение. s>0 – параметр формы.
57
rgeom(m, p) – вектор m случайных чисел. имеющих геометрическое распределение. 0<р[1. rkadapt(v, xl, х2, acc, n, F, k, s) – матрица, содержащая таблицу значений решения задачи Коши на интервале от xl до х2 для системы обыкновенных дифференциальных уравнений, вычисленных методом РунгеКутта с переменным шагом. Правые части системы записаны в F, n – число шагов, k и s – размеры шага. Rkadapt(v, xl, х2, n, F) – матрица решений методом Рунге-Кутта (с переменным шагом) системы обыкновенных дифференциальных уравнений, правые части которых записаны в символьном векторе F, на интервале от xl до х2; n – число шагов. sbval(v, xl, x2, F, L, S) – установка начальных условий для краевой задачи, определенной в символьном векторе F, вектор v – начальные условия на интервале xl, x2. simplify – ключевое слово режима автоматических символьных преобразований. slope(vx, vy) – коэффициент b линейной регрессии у = а + b*х векторов vx и vy. sort(v) – сортировка элементов вектора v по убыванию. stack(A, В) – множество, сформированное путем расположения А над В. Множества А и В должны иметь одинаковое число столбцов. sfdev(v) – стандартное отклонение элементов вектора v. stiffb(v, xl, x2, асе, n, F, J, k, s) – матрица решений stiffдифференциального уравнения, записанного в F и функции Якобиана J. v – вектор начальных значений на интервале [xl, x2]; используется метод Bulirsch-Stoer с переменным шагом. Stiflb(v, xl, x2, n, F, J) – матрица решений stiff-дифференциального уравнения, записанного в F и функции Якобиана J. v – вектор начальных значений на интервале [xl, x2]; используется метод Bulirsch-Stoer. stiffr(v, xl, x2, асе, n, F, J, k, s) – матрица решений stiffдифференциального уравнения, записанного в F и функции Якобиана J. v – вектор начальных значений на интервале [xl, x2]; используется метод Розен брока с переменным шагом. Stiflr(v, xl, x2, n, F, J) – матрица решений stiff-дифференциального уравнения, записанного в F и функции Якобиана J. v – вектор начальных значений на интервале [xl, x2]; используется метод Розенброка. Yn(m, x) – m-й порядок функции Бесселя второго рода; х – действительное и положительное число; m – от 0 до 100 δ(х, у) – символ Кронекера (1, если х=у, и 0, ес-ли х ?ь у; х и у – целочисленные величины). Г(г) – гамма-функция. Ф(х) – 1, если х>0, и 0 в противном случае (функция Хевисайда).
58
Приложение 3 Сообщения об ошибках Это приложение является алфавитным списком диагностических сообщений об ошибках в математических выражениях. Они появляются при попытке ввода, обработки или вычисления выражения, в котором MathCAD обнаруживает ошибку. Если MathCAD находит ошибку при попытке вычисления функции, определенной пользователем, он помечает сообщением об ошибке имя функции, а не ее определение. В этом случае проверьте определение функции, чтобы понять, что вызвало ошибку. Сообщение Англ. яз. Рус. яз.
Array size mismatch
Cannot be denned Cannot take subscript Cannot take subscript Definition stack overHow Did not find solution
Domain error Duplicate
Причина
Попытка произвести операцию с векторами или матрицами, размеры которых не подходят Несовпаден для этой операции. Многие операции требуют, ие размеров чтобы их векторные аргументы были одного массивов размера, например произведение или функции linterp и согг. Не может Слева от символа определения (:=) помещено быть неопределяемое выражение. определено Не Верхний индекс использован не для содержит матрицы, а для чего-то другого. верхних индексов Не Нижний индекс использован не для вектора содержит или матрицы, а для чего-то другого. нижних индексов Переполнен Использовано слишком много вложенных ие стека определени функций. и MathCAD не нашел решения системы уравнении. Чтобы блок решения уравнений Решение не выдал в качестве решения приближающий найден • результат, используйте функцию Minerr- вместо функции Find. Ошибка Попытка вычислить значение функции, области имеющей аргумент, выходящий за область определени определения. я Дублирован Попытка определить одну переменную ие дважды в одном определении. Это сообщение
59
Сообщение Англ. яз. Рус. яз.
Слишком Equation too большое large выражение Error in constant
Ошибка в константе
Error in list
Ошибка в списке
Error in solve block
Ошибка в блоке
File error
Ошибка файла
File not found
Файл не найден
Illegal array operation
Неверная операция с массивом
Illegal context
Неверный контекст
Illegal factor
Неверный множитель
Illegal function name
Неверное имя функции
Причина
появляется, когда создается вектор по левую сторону определения и используете одно имя в этом векторе дважды. Для вычисления в MathCAD введено слишком большое выражение. Разделите выражение на два или более подвыражений. MathCAD интерпретирует указанное выражение как некорректную константу. MathCAD воспринимает все начинающееся с цифры как константу. Указанная функция содержит некорректный список аргументов. Правильное определение функции начинается таким образом: f(х, у, z ...). Список аргументов в скобках может состоять из одного или нескольких имен, разделенных запятой. Сообщение при вычислении пользовательской функции, выражаемой через блок решения уравнений, содержащий ошибку. Система столкнулась с ошибкой при чтении файла с помощью функции READ или READPRN. Система не нашла файла данных, указанного в качестве параметра для функции READ или READPRN, либо для импорта в графическую область. Попытка применить к вектору или матрице функцию или оператор, которые требуют скалярные аргументы. Например, это сообщение можно видеть при попытке применения функции синус к квадратному корню из матрицы. Оператор или функция использованы в контексте, запрещаемом MathCAD. В поле ввода единиц в конце выражения, возвращающего численный результат, введено неверное выражение. Допустимы вещественные ненулевые скалярные значения. Использовано выражение, которое MathCAD интерпретирует как функцию, но имя функции неверно. Это сообщение появится, например, в случае использования числа как
60
Сообщение Англ. яз. Рус. яз.
Illegal ORIGIN
Неверное употреблен ие ORIGIN
Причина
имени функции: 6(х). Чаще всего оно возникает, если пропущен оператор типа *, что заставляет MathCAD интерпретировать скобки в выражении как признак функции, а не как группирование операций. ORIGIN определен через нецелое значение или значение с величиной, большей 16 000 000. Это сообщение отмечает первое использование индекса после неверного употребления ORIGIN.
Неправильн Дискретный аргумент определен Illegal range ый неправильно. диапазон Сообщение отмечает выражение, использующее TOL интеграл, или вхождения Root, Некорректн Find или Minerr, для которых TOL ™ 1 или Illegal toler- ая точность TOL ™ 0. Для устранения этой ошибки нужно аппроксима ance где-либо выше отмеченного выражения ции установить значение TOL между нулем и единицей. Отмечает выражение, в котором Несовмести Incompatibl складываются, вычитаются или выполняются мые иные операции с выражениями, имеющими e units единицы различную размерность. Сообщение помечает индекс, ссылающийся на несуществующее значение массива. Такое сообщение можно видеть при использовании отрицательного верхнего или нижнего индекса Index out of Индекс вне (или индекса, меньшего, чем ORIGIN, если bounds границ ORIGIN > 0) либо при использовании верхнего или нижнего индекса для ссылки на элемент массива с номером, большим, чем возможно согласно определению в документе. Отмечает попытку вычислить производную с Неверный Invalid order указанным порядком, который не является порядок целым числом от 0 до 5 включительно. Введено слишком много элементов в списке, разделенном запятыми. Это может произойти Длинный при попытке вывести на график больше List too long входной выражений, чем допускается MathCAD, или список при попытке создать таблицу с более чем пятьюдесятью элементами.
61
Сообщение Причина Англ. яз. Рус. яз. Misplaced Неуместная Запятая использована там, где ее не должно comma запятая быть. В выражении пропущен один из операндов. Например, это сообщение можно видеть при вводе знака плюс без ввода слагаемых и Missing Пропущенн последующем нажатии знака равенства. operand ый операнд MathCAD показывает поле ввода (маленький прямоугольник) на месте пропущенного операнда, Пропущенн В выражении или уравнении пропущен один Missing ый знак из знаков операции. operator операции Попытка найти векторное произведение от Должно Must be 3операндов, не являющихся трехмерными быть трехмерны векторами. Векторное произведение определено vector м вектором только для векторов с тремя элементами. Попытка выполнить операцию, которую Должно Must be можно выполнять только на массиве, со быть array скаляром. массивом Указанное выражение имеет размерность, хотя ситуация требует, чтобы оно было Должно Must be безразмерным. Единицы измерения нельзя быть dimensionle безразмерн использовать для аргументов некоторых ss ым функций (например, cos и In) или в показателе степени. Вектор, элементы которого не расположены в порядке строгого возрастания, использован в Должно быть Must be качестве аргумента одной из функций (spline, increasing возрастающ pspline, cspline, interp, linterp и hist). Первый им аргумент этих функций должен быть вектором со строго возрастающими элементами. Использовано нецелое выражение там, где Must be Должно требуется целое, например как аргумент integer быть целым функции identity или как индекс, нижний или верхний. Должно Попытка вычислить встроенную функцию от Must be быть нуля, хотя для нуля она не определена. nonzero ненулевым Сообщение отмечает чертеж, в котором одна Должно Must be из границ по оси, использующей быть положитель логарифмический масштаб, равна нулю или positive отрицательна. MathCAD может выводить на ным
62
Сообщение Англ. яз. Рус. яз.
Причина
график вдоль логарифмической оси только положительные значения. Must be range Must be real
Must be scalar
Должен быть диапазон Должно быть вещественн ым Должно быть скаляром
Использовано, что-либо, дискретным аргументом.
не
являющееся
Мнимое или комплекснозначное выражение использовано там, где MathCAD требует вещественнозначное выражение. Векторное или матричное выражение использовано там, где требуется скаляр, например в качестве аргумента функции identity.
Должно Сообщение отмечает скаляр или матрицу в быть операции, требующей векторный аргумент. вектором Нет No matching соответству Сообщение указывает на функции Find или ющего Minerr без соответствующего им слова Given. Given Given Вектор или выражение, содержащее No scalar Нескалярна дискретный аргумент, используются там, где value я величина требуется скалярная величина. Число или другая комбинация символов Не является Not a name использованы там, где MathCAD требует имя, именем например как второй аргумент функции root. Попытка ввести более чем один массив в поле ввода для карты линий уровня. MathCAD в Допустим Only one этом случае допускает не более чем один только один array массив, поскольку карта линий уровня может массив allowed представлять не более чем одну функцию одновременно. Попытка вычислить выражение, которое Переполнен превосходит наибольшее число, которое может Overflow ие быть представлено MathCAD (примерно 10307). Сообщение отмечает попытку вывести Потеряны функцию от величины, которая лежит за Significance значащие lost пределами диапазона, где значение функции цифры может быть вычислено точно. Вычисление выражения привело к Stack Переполнен переполнению внутреннего стека MathCAD. overflov ие стека Это может быть результатом слишком сложного Must be vector
63
Сообщение Англ. яз. Рус. яз.
Причина
выражения функции. Subscript too large
Слишком большой нижний индекс
Too few arguments
Слишком мало аргументов
Too few constraints
Слишком мало ограничени й
Too few elements
Слишком мало элементов
Too few subscripts
Мало нижних индексов
или
рекурсивного
определения
Попытка использовать нижний индекс, превышающий пределы, допускаемые MathCAD. Выражение содержит функцию со слишком малым количеством аргументов. Для встроенных функций число аргументов фиксировано. Для функций пользователя число параметров зависит от определения, сделанного в рабочем документе. Сообщение указывает на Find или Given с количеством ограничений, меньшим числа переменных. Добавьте несущественные ограничения или уменьшите число переменных, относительно которых ищется решение. Сообщение указывает на преобразование Фурье, кубический сплайн или функцию линейной интерполяции, применяемую для вектора со слишком малым количеством компонентов. Преобразование Фурье и обратное к нему требуют как минимум четыре элемента вектора. Для матрицы использован один нижний индекс. Указание на элементы матрицы возможно при помощи двух нижних индексов, разделяемых запятой.
Слишком Too large to велико, чтобы display отобразить
Попытка вывести вектор или матрицу размера больше, чем допускается MathCAD.
Too many arguments
Слишком много аргументов
Выражение содержит функцию со слишком малым количеством аргументов. Для встроенных функций число аргументов фиксировано. Для функций пользователя число параметров зависит от определения, сделанного в рабочем документе.
Too many constraints
Слишком много ограничени й
В блоке решения уравнений используются более пятидесяти ограничений.
64
Сообщение Англ. яз. Рус. яз.
Too many points Too many subscripts
Undefindet
Unmatched parenthesis
Wrong size vector
Причина
Попытка вывести на график точек больше, Слишком чем MathCAD может обработать для одного много точек графика. Использовано два или более нижних индекса Слишком для вектора либо три или более индекса для много матрицы. индексов Показанное в негативном изображении имя функции или переменной не определено. Чтобы его определить, введите имя переменной с Не последующим двоеточием (:) и выражение или определено число, ее определяющее. Это сообщение часто означает, что для определения переменной использован знак равенства (=) вместо двоеточия. Попытка вычислить выражение, содержащее Дисбаланс левую скобку без соответствующей ей правой. скобок Исправьте выражение, удалив левую скобку или поставив в нужном месте правую. Сообщение указывает на функцию преобразования Фурье, аргумент которой имеет число элементов, отличное от допустимого, fft требует в качестве аргумента вектор с Неверный количеством элементов 2n, где п - целое число, размер большее 1. ifft требует вектор с 1+2 n вектора элементами, где n - целое число, большее 0. Если ORIGIN равен нулю, MathCAD автоматически включает элемент с нулевым индексом как компоненту вектора-аргумента.
Список литературы 1. Дьяконов В.П. MathCAD 2000: Учебный курс. — СПб.: «Питер», 2001. – 592 с.: ил. 2. Кирьянов Д.В. Самоучитель MathCAD 2001 — СПб.: «БХВ-Петербург», 2001. – 544 с.: ил. 3. Фокс А., Пратт М. Вычислительная геометрия. Применение в проектировании и на производстве: Пер. с англ. — М.: «Мир», 1982. – 304 с.: ил. 4. Очков В.Ф. MathCAD PLUS 6.0 для студентов и инженеров. М.: КомпьютерПресс, 1996 5. MathCAD PLUS 6.0. Финансовые, инженерные и научные расчеты в среде Windows 95. Перевод с англ. — М. Информационно-издательский дом «Филинъ», 1996.