Работа в пакете Mathematica

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

Рубрика Программирование, компьютеры и кибернетика
Вид отчет по практике
Язык русский
Дата добавления 09.12.2013
Размер файла 2,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение

Высшего профессионального образования

«Национальный Исследовательский Томский Политехнический Университет»

Кафедра: ВММФ ФТИ

Отчёт по курсу: Летней учебной практике

Тема: «Работа в пакете Mathematica»

Вариант: 5

Выполнила: Даутбаева В.Р.

Группа: 0В10

Томск 2013 г.

Введение

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

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

Темы, изученные во время летней учебной практики:

1. Лабораторная работа 1-ая: «Решение дифференциальных уравнений и систем дифференциальных уравнений»;

2. Лабораторная работа 2-ая: «Программирование в пакете Mathematica»;

3. Лабораторная работа 3-яя: «Обработка экспериментальных данных в пакете Mathematica»;

4. Вопрос для углубленного рассмотрения: «Циклические операции в пакете Mathematica»;

Цели летней учебной практики:

1. Вспомнить функции пакета Mathematica, изученные ранее (в 1-ом семестре);

2. Научиться решать дифференциальные уравнения и системы дифференциальных уравнений с помощью пакета Mathematica;

3. Освоить программирование в пакете Mathematica;

4. Освоить обработку экспериментальных данных в пакете Mathematica;

5. Научиться совмещать функции пакета Mathematica, изученные ранее и функции, изученные во время летней учебной практики;

6. Уметь организовать общую работу программы с помощью циклов;

7. Приобретение практических и теоретических навыков работы в пакете Mathematica;

План выполнения летней учебной практики:

1. Изучить теоретический материал, предоставленный нам в методических пособиях к лабораторным работам;

2. Выполнить задания, предложенные нам в трёх лабораторных работах, произведя требуемые вычисления;

3. Составить отчеты по проделанным лабораторным работам;

4. Углубленно рассмотреть тему: «Циклические операции в пакете Mathematica» и провести сравнение применения данных операций между различными языками программирования;

5. Составить общий отчёт по всей летней учебной практики, основываясь на проделанную ранее работу;

Задания по лабораторным работам и по вопросу для самостоятельного рассмотрения:

1. По лабораторной работе 1;

A. Задание 1: Решить дифференциальное уравнение , в общем виде с начальными условиями. Для полученного решения построить график зависимости величины

B. Задание 2: Решить систему дифференциальных уравнений при = По результатам вычислений построить графики (два на одном) для зависимостей

C. Задание 3: Численное решение уравнения Для полученного решения построить график зависимости величины

D. Задание 4: Решить уравнение Ньютона для гармонического осциллятора: Найти зависимости потенциальной, кинетической и полной энергий от времени и построить их на одном графике вместе с зависимостью координаты от времени. Так же исследовать зависимости от начальной скорости

2. По лабораторной работе 2;

A. Задание 1: Для данных из файла zadlvarN.txt, где N номер варианта, найти:

a. Среднее значение

b. Дисперсию

B. Задание 2: Считать данные из файла zadlvarN.txt, где N номер варианта и отсортировать таблицу по первой колонке, найти максимальное и минимальное значения первого столбца, написав для этого необходимые программы. Построить график отсортированных данных.

C. Задание 3: На основе таблицы, полученной из предыдущего задания, построить интерполяционный полином порядка N*5 (для вариантов от 1 до 5) и N (для остальных), N номер варианта. Получить с помощью него 100 точек в промежутках между узлами в интервале значений первого столбца таблицы. Совместить график из предыдущего задания с полученными значениями с помощью функции Show[].

3. По лабораторной работе 3;

A. Задание 1: Считать данные из файла varN.txt, где N номер варианта. Построить интерполяционный полином с помощью встроенной в пакет Mathematica функции. Построить графики, показывающие данные, полученные с помощью интерполяционного полинома для различных порядков интерполирования (1, 2, 5 и автоматическим) с точками, полученными из файла. Совместить графики по данным из файла и на основе интерполирующего полинома на одном.

B. Задание 2: Используя данные из файла varN.txt, найти:

a. Среднее значение.

b. Дисперсию.

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

d. Провести фитирование данных с помощью функции , где - дисперсия, а - среднее значение.

§ Построить график данной функции, с полученными коэффициентами совмещённый с точками на основе файла.

§ Взяв за основу данные из пунктов 2.1 и 2.2 построить аналогичный график со средним и дисперсией, полученными на основе табличных данных и обсудить результат.

4. Вопрос для углубленного рассмотрения:

A. Рассмотреть все возможные способы проведения в пакете Mathematica циклических операций. Привести примеры и провести сравнение с C++ или другими языками программирования.

дифференциальный функция mathematica циклический

Ход работы

1. Обзор теоретической части

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

Для решения дифференциальных уравнений в пакете Mathematica существует функция вида: которая позволяет решать дифференциальное уравнение переменной y, которая, в свою очередь, зависит от переменной x.

1.1 Теоретический материал по 1 лабораторной работе

A. Получение решений в общем виде:

Получение общего решения уравнения с использованием констант дифференцирования:

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

Следует заметить, что производная в приведённом уравнении в функции DSolve может быть записана двумя способами: с использованием функции D, как было показано выше, и с помощью сокращённой записи производной:

Но стоит помнить, что некоторые уравнения могут быть решены только при использовании первого варианта записи.

B. Решение уравнений с начальными условиями:

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

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

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

C. Решение систем дифференциальных уравнений:

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

В результате получим:

Для того чтобы получить частное решение зададим начальные условия . В результате получим:

В большинстве случаев решение дифференциальных уравнений получается слишком громоздким и поэтому результат работы функции DSolve полезно упрощать с помощью функции Simplify или FullSimplify. В результате получим:

Как видно из данного примера, решение в данном случае получается более простым, но при использовании функций упрощения следует помнить, что время, затрачиваемое на решение, может значительно увеличиться (особенно это касается функции FullSimplify). 7

D. Численное решение дифференциальных уравнений:

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

Для решения дифференциальных уравнений используется функция: . Видно, что аргументы функции NDSolve практически аналогичны функции DSolve, за исключением последнего аргумента, который задаётся в виде списка и указывает в каком диапазоне, в данном случае - иксов, необходимо искать решение уравнения.

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

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

Используя полученный результат, можно также построить график поведения функции в рассматриваемом диапазоне значений:

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

Аналогичным образом можно решать системы уравнений:

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

1.2 Теоретический материал по 2 лабораторной работе

A. Образцы и их применение:

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

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

Символы образцов используются только в списках параметров - в правой части выражений они уже не применяются.

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

o x_Integer - образец целочисленный

o x_Real - образец с действительными значениями

o x_Complex - образец с комплексными значениями

o x_h - образец с заголовком h (от слова head - голова)

Задание типов данных с помощью образцов делает программы более строгими и наглядными и позволяет избежать ошибок, связанных с несоответствием типов.

В системе Mathematica используются следующие типы образцов.

Обозначение

Назначение образца

-

Любое выражение

x_

Любое выражение, представленное именем х

: :pattem

Образец, представленный именем х

Pattem ? test

Возвращает True, когда test применен к значению образца

B. Функции пользователя:

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

Функции подразделяются на встроенные в ядро системы внутренние функции и функции, заданные пользователем. Примером первых могут быть Sin[x], Bessell[n, x] и тд.

Mathematica содержит множество таких функций, охватывающих практически все широко распространённые элементарные и специальные математические функции. Есть и возможность создания функций со специальными свойствами - чистых (pure function) и анонимных функций.

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

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

Хотя в системах Mathematica имеется около тысячи встроенных функций, любому пользователю рано или поздно может потребоваться создание какой - либо своей функции. Кажется естественным задать её по правилам, принятым во многих языках программирования. Например, функцию для возведения x в степень n можно было бы определить так: powerxn[x, n]:=x^n Однако такая функция отказывается работать.

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

Разумеется, заданная таким образом функция является неполноценной. Для того, чтобы функция пользователя нормально воспринимала переданные ей аргументы, в списке параметров надо использовать образцы в виде переменных, но имеющие после своих имён символы подчёркивания. Образцы способны быть формальными параметрами функций и воспринимать значения фактических параметров. Таким образом, правильной будет запись функции пользователя в виде: powerxn[x_, n_]:=x^n. Теперь вычисление по заданной функции пройдёт гладко, причём как в численном, так и в символьном виде.

Заметим, что для уничтожения определения заданной функции можно использовать команду - функцию Clear[Name_function], где Name_function - имя функции.

Можно также задать функцию пользователя, содержащую несколько выражений, заключив их в круглые скобки: f[x_]:=(t=(1+x)^2; t = Expand[t])

Переменные списка параметров, после имён, которых стоит знак «_», являются локальными в теле функции или процедуры. На их место подставляют фактические значения соответствующих параметров.

Обратите внимание на то, что переменная t функции f является глобальной. Применение глобальных переменных в теле функции вполне возможно, но создаёт так называемый побочный эффект - в данном случае меняет значение глобальной переменной t. Для устранения побочных эффектов надо использовать образцы и другие специальные способы задания функций, описанные ниже. Итак, можно сформулировать ряд правил для заданий функций пользователя:

· такая функция имеет идентификатор - имя, которое должно быть уникальным и достаточно понятным;

· в списке параметров функции, размещённом в квадратных скобках после идентификатора, должны использоваться образцы переменных, а не просто переменные;

· может использоваться отложенное (:=) или немедленное (=) присваивание;

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

· переменные образцов в списке параметров являются локальными и действуют только в пределах тела функции;

· в теле функции могут использоваться глобальные переменные, но при этом возможны побочные эффекты;

· возможно обращение к функции из тела этой же функции (рекурсия).

Параметрами функций могут быть списки при условии допустимости их комбинации.

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

C. Чистые функции:

Иногда может потребоваться создание функции, не имеющей имени (например, если функция будет использоваться только один раз, сразу же после её создания). Эта функция представляется только выражением без идентификатора, отсюда и её название - чистая функция (pure function). Для создания такого объекта служит встроенная функция Function, используемая в одном из следующих вариантов:

Function[Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

body] - создаёт чистую функцию с телом body

Function[{Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

x}, body] - создаёт чистую функцию параметра x с телом body

Function[{Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

x1, x2,...}, body] - создаёт чистую функцию ряда параметров x1, x2,… с телом body

Для вычисления созданной таким образом функции после неё задаётся список параметров в квадратных скобках.

Чистую функцию можно легко превратить в обычную функцию пользователя.

D. Анонимные функции:

Предельно компактную форму задания имеют так называемые анонимные функции. Они не имеют ни названия, ни обычного определения и задаются только выражениями специального вида. В этом выражении вместо переменных используют обозначения # (для одной переменной) или #1, #2,… (для ряда переменных). Завершается тело функции символом «&». Если надо вычислить функцию, то после её записи в квадратных скобках указывается список фактических параметров.

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

E. Организация циклов:

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

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

a. Циклы типа Do;

К важнейшим управляющим структурам в языках программирования относятся циклы. С их помощью осуществляется циклическое исполнение некоторого выражения expr заданное число раз. Это число нередко определяется значением некоторой управляющей переменной (например i, j и т.д.) меняющиеся либо с шагом +1, либо от начального значения imin до конечного значения imax с шагом di. Циклы могут быть одинарными или множественными - вложенными друг в друга. Последние, используют ряд управляющих переменных. Такого рода циклы организуются с помощью функции Do:

v Do [expr, {imax}] -выполняет imax раз вычисление expr;

v Do [expr, {I, imax}] - вычисляет expr с переменной i, последовательно принимающей значения от 1 до imax (с шагом 1);

v Do[expr, {I, imin, imax}] - вычисляет expr с переменной I, последовательно принимающей значения от imin до imaxс шагом 1;

v Do[expr, {I, imin, imax, di}] - вычисляет expr с переменной I, оследовательно принимающей значения олт 1 до imax с шагом di;

v Do[expr, {I, imin, imax}, {j, jmin, jmax},…] - вычисляет expr, организуя ряд вложенных циклов с управляющими переменными j, I и тд.

Нетрудно убедиться в том, что переменная i в теле цикла (итератор) является локальной и по выходе из цикла её значение остаётся тем же, что было до выхода.

Вся программа с циклом является содержанием одной ячейки, и её листинг охвачен квадратной скобкой. Для иллюстрации вывода можно использовать команду Print в теле цикла. Также нетрудно заметить, что управляющими переменными цикла можно принять, как и целочисленные, так и вещественные значения.

Стоит упомянуть о применении функции Module. Она создает программный модуль с локальными переменными, в котором организовано рекуррентное вычисление чисел Фибоначчи.

b. Циклы типа For;

Другой вид цикла - цикл For - реализуется одноимённой функцией:

For[start, test, incr, body]

В ней сначала один раз вычисляется выражение start, а затем поочерёдно вычисляются выражения body и incr до тех пор, пока условие test не перестанет давать логическое значение True. Когда это случится, то есть когда test даст False, цикл заканчивается.

Так же необходимо упомянуть о функции Return[x], которая возвращает значения. В цикле For не предусмотрено задание локальных переменных, так что надо следить за назначением переменных - при использовании глобальных переменных неизбежны побочные эффекты. 12

c. Циклы типа While:

Итак, функция For позволяет создавать циклы, которые завершаются при выполнении (эволюции) какого - либо условия. Такие циклы можно организовать и с помощью функции While[test, expr], которая выполняет expr до тех пор, пока test не перестанет давать логическое значение True.

Циклы типа While, в принципе, могут заменить другие, рассмотренные выше, типы циклов. Однако, это усложняет запись и понимание программ. Аппарат локальных переменных в этом типе циклов не используется.

d. Директивы - функции прерывания и продолжения циклов;

В указанных типах циклов и в иных управляющих структурах можно использовать следующие директивы - функции:

Ш Abort[ ] - вызывает прекращение вычислений с сообщением $ Aborted;

Ш Break[ ] - выполняет выход из тела цикла или уровня вложенности программы содержащего данный оператор ( циклы Do, For и While или тело оператора - переключателя Switch). Оператор возвращает Null - значение (без генерации секции выхода);

Ш Continue[ ] - задаёт переход на следующий шаг текущего цикла Do, For или While;

1. Условные выражения и безусловные переходы:

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

e. Функция If;

Как у большинства языков программирования, условные выражения задаются с помощью оператора или функции IF. Система Mathematica имеет функцию If, формы которой представлены ниже:

ь If[condition, t, f] - возвращает t, если результатом вычисления condition является True, и f, если результат равен False;

ь If[condition, t, f, u] - то же, но даёт u, если в результате вычисления condition не было получено ни True, ни False.

Функция If обеспечивает ветвление максимум по двум ветвям программы. Для ветвления по многим направлениям можно использовать древовидные структуры программ с множеством функций If. Однако, это усложняет исходный текст программы.

f. Функции - переключатели;

Для организации ветвления по многим направлениям в современных языках программирования используются операторы - переключатели. В системе Mathematica множественное ветвление организовано с помощью функций Which и Switch:

- Which[test1, value1, test2, value2,…] - вычисляет в порядке следования каждый из testi, сразу возвращая именно ту величину из valuei, которая относится к первому testi, давшему True ;

- Switch[expr, form1, value1, form2, value2,…] - вычисляет селектор expr, затем сравнивает его последовательно с каждой из меток formi, вычисляя и возвращая то valuei, которое соответствует первому совпадению.

При неверном задании первого параметра (селектора) просто повторяется запись функции.

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

1.3 Теоретический материал по 3 лабораторной работе

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

A. Вычисление суммарных значений, среднего значения и дисперсии:

Для нахождения суммарного значения элементов в таблицах можно воспользоваться функцией Total[], которая может принимать один из следующих вариантов:

§ Total[list] - вычисляет сумму всех элементов списка или таблицы;

§ Total[list,n] - вычисляет сумму всех элементов таблицы до уровня n, где n=1 - сумма элементов по столбцам, а n=2 полная сумма всех элементов в двумерном массиве. Для нахождения суммы всех элементов в таблице можно воспользоваться предыдущим вариантом записи функции.

§ Total[list,{n}] - вычисляет сумму всех элементов таблицы на уровне n, где n=1 - сумма элементов по столбцам, а n=2 сумма элементов по строкам в двумерном массиве.

§ Total[list,{n1,n2}] - вычисляет сумму всех элементов таблицы от уровня n1 до n2.

Следует заметить, что максимальное значение n будет равняться количеству размерностей в таблице или матрице.

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

© Mean[list] - вычисляет среднее по списку значений;

© Variance[list] - вычисляет дисперсию по значениям в списке.

Следует заметить, что при работе с двумерными таблицами, среднее и дисперсия будут вычисляться по столбцам.

B. Интерполяция:

В вычислительной практике часто приходится иметь дело с функциями f(x), заданными таблицами их значений для некоторого конечного множества значений х: f(x0), f(x1),…,f(xn).

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

При решении задачи в этом случае вместо функции f(x) оперируют с функцией Ф(х). Задача построения такой функции Ф(х) называется задачей интерполирования. Чаще всего интерполирующую функцию Ф(х) отыскивают в виде алгебраического полинома.

Во многих задачах бывает необходимо получить значения в промежутках между точек, полученных в эксперименте. Одним из вариантов получения таких значений является построение интерполяционного полинома, который позволяет получить значение между узловыми точками с той или иной степенью точности (теорию и методы интерполяции можно посмотреть в соответствующей литературе). В пакете Mathematica существует специальная функция Interpolation[], которая позволяет строить интерполяционный полином по табличным данным. Она существует в нескольких вариантах представления данных, основными из которых можно считать:

Є Interpolation[{f1,f2,…}] - строит интерполяционный полином по списку значений функций в предположении, что x принимает значения 1,2 и т.д.

Є Interpolation[{{x1,f1},{x2,f2},…}] - строит интерполяционный полином по таблице значений x и y.

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

a. Опции интерполирования;

InterpolationOrder>n,

Где n - порядок интерполирования, например 0 - аппроксимация константой, 1-линией, 2- квадратичной функцией и т.д.

Начиная с версии 7 при интерполировании можно вручную задать метод с помощью опции Method>”название метода”, Hermite - полиномом Эрмита, Spline - интерполяция сплайнами и т.д.

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

b. Интерполяционный полином Лагранжа;

Для каждой функции f(x), определённой на [a, b], и любого набора узлов среди алгебраических многочленов степени не выше n существует единственный интерполяционный многочлен Ф(х), который может быть записан в форме: Ф(х) =, где - многочлены степени n, удовлетворяющие условиям: . Для интерполяционного полинома Лагранжа многочлен имеет вид:

.

Этот многочлен (1) решает задачу интерполирования и называется интерполяционным полиномом Лагранжа.

Интерполяционный полином Лагранжа может быть записан в другой форме:

(2).

Запись полинома в данном виде более компактна и удобна для использования в программировании.

При решении задачи интерполяции величина n называется порядком интерполирующего полинома. При этом как видно из формул (1) и (2), число узлов интерполирования всегда будет равно n+1 и значение х для которого определяется величина f(x) должно лежать внутри области определения узлов интерполяции, т.е.

(3).

В некоторых практических случаях общее известное число узлов интерполяции m, может быть больше, чем порядок интерполирующего полинома n. В этом случае, прежде чем реализовывать процедуру интерполяции согласно формулы (2), необходимо определить те узлы интерполяции, для которых справедливо условие (3). При этом следует помнить, что наименьшая погрешность достигается при нахождении значения х, в центре области интерполяции. Для чего предлагается следующая процедура:

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

2. При выполнении предыдущего условия начинается поиск области интерполяции, для чего находим первое х, такое, для которого выполняется условие , при этом номер i, будет соответствовать середине интервала интерполяции. Для определения области интерполяции её левая граница будет начинаться с номера i - (n+1)/2, а заканчиваться узлом с номером i + (n+1)/2.

3. После выполнения пунктов 1 и 2 программируется формула (2).

C. Аппроксимация экспериментальных данных аналитическими функциями:

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

Для этих целей в пакете Mathematica можно использовать две функции. Первая:

Fit[data,funs,vars] - находит с помощью метода наименьших квадратов фит по данным data, как линейную комбинацию функций funs по переменным vars.

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

Вторая функция используется в тех случаях, когда необходимо найти фит к заранее известной модельной функции:

FindFit[data,expr,pars,vars] - находит численные значения констант pars для выражения expr, описывающие наилучшим образом данные data как функцию переменных vars.

1.5 Теоретический материал по вопросу для углубленного рассмотрения

Цикл - это разновидность управляющей конструкции в языках программирования высокого уровня предназначенная для организации многократного исполнения набора инструкций.

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

A. Все возможные способы проведения в пакете Mathematica циклических операций:

При помощи циклов осуществляется многократное исполнение некоторого выражения или процедуры. Число актов вычислений определяется некоторой управляющей переменной, меняющейся с заданным шагом от начального значения до конечного или до выполнения некоторого условия.

a. Цикл Do;

Простейшая конструкция цикла. Возможны различные форматы её использования:

1. Do[expr, {imax}] -- выполняет imax раз вычисление выражения expr;

2. Do[expr, {i, imax}] -- вычисляет expr с переменной i, последовательно принимающей значения от 1 до imax (с шагом 1);

3. Do[expr, {i, imin, imax}] -- вычисляет expr с переменной i, последовательно принимающей значения от imin до imax с шагом 1;

4. Do[expr, {i, imin, imax, di}] -- вычисляет expr с переменной i, последовательно принимающей значения от 1 до imax с шагом di;

5. Do[expr, {i, imin, imax}, {j, jmin, jmax}, ...] -- вычисляет expr, организуя ряд вложенных циклов с управляющими переменными j, i и т. д.

Итераторы цикла i, j,… являются локальными. Выражение expr может быть записано в виде последовательности команд, разделённых точкой с запятой. Оператор Do вычисляет выражение, но не помещает его в выходную ячейку, поэтому для вывода результатов часто используются функции визуализации (Print, Plot, Return и др).

b. Цикл For;

Формат использования цикла с заголовком For: For[start, test, incr, body].

Данный цикл вычисляет start, потом, повторяясь, вычисляет incr и body, пока test не примет значение False.

Начало start и тело body могут быть записаны в виде элементарных процедур, то есть последовательностью функций, разделённых точкой с запятой. В цикле For не предусмотрено задание локальных переменных, так что надо следить за их назначением (при использовании глобальных переменных неизбежны побочные эффекты). По окончании цикла формальным результатом вычислений является Null, поэтому для вывода текущих результатов в теле цикла часто используют функции визуализации, а по окончании цикла - функцию возврата Return[expr].

c. Цикл While;

Формат команды While[test, body] - подсчитываются повторно условие test и тело цикла body до тех пор, пока истинность условия не нарушится.

Тело body может быть записано в виде элементарной процедуры (то есть последовательностью функций, разделённых точкой с запятой). Переменные цикла в операторе While не локализованы. По окончании цикла формальным результатом вычислений является Null. Обычно в body содержится выражение, изменяющее некоторый параметр в test. Затем test перевыполняется с новым значением параметра и так далее.

d. Директивы прерывания и продолжения циклов;

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

Часто возникает необходимость прерывания или продолжения вычислений. Для этого в пакете Mathematica можно использовать следующие директивы:

1. Abort[] -- вызывает прекращение вычислений с сообщением $Aborted. Команда может быть использована в любом месте программы.

2. Break[] -- выполняет экстренный выход из тела цикла или уровня вложенности программы, содержащего данный оператор (возвращает Null -- значение без генерации секции выхода).

3. Continue[] -- переход на следующий шаг ближайшего содержащего эту функцию оператора Do, For или While.

4. Interrupt[] -- приостанавливает вычисления, делая запрос об их возобновлении.

5. Return[] -- прерывает выполнение с возвращением значения Null.

6. Return[expr] -- возвращает значение выражения ехрr, выходя из всех процедур и циклов.

e. Дополнительно;

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

1. i++ - увеличение значения i на 1.

2. i-- - уменьшение значения i на 1.

3. ++i - значение i после добавления 1.

4. --i - значение i после вычитания 1.

5. i+=di - прибавление di к значению i.

6. i-=di - вычитание di из значения i.

7. x*=c - умножение x на c.

8. x/=c - деление x на c.

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

B. Примеры всех возможных способов проведения в пакете Mathematica циклических операций:

a. Цикл Do;

b. Цикл For;

Следующая команда позволяет построить последовательность функций

c. Цикл While;

d. Директивы прерывания и продолжения циклов;

1. Break[]:

2. Continue[]:

3. Abort[]:

4. Return[], Return[expr]:

5. Interrupt[]:

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

e. Дополнительно;

В теле функций Do, While и For переменные не локализованы, поэтому они сохраняют значения, присвоенные им при последнем вычислении. Для локализации переменных используется функция Module[{x, y, …}, expr] (локализует переменные {x, y, …} при исполнении программы expr) или Module[{x=x0, y=y0, …}, expr] (локализует переменные {x, y, …} при исполнении программы expr с присвоением значений локальным переменным). Локализация переменных позволяет избежать конфликта символов.

C. Сравнение между использованием циклических операций в пакете Mathematica с использованием циклических операций в других языках программирования:

D. Сейчас в мире существует огромное множество различных языков программирования и в каждом из них использование циклических операций весьма и весьма схоже, но всё - таки, они разные и у каждого есть свои особенности. В нашем случае я проведу нить между математическим пакетом Mathematica и математическим пакетом Maple. Анализ данной параллели поможет мне провести сравнение использования циклических операций в различных языках программирования.

Таблица 1.

Сравниваемый пакет/ Объект сравнения

Пакет Mathematica

Пакет Maple

Циклические операции общий вид

Формат команды While[test, body]

Формат использования цикла с заголовком For: For[start, test, incr, body].

Формат команды: Do[expr, {i, imin, imax, di}]

Maple имеет обобщённую конструкцию цикла, которая задаётся следующим образом: |for<name>| |from<expr1>| |to<expr3>| |by<expr2>| |while<expr4>| do<Statement sequence>od;

Есть ещё одна, более специфическая конструкция цикла:

|for<name>| |in<expr1>| |while<expr2>| do<Ststement sequence>od:

Объяснение циклической операции

Подсчитываются повторно условие test и тело цикла body до тех пор, пока истинность условия не нарушится.

Данный цикл вычисляет start, потом, повторяясь, вычисляет incr и body, пока test не примет значение False.

Подсчитывается выражение expr для значений i, принимающих значения от imin до imax с шагом di.

Здесь name - имя управляющей переменной цикла, expr1, expr2, expr3 - выражения, задающие начальное значение, конечное значение и шаг изменения переменной name, expr4 - выражение, задающее условие, пока цикл (набор объектов между словами do и od), будет выполняться. В ходе выполнения цикла управляющая переменная меняется от значения expr1 до значения expr2 с шагом, заданным expr3. Если блок by<expr2> отсутствует, то управляющая переменная будет меняться с шагом +1 при expr1>expr2.

Здесь expr1 задает список значений, которые будет принимать управляющая переменная name. Цикл будет выполняться, пока не будет исчерпан список и пока выполняется условие, заданное выражением expr2. В цикле этого вида управляющая переменная может меняться произвольно.

Директивы прерывания и продолжения циклов

Abort[] -- вызывает прекращение вычислений с сообщением $Aborted. Команда может быть использована в любом месте программы.

Break[] -- выполняет экстренный выход из тела цикла или уровня вложенности программы, содержащего данный оператор (возвращает Null -- значение без генерации секции выхода).

Continue[] -- переход на следующий шаг ближайшего содержащего эту функцию оператора Do, For или While.

Interrupt[] -- приостанавливает вычисления, делая запрос об их возобновлении.

Return[] -- прерывает выполнение с возвращением значения Null.

Return[expr] -- возвращает значение выражения ехрr, выходя из всех процедур и циклов.

Next[] - позволяет пропустить определённый цикл

Break[] - прерывает выполнение фрагмента программы (или цикла), как только он встречается в ходе её выполнения.

Return[] - позволяет возвратить значение последнего выражения в тело процедуры или выражения.

Любой из операторов Quit[], Done[], Stop[] обеспечивает также прерывание выполнения текущей программы (в частности, цикла), но при этом окно текущего документа закрывается.

Подведение итогов сравнения.

При сравнении языков программирования данных пакетов можно выделить явные отличие:

1. Можно увидеть явное отличие используемых директив. А именно довольно различный набор функций для продолжения или прерывания цикла. Но имеются и директивы, встречающиеся в обоих пакетах: Break[], Return[].

2. Также в отличие от Maple Mathematica не имеет циклических конструкций, позволяющих производить циклические вычисления по подвыражениям заданного выражения. Maple в свою циклическую конструкцию вобрал основные конструкции циклов for и while.Тем самым обеспечивая для себя возможность на основе подвыражений создавать интересные конструкции.

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

2. Решение и результаты проделанных лабораторных работ

2.1 Лабораторная работа № 1

A. 1-ое задание:

a. Последовательность действий при выполнении данного задания;

1. Решим данное уравнение в общем виде (аналитически). В этом нам поможет функция DSolve[] (более подробное описание данной функции можно найти в «Ход работы: Обзор теоретической части»).

2. Далее для данной нам функции построим решение с начальными условиями, которые даны нам в условии задания. Это делаем также с помощью функции DSolve[], хотя набор аргументов функции в этом случае немного изменится, а именно: добавляются x(0)=x0, v(0)=v0.

3. Для более удобного дальнейшего выполнения задания полученный в пункте 2 результат мы упрощаем с помощью функции Simplify (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 9 по курсу Программные аппараты средств информатики).

4. Последующим нашим действием становится решение данного уравнение в численном виде, по начальным условиям, данных нам в задании, х0=-2/5, v0=2. Проделать данную операцию нам поможет функция NDSolve[] (более подробное описание данной функции можно найти в «Ход работы: Обзор теоретической части»).

5. Завершающим этапом данного задания является построения графика зависимости х от t. Это мы смогли сделать с помощью функции Plot[] (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 10 по курсу Программные аппараты средств информатики).

b. Проиллюстрированный порядок действий при выполнении данного задания в пакете Mathematica;

B. 2-ое задание:

a. Последовательность действий при выполнении данного задания;

1. Решим данное уравнение в общем виде (аналитически). В этом нам поможет функция DSolve[] (более подробное описание данной функции можно найти в «Ход работы: Обзор теоретической части»).

2. Далее для данной нам функции построим решение с начальными условиями, которые даны нам в условии задания. Это делаем также с помощью функции DSolve[], хотя набор аргументов функции в этом случае немного изменится, а именно: добавляются x(0)=x0, v(0)=v0.

3. Для более удобного дальнейшего выполнения задания, полученный в пункте 2 результат мы упрощаем с помощью функции FullSimplify (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 9 по курсу Программные аппараты средств информатики).

4. Последующим нашим действием становится решение данного уравнение в численном виде, по начальным условиям, данных нам в задании, х0=3, y0=2. Проделать данную операцию нам поможет функция NDSolve[] (более подробное описание данной функции можно найти в «Ход работы: Обзор теоретической части»).

5. Завершающим этапом данного задания является построения графиков зависимости х от t. Это мы смогли сделать с помощью функций Plot[] (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 10 по курсу Программные аппараты средств информатики) и функции Evaluate[], которая делает предварительный пересчёт данных функций для заданного параметра t.

b. Проиллюстрированный порядок действий при выполнении данного задания в пакете Mathematica;

C. 3-ее задание:

a. Последовательность действий при выполнении данного задания;

1. В данном задание мы значительно сократим время выполнения и общую длину решения, а именно: мы запишем несколько действий в одной записи и, пропустив громоздкие вычисления, сразу получим график зависимости х от t.

2. В данной записи можно увидеть, что для выполнения данного задания мы использовали функцию NDSolve[] (более подробное описание данной функции можно найти в «Ход работы: Обзор теоретической части»), для численного решения данного уравнения, также мы видим, что задействованы функции Plot[] и Evaluate[], для построения графика зависимостей x от t.

3. Новой функцией является функция Manipulate[], которая используется для реализации изменения параметра.

b. Проиллюстрированный порядок действий при выполнении данного задания в пакете Mathematica;

D. 4-ое задание:

a. Последовательность действий при выполнении данного задания;

1. Решим данное уравнение в общем виде (аналитически). В этом нам поможет функция DSolve[] (более подробное описание данной функции можно найти в «Ход работы: Обзор теоретической части»).

2. Для более удобного дальнейшего выполнения задания, полученный в пункте 1 результат мы упрощаем с помощью функции FullSimplify (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 9 по курсу Программные аппараты средств информатики).

3. Последующим нашим действием становится нахождение кинетической потенциальной и полной энергии, формулы, для вычисления которых мы можем взять из курса «Физики».

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

5. При вычислении кинетической энергии нам необходима скорость, которую можно вычислить, взяв первую производную, в нашем случае от x по t. Это мы сделали с помощью функции D[] (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 9 по курсу Программные аппараты средств информатики) и немного упростили её с помощью функции Simplify (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 9 по курсу Программные аппараты средств информатики).

6. Завершающим этапом данного задания является построения графиков зависимости х от t при конкретных значениях переменных. Это мы смогли сделать с помощью функций Plot[] (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 10 по курсу Программные аппараты средств информатики).

b. Проиллюстрированный порядок действий при выполнении данного задания в пакете Mathematica;

2.2 Лабораторная работа № 2

A. 1-ое задание:

a. Последовательность действий при выполнении данного задания;

1. На первом этапе работы мы считываем данные из файла, для этого мы используем функцию Import[], а в качестве формата считывания выбираем функцию List, с помощью которой считанные данные будут в виде списка.


Подобные документы

  • Общая характеристика программы "Mathematica": интерфейс, численные методы, графика и звук, программирование и стандартные дополнения. Основные способы построения графических функций. Составление календарно-тематического плана по информатике для 10 класса.

    дипломная работа [5,4 M], добавлен 01.04.2012

  • Схема и основные параметры элементов цепи. Вывод системы дифференциальных уравнений. Реализация алгоритма на языке программирования высокого уровня Pascal. Решение дифференциальных уравнений в пакете MathCAD. Решение интерполяции в пакете Excel.

    курсовая работа [375,4 K], добавлен 06.01.2011

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

    курсовая работа [226,6 K], добавлен 05.04.2013

  • Сущность универсальных математических пакетов MathCad, MathLab, Mathematica, Maple. Описание интерфейса программ, вычислительные способности, построение графиков. Языки программирования. Электронные книги - приложения к ним. Основные достоинства MathCad.

    презентация [8,2 K], добавлен 06.01.2014

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

    контрольная работа [964,6 K], добавлен 06.03.2011

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

    курсовая работа [4,2 M], добавлен 22.05.2014

  • Прикладной математический пакет Maple. Набор инструментов для работы с дифференциальными уравнениями в частных производных. Метод разделения переменных. Метод функций Грина. Построение формального решения на входном Maple-языке. Основные типы операций.

    курсовая работа [193,2 K], добавлен 03.08.2012

  • Решение системы дифференциальных уравнений переходных процессов в RLC-цепи численным методом. Анализ графиков в Excel. Расчет переходного процесса в математическом пакете MathCad по точным формулам. Разработка программы на языке программирования Pascal.

    курсовая работа [777,3 K], добавлен 22.10.2012

  • Команды, используемые при решении обыкновенных дифференциальных уравнений в системе вычислений Maple. Произвольные константы решения дифференциального уравнения второго порядка, представленном рядом Тейлора. Значения опции method при численном решении.

    лабораторная работа [47,2 K], добавлен 15.07.2009

  • Определение (задание структуры) данных. Обработка данных. Управление данными. Microsoft Access - нечто большее, чем СУБД. Проектирование, создание и управление базой данных на примере переплетной мастерской в пакете MS Access.

    курсовая работа [470,8 K], добавлен 30.10.2002

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.