Построение графика одномерного массива maple
подскажите как построить график одномерного массива в maple по его данным, мне выдает прямую хотя это не так?
> restart; > Digits := 4; fd := fopen(`C:\\Учеба\\Мат.модели\\Вакансия Электротех\\test1.txt`, READ) L := readdata(fd, 1) with(linalg) count := nops(L) A := array(1 .. count, L) plot(A);

Отслеживать
33.9k 25 25 золотых знаков 130 130 серебряных знаков 222 222 бронзовых знака
Как задать массив в maple
подскажите как построить график одномерного массива в maple по его данным, мне выдает прямую хотя это не так?

Всё правильно. На картинке 6138 графиков. Каждая горизонтальная линия есть график постоянной функции, причём эти константы разбросаны примерно от 1.4 до 2.
Так как plot вызвана с одним аргументом, то графики строятся от -10 до 10 (по умолчанию)
Всё ещё ищете ответ? Посмотрите другие вопросы с метками maple или задайте свой вопрос.
Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.4.13.41958
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Основы программирования в Maple
Характеристика и общая ориентированность пакета Maple. Интерфейс пакета, работающего под Windows. Простейшие примеры работы с Maple в интерактивном режиме. Структура объектов Maple, средства для преобразования и вычисления алгебраических выражений.
| Рубрика | Программирование, компьютеры и кибернетика |
| Вид | реферат |
| Язык | русский |
| Дата добавления | 10.12.2017 |
| Размер файла | 1,5 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
«СЕВЕРО-КАВКАЗСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
ИНСТИТУТ МАТЕМАТИКИ И ЕСТЕСТВЕННЫХ НАУК
КАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИ И МАТЕМАТИЧЕСКОГО МОДЕЛИРОВАНИЯ
Реферат по дисциплине:
«Основы работы в математических и статических пакетах»
на тему: «Основы программирования в Maple»
Содержание
Структура объектов Maple
Простейшие преобразования и вычисления
Графики функций и простейшие кривые
Список используемой литературы
Введение
Сейчас невозможно представить себе жизнь без использования компьютера. Сфера его деятельности пронизывает многие виды деятельности человека, хотя изначально он предназначался для трудоемких вычислительных задач. Раньше для подсчета численных выражений нужно было затратить немало времени для написания программы на алгоритмическом языке. За последние годы ситуация резко изменилась, так как с ростом возможностей вычислительной техники соответственно совершенствовалось и программное обеспечение. [1] Появилось очень много математических пакетов, таких как MathCad, Matlab, Maple и т.д. Которые позволили решать задачи разного характера.
Основы Maple
Работать с Maple можно как в режиме интерактивного диалога, так и путем составления и отладки программ на специальном Maple-языке, ориентированном на сложные математические вычисления.
Основу пакета составляет специальное ядро — программа символьных преобразований. Кроме того, имеется несколько тысяч специальных функций, хранящихся в подгружаемых к ядру пакетах и библиотеках. Общая ориентированность пакета на символьные преобразования (компьютерную алгебру) конечно не означает, что с помощью Maple нельзя решать задачи численно. Maple умеет не только вычислять, но и обладает богатыми возможностями графического представления математических объектов и процессов. [2] maple пакет интерфейс алгебраический
Формы представления чисел В Maple.
Тождественные преобразования и упрощение выражений в Maple[3]
Интерфейс пользователя
Интерфейс пакета, работающего под Windows.
Окно Maple содержит многие атрибуты, привычные пользователю других приложений Windows: заголовочную часть, строку ниспадающих меню, панель управления, линейку вертикальной прокрутки, строку состояния и т.д. Основную часть базового окна занимает еще одно окно, в котором обычно располагаются один или несколько рабочих документов (Maple worksheet). В этом же окне могут располагаться окна помощи. Состояние ниспадающих и контекстного меню и кнопок на панели управления зависит от того, какое именно окно активно в настоящий момент и месторасположения курсора в окне Maple worksheet.
Рассмотрим наиболее типичный случай — работу пользователя с рабочим документом в режиме непосредственного диалога с программой. В этом случае на рабочем документе может быть представлена текстовая информация трех видов, а также объекты двумерной и трехмерной графики.
Исполняемые команды вводятся после специльного приглашения ‘ > ‘, красным цветом и должны заканчиваться точкой с запятой или двоеточием. Обычно команды вводятся в строчном формате, но пользователь имеет возможность перейти к специальному математическому формату ( который по умолчанию применяется при выводе). В одной строке может быть расположено более одной команды. Если после команды стоит двоеточие, то результат ее выполнения не будет отображен на экране. Если же после команды стоит точка с запятой, то после ее выполнения на экране появится результат. Если Maple не сможет вычислить введенное выражение, то результатом будет перевод введеннного выражения в матматический формат, принятый для вывода. Выходная информация печатается по умолчанию синим цветом. Исполнение Maple-команды инициируется нажатием ввода.
Команды можно объединять в исполняемые группы. Каждая такая группа выделяется слева общей для всех содержащихся в ней строк квадратной скобкой. Группа запускается на исполнение одним нажатием клавиши Enter и является по существу простейшей Maple — программой. Для того чтобы не исполнять каждую строку отдельно, а набрать целую исполняемую группу, достаточно осуществлять перевод строки с помощью комбинации клавиш Shift+Enter. Объединять исполняемые группы можно нажатием функциональной клавиши F4, а разбивать — нажатием F3. Разумеется, эти же действия можно проделать, выбрав соответствующие пункты в верхнем меню.
Текст черного цвета, которым написаны этот и предыдущие абзацы, используется для комментариев и никак не обрабатывается системой.
Для того чтобы вводить такой текст, достаточно, находясь в командной строке, нажать кнопку » Т » на панели управления, или вставить параграф, выбрав соответствющий пункт раздела «Insert» нисподающего меню.
Рабочий документ Maple можно структурировать, создавая вложенные друг в друга секции. Эти секции можно сворачивать. В свернутом виде каждая секция представлена лишь своим заголовком и признаком секции — кнопкой, снабженной знаком «+». Для разворачивания/сворачивания секции достаточно нажать на эту кнопку мышкой (впрочем, раз Вы читаете этот текст, то Вы, наверное, уже освоили эту возможность).
С помощью пункта меню «HyperLink. » из раздела » I nsert» можно создавать ссылки на определенные разделы других рабочих документов и топиков помощи. Тем самым Maple-документ может обладать структурой гипертекста.[2]
Простейшие примеры
Рассмотрим простейшие примеры работы с Maple в интерактивном режиме:
Обратим внимание, что по умолчанию Maple выполняет вычисления с абсолютной точностью, переходя, в случае необходимости к подходящим расширениям кольца целых чисел. И лишь наличие десятичной точки у одного из операндов привело к переходу к вычислениям с плавающей точкой.
Приведем еще несколько примеров с использованием числовых констант и переменных, а также оператора присваивания и простейщих функций:
Эти примеры иллюстрируют три важных момента.
Во-первых, Maple различает заглавные и маленькие буквы.
Во-вторых, в то время как pi обозначает просто соответствующую букву греческого алфавита и может быть использовано в качестве идентификатора переменной, Pi означает известную математическую константу — отношение длины окружности к диаметру.
В-третьих, переменной можно присваивать значение любого типа (при этом не обязательно явно указывать этот тип — Maple сам постарается разобраться) или не придавать никакого, используя ее именно в качестве переменной (в математическом понимании этого термина).
Попытка присвоить значение защищенной константе приведет к ошибке:
Error, attempting to assign to `Pi` which is protected. Try declaring `local Pi`; see ?protect for details.
Сообщение об ошибке вызовет и попытка сложить число и символьную строку:
Заметим, что следующее присвоение совершенно корректно:
Кроме Pi, в Maple имеются еще несколько зарезервированных констант. Отметим среди них мнимую единицу — I:
Для перевода точного значения математического выражения в формат записи с плавающей точкой с одновременным округлением с указанной точностью используется функция evalf :
Следующий пример иллюстрирует одну очень важную особенность Maple:
После того как переменной d, участвующей в выражении, хранящемся в b, было присвоено конкретное значение, значение b изменилось с учетом этого присвоения, хотя мы и не делали новых присваиваний для b.[2]
Указанная особенность Maple объясняет, почему столь безобидная для других языков (и широко используемая в них) конструкция приводит к переполнению стека рекурсий на Maple:
Error, recursive assignment
Error, too many levels of recursion
Однако, если предварительно придать переменной конкретное значение, предыдущее присваивание не будет приводить к неприятностям:
Структура объектов Maple
Для того чтобы понять идеологию Maple, рассмотрим представление данных. Типичными объектами Maple являются выражения, имеющие структуру дерева. Пусть, например, переменной u присвоено следующее выражение:
При этом u сопоставляется объект, который наглядно можно изобразить так:
Функция nops (number of operands) возвращает количество операндов самой внешней операции, участвующей в выражении, являющимся аргументом этой функции. Значения операндов возвращает функция op . Ее первый аргумент задает номер операнда, а второй — выражение, в котором он участвует. Если в качестве первого аргумента взять 0, то функция op вернет тип операции.
Рассмотрим некоторые другие часто используемые объекты Maple. Для задания множества достаточно перечислить его элементы через запятую, заключив их в фигурные скобки.
Обратите внимание, что Maple устранил повторы элементов, преобразовав для этого некоторые из них, и попутно расставил их в «удобном для себя» порядке.
Над множествами можно производить обычные теоретико-множественные операции: объединение ( union ), пересечение ( intersect ), теорекико-множественную разность ( minus )
В отличие от неупорядоченных множеств списки представляют собой упорядоченные наборы. Элементы списка заключаются в квадратные скобки. Приведенные ниже примеры показывают, как управлять элементами списка:
Обратите внимание, что элементы списка сами могут иметь сложную структуру (в наших примерах структуру списка или множества).
Посмотрите, как было произведено добавление элементов в список с помощью функции op, которая в этом случае имела лишь один аргумент.
С помощью команд remove и select можно удалять элементы списка или наоборот оставлять в нем лишь элементы, удовлетворяющие определенным условиям. Первый аргумент этих функций должен принимать для каждого из элементов списка одно из значений: true или false. Вторым аргументом служит сам обрабатываемый список. Третий, необязательный параметр по сути является аргументом логической функции, служащей первым параметром remove и select, задавая тем самым область истинности соответствующего предиката. В приводимых ниже примерах мы сначала удаляем из списка S все элементы, которые сами являются списками, а затем оставляем в S лишь элементы, являющиеся именами переменных или множествами.
Используя список в качестве первого аргумента функции op, можно существенно упростить процедуру извлечения глубоко вложенных операндов из выражений Maple:
Еще одним классом объектов Maple являются последовательности. Их можно задавать: либо просто перечисляя их элементы через запятую (не заключая всего выражения в скобки), либо используя значок последовательности — $ в сочетании с оператором диапазона (он задается указанием границ диапазона, разделенных двумя точками), либо как возвращаемое значение функции seq.
Последовательности выражений легко превратить в множества или списки, просто заключив их в соответствующие скобки:
Разумеется, система, ориентированная на математику, должна уметь оперировать с матрицами:
Последний пример показывает, что задавать количество строк и столбцов матрицы можно и неявно, если при перечислении элементов матрицы указать ее структуру. Можно сделать и наоборот — не задавать элементы матрицы, а указать лишь ее размерность:
Maple создал объект соответствующей размерности, элементы которого являются индексированными переменными. Однако эта конструкция была идентифицирована программой как массив ( array ). Дело в том, что массив является более общим (чем список и матрица) понятием Maple. Матрица является частным случаем двумерного, а список (и вектор) — одномерного) массива, нумерация индексов которого начинается с единицы.
Рассмотренные примеры не исчерпывают всего разнообразия типов объектов Maple. Эти объекты могут быть строками (string), таблицами (table), иметь булевский тип (boolean) и т.д. Кроме того, существует огромное количество типов объектов, доступных только после подгрузки специализированных пакетов.
Отметим, что один и тот же объект может принадлежать одновременно к нескольким типам:
Мы видим, что на запрос о типе числа 7 Maple вернул integer. Однако программа подтверждает, что данный объект является в то же время положительным нечетным простым числом, а также может быть интерпретирован как комплексное число или многочлен. [2]
Простейшие преобразования и вычисления
Будучи системой символьных вычислений, Maple должен иметь средства для преобразования алгебраических выражений: приведения подобных членов (это делается по умолчанию), раскрытия скобок (expand), группировки (collect), разложения на множители (factor для многочленов и ifactor для целых чисел) упрощения выражений (simplify) и т.д. Действие перечисленных выше функций станет понятно из следующих примеров:
Графики функций и простейшие кривые
В состав Maple входят несколько специальных пакетов для работы с графикой. Однако для построения графиков функций и простейших кривых и поверхностей нет необходимости подгружать эти пакеты. Достаточно использовать функцию plot, входящую в ядро Maple:
Щелкнув левой кнопкой мыши по рисунку, можно активизировать данный объект. При этом верхнее меню и панель управления трансформируются в состояние, предназначенное для работы с двумерной графикой.
Для того чтобы вывести сразу несколько графиков на одном рисунке, достаточно в качестве первого аргумента функции plot использовать список.
В последнем примере, кроме двух обязательных параметров команды plot, использован один (из многих возможных) опциональных — color.
Для того, чтобы изобразить линию, заданную параметрически, вновь воспользуемся списком. Но в этом случае задание диапазона изменения параметра должно быть третьей компонентой списка, а не вторым самостоятельным аргументом plot .
> [2]
Для изображения поверхностей в Maple используется команда plot3d.
Так же, как и команда plot, в зависимости от синтаксиса plot3d может изображать поверхности, заданные явно (в виде графика функции двух аргументов) и параметрически.
При явном задании поверхности первый аргумент команды plot3d должен определять функцию двух переменных, график которой следует построить, а следующие два аргумента задают диапазон изменения переменных (при этом границы диапазона второй переменной могут быть функциями от первой). Кроме этих обязательных параметров, могут задаваться еще несколько опциональных, отвечающих за тип системы координат (Maple «знает» несколько десятков разновидностей пространственных координат), стиль изображения, цвет, палитру, освещенность рисунка, заголовок, шрифт и стиль оформления надписей, наличие или отсутствие перспективы и т.д. В нижеследующем примере мы используем опцию grid для задания матрицы опорных значений функции.
При параметрическом задании поверхности первый аргумент представляет собой список трех функций двух переменных. Следующие два аргумента, как и в случае явного задания поверхности, определяют диапазон изменения переменных. Разумеется, при параметрическом задании поверхности также можно использовать дополнительные опции команды plot3d.
В приводимом ниже примере мы из соображений наглядности повернули изображение части сферы уже после того, как оно было построено. Для этого мы сначала просто активизировали соответствующий графический объект, щелкнув на нем мышкой, а затем вновь с помощью мыши придали ему нужное положение. Кроме того мы обесцветили рисунок, используя опции lightmodel и color, и установили масштаб изображения 1:1.
Богатые графические возможности Maple не исчерпываются рассмотренными примерами. После подгрузки специализированных пакетов (о том, как это делается, речь пойдет ниже) программа может изображать многоугольники и многогранники, пространственные кривые, графы, фазовые портреты дифференциальных уравнений, производить анимацию изображений и т.д.
Использование пакетов
В состав Maple входит большое число специализированных пакетов, ориентированных, как правило, на конкретные разделы математики. Подгрузка пакета осуществляется с помощью команды with, аргументом которой служит имя пакета:
Нередко пакеты содержат функции, называющиеся так же, как функции, входящие в ядро Maple, но отличающиеся от них. В таких случаях после подгрузки пакета содержащиеся в них функции получают более высокий приоритет по сравнению со своими «тезками». В нашем примере система предупредила нас, что после подключения пакета линейной оптимизации будет действовать новое определение функций maximize и minimize .
В качестве результата успешного выполнения команды with Maple выводит на дисплей (курсивом в квадратных скобках) перечень функций, ставших доступными после активизации пакета.
Нередко пользователю нужны не все функции пакета, а лишь незначительная их часть. В этих случаях для экономии оперативной памяти компьютера полезно использовать команду with с несколькими аргументами. При этом первый из них по-прежнему будет означать имя подключаемого пакета, а остальные — имена тех функций пакета, которые следует подгрузить. Например, вместо нескольких десятков функций, входящих в состав пакета по теории чисел, можно подключить лишь несколько функций, интересующих пользователя в текущий момент:
Возможно и «одноразовое» использование функции из специализированного пакета без сохранения ее в оперативной памяти после обращения. Для такого вызова необходимо указать имя пакета, сопроводив его именем вызываемой функции, заключенным в квадратные скобки:
При повторном вызове функции определителя (без указания пакета линейной алгебры, в котором она хранится). Maple «забыл», что такое det и посчитал ее пользовательской функцией.
Следует иметь в виду, что некоторые функции, «приписанные» к тем или иным специализированным пакетам, на самом деле доступны из ядра Maple. Таковы, например, функции ifactor, isolve, isprime, ithprime , nextprime и prevprime из пакета numtheory, matrix и vector из пакета linalg, инертные функции из пакета student . Учет этой особенности позволит экономнее использовать оперативную память компьютера и в конечном итоге ускорить вычисления.[2]
Заключение
Таким образом, мы познакомились с программным пакетом Maple, который по праву считается одним из наиболее мощных математических пакетов Его возможности охватывают достаточно много разделов математики — это видно по всему перечисленному ранее, и могут с пользой применяться на разных уровнях, включая и уровень серьезных научных исследований.
Как задать массив в матлабе – Массив Matlab
Matlab работа с массивами очень схожа с работой в других программах. В матлабе массиву присваивается имя, а обращаться к отдельным частям массива можно по индексу, а именно по номеру созданного элемента в массиве.
Задать одномерный массив можно вот таким образом:
Имя массива, является A, который состоит из 3-х элементов. Числа в массиве необходимо вводить отдельно друг от друга либо запятой, либо пробелом. Поэтому выражение
абсолютно равно предыдущему.
Чтобы обратиться к третьему элементу массива A нужно написать в строке A(3), к первому элементу например как A(1), соответственно второй элемент A(2).
Если необходимо изменить 3-й элемент, то вам нужно всего лишь написать в строке таким образом:
Чтобы закрепить эти знания приведем вот такой пример, пусть 2-й элемент массив A должен быть средне арифметическим третьего и первого элементов. Для этого вам необходимо выполнить следующее действие:
Число элементов в массиве matlab можно вычислить с помощью функции length, вот таким образом:
Многомерные массивы matlab можно задать вот таким образом:
A = [ 10 20 10; 30 40 30; 50 60 50]
Получим матрицу рамерностью 3х3:
A =
10 20 10
30 40 30
50 60 50
т.е. через символ точку с запятой («;») вы можете перейти на другую строку в матрице.
Вот так, очень просто задаются массивы в матлаб!
Поэтому из выше всего сказанного можно сделать вывод, что вам необходимо просмотреть много дополнительной информации и альтернатив!
ВВЕДЕНИЕ В СЕДУ MATLAB
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ им. Р.
Рис Ввод матриц на рабочий лист
МАТРИЦЫ И ДЕЙСТВИЯ НАД НИМИ ОСНОВНЫЕ ТЕОРЕТИЧЕСКИЕ ПОЛОЖЕНИЯ 11 Умножение матриц 12 Транспонирование матриц 13 Обратная матрица 14 Сложение матриц 15 Вычисление определителей Обратите внимание на особенность
Тема3. Операциис векторамии матрицами
Тема3. Операциис векторамии матрицами Под вектором в MatLAB понимается одномерный массив чисел, а под матрицей двумерный массив. При этом по умолчанию предполагается, что любая заданная переменная является
Работа в командном окне
Работа в командном окне Задание 1 Выполните операцию why в командной строке 10 раз. Скопируйте результат исполнения команды в Word, переведите предложения на русский язык. Сравните ваш результат с результатом
3 РЕШЕНИЕ ЗАДАЧ ЛИНЕЙНОЙ АЛГЕБРЫ
Лабораторная работа РЕШЕНИЕ ЗАДАЧ ЛИНЕЙНОЙ АЛГЕБРЫ Список способ структурирования данных. Элементами списка могут быть любые выражения Mathematca, в том числе и другие списки. С клавиатуры списки вводятся
ГЛАВА 6. ЛИНЕЙНЫЕ ПРОСТРАНСТВА
66 ГЛАВА 6 ЛИНЕЙНЫЕ ПРОСТРАНСТВА Определение линейного пространства В гл 5 n-мерное векторное пространство было определено как упорядоченная система n чисел Для n-мерных векторов были введены операции
Математика (БкПл-100)
Математика (БкПл-100) М.П. Харламов 2011/2012 учебный год, 1-й семестр Лекция 3. Элементы линейной алгебры (матрицы, определители, системы линейных уравнений и формулы Крамера) 1 Тема 1: Матрицы 1.1. Понятие
Задания учебную практику
Задания учебную практику Вариант 1 Написать программу, которая считывает из текстового файла три предложения и выводит их в обратном порядке. Описать класс, реализующий стек. Написать программу, использующую
Основы программирования
Основы программирования Выбор варианта задания Номер варианта задания соответствует порядковому номеру студента в группе. Если порядковый номер больше, чем количество вариантов, нумерацию считать циклической.
ЛИНЕЙНАЯ АЛГЕБРА И АНАЛИТИЧЕСКАЯ ГЕОМЕТРИЯ
Государственное образовательное учреждение высшего профессионального образования «Московский авиационный институт (национальный исследовательский университет)» Кафедра «Высшая математика» ЛИНЕЙНАЯ АЛГЕБРА
ОГЛАВЛЕНИЕ. Предисловие… 3
Линейная алгебра. Матрицы
Линейная алгебра. Матрицы (вводные определения и примеры) Предуведомление: ниже лишь краткий конспект, не предназначенный для замены имеющихся учебных пособий. Под матрицей в математике понимается таблица,
ВАРИАНТЫ З А Д А Н И Й
ЛАБОРАТОРНАЯ РАБОТА Тема: Решение систем линейных уравнений работа с матрицами Цель работы: Изучение возможностей пакета Ms Ecel при решении задач линейной алгебры. Приобретение навыков решения систем
Лабораторная работа 3
Лабораторная работа 3 Задание Требуется реализовать программу, выполняющую действия над массивами. При выполнении части 1 допускается использование массивов статического размера. При выполнении части 2
Линейная алгебра Лекция 7. Векторы
Линейная алгебра Лекция 7 Векторы Введение В математике есть два рода величин скаляры и векторы Скаляр это число, а вектор интуитивно понимается как объект, имеющий величину и направление Векторное исчисление
1. ЭЛЕМЕНТЫ ЛИНЕЙНОЙ АЛГЕБРЫ
ЭЛЕМЕНТЫ ЛИНЕЙНОЙ АЛГЕБРЫ ЗАНЯТИЕ МАТРИЦЫ И ДЕЙСТВИЯ НАД НИМИ Дать определение матрицы Классификация матриц по размерам Что такое нулевая и единичная матрицы? При каких условиях матрицы считаются равными?
OpenOffice.org Calc. x 1. x 2. a 12
Глава 3 Решение систем линейных уравнений. Работа с матрицами OpenOffice.org Calc В этой главе мы изучим возможности пакета OpenOffice.org Calc при решении систем линейных алгебраических уравнений и выполнении
Линейная алгебра. Матрицы
Линейная алгебра. Матрицы вводные определения и примеры) Предуведомление: ниже лишь краткий конспект, не предназначенный для замены имеющихся учебных пособий. Шаги решения задачи с использованием математики:.
2 5 8 A = a) A = 2 3. ; b) B =
Занятие 1 Определители 11 Матричные обозначения Основные определения Матрицей размера m n, или m n-матрицей, называется таблица чисел (или других математических выражений с m строками и n столбцами Матрица
РАЗДЕЛ 1. Линейная алгебра.
-й семестр. РАЗДЕЛ. Линейная алгебра. Основные определения. Определение. Матрицей размера mn где m- число строк n- число столбцов называется таблица чисел расположенных в определенном порядке. Эти числа
Лекция 28 Глава 1. Векторная алгебра
Лекция 8 Глава Векторная алгебра Векторы Величины, которые определяются только своим числовым значением, называются скалярными Примерами скалярных величин: длина, площадь, объѐм, температура, работа, масса
Матрицы. А. Данильченко
Матрицы А. Данильченко http:ri.ifmo.ruct Основные определения Матрица элементов пространства X размера элемент пространства X[ ], записываемый в виде таблицы, т.е. его координаты упорядочены по строкам
Лекция 3. Excel. Избранное. ПЛАН
Лекция 3. Excel. Избранное. ПЛАН 3.1. ИМЕНОВАНИЕ ЯЧЕЕК И ОБЛАСТЕЙ 3.2. ФОРМУЛЫ 3.3. ФУНКЦИИ 3.4. ФОРМУЛЫ МАССИВА 3.5. ФОРМАТИРОВАНИЕ И ОФОРМЛЕНИЕ ЭТ 3.6. ДИАГРАММЫ 3.7. РАБОТА СО СПИСКАМИ 3.8. СВОДНЫЕ
Практикум по линейной алгебре
Министерство образования и науки РФ Нижегородский государственный университет им. Н.И. Лобачевского В.К. Вильданов Практикум по линейной алгебре Учебно-методическое пособие Нижний Новгород Издательство
Контрольная работа T=3. Задание 1. [1, стр. 2]
Дана матрица Контрольная работа A 0 T= Задание [, стр ] Определите ее размерность Выпишите характеристики этой матрицы: прямоугольная, квадратная, симметричная, единичная, нулевая, треугольная, диагональная,
МАТРИЦЫ. Определение
Определение Матрицей размером m n называется совокупность mn чисел, расположенных в виде прямоугольной таблицы из m строк и n столбцов. Числа из которых состоит матрица, называются элементами матрицы.
13. Билинейные и квадратичные функции
95 Билинейные и квадратичные функции Билинейная функция Определение Билинейной функцией (билинейной формой) на линейном пространстве L называется функция от двух векторов из L линейная по каждому из своих
Электронные таблицы ФОРМУЛЫ
Электронные таблицы ФОРМУЛЫ Понятие формулы Назначение электронной таблицы в первую очередь состоит в автоматизации вычислений над данными. Для этого в ячейки таблицы вводятся формулы. Ввод формулы начинается
Тема: Цель: Время: Задание: Литература:
Тема: Цель: Время: Задание: Литература: Практическая работа 0. Использование абсолютных и относительных адресов ячеек в формулах, решение уравнений и систем линейных алгебраических уравнений с помощью
Глава 1. Начала линейной алгебры
Глава Начала линейной алгебры Системы линейных уравнений Систему m линейных уравнений с n неизвестными будем записывать в следующем виде: + + + + n n = + + + + nn = m + m + m + + mnn = m () Здесь n неизвестные
Глава 4. Матрицы. Лекция Основные понятия.
Лекция 0. Глава 4. Матрицы. В этой главе мы рассмотрим основные виды матриц, операции над ними, понятие ранга матрицы и их приложения к решению систем линейных алгебраических уравнений. 4.. Основные понятия.
Глава 18. Функция массива МУМНОЖ
Глава 18. Функция массива МУМНОЖ Это глава из книги: Майкл Гирвин. Ctrl+Shift+Enter. Освоение формул массива в Excel. Предыдущая глава Оглавление Следующая глава Функция МУМНОЖ используется в Excel для
Тема 2: Матрицы и действия над ними
Тема 2: Матрицы и действия над ними А. Я. Овсянников Уральский федеральный университет Институт математики и компьютерных наук кафедра алгебры и дискретной математики алгебра и геометрия для физиков-инженеров
Функции для работы с массивами в Matlab

Функции для работы с массивами в Matlab

• Различные способы ввода матриц в пакете Mat. Lab » А = [3 1 -1; 2 4 3] А = 3 1 -1 2 4 3 » В = [4 3 -1 2 7 0 -5 1 2] B = 4 3 -1 2 7 0 -5 1 2 » С = [[3; 4] [-1; 2] [7; 0]] С = 3 -1 7 4 2 0 2

Посмотрите переменные рабочей среды, набрав в командной строке whos: А 2 x 3 48 double array В 3 x 3 72 double array С 2 x 3 48 double array 3

Удаление строк и столбцов • В Mat. Lab парные квадратные скобки [ ] обозначают пустой массив, который, в частности, позволяет удалять строки и столбцы матрицы. » М = [2 0 3 1 1 4 6 1 3]; » M(1, : )=[ ]; » M M = 1 1 4 6 1 3 » size(M) ans = 2 3 Аналогичным образом удаляются и столбцы. » М(: , 2: 3) = [ ] M = 1 6

5

Создание матриц специального вида • Для работы с матрицами удобно пользоваться следующими функциями q ones – формирование массива из единиц q zeros – формирование массива из нулей q eye – формирование единичной матрицы q rand – формирование массива из чисел, случайно распределённых на отрезке [0, 1] q randn – формирование массива из чисел, нормально распределённых на отрезке [0, 1] q magic – формирование магического квадрата q pascal – формирование квадрата Паскаля q diag – диагональная матрица q и др. 6

Матрицы специального вида • Рассмотрим основной синтаксис на примере функции создания единичной матрицы (eye) • eye(m) – создание единичной матрицы размера [m, m] • eye(m, n) – создание единичной матрицы размера [m, n] – «лишние» строки или столбцы дополняются нулями 7

Матрицы специального вида 8

Матрицы специального вида 9

Матрицы специального вида 10

Матрицы специального вида 11

Матрицы специального вида • Функция diag: работа с диагональными матрицами – у которых ненулевые элементы расположены на диагоналях • Синтаксис: – X = diag(v) – на главной диагонали матрицы X расположены элементы вектора v – X = diag(v, k) – на k-ой диагонали матрицы X расположены элементы вектора v (по умолчанию k=0) – v = diag(X, k) – извлечь из матрицы X k-ую диагональ и сохранить её в векторе v 12

Матрицы специального вида 13

Матрицы специального вида 14

Вычисления с элементами массивов • Простейшие операции над элементами массивов: – sum: сумма элементов – prod: произведение элементов – max: нахождение максимального элемента – min: нахождение минимального элемента – sort: сортировка элементов 15

Вычисления с элементами массивов • Рассмотрим работу некоторых из этих функций на примере sum • Для векторов эта функция возвращает сумму элементов • Для массивов – сумму элементов по каждому из столбцов – результат – вектор-строка • Остальные функции работают по этому же принципу 16

Вычисления с элементами массивов 17

Вычисления с элементами массивов • Максимальный и минимальный элементы: 18

Вычисления с элементами массивов • Вызов функций max/min с двумя выходными параметрами позволяет определить и индекс найденного элемента: 19

Вычисления с элементами массивов • Функция sort производит сортировку элементов матрицы по столбцам: 20

Поиск в массиве • find: определяет индексы элементов, удовлетворяющих заданному условию 21

Поиск в массиве • Пример применения команды find к массивам: 22

Математические матричные операции • det – вычисление определителя квадратной матрицы 23

Матричные и поэлементные операции • При работе с матрицами можно использовать два вида операторов: – матричные: производят действия по матричные: правилам матричной алгебры – поэлементные: производят действия над поэлементные: соответствующими элементами матриц • размеры матриц должны быть одинаковыми • от матричных операций отличаются точкой перед знаком операции 24

Матричные и поэлементные операции • ‘ транспонирование • матричное деление • + матричное (и «слева» поэлементное) • . * поэлементное сложение умножение • — матричное (и • . / поэлементное) деление вычитание • . ^ поэлементное • * матричное умножение возведение в степень • / матричное деление • . поэлементное • ^ матричное деление «слева» возведение в степень 25

Матричные и поэлементные операции 26

Матричные и поэлементные операции • Такие операции часто используются, если нужно применить какую либо функцию ко всем элементам матрицы. 27

Матричные и поэлементные операции • Некоторые операции по умолчанию считаются поэлементными: 28

Операции «деления» слева и справа • Применяются для решения систем линейных уравнений (СЛУ) • Деление слева () – для квадратных матриц реализует метод Гаусса – для прямоугольных матриц – метод наименьших квадратов 29

Заполнение матриц при помощи индексации Генерация матрицы Т осуществляется в три этапа: • 1. Создание массива T размера пять на пять, состоящего из нулей. • 2. Заполнение первой строки единицами. • 3. Заполнение части последней строки минус единицами до последнего элемента. 30

» A(1: 5, 1: 5) = 0 A= 0 0 0 0 0 0 0 » A(1, : ) = 1 A= 1 1 1 0 0 0 0 0 » A(end, 3: end) = -1 A= 1 1 1 0 0 0 0 0 -1 -1 -1 31

Объединение малых матриц в большую. Например, создадим вначале магическую матрицу размера 3 x 3: >> A=magic(3) А= 8 1 6 3 5 7 4 9 2 Теперь можно построить матрицу, содержащую четыре матрицы: >> В=[А А+16 : А+32 А+16] В =8 1 6 24 17 22 3 5 7 19 21 23 4 9 2 20 25 18 40 33 38 24 17 22 35 37 39 19 21 23 36 41 34 20 25 18 32

Ведение дневника. Загрузка рабочей области сессии. • diary filename – ведет запись на диск всех команд в строках ввода и полученных результатов в виде текстового файла с указанным именем; • diary off – приостанавливает запись в файл; • diary on – вновь начинает запись в файл. Таким образом, чередуя команды diary off и diary on, можно сохранять нужные фрагменты сессии в их формальном виде. Команду diary можно задать и в виде функции diary(‘file’), где строка ‘file’ задает имя файла. Например: >> diary myfile. m >> 1+2 ans = 3 >> diary off >> 2+3 ans = 5 >> diary on sin(l) ans = 0. 8415 33 >> diary off
Иллюстрированный самоучитель по MatLab › Массивы ячеек › Создание массивов ячеек [страница — 272] | Самоучители по математическим пакетам
Создание массивов ячеек
Массив ячеек – наиболее сложный тип данных в системе MATLAB. Это массив, элементами которого являются ячейки, содержащие любые типы массивов, включая массивы ячеек. Отличительным атрибутом массивов ячеек является задание содержимого последних в фигурных скобках <>. Создавать массивы ячеек можно с помощью оператора присваивания.
Существуют два способа присваивания данных отдельным ячейкам:
- индексацией ячеек;
- индексацией содержимого.
Рассмотрим первый способ. Для этого создадим файл-сценарий с именем се.m:
Примечание
Уже отмечалось, что в командном режиме малая русская буква «с» в строках ведет к переводу строки ввода. Однако в m-файлах, создаваемых в редакторе/отладчике М-фай-лов, эта недоработка обычно не проявляется. Хотя гарантии в этом, увы, пока нет.
В этом примере задан массив ячеек с четырьмя элементами: строкой символов, матрицей, комплексным числом и одномерным массивом из 11 чисел. Теперь можно вызвать этот массив:
‘Курить вредно!’ [ 2×2 double]
[ 2.0000 + 3.00001 ] [ 1×11 double]
Заметим, что к ячейкам такого массива можно обращаться с помощью индексирования, например в виде А(1.1), А(2.1) и т. д.
При индексации содержимого массив ячеек задается следующим образом:
A = ‘Курить вредно!’ ;
Теперь можно ознакомиться с созданным массивом ячеек в командном режиме:
‘Курить вредно! ‘ [ 2×2 double]
[ 2.0000 + 3.0000i ] [ 1x11double ]
При серьезной работе с массивами структур (записей) и массивами ячеек полезно иметь дополнительную информацию о списках значений. Для получения такой информации следует выполнить команду help list.
Иллюстрированный самоучитель по MatLab › Многомерные массивы › Работа с размерностями [страница — 262] | Самоучители по математическим пакетам
Работа с размерностями
Вычисление числа размерностей массива
Функция ndims(A) возвращает размерность массива А (если она больше или равна двум). Но если входной аргумент – массив Java или массив массивов Java, то независимо от размерности массива эта функция вернет 2. Следующий пример иллюстрирует применение функции ndims:
> > M = rand( 2 : 3 : 4 : 5 ):
Вычисление размера размерности массива
Для вычисления размера каждой размерности массива используется функция size:
- М = size(A.DIM) возвращает размер размерности, указанной скаляром DIM, в виде вектора-строки размером 2. Для двумерного или одномерного массива А size(A.l) возвращает число рядов, a size (А, 2) – число столбцов;
Для N-мерных массивов А при n>2 size(A) возвращает N-мерный вектор-строку, отражающий страничную организацию массива, последняя составляющая этого вектора равна N. В векторе отсутствуют данные о единичных размерностях (тех, где расположены вектор-строка или вектор-столбец, т. е .size(A,DIM)==l). Исключение представляют N-мерные массивы Java массивов javaarray, которые возвращают размер массива самого высокого уровня.
Вообще, когда входным аргументом size является javaarray, то возвращаемое число столбцов всегда 1, а число рядов (строк) равно размеру (длине) javarray.
- [M1, М2,М3,…, MN] = size(A) возвращает размер первых N размерностей массива А;
- D = size (А), для mxn матрицы А возвращает двухэлементный вектор-строку, в котором первая составляющая – число строк т, а вторая составляющая – число столбцов n;
- [m.n] = size(A) возвращает число рядов и столбцов в разных выходных параметрах (выходных аргументах в терминологии MATLAB) тип.
Перестановки размерностей массивов
Если представить многомерный массив в виде страниц, то их перестановка является перестановкой размерностей массива. Для двумерного массива перестановка часто означает транспонирование – замену строк столбцами и наоборот. Следующие функции обобщают транспонирование матриц для случая многомерных массивов и обеспечивают перестановку размерностей многомерных массивов:
- permute (A, ORDER) – переставляет размерности массива А в порядке, определяемом вектором перестановок ORDER. Вектор ORDER – одна из возможных перестановок всех целых чисел от 1 до N, где N – размерность массива А;
- ipermute(A, ORDER) – операция, обратная permute: permute(permute(A. ORDER), ORDER)=A
Ниже приводятся примеры применения этих функций и функции size:
Научный форум dxdy
Как в Maple перевести двоичное представление числа в массив?
Помогите пожалуйста, поскольку в Maple новичек.
Вот например есть у меня число 11, я его перевел в двоичное представление получилось естественно «1011», а теперь мне надо сделать цикл: если первый элемент массива равен 1, то сделать одно преобразование, если нулю то сделать другое преобразование.
Вопрос: как мне загнать двоичное представление в массив и как обращаться к каждому элементу массива? Спасибо.
Похожие публикации:
- Где movie maker в windows 10
- Где найти стикеры для telegram на андроид
- Где хранятся временные файлы archicad
- Как активировать wolfram mathematica
Как задать систему в maple
Многофункциональная двумерная графическая команда plot( ) расположена в системной библиотеке Maple, и поэтому доступна в любое время.
С помощью этой команды можно построить график одной или нескольких функций одной вещественной переменной, заданных в явном или параметрическом виде, а также отобразить множество точек в декартовой или полярной системе координат.
Синтаксис команды plot( ) следующий:
plot(f, h, v,опции); или plot(f, h, v);
f-функция, график которой необходимо отобразить, h и v представляют, соответственно, диапазон изменения независимой переменной по горизонтальной оси графика и диапазон изменения значения функции вдоль вертикальной оси графика.
Диапазон изменения независимой переменной h задается в виде x=a..b, где a и b-наименьшее и наибольшее значения изменения переменнной,а x-имя независимой переменнной.
Если диапазон не задан, т.е. второй параметр представляет собой просто имя независимой переменной в функции, то по умолчанию принимается следующий интервал ее изменения -10..10. Этот параметр (с диапазоном или нет) обязательно должен присутствовать при задании графика командой plot().
Вертикальный диапазон v, задаваемый третьим параметром, ограничивает вывод графика определенной областью изменения функции. Он необязателен.
Опции определяют вид отображаемого графика: толщину, цвет и тип линии графика, тип осей координат, размещение надписей и т.д. и задаются в форме уравнений имя_опции=значение.Набор возможных опций во всех командах двумерного графического вывода, за некоторым исключением, одинаков.
При отсутствии явного задания опции принимаются их значения по умолчанию.
Ниже в таблице представлены некоторые опции двумерной графики и соответствующие им значения.
Типы данных системы Maple 7
Язык Maple (или Maple-язык) является одновременно входным языком общения с Maple 7 и языком ее программирования. Входящие в него средства (прежде всего операторы и функции) подобраны настолько полно и удачно, что при решении подавляющего большинства типовых математических задач от пользователя не требуется знаний даже основ программирования. Для решения нужной задачи обычно достаточно составить алгоритм и подобрать набор нужных для его реализации функций и иных средств Maple-языка.
В то же время Maple-язык — один из самых мощных языков программирования математических задач, содержащий почти 3000 операторов, команд и функций, входящих в ядро, основную библиотеку и пакеты функций Maple 7. При этом относящаяся к традиционному программированию часть Maple-языка реализована с помощью довольно скромного набора специальных знаков и зарезервированных слов.
Большинство функций Maple 7 (в частности, все, входящие в пакеты) написаны на этом языке. Поэтому знание этого языка является определяющим в серьезном изучении Maple. Ниже Maple-язык описывается как типичный язык программирования.
Алфавит Maple-языка содержит 26 малых латинских букв (от а до z), 26 больших латинских букв (от А до Z), 10 арабских цифр (от 0 до 9) и 32 специальных символа (арифметические операторы +, -, *, /, знак возведения в степень ж и др.). Все они будут рассмотрены в данной главе. Имеется пять пар альтернативных символов (означающих одно и тоже):
К специальным одиночным и составным знакам относятся элементы синтаксиса языка:
Комментарии в программе, не выводимые в ячейки вывода, задаются после символа # . В них допустимо использовать все символы кодовых таблиц, что важно при вводе русскоязычных комментариев, использующих символы кириллицы. Применение последних для идентификаторов (имен) объектов недопустимо.
Зарезервированные слова используются для создания условных выражений, циклов, процедур и управляющих команд. Список 42 зарезервированных слов Maple 7 дан ниже.
Совокупность правил, по которым записываются определения всех объектов Maple-языка, называется его синтаксисом. Некоторые особенности синтаксиса полезно знать уже в начале освоения Maple. Например, то что знак — (минус) имеет двойное значение. Применительно к одному числу, переменной или выражению он меняет их знак. Однако два знака минус подряд (например, в записи —3) задавать нельзя. Другое назначение знака минус — создание операции вычитания, например 5-2 или а-b. Соответственно двойное назначение имеет и знак •+, причем число без знака считается положительным, так что +5=5.
При вводе действительных чисел с порядком для указания порядка используется символ * (например, 2*1(Г100 или 2*1(Г-100). Для возведения числа в степень наряду с оператором *• можно использовать и составной оператор ** ( две звездочки подряд). Для изменения общепринятого приоритета вычислений используются круглые скобки, в них же задаются параметры функций и процедур. Более подробно синтаксис Maple-языка рассматривается ниже.
Некоторые операторы представлены двумя символами — например, оператор присваивания переменным их значения := содержит двоеточие и знак равенства. В таких операторах между символами недопустим знак пробела. Однако его можно использовать между отдельными частями выражений — так, (а+b)/с эквивалентно (а + b) / с.
По набору операторов и функций Maple-язык намного превосходит любой универсальный язык программирования. Это позволяет наряду с обычными программными конструкциями задавать множество специальных конструкций, подчас резко упрощающих запись математических выражений. К примеру, возможна работа со списками имен функций. Язык Maple имеет множество операций над символьными выражениями и гибкий аппарат создания и преобразования типов данных и результатов вычислений.
Для большинства пользователей возможности языка Maple кажутся явно избыточными, и большинство наиболее распространенных операций в нем реализуется несколькими способами. Однако каждый пользователь волен выбирать из множества возможностей именно те, которые ему необходимы в конкретной предметной области. Поскольку таких областей превеликое множество, то обширные возможности Maple лишними не являются.
Выражения и основы работы с ними
Выражения и их ввод
Фактически Maple 7 — это система для манипулирования математическими выражениями.
Выражение в системе Maple — это объект, вполне соответствующий сути обычного математического выражения. Оно может содержать операторы, операнды и функции с параметрами. В этом уроке выражения записываются на Maple-языке без использования специальных средств для их представления в естественном математическом виде. Благодаря этому запись выражений и приводимых примеров одинаково пригодна для любой реализации системы Maple — даже под MS-DOS. Такая запись получается наиболее короткой, ее можно выводить и распечатывать без применения графических средств. Кроме того, она соответствует виду, принятому в справочной системе Maple.
Однако пользовательский интерфейс системы Maple 7 для Windows позволяет представлять как вводимые, так и выводимые выражения в самых различных формах, в том числе в естественном математическом виде — примеры этого многократно приводились и будут приводиться в дальнейшем. Maple 7 имеет многочисленные функции преобразования форматов, позволяющие менять форму представления данных.
Выражения в Maple могут оцениваться и изменяться в соответствии с заданными математическими законами и правилами преобразований. Например, функция упрощения выражений simplify способна упрощать многие математические выражения, записанные в качестве ее параметра (в круглых скобках):

Символьные преобразования и вычисления математических выражений более подробно будут рассмотрены в следующем уроке.
Для выполнения любых математических операций необходимо обеспечить ввод в систему исходных данных — в общем случае математических выражений. Для ввода их и текстовых комментариев служат два соответствующих типа строк ввода. Переключение типа текущей строки ввода осуществляется клавишей F5. Строка ввода математических выражений имеет отличительный символ >, а строка ввода текстов такого признака не имеет.
В строке ввода может располагаться несколько выражений. Фиксаторами (указанием, что выражение окончено) их могут быть символы ; (точка с запятой) и : (двоеточие). Символ «:» фиксирует выражение и задает вывод результатов его вычисления. А символ «:» фиксирует выражение и блокирует вывод результатов его вычисления. Фиксаторы выполняют также функцию разделителей выражений, если в одной строке их несколько.
Ввод выражения оканчивается нажатием клавиши Enter. При этом маркер ввода (жирная мигающая вертикальная черта) может быть в любой позиции строки. Если надо перенести ввод на новую строку, следует нажимать клавиши Shift и Enter совместно. С помощью одного, двух или трех знаков % (в реализациях до Maple V R5 это был знак прямых кавычек «) можно вызывать первое, второе или третье выражение с конца сессии:

Особая роль при вводе выражений принадлежит знакам прямого апострофа (одиночного ‘ или двойного »). Заключенное в такие знаки выражение освобождается от одной пары (закрывающего и открывающего знаков ‘):

Некоторые другие возможности обрамления выражений апострофами мы рассмотрим позже. Наиболее важная из них — временная отмена выполненного ранее присваивания переменным конкретных значений.
Для завершения работы с текущим документом достаточно исполнить команду quit, done или stop, набранную в строке ввода (со знаком ; в конце).
Встречая выражение, Maple 7 оценивает его, то есть устанавливает возможность его вычисления. Если выражение — скалярная переменная, то ее значение будет выведено в ячейке вывода. Для переменных более сложных типов выводится не их значение, а просто повторяется имя переменной. Просто повторяются также имена неопределенных переменных.
Для оценивания выражений различного типа существует группа функций, основные из которых перечислены ниже:
Для функции evalf параметр n является необязательным, при его отсутствии полагается n=10 , то есть вещественные числа выводятся с мантиссой, имеющей десять цифр после десятичной запятой.
В выражении ехрr могут использоваться константы, например Pi, exp(l), и функции, такие как ехр, 1 n, arctan, cosh, GAMMA и erf. В матричном выражении mexpr для функции evalr могут использоваться операнды в виде матриц и матричные операторы &*, +, — и ^. В комплексных выражениях mexpr наряду с комплексными операндами вида (а + I*b ) могут использоваться многие обычные математические функции:
Решение математических и физических задач в системе Maple
Система компьютерной математики Maple, обладающая удобным графическим интерфейсом, обеспечивает решение широкого спектра инженерных, математических и научных задач.
Цель вебинара. Дать представление о возможностях среды Maple и познакомить с нововведениями последней версии. Показать, как быстро и просто начать работу c этой системой, а также познакомить с особенностями программирования в Maple для решения математических и физических задач.
Краткое описание вебинара.
Основное математическое ПО компании Maplesoft, Maple предлагает уникальное сочетания вычислительной мощи и простоты использование для решения широкого круга задач. Среда для создания документов Maple предлагает интуитивный графический интерфейс, который позволяет начать работу без знания синтаксиса. Результаты исследований и вычислений находят свое отражение в живых интерактивных документах издательского качества.
Слушатели вебинара получат представление о возможностях среды Maple, о том, как начать работу c системой Maple, а также познакомятся с особенностями программирования в Maple для решения различных задач. Преимущества Maple, отраженные в данном вебинаре позволят учащимся лучше и быстрее разобраться в сложных математических и физических понятиях, а ученым и инженерам помогут создать сложные алгоритмы и модели.
Вебинар проведет Галина Коган, технический специалист отдела математического ПО Softline.
В конце вебинара у всех участников будет возможность задать вопросы и пообщаться с докладчиком.
Maple как работать на нескольких страницах одновременно. Основные объекты и команды Maple. Внутренняя структура объектов Maple
· знать синтаксис основных математических функций системы Maple.
Система аналитических вычислений Maple – интерактивная система. В данном случае это означает, что пользователь вводит команду или оператор языка Maple в области ввода рабочего листа и, нажав клавишу , сразу же передает ее аналитическому анализатору системы, который выполняет ее. При правильном введении команды в области вывода появляется результат выполнения этой команды, если команда содержит синтаксические ошибки или ошибки выполнения, система печатает сообщение об этом. Если ошибку надо исправить, то следует вернуться к оператору, откорректировать его и снова выполнить. Выполнив введенную команду, система ожидает очередной команды от пользователя. Можно вернуться в любой момент к любой команде или оператору на рабочем листе, подкорректировать его и снова выполнить. Однако, если на рабочем листе есть команда, использующая результат вновь вычисленной, то ее следует также снова вычислить, установив на нее курсор, и, нажав клавишу , а если таких команд много, то можно выполнить команду графического интерфейсаEdit ® Execute ® Worksheet для повторного вычисления всех команд рабочего листа.
Каждый оператор или команда обязательно завершаются разделительным знаком. Таких знаков в системе Maple два – точка с запятой (;) и двоеточие (:). Если предложение завершается точкой с запятой, то оно вычисляется, а в области вывода отображается результат. При использовании двоеточия в качестве разделителя команда выполняется, но результаты ее работы не отображаются в области вывода рабочего листа. Это удобно, например, при программировании в Maple, когда нет необходимости в выводе каких-то промежуточных результатов, получаемых из операторов цикла, так как вывод этих результатов может занять много места на рабочем листе, да и может потребоваться значительное количество времени на их отображение.
Здесь и далее для команд Maple используется запись в форме синтаксиса языка Maple. Если при выполнении примеров возникает желание отображать команды в математической нотации, то следует командой Options ® Input Display ® Standard Math Notation установить соответствующий режим отображения.
В Maple реализован свой язык, с помощью которого происходит общение пользователя с системой. Базовыми понятиями являются объекты и переменные, из которых с помощью допустимых математических операций составляются выражения.
Простейшими объектами , с которыми может работать Maple , являются числа, константы и строки.
Числа в системе Maple могут быть следующих типов: целые, обыкновенные дроби, радикалы, числа с плавающей точкой и комплексные. Первые три типа чисел позволяют выполнять точные вычисления (без округлений) разнообразных математических выражений, реализуя точную арифметику. Числа с плавающей точкой являются приближенными, в которых число значащих цифр ограничено. Эти числа служат для приближения (или аппроксимации) точных чисел Maple. Комплексные числа могут быть как точными, если действительная и мнимая части представлены точными числами, так и приближенными, если при задании действительной и мнимой частей комплексного числа используются числа с плавающей точкой.
Целые числа задаются в виде последовательности цифр от 0 до 9. Отрицательные числа задаются со знаком минус (–) перед числом, нули перед первой ненулевой цифрой являются не значащими и не влияют на величину целого числа. Система Maple может работать с целыми числами произвольной величины, количество цифр практически ограничено числом 2 28 . Вычисления с целыми числами реализуют четыре арифметических действия (сложение +, вычитание –, умножение *, деление /) и вычисление факториала (!).
Maple представляет большое целое число, которое не помещается в строке области вывода используя символ обратного слэша (\) в качестве символа продолжения вывода на следующей строке. Последняя команда вычисляет количество цифр в результате предыдущего вычисления. В ней в качестве параметра используется операция%, которая является всего лишь удобной формой ссылки на результат выполнения предыдущей операции. В Maple имеются еще две подобные операции, которые идентифицируют результаты предпредыдущей и предпредпредыдущей команд.Их синтаксис выглядит, соответственно, следующим образом:
В Maple имеется достаточно большой набор команд, позволяющих выполнить действия, специфичные при обработке целых чисел: разложение на простые множители (ifactor), вычисление частного (iquo) и остатка (irem) при выполнении операции целого деления, нахождения наибольшего общего делителя двух целых чисел (igcd), выполнение проверки, является ли целое число простым (isprime) и многое другое.
Для проверки вычисления частного и остатка двух целых чисел использованы операции получения результата выполнения предыдущей (вычисление частного) и предпредыдущей (вычисление остатка) команд. Результатом команды isprime () является булева константа true (истина) или false (ложь).
Набрав в области ввода рабочего листа команду? integer, можно получить список всех команд для работы с целыми числами
Обыкновенные дроби задаются с помощью операции деления двух целых чисел. Заметим, что Maple автоматически производит операцию сокращения дробей. Над обыкновенными дробями можно выполнять все основные арифметические операции.
Если при задании дроби ее знаменатель сокращается (см. последнее вычисление в примере), то такая «дробь» трактуется системой Maple как целое число.
Часто представление результата в виде обыкновенной дроби не совсем удобно, и возникает задача преобразования ее в десятичную дробь. Для этого используется команда evalf(), которая аппроксимирует обыкновенную дробь числами с плавающей точкой, используя десять значащих цифр в мантиссе их представления. Если точность по умолчанию не достаточна, то ее можно задать вторым параметром указанной функции.
Дробь и ее десятичное представление не являются идентичными объектами Maple. Десятичное представление всего лишь аппроксимация точной величины, представленной обыкновенной дробью.
Радикалы задаются как результат возведения в дробную степень целых или дробных чисел, или вычисления из них же квадратного корня функцией sqrt(), или вычисления корня n ‑ой степени с помощью функции surd (число, n). Операция возведения в степень задается символом ^ или последовательностью из двух звездочек (**). При возведении в степень дробей их следует заключать в круглые скобки, как, впрочем, и дробный показатель степени. При задании радикалов также производятся возможные упрощения, связанные с вынесением из-под знака радикала максимально возможной величины.
Вычисления с целыми, дробями и радикалами являются абсолютно точными, поскольку при работе с этими типами данных программа Maple не производит никаких округлений в отличие от чисел с плавающей точкой.
Числа с плавающей точкой задаются в виде целой и дробной частей, разделенных десятичной точкой, с предшествующим знаком числа, например, 3.4567, -3.415. Числа с плавающей точкой можно задавать, используя так называемую экспоненциальную форму записи, в которой сразу же после вещественного числа с плавающей точкой или обычного целого, называемого мантиссой, ставится символ е или е, после которого задается целое число со знаком (показатель степени). Такая форма записи означает, что мантиссу следует умножить на десять в степени числа, соответствующего показателю степени, чтобы получить значение числа, записанного в такой экспоненциальной форме. Например, 2.345е4 соответствует числу 23450.0. Таким образом, можно представлять очень большие по абсолютному значению числа (показатель степени положительное число) или очень маленькие (показатель степени отрицательное число).
Из чисел составляются математические выражения с помощью арифметических операций. Символы арифметических операций в Maple перечислены в табл. 1.
Таблица 1. Арифметические операции
Последовательность выполнения арифметических операций соответствует стандартным правилам старшинства операций в математике: сначала производится возведение в степень, затем умножение и деление, а в конце – сложение и вычитание. Все действия выполняются слева направо. Операция вычисления факториала имеет наибольший приоритет. Для изменения последовательности арифметических операций следует использовать круглые скобки.
Если все числа в выражении являются целыми, дробями или радикалами, то результат представляется также с использованием этих типов данных, но если в выражении присутствует число с плавающей точкой, то результатом вычисления такого «смешанного» выражения будет также число с плавающей точкой, если только в выражении не присутствует радикал. В этом случае радикал вычисляется точно, а коэффициент при нем вычисляется либо точно, либо в виде числа с плавающей точкой в зависимости от типа сомножителей.
Система аналитических вычислений Maple всегда пытается произвести вычисления с абсолютной точностью. Если это не получается, тогда подключается арифметика с вещественными числами.
Maple умеет работать и с комплексными числами . Для мнимой единицы
в Maple используется константа I . Задание комплексного числа не отличается от его обычного задания в математике.
В Maple имеется несколько способов представления функции.
Способ 1. Определение функции с помощью оператора присваивания (:= ): какому-то выражению присваивается имя, например:
Если задать конкретное значение переменной х , то получится значение функции f для этого х . Например, если продолжить предыдущий пример и вычислить значение f при , то следует записать:
После выполнения этих команд переменная х имеет заданное значение .
Чтобы насовсем не присваивать переменной конкретного значения, удобнее использовать команду подстановки subs( ,f), где в фигурных скобках указываются переменные хi и их новые значения аi (i =1,2,…), которые следует подставить в функцию f . Например:
Все вычисления в Maple по умолчанию производятся символьно, то есть результат будет содержать в явном виде иррациональные константы, такие как, и другие. Чтобы получить приближенное значение в виде числа с плавающей запятой, следует использовать команду evalf(expr,t), где expr – выражение, t – точность, выраженная в числах после запятой. Например, в продолжение предыдущего примера, вычислим полученное значение функции приближенно:
Здесь использован символ (% ) для вызова предыдущей команды.
Способ 2. Определение функции с помощью функционального оператора, который ставит в соответствие набору переменных (x1,x2,…) одно или несколько выражений (f1,f2,…) . Например, определение функции двух переменных с помощью функционального оператора выглядит следующим образом:
Обращение к этой функции осуществляется наиболее привычным в математике способом, когда в скобках вместо аргументов функции указываются конкретные значения переменных. В продолжение предыдущего примера вычисляется значение функции:
Способ 3. С помощью команды unapply(expr,x1,x2,…) , где expr – выражение, x1,x2,… – набор переменных, от которых оно зависит, можно преобразовать выражение expr в функциональный оператор. Например:
В Maple имеется возможность определения неэлементарных функций вида
> piecewise(cond_1,f1, cond_2, f2, …).
записывается следующим образом.
Системы компьютерной алгебры
Maple — специализированный математический пакет, которым пользуются профессиональные математики во всем мире. Подобные пакеты также называются системами компьютерной алгебры. Из множества подобных систем (Maple, Matlab, Mathcad, Mathematica, Macsyma, Derive, Axiom, MuPAD) Maple является признанным лидером в области символьных вычислений (то есть в преобразовании выражений с использованием переменных, многочленов, функций и т.д.). Помимо этого в Maple входят модули, облегчающие работу в таких разделах математики, как высшая алгебра, линейная алгебра, аналитическая геометрия, теория чисел, математический анализ, дифференциальные уравнения, комбинаторный анализ, теория вероятностей, статистика и многих других.
Для получения справки по той или иной команде необходимо в окне Maple ввести?command (заменив command на имя команды).
Maple как суперкалькулятор
В рабочем листе (worksheet) системы Maple можно вводить команды после приглашения » > «. Команда должна завершаться символом » ; «, ее результат немедленно выводится на экран. Если вместо » ; » поставить » : «, то команда будет выполнена, но результат ее работы не будет напечатан. Например:
Как мы видим, Maple выдает ответ в точном виде в виде рационального выражения. Если хочется представить его в виде десятичной дроби (с некоторой точностью) воспользуйтесь функцией evalf . Ее первый обязательный параметр — вычисляемое выражение, второй (необязательный) — количество значащих десятичных знаков (учтите, что при этом выражение округляется для вывода соответствующего количества знаков):
Символ % обозначается последнее вычисленное Maple выражение, %% — предпоследнее, %%% — предпредпоследнее (а вот обозначения %%%% уже не существует).
Числа и константы
Если в выражении встречается число, записанное с плавающей точкой (например, 3.14 или 5.6e-17), то все вычисления выполняются приближенно, в противном случае вычисления проводятся точно. В Maple есть следующие константы: Pi Число пи
I Мнимая единица i
exp(1) Основание натуральных логарифмов e
infinity Бесконечность
true Логическая истина
false Логическая ложь
Вычисления с участием констант выполняются точно (если только их значение не будет переведено к действительному значению), например
0.5358979324 10 -7
Операторы
В Maple существуют следующие операторы:
Арифметические: + , — , * , / , ^ (возведение в степень), ! (факториал).
Логические: , >= , (не равно).
Переменные
Переменной является любой идентификатор (состоящий из латинских букв и цифр, начинающийся с цифры). Переменной может быть присвоено любое значение при помощи оператора присваивания:= . Переменная, которой не присвоено никакое значение считается свободной переменной и ее имя сохраняется в арифметических вычислениях. Например:
Стандартные функции
Знак x (возвращает 1, -1 или 0) — sign(x)
Тригонометрические функции: sin(x) , cos(x) , tan(x) , cot(x)
Обратные тригонометрические: arcsin(x) , arccos(x) , arctan(x) , arccot(x)
Натуральный, десятичный логарифм и логарифм по данному основанию: ln(x) , log10(x) , log[a](x)
Преобразование математических выражений
В выражение могут входить константы, свободные переменные, математические функции. Пример выражения:
Довольно часто в качестве выражений выступают многочлены от одной или нескольких переменных или рациональные выражения. Maple содержит различные функции для преобразования таких выражений.
Функция factor(eq) разлагает выражение eq на множители.
Функция expand(eq) раскрывает скобки в выражении. Если указать один или несколько дополнительных параметров в виде expand(eq,a,b,c) , то выражения a , b , c раскрываться не будут. Это полезно, если необходимо каждое слагаемое умножить на какое-то выражение.
Для приведения дробей к общему знаменателю с последующим сокращением используется функция normal(eq) .
(a 4 -b 4)/((a 2 +b 2)ab)
Функция simplify(eq) упрощает выражение eq . В качестве второго (необязательного) параметра, ей можно указать, какие выражения преобразовывать: trig — тригонометрические, power — степенные, radical — радикалы, exp — экспоненты, ln — логарифмы.
Решение уравнений
Обыкновенные уравнения
Для решения уравнений используется функция solve(eq,x) , где eq — решаемое уравнение, x — имя переменной, относительно которой разрешается уравнение. Пример:
1/2-5 1/2 /2 ,-1/2+5 1/2 /2
Если уравнение имеет несколько решений, то решение уравнения можно присвоить некоторой переменной, например p . Далее можно использовать k -е решение уравнения в виде p[k] :
Системы уравнений
Системы уравнений решаются с помощью такой же функции solve( , ) , только теперь в параметрах функции следует указывать в первых фигурных скобках через запятую уравнения, а во вторых фигурных скобках перечисляются через запятую переменные, относительно которых требуется решить систему. Если необходимо использовать полученные решения уравнений для дальнейших вычислений, то необходимо результат, возвращаемый функцией solve присвоить какой-нибудь переменной, например, p , а затем выполнить команду assign(p) . Пример:
Численное решение уравнений
Попробуем решить уравнение: x 6 -2x+1=0. Использование функции solve даст нам один корень -1 и еще набор выражений вида RootOf(_Z^5+_Z^4+_Z^3+_Z^2+_Z-1,index = 1). Дело в том, что произвольное уравнение степени выше 4 с рациональными коэффициентами может не иметь корней, выразимых в виде радикалов над рациональными числами. Решения всевозможных таких уравнений называются алгебраическими числами. Данное уравнение также неразрешимо в радикалах, и Maple нашла нам единственный корень, выразимый в радикалах (1) и сообщила, что оставшиеся корни являются алгебраическими числами: корнями многочлена z 5 +z 4 +z 3 +z 2 +z-1=0 (именно этот многочлен указан в аргументе функции RootOf). Maple умеет работать с алгебраическими числами, но можно также найти приближенное численное решение при помощи функции fsolve:
Иногда Maple при решении трансцендентных уравнений не выводит сложные выражения в виде радикалов, а оставляет их в форме RootOf. Чтобы заставить Maple выводить все решения в виде радикалов (естественно, если они представимы в такой форме), необходимо присвоить значение true системной переменной _EnvExplicit (_EnvExplicit:=true).
Решение тригонометрических уравнений
Команда solve , применяемая для решения тригонометрических уравнений, находит только главные решения, то есть выводит только одно решение из серии периодических решений:
Для того, чтобы Maple находила все решения, необходимо предварительно присвоить значение true системной переменной _EnvAllSolutions . Тогда мы получим результат в другом виде, в котором будут фигурировать переменные Z1
. Эти переменные обозначают произвольную константу целого типа, в более привычном виде решения можно будет записать, как π/4+πn , πk .
Упражнения
- Какая цифра в десятичной записи числа π стоит на сотом месте после запятой?
- Сколько цифр в десятичной записи 179! ?
- Вычислите значение (6+2×5 1/2) 1/2 -(6-2×5 1/2) 1/2 .
- Вычислите sin 4 (π/8)+cos 4 (3π/8)+sin 4 (5π/8)+cos 4 (7π/8).
- Упростите выражение (1 + sin(2x ) + cos(2x ))/(1 + sin(2x ) — cos(2x )).
- Разложите на множители многочлен x 3 -4x 2 +5x -2.
- Найдите численное решение уравнения cos x =x .
- Решите уравнение 3x -(18x +1) 1/2 +1=0
- Решите уравнение ||2x -3|-1|=x .
- Решите уравнение (найдите все решения) sin x — cos x =1/sin x .
- Решите систему уравнений:
10(x y ) 1/2 +3x -3y =58 x —y =6
04. 01 Преобразование уравнений. Команды lhs и rhs
* Entering and Manipulating Equations: The lhs and rhs commands *
Напомним, что уравнению, точно так же как и выражению, можно присвоить имя. В следующей командной строке мы введём уравнение и присвоим ему имя » eq1 » :
Мы можем вывести на экран левую и правую части уравнения по-отдельности при помощи команд lhs и rhs :
Воспользуемся командами lhs и rhs для того, чтобы привести уравнение к стандартному виду, в котором все члены собраны слева, а справа остался только 0:
> eq2:=lhs(eq1)-rhs(eq1)=0;
04. 02 Нахождение точных корней. Команда solve
* Finding Exact Solutions: The solve command *
Рассмотрим вначале рациональные уравнения. Известно, что существуют алгоритмы определения точных корней рациональных корней вплоть до 4-го порядка включительно. В Maple-команду solve и заложены эти алгоритмы.
Воспользуемся командой solve для нахождения точных корней кубического уравнения :
Обратите внимание: в команде мы указываем, относительно какой переменной следует решать уравнение. Хотя в нашем конкретном случае это и не обязательно:
Maple нашел все 3 действительных корня и вывел их (в неупорядоченном виде ).
Иногда очень важно выбрать конкретный корень, чтобы потом использовать в дальнейших преобразованиях именно его. Для этого заранее следует присвоить имя результату исполнения команды solve . Назовём его X . Тогда конструкция X будет соответствовать первому корню из списка (подчеркнем: это не обязательно меньший корень! ), X — второму корню, и т.д. (Скобки — квадратные! ):
Посмотрите, однако, что будет выведено в результате выполнения похожей команды:
Ещё раз подчеркнём: практика показывает, что уравнению целесообразно присвоить имя. Традиционно в Maple такое имя начинается с букв eq :
(Не путать оператор присваивания » := » со знаком равенства » = » !)
Теперь решим уравнение при помощи команды solve . Множеству корней присвоим имя X :
Для убедительности проверим, нет ли среди найденных корней посторонних. Проверку выполним непосредственной подстановкой
Разумеется, частенько «точные» решения довольно громоздки, если не сказать иначе. Например, это касается уравнения :
Теперь Вам понятно, о чем речь? Для себя заметьте, что мнимая единица в Maple обозначается посредством прописной буквы I . Разумеется, в таких случаях не грех найти приближенные значения корней. Имея на руках точное решение, Вы и сами сообразите, как это сделать:
В подобных ситуациях хорошей альтернативой команде solve является fsolve , особенности которой будут рассмотрены в следующем параграфе.
Команда solve используется при отыскании точных решений не только рациональных уравнений. Ниже приведено несколько тому иллюстраций. Но для многих типов иррациональных, показательных, логарифмических, тригонометрических и даже рациональных уравнений точное решение искать бесполезно. На помощь призывается команда fsolve .
Иногда (а в тригонометрии — всегда ) Maple, по умолчанию , не выводит всё множество корней:
Но безвыходных ситуаций не бывает! Взяв за основу полученный результат, воспользуйтесь своими знаниями тригонометрических уравнений и запишите полное решение (как? ).
Упражнение 4.1
Решить уравнение Разберитесь, сколько различных корней имеет уравнение. Как Maple поступает при наличии равных корней?
Совет : разложите на множители левую часть уравнения.
> factor(x^3-11*x^2+7*x+147);
Корень х = 7 является двукратным, а потому у кубического уравнения только два различных корня. Разложение на множители левой части уравнения — тому подтверждение.
04. 03 Поиск приближенных корней. Команда fsolve
* Finding Approximate Solutions: The fsolve command *
Для приближенного решения уравнений используется Maple-команда fsolve . В случае рационального уравнения, fsolve выводит весь список действительных корней (см. Пример 01). Для трансцендентных уравнений эта команда, по умолчанию, выводит только один корень (см. Примеры 02 и 03).
При помощи fsolve найдём приближенные значения сразу всех четырёх действительных корней рационального уравнения :
Эти четыре корня и составляют исчерпывающее решение исходного рационального уравнения (хотя и приближенное ).
Используя команду fsolve , найти хотя бы один действительный корень уравнения :
Maple и вывел только один корень. На этот раз Maple не стал «живописать». Как теперь убедиться в том, что других действительных корней нет? Следующий пример даёт такой инструментарий.
Получить все действительные корни уравнения и убедиться в этом.
Шаг первый ( Основная идея ) : найдём графическое решение уравнения. Для этого построим график функции, стоящей в левой части уравнения. Абсциссы точек пересечения этого графика с осью Ох и будут искомыми корнями.
Т.к. мы умело подобрали диапазоны изменений абсцисс и ординат точек графика, то легко обнаружим 4 точки пересечения линии с осью Ох. Одна из них соответствует корню, найденному в Примере 02 (какая именно? ).
Второй корень очевиден: х = 0. А как поточнее найти остальные?
Шаг второй ( Уточнение ) : применим команду fsolve более «зряче». В Maple предусмотрена возможность указания промежутка, на котором отыскиваются корни. В частности, для определения отрицательного корня нашего уравнения, укажем, что поиски следует вести в «районе» [-1;-0.2]. Об этом красноречиво свидетельствует графическое решение.
Оставшиеся корни явно принадлежат промежуткам и . Расскажем об этом команде fsolve :
Ну а что произойдёт, если мы подсунем Maple «пустой участок»? Например, отрезок для нашего уравнения. Там графического решения явно нет:
Maple выдаёт название команды, само уравнение, имя аргумента и отрезок. Т.е. ничего нового. Мол: «Ищите корни сами, а я не нашел».
Шаг третий ( Дополнительный анализ ) : Как теперь удостовериться в том, что найдены все корни , а не только в видимой области графического решения? Для этого следует расширить интервал поисков:
Новых точек пересечения нет. В конце концов мы понимаем, что экспоненциальное слагаемое на границах промежутка вносит самый существенный вклад в величину функции из левой части уравнения. Значения функции в этой области стремятся к , а потому дополнительных корней нам не найти.
Попробуем в других местах: справа и слева от области найденных корней.
И здесь ни одного дополнительного корня! Поняв, что с влиянием показательной части уравнения всё ясно, делаем окончательные выводы.
Исчерпывающее решение уравнения состоит из четырёх корней: -.8251554597 , 0 , 1.545007279 , 4.567036837 .
Применим команду fsolve для приближенного решения трансцендентного уравнения .
Как и в предыдущем случае, найдём вначале качественное графическое решение. Для этого ещё нужно угадать, как разбросать по обеим частям уравнения его члены. Но графические возможности Maple настолько великолепны, что почти всегда можно собирать все члены уравнения с одной стороны.
Рассмотрим уравнение, равносильное данному: . Абсциссы точек пересечения графика функции, стоящей в левой части уравнения, с осью Ох и будут искомыми корнями.
График указывает область поисков корней: промежуток . Настаёт черёд команды fsolve :
Корень найден. Но, очевидно, он — не единственный. Расширьте область поисков и ещё раз примените команду fsolve для отыскания второго корня.
Упражнение 4.2
Найти все действительные корни уравнения , начав с графического решения.
Построим график левой части уравнения:
В результате находим корни уравнения в первом приближении: -2 ; -1.5 ; 0 . Применим теперь команду fsolve без указания диапазона поиска (оценим возможности Maple ):
С удовлетворением отмечаем, что Maple выводит все три корня (Не будем забывать, что решали рациональное уравнение.)
Упражнение 4.3
Найти все корни уравнения . Воспользуйтесь графическим решением. Проверьте каждый корень непосредственной подстановкой.
Приведём уравнение к стандартному (для этого раздела) виду:
Теперь построим график левой части уравнения:
По всей видимости, существует два корня. Один примерно равен -2, а другой, похоже, 2.
Применим команду fsolve , ограничив диапазон поиска:
Непосредственной подстановкой проверим корни:
Обратите внимание: в обоих случаях истинного равенства нет. С учётом ошибок при округлении, разумное расхождение вполне допустимо.
Убедитесь в отсутствии других корней. Ответ обоснуйте.
Упражнение 4.4
Графики функций и дважды пересекаются на отрезке [-5;5].
а). Постройте в одной системе координат графики обеих функций и при помощи мыши найдите координаты точек пересечения.
b). Составьте уравнение, корнями которого являются абсциссы точек пересечения графиков.
c). Используйте команду fsolve для решения этого уравнения.
d). Используйте результаты из пункта с) для оценки ординат точек пересечения графиков.
e). У Вас не создалось впечатление, что линии могут пересекаться и в третьей точке с координатами (1;9)? Используйте fsolve и графические возможности Maple, чтобы убедиться в противном.
Теперь построим графики функций:
Приближенные координаты точек пересечения: (-1.8, 6.6) и (2.75, 2) .
b) Составим уравнение:
с) Команда fsolve поможет найти соответствующие корни:
d) Используем команду subs для определения соответствующих ординат точек пересечения:
Общие точки графиков: (-1.800,6.763) и (2.773,2.311) .
e) Графически исследуем окрестность точки х = 1:
Команда fsolve на этот раз позволит доказать отсутствие корней вблизи точки х = 1:
04. 04 Решение уравнений в общем виде
* Solving Literal Equations *
Во многих случаях Maple находит решение уравнения в общем (символьном) виде. Речь идёт об уравнении (а не системы!), содержащем несколько переменных. Решение состоит в том, что какая-то из переменных выражается через остальные.
Пусть необходимо решить уравнение относительно переменной g . По привычке, используем команду solve . И она оправдывает наши надежды:
А так решение можно оформить в привычном виде:
Упражнение 4.4
Решить последнее уравнение относительно других переменных: T, k и v.
Упражнение 4.5
Решить уравнение относительно у. Присвоить последовательности корней имя S. Как связаны корни S и S ?
Корни отличаются только знаком.
РЕШЕНИЕ МАТЕМАТИЧЕСКИХ ЗАДАЧ
В MAPLE
ЧАСТЬ I
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего
«Нижегородский государственный университет им. »
МАТЕМАТИЧЕСКИХ ЗАДАЧ В MAPLE
факультета для студентов, обучающихся по
направлению подготовки 010100 — «Математика».
Решение задач в MAPLE. Часть I. Составители: , : Учебно-методическая разработка. – Н. Новгород: Издательство Нижегородского госуниверситета, 2007. – 35 с.
доцент кафедры ЧиФА факультета ВМК,
доцент кафедры ПиУОС Физического факультета,
Данная разработка представляет собой практическое руководство по изучению возможностей пакета аналитических вычислений Maple . Последовательное изучение тем и выполнение заданий позволит шаг за шагом освоить основные приемы работы в математической системе Maple .
Учебно-методическая разработка предназначена для студентов 2 и 3 курсов механико-математического факультета .
университет им. , 2007
Системы компьютерной алгебры – это новые технологии в научных исследованиях и образовании. В последние годы получили широкое распространение такие системы общего назначения, как Maple, Mathematica.
Система Maple включена в интегрированную систему Scientific WorkPlace и применяется во многих ведущих университетах мира как в научных исследованиях, так и в учебном процессе. Ядро Maple входит в другие распространенные пакеты, такие как MathCad, MathLab.
Данная разработка позволит начинающему войти в технологию использования системы Maple, получить первые навыки, после чего он сможет уже самостоятельно разобраться в более тонких вопросах использования Maple. Хотелось бы отметить, что эта разработка ни в коей мере не является описанием системы Maple. Она предназначена в первую очередь для обучения студентов-математиков решению основных математических задач при помощи Maple.
1. НАЧАЛЬНЫЕ СВЕДЕНИЯ. ТИПЫ ДАННЫХ
Диалог с системой протекает в стиле «вопрос-ответ». Команда начинается с символа > и заканчивается либо точкой запятой (; ), либо двоеточием (: ). Для выполнения команды необходимо нажать клавишу Enter . Если в конце команды стоит точка с запятой, то на экран будет выведен результат действия команды или сообщение об ошибке. Двоеточие в конце команды означает, что команда будет выполнена, но ее результат на экран не будет выводиться. Символ # используется для ввода текстовых комментариев. Также для ввода текста используется клавиша с символом T на панели инструментов. Для возвращения к вводу команд следует нажать клавишу с символом >. Для вызова результата действия предыдущих команд используются символы %, %% или %%%, соответственно. Команда restart отменяет результат действия всех предыдущих команд.
Переменные в Maple характеризуются именем и типом. Имя переменной в Maple может состоять из букв, цифр и некоторых специальных символов, но обязательно должно начинаться с буквы. Ограничений на длину имени нет. Кроме того, Maple различает строчные и прописные буквы. Для присваивания переменной конкретного значения применяется оператор := . Переменные могут использоваться в математических выражениях и функциях без предварительного определения.
Рассмотрим особенности записи в Maple данных числового, строкового и множественного типов.
Выражение принадлежит к целому типу (integer ), если оно состоит из последовательности цифр, не разделенных никакими знаками. Выражения вида a/b, где a, b – целые числа принадлежат к дробному типу (fraction ). К числам с плавающей точкой (float ) относятся выражения вида a. b, a. и. b. Также числа типа float можно записать в показательной форме a*10^b. Комплексные числа (complex ) в Maple записываются в алгебраической форме: a+I*b, где a, b – вещественные числа.
Строковое выражение типа string — это любая конечная последовательность символов, с обеих сторон заключенная в верхние двойные кавычки. Последовательность символов, взятая в обратные кавычки, считается символом (symbol ).
Множество (set ) в Maple задается перечислением в фигурных скобках элементов множества. Например,
https://pandia.ru/text/78/155/images/image003_72.gif» width=»197″ height=»26″>
Для создания массива используется команда array(i1..j1, i2..j2. M), которая возвращает массив с элементами из списка M.
Обращение к элементам множества, списка, массива происходит с указанием индексов элемента в квадратных скобках.
https://pandia.ru/text/78/155/images/image006_53.gif» width=»16 height=19″ height=»19″>
Массив также можно задать командой вида V:=array(1..2,1..2,1..2,); , переопределив затем значения V с помощью оператора присваивания.
В Maple можно записать буквы греческого алфавита в полиграфическом виде. Для этого в командной строке набирается название греческой буквы.
1. Задайте множество A, состоящее из целых чисел от 3 до 20, и множество B, состоящее из квадратов этих чисел. Найдите объединение, пересечение, разность множеств A и B. Найдите мощности всех полученных множеств.
2. Задайте произвольный список и четырехмерный массив.
2. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ, ФУНКЦИИ. ПРЕОБРАЗОВАНИЯ АРИФМЕТИЧЕСКИХ
ВЫРАЖЕНИЙ И РЕШЕНИЕ УРАВНЕНИЙ
2.1. Вычисления в Maple
Для записи математических выражений в Maple используются операторы сложения (+), вычитания (-), умножения (*), деления (/), возведения в степень (^), оператор присваивания (:=). Порядок выполнения математических операций является стандартным.
Основные константы в Maple обозначаются следующим образом: Pi — число π, I — мнимая единица i, exp(1) — основание натуральных логарифмов e, infinity – бесконечность, true — истина, false – ложь. Используются следующие знаки сравнения: , >=, , = .
Система Maple одинаково успешно справляется как с символьными вычислениями, так и с численными. По умолчанию расчеты проводятся символьно.
>1/2+123/100+ sqrt (3);
Часть выражения, в которой встречается число, записанное с плавающей запятой (float), будет вычислена приближенно.
>2+ sqrt (2.0)- Pi ;
Все вычисления по умолчанию проводятся с десятью значащими цифрами. Количество значащих цифр можно изменить, применив команду > Digits : = n .
Для того, чтобы получить значение выражения в численном виде используется функция
https://pandia.ru/text/78/155/images/image012_43.gif» width=»414″ height=»19″>
2.2. Задание функций
В Maple встроено большое количество функций. Перечислим обозначения для основных элементарных функций..gif» width=»83 height=57″ height=»57″>
Рассмотрим несколько способов определения новых функций:
1) присваивание переменной некоторого выражения
имя переменной:=выражение;
имя переменной(список параметров):=выражение;
> f (t ):= cos (t )^2+1;
> f (0);
При таком способе задания функции для того, чтобы вычислить значение функции в некоторой точке нужно определить с помощью оператора присваивания значения переменных (параметров), либо использовать оператор подстановки subs.
https://pandia.ru/text/78/155/images/image018_28.gif» width=»106″ height=»33″>
https://pandia.ru/text/78/155/images/image021_25.gif» width=»100″ height=»33″>
>x := Pi : y :=10: f ;
Команда value (выражение) используется для вычисления значения выражения.
Следует обратить внимание на то, что после присвоения переменной x конкретного значения x:=a, переменная x перестанет быть неопределенной. Вернуть x статус непределенной переменной можно командой > x := evaln (x ); или снять присваивание командой > x :=’ x ’ ; либо отменить все присваивания командой restart .
2) Определение функции с помощью функционального оператора
имя функции:=список параметров -> выражение;
Обращение к функции, заданной таким способом, происходит стандартным образом: имя функции(a, b, …), где a, b, … — конкретные значения переменных.
> f 1:=(x , y , z ) -> x ^(y ^ z );
https://pandia.ru/text/78/155/images/image024_25.gif» width=»25″ height=»26 src width=»189″ height=»107″> используется команда
https://pandia.ru/text/78/155/images/image028_21.gif» width=»248″ height=»77″>
> f1:=convert(f, piecewise);
> f 2(-1/2); f 2(-1);
https://pandia.ru/text/78/155/images/image032_20.gif» width=»196″ height=»27″>.gif» width=»73″ height=»49″>. Упростите полученные выражения.
3. Найдите значение выражения . Для выполнения преобразований комплексного числа применяется функция evalc .
4. Запишите функцию без знака модуля.
5. Задайте и найдите f(-10)+3f(-1)+f(3).
6. Задайте функцию в виде функционального оператора и найдите ее значение при x=-1, y=.
2.3. Преобразование математических выражений
Maple обладает широкими возможностями для аналитических преобразований математических формул. К ним относятся такие операции, как приведение подобных, разложение на множители, раскрытие скобок, приведение рациональной дроби к нормальному виду и многие другие.
В Maple можно преобразовывать как все выражение в целом, так и отдельные его части.
Для выделения левой (правой) части в математическом выражении вида A=B используются команды
lhs (выражение);
rhs (выражение);
Для выделения числителя (знаменателя) используются команды
numer (выражение);
denom (выражение);
>denom (rhs (F ));
Для выделения некоторой части выражения, списка или множества служит команда
op (i ,выражение) , где i – число, определяющее позицию в выражении.
> x + y + z ; >op (2,%);
Gif» width=»12″ height=»12 src 54″ width=»266″ loading=lazy>
> isolate (R , sin (x ));
1) Приведение подобных членов в выражении по переменной осуществляется командой
https://pandia.ru/text/78/155/images/image047_14.gif» width=»439″ height=»28″>
2) Разложить на множители выражение можно с помощью команды
https://pandia.ru/text/78/155/images/image050_16.gif» width=»186″ height=»56″>
>alias(w=RootOf(x^3+2*x+1)); factor(x^3+2*x+1,w);
https://pandia.ru/text/78/155/images/image055_15.gif» width=»504″ height=»26 src width=»303″ height=»57″>
> factor(x^2+x+1,complex);
Gif» width=»12″ height=»12 src 58″ width=»173″ loading=lazy>
4) Привести дробь к нормальному виду можно с помощью команды
https://pandia.ru/text/78/155/images/image063_16.gif» width=»60″ height=»54″>
>normal(sin(2*x+3+4/(x-1)+5/(x-2)), expanded);
5) Для преобразований выражений, содержащих радикалы, применяется команда
rationalized « для того, чтобы избавиться от иррациональностей в знаменателях, « expanded « для раскрытия всех скобок.
> (7+5* sqrt (2))^(1/3);
> radnormal ((7+5* sqrt (2))^(1/3));
> a := sqrt (3)/(3^(1/2)+6^(1/2));
rationalized «);
6) Упрощение выражений осуществляется командой
DIV_ADBLOCK515″>
>simplify((sqrt(2)+sqrt(3))*(sqrt(2)-sqrt(3)));
> f:=(1-cos(x)^2+sin(x)*cos(x))/(sin(x)*cos(x)+cos(x)^2); simplify(f, trig);
Также в опциях указываются предположения о значении аргумента. Для формальных символьных преобразований многозначных функций в опциях можно указать symbolic .
> simplify(g, assume=real);
> simplify(g, assume=positive);
>simplify(g, symbolic);
Команда simplify позволяет выполнить преобразования в выражении при заданных условиях (условия указываются в фигурных скобках).
В некоторых случаях бывает полезно предварительно преобразовать выражение при помощи команды
https://pandia.ru/text/78/155/images/image076_12.gif» width=»276″ height=»54″>
>simplify(B, trig);
>simplify (%);
7) Объединить части выражения по определенным правилам можно при помощи команды
https://pandia.ru/text/78/155/images/image079_12.gif» width=»94″ height=»25 src width=»12″ height=»12 src 22″ width=»125″ loading=lazy>
> solve(x^4-11*x^3+37*x^2-73*x+70);
https://pandia.ru/text/78/155/images/image086_12.gif» width=»349″ height=»22 src >
> _EnvExplicit:=true:
Максимальное количество решений, которое может быть найдено с помощью команды solve, определяется значением глобальной переменной _MaxSols , имеющей по умолчанию значение равное 100. Если придать глобальной перменной _EnvAllSolutions значение true , то в случае бесконечного множества решений, команда solve для некоторых уравнений сможет оформить ответ в виде выражения, содержащего переменные определенного типа. Например, для тригонометрических уравнений ответ будет содержать целочисленные параметры вида _Z
> _EnvAllSolutions:= true:
>solve(sin(2*x)=cos(x), x);
https://pandia.ru/text/78/155/images/image094_11.gif» width=»274″ height=»51 src width=»12″ height=»12 src width=»641″ height=»23″>
Для разрешения реккурентностей применяется команда
https://pandia.ru/text/78/155/images/image098_10.gif» width=»255″ height=»22 src width=»119″ height=»23 src width=»180″ height=»56″>.
2. Упростите выражение .
3. Упростите выражение .
4.Приведите подобные в выражении и вычислите его значение при a=-3, x=1.
5. Упростите выражение а) ; б) .
6. Избавьтесь от иррациональностей в знаменателе выражения .
7. Выразите , https://pandia.ru/text/78/155/images/image113_7.gif» width=»46″ height=»48 src width=»164″ height=»41″>;
б) https://pandia.ru/text/78/155/images/image120_7.gif» width=»88″ height=»47 src 27″ width=»153″ loading=lazy> на множители над полем вещественных чисел и над полем рациональных чисел. Найдите разложение в радикалах.
12. Разложите многочлен на множители над полем вещественных чисел и над полем комплексных чисел. Найдите разложение в радикалах.
13. Решите уравнение .
14. Решите систему уравнений .
15. Решите систему уравнений и упростите ответ.
16. Численно найти все решения уравнения .
17. Найти три численных решения уравнения .
18. Решите систему неравенств .
19. Решите неравенство .
3 . ПОСТРОЕНИЕ ГРАФИКОВ
Эта часть посвящена возможностям системы Maple V в визуализации самых разнообразных вычислений.
3.1. Двумерные графики
Для построения графиков функции f(x) от одной переменной (в интервале https://pandia.ru/text/78/155/images/image132_6.gif» width=»69″ height=»24″> по оси Оу ) используется команда
plot(f(x), x=a..b, y=c..d, options),
где options – опция или набор опций, задающих стиль построения графика. Если их не указывать, то будут использованы установки по умолчанию. Настройка изображения также может осуществляться с панели инструментов. Для этого следует щелкнуть левой кнопкой мыши по изображению. После этого становятся активными кнопки в нижнем ряду панели. Также можно узнать координаты точки на графике. Для этого необходимо подвести курсор к нужной точке графика и щелкнуть левой кнопкой мыши. Слева в нижнем ряду кнопок на панели появятся координаты. Настройка изображения также может осуществляться с помощью контекстного меню. Оно вызывается правой кнопкой мыши.
Основные параметры команды plot :
title=”text”, где text- заголовок рисунка (текст можно оставлять без кавычек, если он не содержит пробелов).
coords=polar – установка полярных координат (по умолчанию установлены декартовы).
axes – установка типа координатных осей: axes=NORMAL – обычные оси; axes=BOXED – график в рамке со шкалой; axes=FRAME – оси с центром в левом нижнем углу рисунка; axes=NONE – без осей.
scaling – установка масштаба рисунка: scaling=CONSTRAINED – одинаковый масштаб по осям; scaling=UNCONSTRAINED – график масштабируется по размерам окна.
style = LINE – вывод линиями, style = POINT вывод точками.
numpoints=n – число вычисляемых точек графика (по умолчанию n=50 ).
сolor – установка цвета линии: английское название цвета, например, yellow – желтый и т. д.
xtickmarks=nx и ytickmarks=ny – число меток по оси Оx и оси Оy , соответственно.
thickness=n, где n=1,2,3… — толщина линии (по умолчанию n=1 ).
linestyle=n – тип линии: непрерывная, пунктирная и т. д. (по умолчанию n=1 – непрерывная).
symbol=s — тип символа, которым помечают точки: BOX, CROSS, CIRCLE, POINT, DIAMOND .
font= – установка типа шрифта для вывода текста: f задает название шрифтов: TIMES, COURIER, HELVETICA, SYMBOL; style задает стиль шрифта: BOLD, ITALIC, UNDERLINE; size – размер шрифта в pt.
labels= – надписи по осям координат: tx – по оси Оx и ty – по оси Оy .
discont=true – указание для построения бесконечных разрывов, при этом на графике асимптоты не рисуются.
Пример. Построить график https://pandia.ru/text/78/155/images/image134_1.jpg» width=»292 height=292″ height=»292″>
Построение графика функции, заданной параметрически
С помощью команды plot можно строить также графики функций, заданных параметрически y=y(t), x=x(t) :
plot(, parameters) .
Пример. Построить график параметрической кривой , https://pandia.ru/text/78/155/images/image138_2.jpg» width=»231 height=164″ height=»164″>
Построение графика функции, заданной неявно
Для построения графика неявной функции F(x, y)=0 используется команда https://pandia.ru/text/78/155/images/image139_5.gif» width=»80″ height=»27″>.
>with(plots):implicitplot(x^2+y^2=1, x=-1..1, y=-1..1);
Gif» width=»12 height=12″ height=»12″> textplot(, options), где x0, y0 – координаты точки, с которой начинается вывод текста ’text’ .
Вывод нескольких графических объектов на один рисунок
Если на одном рисунке нужно совместить несколько графиков функций, то можно воспользоваться командой
Если необходимо нарисовать несколько графических объектов, полученных при помощи различных команд, то для этого результат действия команд присваивается некоторым переменным:
> p := plot (…): t := textplot (…):
При этом на экран вывод не производится. Для вывода графических изображений необходимо выполнить команду из пакета plots:
display(, options) .
Пример . Построить графики функций https://pandia.ru/text/78/155/images/image142_6.gif» width=»73″ height=»20 src width=»59″ height=»24 src width=»297 height=24″ height=»24″> , то для этого можно использовать команду inequal из пакета plots:
inequals( c1,…,fn(x, y)>cn>, x=x1…x2, y=y1..y2, options)
В фигурных скобках указывается система неравенств, задающих область, затем размеры координатных осей и параметры. С помощью параметров можно регулировать толщину линий границ, цвета открытых и закрытых границ, цвета внешней и внутренней областей:
.gif» width=»12″ height=»12 src width=»12″ height=»12 src width=»75″ height=»43″>.
3..gif» width=»72″ height=»20″>, в рамке.
4..gif» width=»83″ height=»23 src width=»75″ height=»20 src width=»321″ height=»198″>
График поверхности, заданной параметрически
Если требуется построить поверхность, заданную параметрически: x =x (u ,v ), y =y (u ,v ), z =z (u ,v ), то эти функции перечисляются в квадратных скобках в команде:
plot3d(, u=u1..u2, v=v1..v2) .
Пример . Построить тор.
> plot3d(, s=0..2*Pi, t=0..11*Pi/6, grid=, style=patch, axes=frame, scaling=constrained);
https://pandia.ru/text/78/155/images/image162_4.gif» width=»99″ height=»24″>, строится с помощью команды пакета plot s :
implicitplot3d(F(x, y,z)=c, x=x1..x2, y=y1..y2, z=z1..z2), где указывается уравнение поверхности и размеры рисунка по координатным осям.
График пространственных кривых
В пакете plot s имеется команда spacecurve для построения пространственной кривой, заданной параметрически: .
spacecurve ([ x (t ), y (t ), z (t )], t = t 1.. t 2) , где переменная t изменяется от t1 до t2 .
Построение нескольких трехмерных фигур на одном графике
Команда plot 3 d позволяет строить одновременно несколько фигур, пересекающихся в пространстве. Для этого достаточно вместо описания одной поверхности задать список описаний ряда поверхностей. При этом функция plot 3 d обладает уникальной возможностью – автоматически вычисляет точки пересечения фигур и показывает только видимые части поверхностей. Это создает изображения, выглядящие вполне естественно.
Пример. Выполнить построение двух поверхностей и в пределах https://pandia.ru/text/78/155/images/image168_4.gif» width=»39″ height=»19″>.
> plot 3 d ( , x =- Pi .. Pi , y =- Pi .. Pi , grid =, axes = FRAMED , color = x + y );
Maple позволяет выводить на экран движущиеся изображения с помощью команд animate (двумерные) и animate3d (трехмерные) из пакета plot s . Суть анимации при использовании данных функций заключается в построении серии кадров, причем каждый кадр связан со значением изменяемой во времени переменной t. Среди параметров команды animate3d есть
frames – число кадров анимации (по умолчанию frames=8 ).
Управлять движущимся изображением удобнее с помощью контекстного меню.
Задание 3 .2
1. Построить график поверхности .
2. Построить шар :
3..gif» width=»65″ height=»21 src width=»173 height=53″ height=»53″>.gif» width=»95″ height=»48 src width=»71″ height=»23 src width=»12″ height=»12 src width=»215″ height=»58 src >
Похожие публикации:
- Как войти в icq
- Как вставить встроенную функцию в документ mathcad
- Как вычислить определитель в mathcad
- Как добавить видеоэффект и видеопереход windows movie maker
Массивы (C++)
Массив представляет собой последовательность объектов того же типа, которые занимают непрерывную область памяти. Традиционные массивы стилей C являются источником многих ошибок, но по-прежнему распространены, особенно в старых базах кода. В современном C++настоятельно рекомендуется использовать std::vector или std::array вместо массивов стилей C, описанных в этом разделе. Оба этих стандартных типов библиотек хранят их элементы в виде непрерывного блока памяти. Однако они обеспечивают большую безопасность типов и поддерживают итераторы, которые гарантированно указывают на допустимое расположение в последовательности. Дополнительные сведения см. в разделе «Контейнеры».
Объявления стека
В объявлении массива C++ размер массива указывается после имени переменной, а не после имени типа, как в других языках. В следующем примере объявляется массив из 1000 двойных размеров, выделенных в стеке. Число элементов должно быть предоставлено в виде целочисленного литерала или в качестве константного выражения. Это связано с тем, что компилятор должен знать, сколько пространства стека следует выделить; он не может использовать значение, вычисляемое во время выполнения. Каждому элементу в массиве присваивается значение по умолчанию 0. Если вы не назначаете значение по умолчанию, каждый элемент изначально содержит все случайные значения в этом расположении памяти.
constexpr size_t size = 1000; // Declare an array of doubles to be allocated on the stack double numbers[size] ; // Assign a new value to the first element numbers[0] = 1; // Assign a value to each subsequent element // (numbers[1] is the second element in the array.) for (size_t i = 1; i < size; i++) < numbers[i] = numbers[i-1] * 1.1; >// Access each element for (size_t i = 0; i
Первый элемент в массиве — это нулевой элемент. Последний элемент — это элемент (n-1), где n — это количество элементов, которые может содержать массив. Число элементов в объявлении должно иметь целочисленный тип и должно быть больше 0. Вы несете ответственность за то, чтобы программа никогда не передает значение оператору подстрока, который больше (size — 1) .
Массив нулевого размера является законным только в том случае, если массив является последним полем в списке struct или union когда расширения Майкрософт включены ( /Za или /permissive- не заданы).
Массивы на основе стека быстрее выделяют и получают доступ, чем массивы на основе кучи. Однако пространство стека ограничено. Количество элементов массива не может быть таким большим, что использует слишком много памяти стека. Сколько слишком много зависит от вашей программы. Средства профилирования можно использовать для определения того, слишком ли большой массив.
Объявления кучи
Может потребоваться слишком большой массив для выделения в стеке или размер которого не известен во время компиляции. Этот массив можно выделить в куче с помощью new[] выражения. Оператор возвращает указатель на первый элемент. Оператор подстрока работает с переменной указателя так же, как и в массиве на основе стека. Вы также можете использовать арифметику указателя для перемещения указателя на любые произвольные элементы в массиве. Это ваша ответственность за обеспечение того, чтобы:
- Вы всегда храните копию исходного адреса указателя, чтобы можно было удалить память, если массив больше не нужен.
- Вы не увеличиваете или уменьшаете адрес указателя в пределах массива.
В следующем примере показано, как определить массив в куче во время выполнения. В нем показано, как получить доступ к элементам массива с помощью оператора подстрочного и с помощью арифметики указателя:
void do_something(size_t size) < // Declare an array of doubles to be allocated on the heap double* numbers = new double[size]< 0 >; // Assign a new value to the first element numbers[0] = 1; // Assign a value to each subsequent element // (numbers[1] is the second element in the array.) for (size_t i = 1; i < size; i++) < numbers[i] = numbers[i - 1] * 1.1; >// Access each element with subscript operator for (size_t i = 0; i < size; i++) < std::cout // Access each element with pointer arithmetic // Use a copy of the pointer for iterating double* p = numbers; for (size_t i = 0; i < size; i++) < // Dereference the pointer, then increment it std::cout // Alternate method: // Reset p to numbers[0]: p = numbers; // Use address of pointer to compute bounds. // The compiler computes size as the number // of elements * (bytes per element). while (p < (numbers + size)) < // Dereference the pointer, then increment it std::cout delete[] numbers; // don't forget to do this! > int main()
Инициализация массивов
Вы можете инициализировать массив в цикле, один элемент за раз или в одной инструкции. Содержимое следующих двух массивов идентичны:
int a[10]; for (int i = 0; i < 10; ++i) < a[i] = i + 1; >int b[10]< 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 >;
Передача массивов в функции
Когда массив передается функции, он передается в качестве указателя на первый элемент, будь то массив на основе стека или кучи. Указатель не содержит других сведений о размере или типе. Это поведение называется разложением указателя. При передаче массива функции всегда необходимо указать количество элементов в отдельном параметре. Это также означает, что элементы массива не копируются при передаче массива функции. Чтобы предотвратить изменение элементов функции, укажите параметр в качестве указателя на const элементы.
В следующем примере показана функция, которая принимает массив и длину. Указатель указывает на исходный массив, а не копию. Так как параметр не const является, функция может изменять элементы массива.
void process(double *p, const size_t len) < std::cout >
Объявите и определите параметр p массива, const чтобы сделать его доступным только для чтения в блоке функций:
void process(const double *p, const size_t len);
Эта же функция также может быть объявлена таким образом без изменений в поведении. Массив по-прежнему передается в качестве указателя на первый элемент:
// Unsized array void process(const double p[], const size_t len); // Fixed-size array. Length must still be specified explicitly. void process(const double p[1000], const size_t len);
Многомерные массивы
Массивы, созданные из других массивов, являются многомерными. Такие многомерные массивы определяются путем последовательного размещения нескольких константных выражений, заключенных в квадратные скобки. Рассмотрим, например, следующее объявление:
int i2[5][7];
Он задает массив типа int , концептуально упорядоченный в двухмерной матрице из пяти строк и семи столбцов, как показано на следующем рисунке:
Изображение представляет собой сетку 7 ячеек, широких и 5 ячеек. Каждая ячейка содержит индекс ячейки. Первый индекс ячейки помечен как 0,0. Следующая ячейка в этой строке составляет 0,1 и т. д. до последней ячейки в этой строке, которая составляет 0,6. Следующая строка начинается с индекса 1,0. После этого ячейка имеет индекс 1,1. Последняя ячейка в этой строке — 1,6. Этот шаблон повторяется до последней строки, которая начинается с индекса 4,0. Последняя ячейка в последней строке имеет индекс 4,6. . image-end
Можно объявить многомерные массивы с списком инициализаторов (как описано в инициализаторах). В этих объявлениях константное выражение, указывающее границы для первого измерения, может быть опущено. Например:
// arrays2.cpp // compile with: /c const int cMarkets = 4; // Declare a float that represents the transportation costs. double TransportCosts[][cMarkets] = < < 32.19, 47.29, 31.99, 19.11 >, < 11.29, 22.49, 33.47, 17.29 >, < 41.97, 22.09, 9.76, 22.55 >>;
В показанном выше объявлении определяется массив, состоящий из трех строк и четырех столбцов. Строки представляют фабрики, а столбцы — рынки, на которые фабрики поставляют свою продукцию. Значения — это стоимости транспортировки с фабрик на рынки. Первое измерение массива опущено, но компилятор заполняет его, проверяя инициализатор.
Использование оператора непрямого выражения (*) в типе массива n-1 приводит к получению массива n-1. Если значение n равно 1, возвращается скалярный элемент (или элемент массива).
Массивы C++ размещаются в памяти по срокам. Построчный порядок означает, что быстрее всего изменяется последний индекс.
Пример
Вы также можете опустить спецификацию границ для первого измерения многомерного массива в объявлениях функций, как показано ниже:
// multidimensional_arrays.cpp // compile with: /EHsc // arguments: 3 #include // Includes DBL_MAX #include const int cMkts = 4, cFacts = 2; // Declare a float that represents the transportation costs double TransportCosts[][cMkts] = < < 32.19, 47.29, 31.99, 19.11 >, < 11.29, 22.49, 33.47, 17.29 >, < 41.97, 22.09, 9.76, 22.55 >>; // Calculate size of unspecified dimension const int cFactories = sizeof TransportCosts / sizeof( double[cMkts] ); double FindMinToMkt( int Mkt, double myTransportCosts[][cMkts], int mycFacts); using namespace std; int main( int argc, char *argv[] ) < double MinCost; if (argv[1] == 0) < cout MinCost = FindMinToMkt( *argv[1] - '0', TransportCosts, cFacts); cout double FindMinToMkt(int Mkt, double myTransportCosts[][cMkts], int mycFacts)
The minimum cost to Market 3 is: 17.29
Функция FindMinToMkt записывается таким образом, что добавление новых фабрик не требует изменений кода, просто перекомпиляции.
Инициализация массивов
Массивы объектов с конструктором классов инициализированы конструктором. Если в списке инициализатора меньше элементов в массиве, конструктор по умолчанию используется для остальных элементов. Если конструктор по умолчанию не определен для класса, список инициализаторов должен быть завершен, то есть должен быть один инициализатор для каждого элемента в массиве.
Рассмотрим класс Point , определяющий два конструктора:
// initializing_arrays1.cpp class Point < public: Point() // Default constructor. < >Point( int, int ) // Construct from two ints < >>; // An array of Point objects can be declared as follows: Point aPoint[3] = < Point( 3, 3 ) // Use int, int constructor. >; int main()
Первый элемент aPoint создается с помощью конструктора Point( int, int ) , а оставшиеся два элемента — с помощью конструктора по умолчанию.
Массивы статических элементов (независимо от того, можно ли const ) инициализировать в их определениях (за пределами объявления класса). Например:
// initializing_arrays2.cpp class WindowColors < public: static const char *rgszWindowPartList[7]; >; const char *WindowColors::rgszWindowPartList[7] = < "Active Title Bar", "Inactive Title Bar", "Title Bar Text", "Menu Bar", "Menu Bar Text", "Window Background", "Frame" >; int main()
Доступ к элементам массива
К отдельным элементам массива можно обращаться при помощи оператора индекса массива ( [ ] ). Если вы используете имя одномерного массива без подстрока, он оценивается как указатель на первый элемент массива.
// using_arrays.cpp int main() < char chArray[10]; char *pch = chArray; // Evaluates to a pointer to the first element. char ch = chArray[0]; // Evaluates to the value of the first element. ch = chArray[3]; // Evaluates to the value of the fourth element. >
Если используются многомерные массивы, в выражениях можно использовать различные сочетания.
// using_arrays_2.cpp // compile with: /EHsc /W1 #include using namespace std; int main() < double multi[4][4][3]; // Declare the array. double (*p2multi)[3]; double (*p1multi); cout
В приведенном выше коде multi представляет собой трехмерный массив типа double . Указатель p2multi указывает на массив типа double размера три. В этом примере массив используется с одним, двумя и тремя индексами. Хотя в инструкции чаще всего указываются все подстроки, как и в cout инструкции, иногда полезно выбрать определенное подмножество элементов массива, как показано в приведенных ниже cout инструкциях.
Оператор перегрузки подстрока
Как и другие операторы, оператор подстрочного ( [] ) может быть переопределен пользователем. Поведение оператора индекса по умолчанию, если он не перегружен, — совмещать имя массива и индекс с помощью следующего метода.
Как и во всех дополнениях, включающих типы указателей, масштабирование выполняется автоматически, чтобы настроить размер типа. Результирующий значение не является n байтами из источника array_name ; вместо этого это n-йэлемент массива. Дополнительные сведения об этом преобразовании см. в разделе "Адитивные операторы".
Аналогично, для многомерных массивов адрес извлекается с использованием следующего метода.
((array_name) + (subscript1 * max2 * max3 * . * maxn) + (subscript2 * max3 * . * maxn) + . + subscriptn))
Массивы в выражениях
Если идентификатор типа массива отображается в выражении, отличном от sizeof адреса ( & ) или инициализации ссылки, он преобразуется в указатель на первый элемент массива. Например:
char szError1[] = "Error: Disk drive not ready."; char *psz = szError1;
Указатель psz указывает на первый элемент массива szError1 . Массивы, в отличие от указателей, не изменяются l-значения. Вот почему следующее назначение является незаконным:
szError1 = psz;