Основные классы данных Выражения Списки и массивы Объекты и идентификаторы Функции, опции, атрибуты и директивы Подстановки Функции линейной алгебры Выполнил.

Презентация:



Advertisements
Похожие презентации
План-конспект урока (информатика и икт, 9 класс) по теме: Переменные:тип, имя, значение
Advertisements

Объектно-ориентированный язык программирования. Переменная - эта поименованная ячейка памяти, хранящая какое-либо одно значение (одно число, один фрагмент.
Одномерный массив. Цель урока: познакомить учащихся с понятием одномерный массив Задачи: дать определение массива дать представление: об описании массива.
Лекция 6. Способы адресации в микропроцессорных системах.
Л АБОРАТОРНАЯ РАБОТА 6 Тема: Численные методы решения задачи Коши для обыкновенных дифференциальных уравнений.
Электронная таблица. Excel-это программа для автоматизации расчетов, построение графиков, для табличных документов, для создания базы данных.
Основы алгоритмизации Алгоритмы. Типы алгоритмов. Алгоритмы. Типы алгоритмов. Блок-схемы. Вопросы и задания. Вопросы и задания.
Моделирование в электронных таблицах. Этап 4 можно реализовать с помощью табличного процессора. Конкретно с помощью программы Microsoft Excel.
Массивы 9 класс. Основные теоретические сведения Примеры решения задач.
Электронные таблицы Excel Что такое таблица? Таблица - это строки и столбцы. Примеры таблиц: –таблица умножения; –таблица Менделеева; –расписание.
Основы программирования на Бейсике Массивы. Задание: Найти все 3-хзначные числа, заканчивающихся на 2, 4, 8 и делящихся на 6. Ответ: CLS FOR I=100 TO.
Переменная - это величина, которая имеет имя, тип и значение. Значение переменной может меняться во время выполнения программы. В компьютерах каждая переменная.
Матрицы Элементарные преобразования и действия над матрицами made by aspirin.
Системы счисления, используемые в компьютере. Борисов В.А. КАСК – филиал ФГБОУ ВПО РАНХ и ГС Красноармейск 2011 г.
Общая Характеристика Табличного Процессора Выполнил: Марков Сергей ВалерьевичВалерьевич.
Тип, имя и значение переменной.. Переменные. В объектно-ориентированных языках программирования, и в частности в языке Visual Basic, переменные играют.
Pascal 1 Основы языка Паскаль Информатика и ИКТ Смирнов М.В. МКО ООШ п. Климковка Белохолуницкого района Кировской области.
Часть 1 Простейшая программа Программа на языке QBASIC состоит из последовательности инструкций – команд компилятору. Если в строке записано несколько.
При решении многих задач приходится обрабатывать большое количество однотипных данных. Для хранения этих данных пришлось бы вводить большое количество.
Транксрипт:

Основные классы данных Выражения Списки и массивы Объекты и идентификаторы Функции, опции, атрибуты и директивы Подстановки Функции линейной алгебры Выполнил : Валиуллин И. И. группа 901 ист

Mathematica оперирует с тремя основными классами данных : численными данными, представляющими числа различного вида ; символьными данными, представляющими символы, тексты и математические выражения ( формулы ); списками данными в виде множества однотипных или разнотипных данных.

Минимальной единицей информации в компьютерной технике является двоичная единица бит. Она имеет представление в виде 0 или 1, удобное для реализации простейшими электронными схемами с двумя состояниями электрического равновесия ( например, триггерами или иными ячейками памяти ). Многоразрядные двоичные числа представляют собой набор цифр 0 и 1, например, или Каждый старший разряд относительно предыдущего имеет весовой коэффициент, равный 2. Именно с битами работает микропроцессор на нижнем уровне операций. Однако бит слишком мелкая единица, не очень удобная в обращении. К тому же мы привыкли к куда более удобным и наглядным для нас элементам информации, таким как буквы, цифры, знаки арифметических операций, спецзнаки и символы псевдографики. В принципе, набор этих знаков, минимально необкодимый для представления обычной текстовой и цифровой информации, содержит до 2 8 = 256 элементов. Каждый из них в компьютере представляется кодом от 0 до 255. Для задания таких кодов достаточно 8 бит (2^8=256), которые и образуют наиболее распространенную единицу представления информации байт байта образуют килобайт ( Кбайт ), 1024 Кбайт дают 1 Мбайт ( мегабайт ) и т. д. Широко применяется общеизвестный стандарт кодирования текстовой информации ASCII (American Standard Code for Information Interchange).

К наиболее известным типам данных в математике относятся привычные нам десятичные числа (DECIMAL). Каждый разряд таких чисел имеет представление, заданное одной из арабских цифр 0, 1, 2,..., 9. Весовой коэффициент старшего разряда относительно предшествующего равен 10. Количество цифр, представляющих число, может быть, в принципе, любым. Десятичные числа наиболее распространены в научно - технических расчетах.

Целочисленные данные (Integer) это целые числа, например 1, 2 или 123, которые представляются системой без погрешности и ограничения разрядности. Более того, арифметические операции над целыми числами система выполняет также без погрешностей и без ограничения числа цифр

Числа с произвольным основанием Для вычисления чисел с произвольным основанием используется конструкция Основание ^^ Число Число должно быть записано по правилам записи чисел с соответствующим основанием. Если основание больше 10, для обозначения значений чисел используются буквы от а до z. Наиболее известными из чисел с основанием системы счисления, превышающим 10, являются шестнадцатеричные числа (HEX от слова hexagonal). Разряды таких чисел могут иметь следующие значения : HEX abCdef DECIMAL Каждый более старший разряд имеет весовой коэффициент относительно предыдущего разряда, равный 16. Примеры задания шестнадцатеричного и двоичного чисел : 16^^123abcde ^^ Для представления чисел с произвольным основанием n ( до 32) используется функция BaseForm[expr, n], которая возвращает выражение ехрг в форме числа с основанием n, которое указывается как подстрочный индекс.

Численные данные могут быть представлены также десятичными вещественными числами, которые могут иметь различную форму, например , ^2, ^-2 и т. д. В общем случае они содержат мантиссу с целой и дробной частями и порядок, вводимый как степень числа 10. Как правило, вещественные числа в системах символьной математики могут иметь мантиссу с любым, но конечным числом знаков. Пробел между мантиссой и порядком эквивалентен знаку умножения *: *10^ бк 10^101 10^-100 1/ ^ x 10^-100 Как принято в большинстве языков программирования, целая часть мантиссы отделяется от дробной части точкой, а не запятой. Mathematica производит операции с числами изначально как с целыми. Однако установка значка разделительной точки означает, что число должно рассматриваться как вещественное. Например, 1 целое число, но 1. уже вещественное число. Для представления выражения ехрг в форме вещественного числа используется функция N [ ехрг ] или N [ ехрг, число _ цифр _ результата ].

Многие математические операции базируются на понятии комплексных чисел. Они задаются в форме z=Re(z)+I*Im(z) или z=Re(z)+i Im (z) где знак I (i) мнимая единица ( квадратный корень из -1), Re (z) действительная часть комплексного числа, a Im (z) мнимая часть комплексного числа. Пример задания комплексного числа : 2 + I3 или 2 + 3*I Мнимая часть задается умножением ее значения на символ мнимой единицы I. При этом знак умножения * можно указывать явно или заменить его пробелом в последнем случае комплексное число выглядит более естественным. Функции Re [ z ] и Im [ z ] выделяют, соответственно, действительную и мнимую части комплексного числа z. Это иллюстрируют следующие примеры : Re[3+2*1] Im[3+2 I] Большинство операторов и функций системы Mathematica работают с комплексными числами. Разумеется, это расширяет сферу применения системы и позволяет решать с ее помощью различные специальные задачи например, относящиеся к теории функций комплексного аргумента. Комплексные числа широко используются в практике электро - и радиотехнических расчетов на переменном токе.

Символьные данные в общем случае могут быть отдельными символами ( например a, b,..., z), строками (strings) и математическими выражениями ехрг ( от expression выражение ), представленными в символьном виде. Символьные строки задаются цепочкой символов в кавычках, например "sssss". В них используются следующие управляющие символы для строчных объектов : \n новая строка (line feed); \ t табуляция. Это иллюстрируется следующими примерами : "Hello my friend!" Hello my friend! "Hello\nmy\nfriend!" Hello my friend! "Hello\tmy\tfriend!" Hello my friend; Следует помнить, что управляющие символы не печатаются принтером и не отображаются дисплеем, а лишь заставляют эти устройства вывода выполнять определенные действия. Mathematica имеет множество функций для работы со строками, которые будут описаны в дальнейшем

Выражения в системе Mathematica обычно ассоциируются с математическими формулами, как показано в следующей таблице. Запись на языке Mathematica Обычная математическая запись 2*Sin[x] 2*sin(x) 2 Sin[x] 2*sin(x) ( а +b^2 + с ^ З ) / (3*d - 4*e) (a + b 2 + с 3 )/(3d-4 е ) sqrt(2) Кореннь из 2 Integrate [Sin [x], х ] Интеграл sin(x) dx Для записи математических выражений используются как операторы, так и функции. Их особенности будут рассмотрены несколько позже. А пока сразу отметим некоторые тонкости синтаксиса системы, используемого при записи арифметических операций : знак умножения может быть заменен пробелом ; встроенные функции начинаются с большой буквы и обычно повторяют свое общепринятое математическое обозначение ( за исключением тех, в названии которых есть греческие буквы они воспроизводятся латинскими буквами по звучанию соответствующих греческих букв ); круглые скобки () используются для выделения частей выражений и задания последовательности их вычисления ; параметры функций задаются в квадратных скобках [ ]; фигурные скобки {} используются при задании списков. Новые системы Mathematica 3/4 обладают обширными возможностями по заданию форматов записи математических выражений при их выводе на экран или принтер, а также при вводе с клавиатуры. Они будут рассмотрены в дальнейшем.

Наиболее общим видом сложных данных в системе являются списки (lists). Списки представляют собой совокупности однотипных или разнотипных данных, сгруппированных с помощью фигурных скобок : { 1, 2, 3 } список из трех целых чисел ; { а, b, с } список из трех символьных данных ; {1, а, x^ 2} список из разнотипных данных ; {{a,b},{c,d}} список, эквивалентный матрице a b c d { х ^2+ у ^2, 2*Sin [x] } список из двух математических выражений. Как видно из этих примеров, элементы списков размещаются в фигурных скобках открывающей { и закрывающей }. Списки могут быть с вложениями из списков так получаются многоуровневые списки ( двухуровневый список дает матрицу ). Позже свойства и возможности списков будут рассмотрены детально. С помощью списков представляются множественные данные массивы.

В общем случае система Mathematica оперирует с объектами. Под ними подразумеваются математические выражения ( ехрг ), символы (symbols), строки из символов (strings), упомянутые выше числа различного типа, константы, переменные, графические и звуковые объекты и т. д. Каждый объект характеризуется своим именем идентификатором. Это имя должно быть уникальным, то есть единственным. Существуют следующие правила задания имен : sssss имя объекта, заданного пользователем ; Sssss имя объекта, входящего в ядро системы ; $Sssss имя системного объекта. Итак, все объекты ( например функции ), включенные в ядро, имеют имена ( идентификаторы ), начинающиеся с большой буквы ( например Plus, Sin или Cos). Идентификаторы относящихся к системе объектов начинаются со знака $. Заданные пользователем объекты следует именовать строчными ( малыми ) буквами. Разумеется, под символами s...s подразумеваются любые буквы и цифры ( но не специальные символы, такие как +, -, * и т. д.). Объекты ( чаще всего это функции ), встроенные в систему, принято называть внутренними или встроенными. Объекты, которые создает пользователь ( в том числе используя внутренние объекты ), называют внешними объектами. К ним, в частности, относятся процедуры и функции, составляемые пользователем, которые детально рассматриваются в дальнейшем.

К важному типу объектов принадлежат функции объекты, имеющие имя и список параметров, возвращающие некоторое значение в ответ на обращение к ним по имени с указанием списка конкретных ( фактических ) значений параметров. В системах Mathematica 2/3/4 встроенные функции задаются в виде И дентификатор _ Функции [ol, о 2, o3,...] где ol, о 2, оЗ... объекты ( параметры, опции, математические выражения и т. д.). Список входных параметров задается необычно в квадратных скобках. В числе входных параметров могут быть специальные объекты опции. Они задаются в виде Имя _ опции ->3 начение _ опции Значением опции обычно является то или иное слово. Например, в функции построения графиков Plot [sin[x], {x, 0,20},Axes->None] опция Axes->None указывает на то, что отменяется вывод координатных осей (Axes). Функция Options [name] выводит для функции с идентификатором name список всех возможных для нее опций. Некоторые функции, например Sin, могут вообще не иметь опций, другие, такие как Solve, могут иметь целый « букет » опций : Options [Sin] Options [Solve] {InverseFunctions -> Automatic, MakeRules -> False, Method -> 3, Mode -> Generic, Sort -> True, VerifySolutions -> Automatic, WorkingPrecision -> 00} Каждый объект может характеризоваться некоторой совокупностью своих свойств и признаков, называемых атрибутами. Функция Attributes [name] возвращает список всех атрибутов функции с именем name, например : Attributes [Sin] {bistable, NumericFunction, Protected} Attributes [Solve] {Protected} Применение опций и директив делает аппарат функций более гибким и мощным, поскольку позволяет задавать те или иные свойства функций и условия их выполнения. Это особенно важно при использовании функций в задачах графики и символьной математики.

Константы являются типовыми объектами системы, несущими заранее предопределенное численное или символьное значение. Это значение не должно меняться по ходу вычисления документа. К численным константам относятся любые числа, непосредственно используемые в математических выражениях или программных объектах, например процедурах и функциях. Так, числа 1 и 2 в выражении 2*Sin [ 1 ] являются численными константами. Константы - числа не имеют идентификаторов. Идентификатором, в сущности, является само число. Его представление и хранится в памяти. Имеется также ряд именованных констант, которые можно рассматривать как функции без аргумента, возвращающие заранее заданное значение. Имена констант ( и других объектов, например функций и переменных ) представляются их идентификаторами непрерывной строкой символов, отождествляемой с именем. В системе Mathematica большинство идентификаторов имеют естественный математический смысл и начинаются с большой буквы. Например, Е это основание натурального логарифма. Используются следующие встроенные именованные константы : Complexlnf inity комплексная бесконечность, которая представляет величину с бесконечным модулем и неопределенной комплексной фазой. Degree число радиан в одном градусе, которое имеет числовое значение Pi/180. Е - основание натурального логарифма с приближенным числовым значением EulerGamma постоянная Эйлера с числовым значением GoldenRatio константа со значением (l+Sqrt[5] ) /2, определяющая деление отрезка по правилу золотого сечения. I представляет мнимую единицу Sqrt [-1]. Infinity « положительная » бесконечность ( со знаком « минус » дает « отрицательную » бесконечность ). Catalan константа Каталана Pi число, имеющее значение и равное отношению длины окружности к ее диаметру.

Mathematica позволяет оперировать с размерными величинами, которые широко используются в физических и химических расчетах. Размерные величины характеризуются не только численными значениями, но и единицами измерения, например Meter ( метр ), Second ( секунда ) и т. д. Последние могут стоять в числителе и в знаменателе выражений, представляющих размерные величины : 1 Meter Meter 5Meter 0.5Second Между значением размерной величины и единицей измерения знак умножения можно не ставить. Это видно из приведенных выше примеров. Для облегчения ввода физических констант, представляющих собой размерные величины, в наборе файлов Mathematica можно найти файл PhysicalConstants.nb. При его загрузке появляется дополнительная палитра физических констант, показанная на рис Для ввода констант достаточно активизировать соответствующую кнопку с нужной константой. Будут введено выражение, задающее константу. Ниже представлены примеры ввода первой и последней констант, содержащихся в палитре, представленных в стандартной форме : '*^8 Meter/ Second х 108 Meter/ Second x 108 Meter xl08 Meter

Переменными в математике принято называть именованные объекты, которые могут принимать различные значения, находящиеся в определенном множестве допустимых значений. Подобно этому, переменными в системе Mathematica являются именованные объекты, способные в ходе выполнения документа неоднократно принимать различные значения как численные, так и символьные. При этом символьные значения переменных, в отличие от обычных языков программирования, могут представлять собой как исполняемые математические выражения ехрг, так и некоторые обобщенные классы функций и объектов. Например, переменная может представлять графический объект, такой как изображение трехмерной поверхности, или звуковой объект, при активизации которого исполняется звук. Значением переменных могут быть также множественные объекты списки. Имена переменных называют их идентификаторами. Они должны быть уникальными, то есть не совпадать с именами директив, атрибутов, опций и функций в ядре системы. Имена переменных должны начинаться с буквы. Общеприняты, скажем, имена х и у для функциональной зависимости у ( х ) или представления графиков, f для функций. Желательно назначать именам переменных смысловые значения, например xcoordinaate или ycoordinate для координат точки. Все сказанное об идентификаторах объектов справедливо и для идентификаторов переменных, поскольку переменные распространенные виды объектов.

В отличие от переменных в математике, каждая переменная в системе Mathematica, как и в любой системе программирования, всегда отождествляется с некоторой физической областью памяти, в которой и хранится значение переменной. Для уменьшения объема памяти применяются различные способы компактного размещения информации. Надо помнить, что и имя переменной занимает определенную область памяти. Распределение памяти под переменные динамическое. Это означает, что местоположение ячеек памяти и объем памяти под ту или иную переменную не фиксированы, а меняются в ходе выполнения задачи. Заранее объявлять тип переменной не требуется. Он определяется операцией присваивания переменной некоторого значения. Такой подход упрощает построение программ и естественен при использовании переменных в обычной математической литературе. Без особых на то указаний переменные в системе Mathematica являются глобальными. Это означает, что после определения переменной ее значение можно изменить в любом месте документа или программы. Переменная появляется как действующий объект только после ее первого определения или задания. Определения переменных выполняются с помощью операции присваивания, вводимой знаком равенства : var = value Здесь var имя переменной, value ее значение. Ниже представлены основные операции по присваиванию переменным значений : х = value переменной х присваивается вычисленное значение value; х = у = value вычисленное значение value присваивается переменным х и у ; x:=value присваивание переменной х невычисленного значения value; х =. с переменной х снимается определение.

Специфику математических выражений в системе Mathematica составляет возможность их оценивания и изменения в соответствии с заложенными в ядро системы правилами математических преобразований. В итоге после изменения значение выражения, которое присваивается переменной, может быть совсем иным, чем до оценивания. Поэтому в целом для определения переменных используют описанные ниже конструкции. Основная функция Set [ Ihs, rhs ] имеет аналогичные по действию упрощенные операторы : Ihs = rhs вычисляет правую часть rhs и присваивает ее значение левой части Ihs. С этого момента Ihs замещается на rhs всюду, где бы этот идентификатор ни появился ; {11, 12,...} = {rl, г 2,...} вычисляет ri и назначает полученные результаты соответствующим 11. Функция задержанного присваивания SetDelayed[lhs,rhs] может быть заменена аналогичным по действию оператором Ihs : =rhs, который назначает правой части rhs роль отложенного значения левой части Ihs. При этом rhs содержится в невычисленной форме. После этого, когда появляется идентификатор Ihs, он заменяется на значение rhs, вычисляемое каждый раз заново. При задержанном ( отложенном ) присваивании вывода нет, тогда как при обычном немедленном присваивании lhs=rhs значение rhs вычисляется немедленно и результат выводится в строку вывода. Применение различных типов операций присваивания способствует большей гибкости системы. Различия между этими операциями на первый взгляд несущественны, но они принципиальны, и это станет понятно после более детального знакомства с символьными преобразованиями и приобретения практики работы с системой. Имеются также системные переменные, значениями которых являются данные о системе и ее работе, например версия применяемой операционной системы, текущая дата, время в данный момент, машинная точность вычислений и т. д. Многие из таких переменных имеют отличительный знак $ перед своим именем. Такие переменные более подробно будут рассматриваться в дальнейшем.

Арифметические операторы Математические выражения в системе Mathematica записываются с помощью операторов и функций. Операторы ( от слова operator исполнитель ) являются элементами записи математических выражений, указывающими на то, какие действия производятся над символьными или числовыми данными. Когда эти данные используются совместно с операторами, их называют операндами. Выражения, составленные из операторов, операндов и функций, способны возвращать результат своего вычисления. К примеру, если вычисляется сумма 2+3, то знак «+» является оператором, числа 2 и 3 операндами, а вся запись 2+3 выражением. Сами по себе операторы не возвращают какого - либо значения. Существуют общепринятые приоритеты выполнения операций, например, в первую очередь выполняются сложение и вычитание, затем умножение и деление и далее другие операции. С помощью круглых скобок можно изменять последовательность выполнения действий, например, в выражении (2+3) М вначале будет вычислено 2+3, а затем уже результат будет умножен на число 4. В сомнительных случаях применение скобок особенно желательно, например 2^2+3 даст 7, а 2^ (2 + 3) даст 32

Важное достоинство систем символьной математики выполнение арифметических вычислений с произвольными разрядностью и точностью. Хотя на деле они ограничены объемом ОЗУ, но для современных компьютеров с объемом ОЗУ в единицы и десятки мегабайт вряд ли можно столкнуться со случаем, когда ограничения по разрядности и точности становятся существенными. Следующие две функции, Rationalize [ х ] и Rationalize [x, dx], дают приближение для числа х в виде рациональных чисел. Вторая из этих функций задает приближение с заданной точностью dx. Mathematica может работать с большими числами и выполнять определенные операции с очень высокой точностью. Примеры, приведенные на рис. 3.3, иллюстрируют эти возможности. Как видно из примеров представления рациональных чисел, результат приближения зависит от заданной погрешности. Чем она меньше, тем большие значения целых чисел в числителе и знаменателе результата разыскивает система. Функция Rationalize открывает широкие возможности для разработки целочисленных алгоритмов вычислений, позволяя легко получать рациональные приближения для наиболее распространенных числовых констант на рис. 3.3 примеры этого даны для числа 8. Обратите внимание на последние два примера вычисление факториала достаточно большого числа. Первый результат целочисленный : он занял целых три строки, но зато он точен. С помощью функции N [ ехрг ] результат всегда можно представить в виде большого вещественного числа но приближенного. При этом может использоваться научная форма представления чисел с мантиссой и порядком.

Важнейшим объектом любой компьютерной математической системы является функция. Она отражает зависимость некоторой величины от одного или нескольких аргументов. Например, функция sin(x) дает зависимость синуса х от величины аргумента х при изменении последнего от -°° до +°°. Признаком функции является возврат результата выполняемого ею действия. Характер результата будет зависеть от смысла функции, который нередко явно указывается ее именем идентификатором. Например, функция Digitslnteger [n] возвращает число десятичных цифр десятичного целого числа. Это ясно из прямого перевода имени функции слово Digitslnteger говорит о том, что она возвращает число цифр целого числа. Подобные смысловые имена задаются для большинства функций системы Mathematica и облегчают их запоминание. Понятие функции в системе Mathematica существенно расширено функции могут возвращать графические и даже звуковые объекты. Здесь мы, однако, остановимся на общепринятом в программировании понятии функций, возвращающих в ответ на обращения к ним численные или символьные значения. Функции могут входить в состав математических выражений. Обычно они имеют один или несколько параметров, указываемых в квадратных скобках. Если параметров несколько, то в квадратных скобках указывается список параметров, разделенных запятыми. В общем случае параметрами могут быть списки. Наконец, в состав функций могут входить опции, указанные своим именем и ( после знака ->) значением. Для обозначения положительной бесконечности используется символ Infinity. Целочисленные функции имеют в своем имени слово Integer. В ядро систем Mathematica 3/4 входит множество встроенных функций, то есть функций, готовых к немедленному использованию без какого - либо предварительного объявления. Таких функций многие сотни. Среди них различные арифметические функции, тригонометрические и гиперболические функции, специальные математические функции и т. д. Мы рассмотрим их в дальнейшем.

Для выполнения арифметических действий в системах Mathematica 3/4 определены следующие арифметические функции : Divide [ х, у ] возвращает результат деления х на у эквивалентно выражению х у ^ -1; Plus[x, у,...] возвращает сумму элементов списка ; PowerModta, b, n] возвращает Mod[a ^ b, n]. Для b<0 возвращает инверсию остатка ; Times [ х, у,...] возвращает произведение аргументов х * у *...; Mod [m, n] возвращает остаток от деления m на п. Результат имеет такой же знак, как п.

Для реализации статистических методов моделирования используются случайные числа. Система имеет генератор псевдослучайных чисел, доступ к которому обеспечивают следующие функции : Random [ ] возвращает равномерно распределенное псевдослучайное число типа Real в интервале от 0 до 1; Random [type, range] дает псевдослучайное число указанного типа type, лежащее в указанном интервале range. К возможным типам относятся Integer, Real и Complex. По умолчанию принят интервал от 0 до 1. Можно задать интервал явно в виде {min, max}; спецификация интервала в виде max эквивалентна {0, max}; SeedRandom[n] сбрасывает ( устанавливает в начальное состояйие ) генератор случайных чисел, используя целое п как начальное число ; SeedRandom [ ] устанавливает генератор, используя в качестве начального числа текущее время. Хотя генерируемые числа не являются строго случайными, их количество в повторяющейся последовательности очень велико. Использование специальной установки начального состояния генератора, например по времени дня, делает повторение последовательности практически невозможным

Следующие функции, опции и директивы используются, в основном, для выявления погрешностей вычислений и уточнения структуры чисел : Accuracy [ х ] возвращает количество десятичных цифр справа от десятичной точки числа х ; EvenQ [expr] возвращает значение True, если expr есть четное число, и False в противном случае ; IntegerDigits [n] возвращает список десятичных цифр целого числа n; IntegerDigits [n,b] возвращает список цифр целого числа п в записи по основанию b; IntegerDigits [n, b, k] возвращает список длиной k, содержащий самые младшие ( наименьшие ) значащие цифры в n; Precision [x] возвращает количество точных знаков в числе х.

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

Различные объекты системы будут более подробно описаны в дальнейшем по мере знакомства с системой. Полный список объектов, заданных в ядре системы, легко получить, используя команду ? * ( ниже приведены лишь начало и конец этого списка ): ?* Abort AbortProtect Above Abs AbsoluteDashing AbsolutePointSize $Version $VersionNumber

Оперативную помощь о назначении какой - либо функции или объекта в ходе работы с системой можно получить, используя следующие обращения : ? Name или Names [ "Name" ] справка по заданному слову Name; ?? Name расширенная справка по заданному слову Name; ? А b с * перечень всех определений, начинающихся с символов Abc; ©ptions [name] получение информации об опциях объекта Name.

Средства диагностики органично входят во все программные модули системы Mathematica, созданные профессионально. Благодаря этому система обнаруживает неточные действия пользователя, например синтаксические ошибки при вводе идентификаторов функций и команд, неправильное использование типов данных, применение недопустимых операций ( вроде злосчастного деления на ноль ) и т. д. Всякий раз, когда ошибочное действие обнаружено, система выдает сообщение об ошибке в следующем виде : Тип :: Метка % Диагностика : Сообщение Эти сообщения появляются в отдельных неактивных ячейках. Тип указывает на тип ошибки, например, General ошибка общего вида, Syntax синтаксическая ошибка, Arg ошибка задания аргумента и т. д. Метка указывает место ошибки в списке ошибок данного типа, а Диагностика указывает ( увы, не всегда...) на ошибочное выражение. Сообщение обычно раскрывает суть ошибки.

Как уже отмечалось, объекты Mathematica имеют средства установки и снятия защиты от модификации. Для этого используются следующие функции - директивы : Protect [s1, s2,...] устанавливает атрибут защиты от модификации Protected для перечисленных объектов si Protect ["forml", "form2",...] устанавливает атрибут защиты от модификации для всех объектов, имена которых сопоставимы с любым из указанных строковых шаблонов formi; Unprotect [s1, s2,...] удаляет атрибут защиты от модификации Protected для объектов si, что делает возможной их модификацию ; Unprotect ["form1", "form2",...] снимает защиту всех объектов, имена которых текстуально ( по буквам ) сопоставимы с любым из указанных шаблонов formi.

Важное значение в числовых и символьных преобразованиях имеют операции подстановки (rules). Их смысл заключается в замене одного объекта или его части другим объектом или частью другого объекта. Например, часто возникает необкодимость вычислить значение математического выражения при замене некоторой переменной ее конкретным численным значением. Для этого достаточно вместо этой переменной подставить нужное численное значение. Куда менее тривиальной является замена переменной ее символьным значением в виде математического выражения. При этом исходное выражение может в ходе решения задачи превратиться в совершенно новое выражение, поскольку после подстановки система может провести над исходным выражением достаточно сложные математические преобразования. Говорят, что в этом случае ячейка, содержащая выражение ( а точнее само выражение ), оценивается и изменяется по ходу решения задачи. Операции подстановки обычно вводятся с помощью комбинации символов «/.»: ехрг /. х -> value в выражение ехрг вместо переменной х подставляется ее значение value; ехрг /. { х -> xvalue,. у -> yvalue} в выражение ехрг вместо переменных х и у подставляются их значения xvalue и yvalue.

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

Часто математические или иные объекты содержат множество данных, которые желательно объединять под общим именем. Например, под объектом с именем М можно подразумевать квадратную матрицу размером 10x10 с общим числом элементов, равным 100. Человека с именем Victor, например, можно характеризовать целым списком разных данных символьными фамилией, именем и отчеством, целочисленным годом рождения, вещественным ростом, объемом груди и т. д. Для объединения данных могут использоваться списки (list). Mathematica имеет обширные возможности работы с объектами - списками, содержащими не только однотипные, но и разнотипные элементы. В частности, элементами списков могут быть числа, константы, переменные, выражения и даже сами списки. Списки используются для конструирования более частных типов данных массивов, матриц и векторов [87]. На языке данной системы список это совокупность произвольных данных, указанных в фигурных скобках, например : {1, 4, 2, 7, 9} или { а, Ь, с, d, e, sin[x], ln[y], "string"}

Для генерации списков с элементами, являющимися вещественными и целыми числами или даже целыми выражениями, часто используется функция Table, создающая таблицу - список : Table [expr, {imax} ] генерирует список, содержащий imax экземпляров выражения ехрг ; Table [expr, {i, imax} ] генерирует список значений ехрг при 1, изменяющемся от 1 до imax; Table [expr, {i, imin, imax}] генерирует список значений ехрг при i, изменяющемся от imin до imax; Table [expr, {i, imin, imax, di} ] использует шаг приращения i, равный di; Table[expr, {i, imin, imax}, {j, jmin, jmax},...] возвращает вложенный список. Самым внешним является список по переменной i.

Для вывода элементов списка используются следующие функции : MatrixFormflist] выводит список в форме массива ( матрицы ); TableForm [list] выполняет вывод элементов списка list в виде таблицы. С этими функциями используются следующие опции : TableAlignments указывает, каким образом должно выравниваться содержимое списка в каждой размерности ( слева, по центру или справа ); TableDepth устанавливает максимальное количество уровней, выводимых в табличном или матричном формате ; TableDirections указывает, как следует располагать последовательные ( соседние ) размерности в виде строк или столбцов ; TableHeadings задает подписи (labels) для каждой размерности таблицы или матрицы ; TableSpacing устанавливает количество пробелов, которое следует оставлять между соседними строками или столбцами.

На рис. поясняется использование функций MatrixForm и TableForm на примере вывода списка.

Списки относятся к данным сложной структуры. Поэтому при работе с ними возникает необкодимость контроля за структурой, иначе применение списков может привести к грубым ошибкам, как явным, сопровождаемым выдачей сообщения об ошибке, так и неявным. Последние могут привести к серьезным просчетам. Для выявления структуры списков используется ряд функций : Count [list, pattern] возвращает количество элементов в списке list, которые соответствуют образцу pattern; Dimensions [list] возвращает список размеров списка по каждой размерности ; FreeQ [list, form] возвращает True, если список list не содержит form; Length [list] возвращает число элементов одномерного списка list или число размерностей в случае многомерного списка ; MatrixQ [list ] проверяет, является ли список матрицей, и дает True, если это так, и False в противном случае ; MemberQ [list, form] проверяет, есть ли form в списке, и возвращает True, если это так, и False в противном случае ; Position [list, form] возвращает номер позиции form в списке ; TensorRank[list] находит ранг списка, если он является тензором ; VectorQ [list] проверяет, является ли список вектором, и дает True, если это так, и False в противном случае.

Списки можно представить в виде особой структуры данных стека. Стек это структура данных, напоминающая стопку тарелок в шкафу. При этом тарелки играют роль данных. Очередную тарелку можно положить только сверху ( на вершину стека ). На дне стека лежит первая помещенная в него тарелка. Стек подчиняется следующему правилу : последнее введенное значение извлекается первым, а первое введенное значение извлекается последним. Стек относится к системам хранения данных динамического типа, его размеры непрерывно меняются по ходу вычислений. Стек может быть пустым, если из него извлечены все данные. Система Mathematica предоставляет широкие возможности для операций со стеками : Drop [list, n] возвращает список list, из которого удалены первые п элементов ; Drop [list, -n] возвращает список list с отброшенными последними п элементами ; Drop [list, {n}] возвращает список list без n- го элемента ; Drop [list, {m, n}] возвращает список list с отброшенными элементами от m- го до п - го ; Fold[f, x, list] возвращает последний элемент из FoldList [f,x, list]; Last [list] возвращает последний элемент списка list; Rest [list] возвращает список с уничтоженным первым элементом ; Take [list, n] возвращает первые п элементов списка list; Take [list, -n] возвращает последние п элементов списка list; Take [list, {m, n}] возвращает элементы списка с порядковыми номерами от m до п.

Помимо добавления в список новых данных имеется возможность изменения порядка расположения элементов в списке. Она реализуется следующими операциями : Flatten [list] выравнивает ( превращает в одномерный ) список по всем его уровням ; Flatten [list, n] выравнивает список по п его уровням ; Flatten [list, n, h] выравнивает выражения с заголовком h no n уровням ; FlattenAt [list, n] выравнивает подсписок, если он оказывается п - м элементом списка list. Если n отрицательно, позиция отсчитывается с конца ; Sort [list] сортирует элементы списка list в каноническом порядке ; Sort[list,p] сортирует согласно функции упорядочения р ; Reverse [list] возвращает список с обратным порядком расположения элементов ; RotateLeft [list] возвращает список после однократного поворота влево ; RotateLeft [list, n] возвращает список после n- кратного поворота влево ; RotateRight [list] возвращает список после однократного поворота вправо ; RotateRight [list, n] возвращает список после n- кратного поворота вправо ; Transpose [list] осуществляет транспозицию ( смену строк и столбцов ) для двумерного списка ; Transpose [list, п ] осуществляет транспозицию n- мерного списка. Ниже приведен ряд примеров на использование этих функций.

Иногда возникает необкодимость комбинирования нескольких списков. Для этого используются следующие функции : Complement [list, listl, list2,...] возвращает список list с элементами, которые не содержатся ни в одном из списков listl, Iist2,...; Intersection [listl, list2,...] ( пересечение множеств ) возвращает упорядоченный список элементов, общих для всех списков listi; Join[list1, list2,... ] объединяет списки в единую цепочку ( выполняет конкатенацию ). Join может применяться к любому множеству выражений, имеющих один заголовок ; Union [listl, Iist2,...] ( объединение множеств ) удаляет повторяющиеся элементы списков и возвращает отсортированный список всех различающихся между собой элементов, принадлежащих любому из данных списков listi. Функция обеспечивает теоретико - множественное объединение списков ; Union [list] возвращает отсортированный вариант списка list, из которого удалены все повторяющиеся элементы.

Линейная алгебра один из фундаментальных разделов математики. Он во многом способствовал развитию методов вычислений. Средства линейной алгебры ( преобразование матриц, решение систем линейных уравнений и т. д.) широко используются при решении задач механики, электро - и радиотехники и других отраслей науки и техники. В этом разделе мы познакомимся с основным набором средств системы Mathematica, предназначенных для решения задач линейной алгебры.

Совокупность данных образует массив (Array). Массивы могут быть одномерными ( один список ), двумерными и многомерными ( два и более списка ). Одномерные массивы в математике называют векторами, двумерные матрицами. В общем случае массив характеризуется размерностью ( числом измерений ) и размером произведением числа элементов по всем размерностям. Mathematica позволяет создавать многомерные массивы число элементов в них ограничено лишь объемом памяти компьютера. Для задания массивов используются следующие функции : Array [ f, n] генерирует список длиной п с элементами f [ 1 ], f [ 2 ],..., f[n]; Array [f, {nl, n2,...}] генерирует массив размером n1x n2 x... в виде вложенных списков с элементами f [ i I, i2,...] ( аргумент функции i k меняется от 1 до nk); Array[f, dims, origin] генерирует список с размерностью dims, используя спецификацию индекса origin; Array [f, dims, origin, h] использует заголовок h, а не List, для каждого уровня массива.

Массивы, в основном в виде векторов и матриц, широко применяются при решении задач линейной алгебры. Прежде чем перейти к рассмотрению возможностей Mathematica в части решения таких задач, рассмотрим краткие определения, относящиеся к линейной алгебре. Матрица прямоугольная двумерная таблица, содержащая m строк и п столбцов элементов, каждый из которых может быть представлен числом, константой, переменной, символьным или математическим выражением ( расширительная трактовка матрицы ). Квадратная матрица матрица, у которой число строк m равно числу столбцов п Сингулярная ( вырожденная ) матрица квадратная матрица, у которой детерминант ( определитель ) равен 0. Такая матрица обычно не упрощается при символьных вычислениях. Линейные уравнения с почти сингулярными матрицами могут давать большие погрешности при решении. Единичная матрица это квадратная матрица, у которой диагональные элементов равны 1, а остальные элементы равны 0

Следующая группа функций системы Mathematica позволяет осуществлять над векторами и матрицами основные операции, используемые в линейной алгебре : Cross [vl,v2, v3,...] векторное произведение ( может задаваться в виде v1*v2*v3*...); Det [m] возвращает детерминант ( определитель ) квадратной матрицы m; DiagonalMatrix [list] возвращает диагональную матрицу с главной диагональю, сформированной из элементов списка list, и нулевыми остальными элементами матрицы ; Dot [a, b, с ] возвращает произведения векторов, матриц и тензоров. Операцию произведения можно задавать также в виде а. b. с ; Eigensystem[m] возвращает список {values, vectors} собственных значений и собственных векторов квадратной матрицы т ; Eigenvalues [m] возвращает список собственных значений квадратной матрицы m; Eigenvectors [m] возвращает список собственных векторов квадратной матрицы m; IdentityMatrix [n] возвращает единичную матрицу размером пхп ( у нее диагональные элементы имеют значения 1, остальные 0); Inverse [m] возвращает обратную матрицу для квадратной матрицы т, то есть матрицу m- 1, которая, будучи умноженной на исходную матрицу, дает единичную матрицу ; LinearSolve [m, b] возвращает вектор х, представляющий собой решение матричного уравнения m. x==b, где m матрица коэффициентов левой части системы линейных уравнений, х вектор неизвестных и b вектор свободных членов в правой части системы ; Tr [list] возвращает след матрицы или тензора ( эта функция есть только у Mathematica 4); Transpose [m] возвращает транспонированную матрицу, у которой столбцы и строки меняются местами в сравнении - с исходной матрицей m; RowReduce [m] производит гауссовское исключение переменных, возвращая упрощенную форму матрицы m, полученную путем линейного комбинирования строк.

Вычисление сумм Вычисление произведений Вычисление производных Вычисление интегралов Вычисление пределов функций Решение уравнений и систем уравнений Решение дифференциальных уравнений Поиск максимального и минимального чисел в списке Поиск максимума и минимума функции Решение задач линейного программирования Преобразования Лапласа Z- преобразования

В числе операций математического анализа прежде всего надо отметить суммы Сумма от i=min до imax по fi В этих операциях индекс i принимает целочисленные значения от минимального ( начального ) imin до максимального ( конечного ) imax с шагом, равным +1. Суммы и произведения легко вычисляются численными математическими системами, такие вычисления просто описываются на всех языках программирования. Однако важным достоинством систем символьной математики, включая Ма -thematica, является вычисление сумм и произведений в аналитическом виде ( если это возможно ) и при большом числе членов вплоть до стремящегося к бесконечности. Для вычисления сумм в системе Mathematica предусмотрена функция Sum, используемая в ряде форм : Sum [ f, {i, imax} ] вычисляет сумму значений f при изменении индекса i от 1 до imax с шагом +1; Sum[f, {i, imin, imax}] вычисляет сумму значений f при изменении индекса i от минимального значения i=imin до максимального i=imax с шагом +1; Sum[f, {i, imin, imax, di}] вычисляет сумму значений f при изменении управляющей переменной вещественного типа от минимального значения i=imin до максимального i=imax с шагом di; Sum[f, {i, imin, imax}, {j, jmin, jmax},...] вычисляет многократную сумму значений f при изменении индексов i от imin до imax с шагом +1, j от jmin до jmax с шагом +1 и т. д. ( число индексов не ограничено ).

Для вычисления сумм в численном виде используются следующие функции : NSum[f, {i, imin, imax }] возвращает численное значение суммы f [ i ] при i, изменяющемся от imin до imax с шагом +1; NSumff, {i, imin, imax, di }] возвращает сумму численных значений функции f [i] при i, изменяющемся от imin до imax с шагом di; NSum[f, {i, imin, imax}, {j, jmin, j max },...] выполняет многомерное суммирование. Функция NSum[... ] эквивалентна выражению N[Sum[...] ]. Особенностью этой функции является возможность использования ряда опций, управляющих вычислительным процессом. Одной из них является NSumTerms, задающая число членов, которые явно должны быть включены в сумму перед экстраполяцией. Вы можете просмотреть список опций, используя команду Options [NSum].

Операции вычисления произведений Произведение от i=imin до i=imax по fi представлены следующими функциями : Product [f, {i, imax}] возвращает произведения значений f [i] для значений i, изменяющихся от 1 до imax; Product [f, {i, imin, imax}] возвращает произведение значений f [ i ] при изменении i от imin до imax с шагом +1; Product[f, {i, imin, imax, di}] возвращает произведение f [ i ] при i, меняющемся от значения imin до значения imax с шагом di; Product [f, {i, imin, imax}, {j, jmin, jmax},...] вычисляет многократное произведение ( произведение по нескольким переменным )

Для вычисления численных значений произведения используются следующие функции : NProduct [f, {i, imax }] возвращает численное значение произведения значений f [i] для значений i, изменяющихся от 1 до imax; NProduct [f, {i, imin, imax}] возвращает численное значение произведения значений f [i] при изменении i от imin до imax с шагом +1; NProduct [f, {i, imin, imax, di }] возвращает численное значение произведения значений f [i] при i, меняющемся от значения imin до значения imax с шагом di; NProduct[f, {i, imin, imax}, {j, jmin, j max },...] вычисляет численное значение многократного произведения ( произведение по нескольким переменным ). Эти функции применяются с теми же опциями, которые используются для функции Nsum, что позволяет управлять вычислительным процессом. Ознакомиться с опциями можно, выполнив команду Options [NProduct]. Ниже представлен пример на использование функции Nproduct. Сначала вычисляем точное значение произведения для использования в качестве эталона : trueproduct = Product [ j/(1+j), { j, 1, 50 } ] 1/ 51

К числу наиболее часто используемых математических операций принадлежит вычисление производных функций как в аналитической, так и в символьной форме. Для этого используются следующие функции : D [ f, х ] возвращает частную производную функции f по переменной х ; D [f, { х, n}] возвращает частную производную n- го порядка по х ; D[f, xl, х 2,...] возвращает смешанную производную ; Dt[f, х ] возвращает обобщенную производную функции f по переменной х ; Dt [ f ] возвращает полный дифференциал f. Для функции D существует опция NonConstants, которая позволяет задать список объектов, находящихся в неявной зависимости от переменных дифференцирования. По умолчанию этот список пустой. Для функции Dt имеется опция Constants, которая, наоборот, указывает символы, которые являются константами ( по умолчанию их список также пуст ). На практике применять данные опции приходится редко. Существует еще одна функция, Derivative [nl, n2,...] [f ], основная ( общая ) форма представления функции, полученной в результате nl- кратного дифференцирования функции f по первому аргументу, п 2- кратного по второму аргументу и т. д.

Одна из важнейших операций вычисление первообразных и определенных интегралов в символьном виде. Первообразная это функция F(x), удовлетворяющая уравнению f(x)dx = F(x) + C, где С постоянная интегрирования. А вычисление определенного интеграла с пределами верхним b и нижним а производится по формуле f(X)dX = F(b)-F(a) Заметим, что определенный интеграл может быть представлен как аналитическим, так « численным значением. Для вычисления численных значений определенных интегралов разработан ряд приближенных методов от простых ( прямоугольников и трапеций ) до сложных, автоматически адаптирующихся к характеру изменения подынтегральной функции f(x). Для интегрирования в системе Mathematica используются следующие функции : Integrate [f, x] возвращает первообразную ( неопределенный интеграл ) подынтегральной функции f по переменной х ; Integrate [f, {x, xmin, xmax}] возвращает значение определенного интеграла с пределами от x min до x max ; Integrate [f, {x, xmin, xmax}, { у, ymin, ymax},...] возвращает значение кратного интеграла с пределами от x min до x max по пере Обычно функция Integrate применяется в простейшей форме, но она имеет три характерные опции : Options[Integrate] {Assumptions -> {}, GenerateConditions->Automatic, PrincipalValue > False) Для обозначения бесконечных пределов используется константа Infinity. Эта константа означает положительную бесконечность, для задания отрицательной бесконечности она используется со знаком « минус ». Пределы могут задаваться как константами, так и функциями. менной х, от y min до y max по переменной у и т. д. ( кратность реально не ограничена ).

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

Mathematica способна вычислять даже кратные интегралы с фиксированными и переменными верхним или нижним пределами. Кратный, например двойной, интеграл с фиксированными пределами имеет вид : f(x,y)dxdy На рис. 4.7 представлено вычисление нескольких двойных определенных интегралов

При вычислении сложных интегралов, например не имеющих представления через элементарные функции, система Mathematica 2 обращалась к своим пакетам расширений в попытке найти решение, которое может быть представлено через специальные математические функции. Mathematica 3/4 уже не акцентирует внимание пользователя на своих проблемах и, как правило, выдает результат интегрирования. Однако порой он может иметь довольно необычный вид ( рис. 4.9). Эти примеры наглядно показывают, что вычисление первообразных в системе может дать результаты, далекие от тривиального вычисления неопределенных интегралов, имеющихся в обычных справочниках по математике. Кстати, и при вычислении тривиальных интегралов результат может оказаться иным, чем в справочниках, из - за различных преобразований, примененных для получения конечных формул. Подчас могут потребоваться определенные усилия для получения результата в заданной форме. Как подынтегральное выражение, так и результаты вычислений могут содержать как элементарные, так и специальные математические функции.

Многие функции при приближении аргумента к некоторому значению или к некоторой области значений стремятся к определенному пределу. Так, функция sin(x)/x при х, стремящемся к нулю ( обозначим это как х > 0), дает предел 1 в виде устранимой неопределенности 0/0. Численные математические системы, равно как и большинство программ на обычных языках программирования, не воспринимают выражение 0/0 > 1 как объективную реальность. Их защитный механизм настроен на примитивное правило ничего нельзя делить на 0. Следовательно, вычисление sin(x)/x при х = 0 будет сопровождаться выдачей ошибки типа « Деление на 0». Конечно, в данном конкретном случае можно предусмотреть особый результат выдать 1 при х = 0. Но это частный случай. В целом же подобные системы « не понимают » понятия предела. Пределом некоторых функций может быть бесконечность, тогда как многие функции стремятся к конечному пределу при аргументе х, стремящемся к бесконечности. Система Mathematica не только численно находит пределы функций, заданных аналитически, но и позволяет найти предел в виде математического выражения.

Многие математические задачи сводятся к решению в общем случае нелинейных уравнений вида f(x) = 0 или f(x) = expr. В системе Mathematica они обозначаются как eqns ( от слова equations уравнения ). Разумеется, могут решаться и системы, состоящие из ряда таких уравнений. Для решения уравнений ( как одиночных, так и систем ) в численном и символьном виде Mathematica имеет функцию Solve: Solve [eqns, vars] предпринимает попытку решить уравнение или систему уравнений eqns относительно переменных vars; Solve [eqns, vars, elims] пытается решать уравнения eqns по переменным vars, исключая переменные elims.

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

С функцией Solve можно использовать ряд опций. Их можно вывести командой Options [Solve]. Ниже описано их назначение : InverseFunctions указывает, следует ли использовать обратные функции ; MakeRules указывает, должен ли результат быть представлен как объект AlgebraicRulesData; Method устанавливает алгоритм, используемый для вычисления результата ( возможны методы 1, 2 и 3); Mode задает характер решения уравнения ( возможны Generic, Modular и Rational); Sort устанавливает, нужна ли сортировка результатов ; Verif ySolutions устанавливает, следует ли проводить проверку полученных решений и удаление посторонних решений ; WorkingPrecision устанавливает число цифр промежуточных вычислений ( по умолчанию Infinity).

Многие нелинейные уравнения и системы нелинейных уравнений в принципе не имеют аналитических решений. Однако их решение вполне возможно численными методами. Для численного решения систем нелинейных уравнений используется функция NSolve: NSolve [eqns, vars] пытается численно решить одно уравнение или систему уравнений eqns относительно переменных vars; NSolve [eqns, vars, elims] пытается численно решить уравнения eqns относительно vars, исключая переменные elims Cubics указывает, следует ли искать явные решения для неприводимых кубических уравнений ; EquatedTo задает выражение для замещения переменной в решении ; Modulus задает промежуточную факторизацию полинома ; Multiplicity устанавливает кратность каждого из корней в конечном результате ; Quartics задает точное решение квадратного уравнения и полинома четвертой степени ; Using указывает какие - либо дополнительные уравнения, которые следует использовать для решения уравнений. Применение опций нередко позволяет получать решения, которые не удаются с первого раза. Однако это требует определенного опыта и понимания сути решаемой задачи.

Имеется также ряд дополнительных функций, которые используются описанными ранее функциями и также могут применяться при решении нелинейных уравнений : Auxiliary [v] применяется модулем Solve для указания того, что переменная v должна использоваться функцией Roots для результирующих решений, но соответствующие значения v не должны быть включены в окончательный ответ ; Eliminate [eqns, vars] исключает переменные vars из системы уравнений eqns; FindRoot [Ihs == rhs, {x, x0}] ищет численное решение уравнения Ihs == rhs, начиная с х = x0; MainSolve [eqns] основная функция для преобразования системы уравнений. Ее вызывают Solve и Eliminate. Уравнения должны быть представлены в форме Ihs == rhs. Они могут объединяться с помощью && и | |. MainSolve возвращает False, если не существует решения уравнений, и возвращает True, если все значения переменных являются решениями. MainSolve перестраивает уравнения, применяя определенные директивы ; MainSolve [eqns, vars, elim, rest] пытается перестраивать уравнения eqns так, чтобы найти решения для переменных vars и исключить переменные elim. Список rest может включаться для указания порядка исключения любых остальных переменных ; NRoots [lhs==rhs, var] возвращает список численных приближений корней полиномиального уравнения ; Residue [ ехр r, { х, х 0 } ] ищет вычет ехрг в точке х = х 0; SolveAlways [eqns, vars] возвращает значения параметров, которые превращают уравнения eqns в тождества для всех значений переменных vars.

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

Дифференциальными принято называть уравнения, в состав которых входят производные функции у ( х ), представляющей решение уравнения. Дифференциальные уравнения могут быть представлены в различной форме, например в общеизвестной форме Коши : у '( х ) = eqn=f(x,y). Несколько дифференциальных уравнений образуют систему дифференциальных уравнений. Решение таких систем также возможно средствами Mathematica и подробно описано в ряде книг по использованию системы [65-71]. Дифференциальные уравнения и системы дифференциальных уравнений могут быть линейными и нелинейными. Для линейных уравнений обычно существуют решения в аналитическом виде. Нелинейные дифференциальные уравнения в общем случае аналитических решений не имеют, но могут решаться приближенными численными методами. Дифференциальные уравнения широко используются в практике математических вычислений. Они являются основой при решении задач моделирования особенно в динамике. Немногие математические системы имеют реализации численных методов решения систем дифференциальных уравнений. Но система Mathematica имеет средства как для символьного, так и для численного решения дифференциальных уравнений и их систем.

Многие дифференциальные уравнения не имеют аналитических решений например, нелинейные. Однако они могут с приемлемой точностью решаться численными методами. Для численного решения систем дифференциальных уравнений используется функция NDSolve: NDSolve [eqns, у, {x, xmin, xmax }] ищет численное решение дифференциальных уравнений.eqns относительно функции у независимой переменной х в интервале от xmin до xmax; NDSolve [eqns, {yl, y2,...}, {x, xmin, xmax }] ищет численные решения относительно функций yi. MaxSteps опция к NDSolve, которая определяет максимальное количество шагов. Часто весьма желательно выводить результаты решения дифференциальных уравнений в графической форме. Рисунок 4.25 поясняет, как это делается при решении системы нелинейных дифференциальных уравнений, описывающих достаточно сложный колебательный процесс. Нередко решение предпочитают представить на фазовой плоскости. Рисунок 4.26 иллюстрирует такую возможность. Более того, поскольку решается система из трех дифференциальных уравнений, фазовая траектория решения находится в трехмерном пространстве.

В практике математических прикладных вычислений важная роль принадлежит оптимизационным задачам, например таким, как поиск минимальных и максимальных значений функций одной или нескольких переменных. Mathematica дает разнообразные возможности решения задач оптимизации от поиска элементов списка с минимальным или максимальным значением до поиска локальных и даже глобальных минимумов функций, заданных аналитически. Для поиска максимального и минимального значений ряда чисел, входящих в список, система Mathematica предоставляет следующие средства : Max [xl, х 2,...] возвращает наибольшее значение из xi; Max[{xl, x2,...}, {yl,...},...] выбирает наибольший элемент из нескольких списков ; Min[xl, x2,...] возвращает наименьшее значение из xi; Min[{xl, x2,...}, {yl,...},...] выбирает наименьший элемент из нескольких списков.

Если нужен поиск локального минимума некоторой аналитической функции, используется функция FindMinimum [ f, { х, х 0 } ], которая выполняет поиск локального минимума функции f, начиная со значения х = х 0, и возвращает его значение. Для указания градиента минимизируемой функции используется опция Gradient.

Следующие две функции служат для поиска глобального максимума и минимума аналитически заданной функции : ConstrainedMax [f, {inequalities}, {x, у,...}] ищет глобальный максимум функции f в области, определяемой неравенствами inequalities. Полагается, что все переменные х, у... неотрицательны ; ConstrainedMin [f, {inequalities}, {x, у,...}] ищет глобальный минимум функции f в области, определяемой неравенствами inequalities. Все переменные х, у... полагаются неотрицательными.

Две последние функции решают типовые задачи линейного программирования. В дополнение к ним может использоваться функция LinearProgramming[ с, m, b] которая ищет вектор х, минимизирующий величину с. х в соответствии с условиями m.x>=b и х >=0. Рассмотрим типичный пример на линейное программирование. Пусть цех малого предприятия должен изготовить 100 изделий трех типов, причем не менее 20 штук каждого. На изготовление этих изделий уходит, соответственно, 4, 3,4 и 2 кг металла. Имеющийся в наличии запас материала 700 кг. Спрашивается, сколько изделий xl, х 2 и хЗ каждого типа надо выпустить для обеспечения максимальной стоимости продукции, если цена изделий равна, соответственно, 4, 3 и 2 рубля. Ниже представлено решение этой задачи с помощью функции ConstrainedMax: ConstrainedMax [ 4 * xl + 3 * x2 + 2 * хЗ, {xl >= 20, x2 >= 20, хЗ >= 20, 4 * xl * x2 + 2 * x3 <= 340, 4.75 * xl + 11 * x2 + 2 * x3 < = 700, xl + x2 + x3 == 100}, {xl, x2, x3}] {332., {xl^ 56^x2^ 20., x3^24.}} После имени функции указывается максимизируемая целевая функция, затем перечисляются все ограничения и, наконец, задается список искомых переменных. Результатом вычислений является максимально достижимая стоимость продукции и список переменных, отражающих количество изделий каждого типа.

Преобразования Лапласа важный вид интегральных преобразований. Они лежат в основе, например, символического метода расчета электрических цепей. В системе Mathematica 3 функции преобразования размещены в подпакете Laplace-Transform. Но в CKM Mathematica 4 эти функции стали встроенными. Основными являются следующие функции этого класса : LaplaceTransform[expr, t, s] возвращает результат прямого преобразования Лапласа для выражения expr [t] в виде функции переменной s; InverseLaplaceTransform[expr, s,t] возвращает результат обратного преобразования Лапласа для выражения expr [s] в виде функции переменной t; LaplaceTransform [expr, {tl, t2,...}, {s1i, s2,...} ] возвращает результат прямого преобразования Лапласа для выражения expr [ 11, t2,... ] в виде функции переменных {s1, s2,...}; InverseLaplaceTransform [expr, {s1, s2,...}, {tl, t2,...} ] возвращает результат обратного преобразования Лапласа для выражения expr [s1, s2,...] в виде функции переменных {tl, е 2,...}.

Z- преобразования широко используются в теории автоматического регулирования. Поэтому в системе Mathematica 4 для осуществления z- преобразований в ядро включены следующие функции : ZTransform[expr, n, z] возвращает результат прямого 2- преобразования для выражения ехр r, представленного как функция целочисленного аргумента n; InverseZTransform[expr, n, z] возвращает результат обратного z-npe образования для выражения ехр r, представленного как функция целочисленного аргумента п.