Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
Высшего профессионального образования
«Национальный Исследовательский Томский Политехнический Университет»
Кафедра: ВММФ ФТИ
Отчёт по курсу: Летней учебной практике
Тема: «Работа в пакете Mathematica»
Вариант: 5
Выполнила: Даутбаева В.Р.
Группа: 0В10
Томск 2013 г.
Введение
В наше время в связи с развитием информационных технологий появились так называемые системы компьютерной математики, или их ещё называют математические пакеты, которые облегчают выполнение различных математических задач, помогают проверить решение задачи с помощью компьютерной программы. Намного сокращается время выполнения задач различной сложности. Для сотен тысяч специалистов в различных отраслях промышленности, занятых инженерными и научными исследованиями, системы компьютерной математики обеспечили превосходную среду для организации вычислений. Поэтому знакомство с основами организации математических пакетов может быть полезно как специалистам, приступающим к освоению этой системы, так и студентам вузов по самым различным специальностям. Они имеют чрезвычайно широкий набор средств, переводящих сложные математические алгоритмы в программы, так называемые элементарные функции и огромное количество неэлементарных, алгебраические и логические операции. Большинство упражнений из курса высшей математики может быть решено с помощью всего лишь одной команды. Можно вычислять интегралы, решать дифференциальные уравнения, обыкновенные уравнения и системы линейных уравнений. Предоставлен широкий выбор работы с матрицами, векторами. Возможно построение двумерных и трёхмерных графиков. Существует несколько математических пакетов, таких как MathCad, MatLab, Mathematica, Maple, Statistica и другие. Но за время летней учебной практики мы отдадим предпочтение ранее изучаемому пакету Mathematica.
Система Mathematica, созданная лет десять тому назад, имеет чрезвычайно широкий набор средств, переводящих сложные математические алгоритмы в программы. Все так называемые элементарные функции и огромное количество неэлементарных; алгебраические и логические операции. Система Mathematica очень широко распространена в мире, ею захвачены огромные области применения в научных и инженерных исследованиях, а также в системе образования.
Темы, изученные во время летней учебной практики:
. Лабораторная работа 1-ая: «Решение дифференциальных уравнений и систем дифференциальных уравнений»;
. Лабораторная работа 2-ая: «Программирование в пакете Mathematica»;
. Лабораторная работа 3-яя: «Обработка экспериментальных данных в пакете Mathematica»;
. Вопрос для углубленного рассмотрения: «Циклические операции в пакете Mathematica»;
Цели летней учебной практики:
. Вспомнить функции пакета Mathematica, изученные ранее (в 1-ом семестре);
. Научиться решать дифференциальные уравнения и системы дифференциальных уравнений с помощью пакета Mathematica;
. Освоить программирование в пакете Mathematica;
. Освоить обработку экспериментальных данных в пакете Mathematica;
. Научиться совмещать функции пакета Mathematica, изученные ранее и функции, изученные во время летней учебной практики;
. Уметь организовать общую работу программы с помощью циклов;
. Приобретение практических и теоретических навыков работы в пакете Mathematica;
План выполнения летней учебной практики:
. Изучить теоретический материал, предоставленный нам в методических пособиях к лабораторным работам;
. Выполнить задания, предложенные нам в трёх лабораторных работах, произведя требуемые вычисления;
. Составить отчеты по проделанным лабораторным работам;
. Углубленно рассмотреть тему: «Циклические операции в пакете Mathematica» и провести сравнение применения данных операций между различными языками программирования;
. Составить общий отчёт по всей летней учебной практики, основываясь на проделанную ранее работу;
Задания по лабораторным работам и по вопросу для самостоятельного рассмотрения:
. По лабораторной работе 1;
A.Задание 1: Решить дифференциальное уравнение , в общем виде с начальными условиями. Для полученного решения построить график зависимости величины .Задание 2: Решить систему дифференциальных уравнений при = По результатам вычислений построить графики (два на одном) для зависимостей .Задание 3: Численное решение уравнения Для полученного решения построить график зависимости величины .Задание 4: Решить уравнение Ньютона для гармонического осциллятора: Найти зависимости потенциальной, кинетической и полной энергий от времени и построить их на одном графике вместе с зависимостью координаты от времени. Так же исследовать зависимости от начальной скорости
2. По лабораторной работе 2;.Задание 1: Для данных из файла zadlvarN.txt, где N номер варианта, найти:
a.Среднее значение
b.Дисперсию.Задание 2: Считать данные из файла zadlvarN.txt, где N номер варианта и отсортировать таблицу по первой колонке, найти максимальное и минимальное значения первого столбца, написав для этого необходимые программы. Построить график отсортированных данных..Задание 3: На основе таблицы, полученной из предыдущего задания, построить интерполяционный полином порядка N*5 (для вариантов от 1 до 5) и N (для остальных), N номер варианта. Получить с помощью него 100 точек в промежутках между узлами в интервале значений первого столбца таблицы. Совместить график из предыдущего задания с полученными значениями с помощью функции Show[].
. По лабораторной работе 3;.Задание 1: Считать данные из файла varN.txt, где N номер варианта. Построить интерполяционный полином с помощью встроенной в пакет Mathematica функции. Построить графики, показывающие данные, полученные с помощью интерполяционного полинома для различных порядков интерполирования (1, 2, 5 и автоматическим) с точками, полученными из файла. Совместить графики по данным из файла и на основе интерполирующего полинома на одном..Задание 2: Используя данные из файла varN.txt, найти:
a.Среднее значение.
b.Дисперсию.
c.Провести фитирование данных с помощью степенного ряда. Выяснить при какой степени данного ряда он будет хорошо описывать данные из файла. Для этого необходимо строить графики, полученного степенного ряда и точки из файла на одном и смотреть насколько функция хорошо вписывается в данные.
d.Провести фитирование данных с помощью функции , где - дисперсия, а - среднее значение.
§Построить график данной функции, с полученными коэффициентами совмещённый с точками на основе файла.
§Взяв за основу данные из пунктов 2.1 и 2.2 построить аналогичный график со средним и дисперсией, полученными на основе табличных данных и обсудить результат.
. Вопрос для углубленного рассмотрения:
A.Рассмотреть все возможные способы проведения в пакете Mathematica циклических операций. Привести примеры и провести сравнение с C++ или другими языками программирования.
дифференциальный функция mathematica циклический
Ход работы
. Обзор теоретической части
Из курсов физики и высшей математики известно, что большинство процессов, происходящих в реальной жизни, можно описать с помощью дифференциальных уравнений. Поэтому решение многих задач сводится к решению соответствующих дифференциальных уравнений, например уравнений диффузии и теплопроводности. Проблема заключается в том, что многие уравнения достаточно сложны для ручного аналитического решения, а решение многих, в аналитическом виде затруднены. Для последних уравнений разработаны специальные численные методы, позволяющие получить численное решение уравнений для определённых условий, аналитическое решение которых затруднительно или невозможно. Пакет Mathematica позволяет расширить класс решаемых уравнений и сократить время на поиск решения. Кроме того, пакет позволяет, без глубоко знания численных методов, получить численное решение достаточно сложных уравнений за приемлемое время, которое естественно зависит от мощности компьютера, на котором проводятся вычисления.
Для решения дифференциальных уравнений в пакете Mathematica существует функция вида: которая позволяет решать дифференциальное уравнение переменной y, которая, в свою очередь, зависит от переменной x.
.1 Теоретический материал по 1 лабораторной работе
.Получение решений в общем виде:
Получение общего решения уравнения с использованием констант дифференцирования:
Как видно из данного примера, решение получается в виде подстановки (замены переменных) с соответствующей константой дифференцирования. Аналогично функции Solve, при записи уравнения в функции DSolve, необходимо следить за тем, чтобы в описании уравнения стояла операция сравнения (==). Ни в коем случае не стоит писать там операцию присваивания (=) - это может привести к трудноуловимым ошибкам.
Следует заметить, что производная в приведённом уравнении в функции DSolve может быть записана двумя способами: с использованием функции D, как было показано выше, и с помощью сокращённой записи производной:
Но стоит помнить, что некоторые уравнения могут быть решены только при использовании первого варианта записи..Решение уравнений с начальными условиями:
Решение уравнений в общем виде, чаще всего, представляет лишь академический интерес, а для решения реальных задач необходимо решение с начальными условиями.
Как и следовало ожидать, при движении с нулевым ускорением, которое описывается этим уравнением, получили решение для движения с постоянной скоростью, зависящей только от начальной скорости и начальных координат. Как видно из данного примера, начальные условия задаются как дополнительные уравнения в первом аргументе функции DSolve. Так как аргументов в данной функции должно быть 3, то уравнение и начальные условия записываются в виде списка, то есть взятыми в фигурные скобки.
Аналогичным образом могут быть получены решения более сложных дифференциальных уравнений..Решение систем дифференциальных уравнений:
Как можно понять из раздела о решении уравнений с начальными условиями, решение систем дифференциальных уравнений заключается в простом добавлении необходимо уравнений в список функции DSolve. Кроме того, второй аргумент тоже станет списком, в котором необходимо указать, относительно каких переменных будет решаться уравнение.
В результате получим:
Для того чтобы получить частное решение зададим начальные условия . В результате получим:
В большинстве случаев решение дифференциальных уравнений получается слишком громоздким и поэтому результат работы функции DSolve полезно упрощать с помощью функции Simplify или FullSimplify. В результате получим:
Как видно из данного примера, решение в данном случае получается более простым, но при использовании функций упрощения следует помнить, что время, затрачиваемое на решение, может значительно увеличиться (особенно это касается функции FullSimplify). 7
D.Численное решение дифференциальных уравнений:
Наверное, ни для кого связанного с математикой не будет секретом то, что лишь малая часть дифференциальных уравнений может быть решена аналитически. Пакет Mathematica позволяет увеличивать это количество, о и то не значительно. Этот пакет может решать аналитически большинство уравнений линейных дифференциальных уравнений с постоянными коэффициентами и некоторое количество уравнений с переменными коэффициентами. Кроме того, пакет может решить определённый класс нелинейных уравнений. Остальные уравнения и системы уравнений могут быть решены с использованием численных методов.
Для решения дифференциальных уравнений используется функция: . Видно, что аргументы функции NDSolve практически аналогичны функции DSolve, за исключением последнего аргумента, который задаётся в виде списка и указывает в каком диапазоне, в данном случае - иксов, необходимо искать решение уравнения.
В результате получим решение в виде специальной интерполирующей функции, которую можно использовать практически как обычную функцию, например для проверки начального условия:
Которое, в данном случае, можно считать верным, так как полученный результат очень близок к нулю.
Используя полученный результат, можно также построить график поведения функции в рассматриваемом диапазоне значений:
При использовании результата решений следует помнить, что результат определён только на интервале чисел, которые были заданы при решении уравнения. Для других значений результат хоть может и выводится, но является неверным.
Аналогичным образом можно решать системы уравнений:
В заключении данного раздела хотелось бы сказать, что функция NDSolve имеет достаточно большое количество аргументов, позволяющих управлять процессом вычисления, например задавать шаг разбиения сетки, выбор метода решения и тд.
.2 Теоретический материал по 2 лабораторной работе
.Образцы и их применение:
Образцы (pattems) в системе Mathematica служат для задания выражений различных классов и придания переменным особых свойств, необходимых для создания специальных программных конструкций, таких как функции пользователя и процедуры. Это необычайно гибкое и мощное средство обобщённого представления математических выражений, используемое при любом подходе к программированию.
Признаком образца являются знаки подчёркивания «_» (от одного до трёх). Они обычно выглядят слитно, так что надо внимательно следить за общей длиной символов образцов. Наиболее распространённое применение образцов - указание на локальный характер переменных при задании функций пользователя.
Символы образцов используются только в списках параметров - в правой части выражений они уже не применяются.
В образце можно указывать тип данных образцов для задания функции вычисления факториала:
ox_Integer - образец целочисленный
ox_Real - образец с действительными значениями
ox_Complex - образец с комплексными значениями
ox_h - образец с заголовком h (от слова head - голова)
Задание типов данных с помощью образцов делает программы более строгими и наглядными и позволяет избежать ошибок, связанных с несоответствием типов.
В системе Mathematica используются следующие типы образцов.
ОбозначениеНазначение образца-Любое выражениеx_Любое выражение, представленное именем х: :pattemОбразец, представленный именем хPattem ? testВозвращает True, когда test применен к значению образца.Функции пользователя:
Понятие функции ассоциируется с обязательным возвратом некоторого значения в ответ на обращение к функции по её имени с указанием аргументов (параметров) в квадратных скобках. Возврат функциями некоторых значений позволяет применить их наряду с операторами для составления математических выражений.
Функции подразделяются на встроенные в ядро системы внутренние функции и функции, заданные пользователем. Примером первых могут быть 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. Для устранения побочных эффектов надо использовать образцы и другие специальные способы задания функций, описанные ниже. Итак, можно сформулировать ряд правил для заданий функций пользователя:
·такая функция имеет идентификатор - имя, которое должно быть уникальным и достаточно понятным;
·в списке параметров функции, размещённом в квадратных скобках после идентификатора, должны использоваться образцы переменных, а не просто переменные;
·может использоваться отложенное (:=) или немедленное (=) присваивание;
·тело функции может содержать несколько выражений, заключённых в круглые скобки, при этом возвращается значение последнего выражения;
·переменные образцов в списке параметров являются локальными и действуют только в пределах тела функции;
·в теле функции могут использоваться глобальные переменные, но при этом возможны побочные эффекты;
·возможно обращение к функции из тела этой же функции (рекурсия).
Параметрами функций могут быть списки при условии допустимости их комбинации.
После своего задания функции пользователя могут использоваться по тем же правилам, что и встроенные функции..Чистые функции:
Иногда может потребоваться создание функции, не имеющей имени (например, если функция будет использоваться только один раз, сразу же после её создания). Эта функция представляется только выражением без идентификатора, отсюда и её название - чистая функция (pure function). Для создания такого объекта служит встроенная функция Function, используемая в одном из следующих вариантов:
Function[body] - создаёт чистую функцию с телом body
Function[{x}, body] - создаёт чистую функцию параметра x с телом body
Function[{x1, x2,...}, body] - создаёт чистую функцию ряда параметров x1, x2,… с телом body
Для вычисления созданной таким образом функции после неё задаётся список параметров в квадратных скобках.
Чистую функцию можно легко превратить в обычную функцию пользователя..Анонимные функции:
Предельно компактную форму задания имеют так называемые анонимные функции. Они не имеют ни названия, ни обычного определения и задаются только выражениями специального вида. В этом выражении вместо переменных используют обозначения # (для одной переменной) или #1, #2,… (для ряда переменных). Завершается тело функции символом «&». Если надо вычислить функцию, то после её записи в квадратных скобках указывается список фактических параметров.
С помощью анонимных функций нетрудно создавать обычные функции пользователя..Организация циклов:
Многие задачи в пакете Mathematica решаются с использованием линейных алгоритмов и программ. Они могут быть представлены непрерывной цепочкой выражений, выполняемых последовательно от начала до конца.
Однако в большинстве случаев серьёзные вычисления базируются на использовании циклических и разветвлённых алгоритмов и программ. При этом, в зависимости от промежуточных или исходных данных, вычисления могут идти по разным ветвям программы, циклически повторятся и тд. Для реализации разветвлённых программ язык программирования должен содержать управляющие структуры, то есть специальные конструкции языка, реализующие в программах ветвление. Они используются при различных методах программирования, в том числе при процедурном и функциональном программировании.
a.Циклы типа Do;
К важнейшим управляющим структурам в языках программирования относятся циклы. С их помощью осуществляется циклическое исполнение некоторого выражения expr заданное число раз. Это число нередко определяется значением некоторой управляющей переменной (например i, j и т.д.) меняющиеся либо с шагом +1, либо от начального значения imin до конечного значения imax с шагом di. Циклы могут быть одинарными или множественными - вложенными друг в друга. Последние, используют ряд управляющих переменных. Такого рода циклы организуются с помощью функции Do:
vDo [expr, {imax}] -выполняет imax раз вычисление expr;
vDo [expr, {I, imax}] - вычисляет expr с переменной i, последовательно принимающей значения от 1 до imax (с шагом 1);
vDo[expr, {I, imin, imax}] - вычисляет expr с переменной I, последовательно принимающей значения от imin до imaxс шагом 1;
vDo[expr, {I, imin, imax, di}] - вычисляет expr с переменной I, оследовательно принимающей значения олт 1 до imax с шагом di;
vDo[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;
.Условные выражения и безусловные переходы:
Для подготовки полноценных программ помимо средств организации циклов необходимы и средства для создания разветвляющихся программ произвольной структуры. Обычно они реализуются с помощью условных выражений, позволяющих в зависимости от выполнения или невыполнения некоторого условия (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, которое соответствует первому совпадению.
При неверном задании первого параметра (селектора) просто повторяется запись функции.
При использовании селектора в виде целого числа, тогда как метка выбора - вещественное число. Выбор при этом не происходит, поскольку целочисленное значение не является тождественным вещественному числу.
.3 Теоретический материал по 3 лабораторной работе
Для обработки экспериментальных данных или данных заданных в виде таблиц, в пакете Mathematica существует множество функций..Вычисление суммарных значений, среднего значения и дисперсии:
Для нахождения суммарного значения элементов в таблицах можно воспользоваться функцией 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] - вычисляет дисперсию по значениям в списке.
Следует заметить, что при работе с двумерными таблицами, среднее и дисперсия будут вычисляться по столбцам..Интерполяция:
В вычислительной практике часто приходится иметь дело с функциями 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.Опции интерполирования;?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). При этом следует помнить, что наименьшая погрешность достигается при нахождении значения х, в центре области интерполяции. Для чего предлагается следующая процедура:
.После ввода в программу значения величины х, необходимо проверить условие , где и начальное и конечное значение узлов интерполяции.
.При выполнении предыдущего условия начинается поиск области интерполяции, для чего находим первое х, такое, для которого выполняется условие , при этом номер i, будет соответствовать середине интервала интерполяции. Для определения области интерполяции её левая граница будет начинаться с номера i - (n+1)/2, а заканчиваться узлом с номером i + (n+1)/2.
.После выполнения пунктов 1 и 2 программируется формула (2).
C.Аппроксимация экспериментальных данных аналитическими функциями:
Иногда бывает необходимо получить аналитическую функцию, описывающую полученные экспериментальные данные. Для этого можно воспользоваться функциями производящими «фитирование» данных, т.е. производящими подбор коэффициентов для заданной тем или иным способом аналитической функции для которых эта функция будет с достаточно хорошим приближением описывать экспериментальные данные.
Для этих целей в пакете Mathematica можно использовать две функции. Первая:[data,funs,vars] - находит с помощью метода наименьших квадратов фит по данным data, как линейную комбинацию функций funs по переменным vars.
При нахождении фита, аппроксимирующие функции могут быть заданы не только как элементы степенного ряда, но и как другие комбинации функций.
Вторая функция используется в тех случаях, когда необходимо найти фит к заранее известной модельной функции: [data,expr,pars,vars] - находит численные значения констант pars для выражения expr, описывающие наилучшим образом данные data как функцию переменных vars.
.5 Теоретический материал по вопросу для углубленного рассмотрения
Цикл - это разновидность управляющей конструкции в языках программирования высокого уровня предназначенная для организации многократного исполнения набора инструкций.
Входной язык Mathematica содержит большое количество конструкций, позволяющих для каждой конкретной задачи выбрать оптимальный метод программирования..Все возможные способы проведения в пакете Mathematica циклических операций:
При помощи циклов осуществляется многократное исполнение некоторого выражения или процедуры. Число актов вычислений определяется некоторой управляющей переменной, меняющейся с заданным шагом от начального значения до конечного или до выполнения некоторого условия.
a.Цикл Do;
Простейшая конструкция цикла. Возможны различные форматы её использования:
.Do[expr, {imax}] - выполняет imax раз вычисление выражения expr;
.Do[expr, {i, imax}] - вычисляет expr с переменной i, последовательно принимающей значения от 1 до imax (с шагом 1);
.Do[expr, {i, imin, imax}] - вычисляет expr с переменной i, последовательно принимающей значения от imin до imax с шагом 1;
.Do[expr, {i, imin, imax, di}] - вычисляет expr с переменной i, последовательно принимающей значения от 1 до imax с шагом di;
.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 можно использовать следующие директивы:
.Abort[] - вызывает прекращение вычислений с сообщением $Aborted. Команда может быть использована в любом месте программы.
.Break[] - выполняет экстренный выход из тела цикла или уровня вложенности программы, содержащего данный оператор (возвращает Null - значение без генерации секции выхода).
.Continue[] - переход на следующий шаг ближайшего содержащего эту функцию оператора Do, For или While.
.Interrupt[] - приостанавливает вычисления, делая запрос об их возобновлении.
.Return[] - прерывает выполнение с возвращением значения Null.
.Return[expr] - возвращает значение выражения ехрr, выходя из всех процедур и циклов.
e.Дополнительно;
При выполнении циклов, как правило, необходимо на каждом витке менять значения используемых переменных. Для наиболее распространённых операций этого вида в системе Mathematica созданы специальные операторы:
1.i++ - увеличение значения i на 1.
2.i-- - уменьшение значения i на 1.
.++i - значение i после добавления 1.
.--i - значение i после вычитания 1.
5.i+=di - прибавление di к значению i.
6.i-=di - вычитание di из значения i.
7.x*=c - умножение x на c.
8.x/=c - деление x на c.
Mathematica располагает минимальным, но функционально полным набором средств для организации циклов и разветвлений, которые позволяют создавать полноценные программы..Примеры всех возможных способов проведения в пакете 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 с присвоением значений локальным переменным). Локализация переменных позволяет избежать конфликта символов.
.Сравнение между использованием циклических операций в пакете Mathematica с использованием циклических операций в других языках программирования:.Сейчас в мире существует огромное множество различных языков программирования и в каждом из них использование циклических операций весьма и весьма схоже, но всё - таки, они разные и у каждого есть свои особенности. В нашем случае я проведу нить между математическим пакетом Mathematica и математическим пакетом Maple. Анализ данной параллели поможет мне провести сравнение использования циклических операций в различных языках программирования.
Таблица 1.
Сравниваемый пакет/ Объект сравненияПакет MathematicaПакет MapleЦиклические операции общий видФормат команды While[test, body]Формат использования цикла с заголовком For: For[start, test, incr, body].Формат команды: Do[expr, {i, imin, imax, di}]Maple имеет обобщённую конструкцию цикла, которая задаётся следующим образом: |for| |from| |to| |by| |while| dood;Есть ещё одна, более специфическая конструкция цикла: |for| |in| |while| dood:Объяснение циклической операцииПодсчитываются повторно условие test и тело цикла body до тех пор, пока истинность условия не нарушится.Данный цикл вычисляет start, потом, повторяясь, вычисляет incr и body, пока test не примет значение False.Подсчитывается выражение expr для значений i, принимающих значения от imin до imax с шагом di.Здесь name - имя управляющей переменной цикла, expr1, expr2, expr3 - выражения, задающие начальное значение, конечное значение и шаг изменения переменной name, expr4 - выражение, задающее условие, пока цикл (набор объектов между словами do и od), будет выполняться. В ходе выполнения цикла управляющая переменная меняется от значения expr1 до значения expr2 с шагом, заданным expr3. Если блок by отсутствует, то управляющая переменная будет меняться с шагом +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.Тем самым обеспечивая для себя возможность на основе подвыражений создавать интересные конструкции. В остальном использование циклических операций и директив прерывания и продолжения циклов этих двух математических пакетов весьма схоже.
. Решение и результаты проделанных лабораторных работ
.1 Лабораторная работа № 1
.1-ое задание:
a.Последовательность действий при выполнении данного задания;
.Решим данное уравнение в общем виде (аналитически). В этом нам поможет функция DSolve[] (более подробное описание данной функции можно найти в «Ход работы: Обзор теоретической части»).
.Далее для данной нам функции построим решение с начальными условиями, которые даны нам в условии задания. Это делаем также с помощью функции DSolve[], хотя набор аргументов функции в этом случае немного изменится, а именно: добавляются x(0)=x0, v(0)=v0.
.Для более удобного дальнейшего выполнения задания полученный в пункте 2 результат мы упрощаем с помощью функции Simplify (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 9 по курсу Программные аппараты средств информатики).
.Последующим нашим действием становится решение данного уравнение в численном виде, по начальным условиям, данных нам в задании, х0=-2/5, v0=2. Проделать данную операцию нам поможет функция NDSolve[] (более подробное описание данной функции можно найти в «Ход работы: Обзор теоретической части»).
.Завершающим этапом данного задания является построения графика зависимости х от t. Это мы смогли сделать с помощью функции Plot[] (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 10 по курсу Программные аппараты средств информатики).
b.Проиллюстрированный порядок действий при выполнении данного задания в пакете Mathematica;
.2-ое задание:
a.Последовательность действий при выполнении данного задания;
.Решим данное уравнение в общем виде (аналитически). В этом нам поможет функция DSolve[] (более подробное описание данной функции можно найти в «Ход работы: Обзор теоретической части»).
.Далее для данной нам функции построим решение с начальными условиями, которые даны нам в условии задания. Это делаем также с помощью функции DSolve[], хотя набор аргументов функции в этом случае немного изменится, а именно: добавляются x(0)=x0, v(0)=v0.
.Для более удобного дальнейшего выполнения задания, полученный в пункте 2 результат мы упрощаем с помощью функции FullSimplify (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 9 по курсу Программные аппараты средств информатики).
.Последующим нашим действием становится решение данного уравнение в численном виде, по начальным условиям, данных нам в задании, х0=3, y0=2. Проделать данную операцию нам поможет функция NDSolve[] (более подробное описание данной функции можно найти в «Ход работы: Обзор теоретической части»).
.Завершающим этапом данного задания является построения графиков зависимости х от t. Это мы смогли сделать с помощью функций Plot[] (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 10 по курсу Программные аппараты средств информатики) и функции Evaluate[], которая делает предварительный пересчёт данных функций для заданного параметра t.
b.Проиллюстрированный порядок действий при выполнении данного задания в пакете Mathematica;
.3-ее задание:
a.Последовательность действий при выполнении данного задания;
.В данном задание мы значительно сократим время выполнения и общую длину решения, а именно: мы запишем несколько действий в одной записи и, пропустив громоздкие вычисления, сразу получим график зависимости х от t.
.В данной записи можно увидеть, что для выполнения данного задания мы использовали функцию NDSolve[] (более подробное описание данной функции можно найти в «Ход работы: Обзор теоретической части»), для численного решения данного уравнения, также мы видим, что задействованы функции Plot[] и Evaluate[], для построения графика зависимостей x от t.
.Новой функцией является функция Manipulate[], которая используется для реализации изменения параметра.
b.Проиллюстрированный порядок действий при выполнении данного задания в пакете Mathematica;
.4-ое задание:
a.Последовательность действий при выполнении данного задания;
.Решим данное уравнение в общем виде (аналитически). В этом нам поможет функция DSolve[] (более подробное описание данной функции можно найти в «Ход работы: Обзор теоретической части»).
.Для более удобного дальнейшего выполнения задания, полученный в пункте 1 результат мы упрощаем с помощью функции FullSimplify (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 9 по курсу Программные аппараты средств информатики).
.Последующим нашим действием становится нахождение кинетической потенциальной и полной энергии, формулы, для вычисления которых мы можем взять из курса «Физики».
.При вычислении кинетической энергии мы сталкиваемся с небольшим препятствием, которое можно легко решить, используя знания физики и курса Программные аппараты средств информатики.
.При вычислении кинетической энергии нам необходима скорость, которую можно вычислить, взяв первую производную, в нашем случае от x по t. Это мы сделали с помощью функции D[] (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 9 по курсу Программные аппараты средств информатики) и немного упростили её с помощью функции Simplify (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 9 по курсу Программные аппараты средств информатики).
.Завершающим этапом данного задания является построения графиков зависимости х от t при конкретных значениях переменных. Это мы смогли сделать с помощью функций Plot[] (более подробное описание данной функции можно найти в методическом пособии к лабораторной работе № 10 по курсу Программные аппараты средств информатики).
b.Проиллюстрированный порядок действий при выполнении данного задания в пакете Mathematica;
.2 Лабораторная работа № 2
.1-ое задание:
a.Последовательность действий при выполнении данного задания;
.На первом этапе работы мы считываем данные из файла, для этого мы используем функцию Import[], а в качестве формата считывания выбираем функцию List, с помощью которой считанные данные будут в виде списка.
.Последующим нашим действием станет нахождение среднего значения данной выборки. Среднее значение = Сумма всех элементов выборки / Общее количество элементов в выборке. Из этой простой формулы мы можем выделить наш первый шаг, а именно: находим общее число элементов в выборке с помощью функции Lenght[]. Далее нам необходимо провести суммирования, проведём данную операцию с помощью цикла For[start, test, incr, body].
.Дальнейшим нашим шагом стало нахождения дисперсии данной выборки, также с использованием цикла For[start, test, incr, body].
.Интересные факты: Переменная, с чей помощью мы производим суммирование элементов, должна зануляться перед циклом. Плюс для более корректной работы все вычисления следует производить в одном блоке.
b.Проиллюстрированный порядок действий при выполнении данного задания в пакете Mathematica;
2-ое задание:
a.Последовательность действий при выполнении данного задания;
.На первом этапе работы мы считываем данные из файла, для этого мы используем функцию Import[], а в качестве формата считывания выбираем функцию Table, с помощью которой считанные данные будут в виде таблицы.
.Последующим нашим действием станет нахождение общего числа элементов в выборке с помощью функции Lenght[].
.Потом мы пишем программу для сортировки элементов в выборке по возрастанию (метод выбираем самостоятельно). В нашем случае мы используем метод «Пузырька». По этому методу мы сравниваем элементы и делаем их перестановку, если выполняется определённое условие.
.По заданию нам сказано, что необходимо провести сортировку по первому столбцу, то есть общий смысл нашей программы заключается в том, что происходит сравнение элементов первого столбца и, если условие выполняется, то сравниваемые объекты меняются местами. В данном случае сравниваемыми объектами являются строки. Конечным итогом столь запудренного вычисления стала таблица наших данных, отсортированных по первому столбцу (полный конечный вариант данной таблицы представлен в приложении, которое находится в конце отчёта).
.Дальнейшим нашим шагом стало определение максимального и минимального значения из элементов первого столбца полученной таблицы.
.Завершающим ходом является построение графика зависимостей на основе полученной выше таблицы, используя функцию ListPlot[].
b.Проиллюстрированный порядок действий при выполнении данного задания в пакете Mathematica;
.3-ее задание:
a.Последовательность действий при выполнении данного задания;
.На основе, полученной из предыдущего задания отсортированной таблицы, построим интерполяционный полином порядка 25. Для осуществления этого нам необходимо воспользоваться знаниями, полученными на курсе Программирования для ЭВМ. С помощью некоторых преобразований мы получаем программу, которая находит полином 25 порядка в пакете Mathematica.
.Нам необходимо определить границы полинома. Ход работы в данном случае происходит в два этапа: выявление позиции того элемента, который следует после Х и для которого ищется значение функции. Ну и собственно то, что мы искали: по позиции такого элемента вычисляем границы полинома.
.Далее проведём проверку для нашей программы. Проверка заключается в том, что если значение Х входит в интервал наших значений, то наша программа даст корректный результат. В обратном случае программа прекратит вычисления и выдаст сообщение об ошибке. Ещё одной особенностью является то, что если для проверки мы берём значения на концах интервала, то получаем результат с погрешностью, так как задан полином слишком большого порядка. В нашем случае обе проверки выполнены и получили корректный результат.
.Затем в условие задания нам сказано, что необходимо получить 100 точек между узлами в интервале значений первого столбца отсортированной таблицы, используя построенный полином. Для этого воспользуемся функцией Table[]. Данная функция создаёт список по выражению, зависящему от параметра и изменяющемуся от минимального значения, до максимального с заданным шагом.
.В качестве максимального и минимального значения я беру концы нашего интервала, но с учётом особенности использования данных значений, я воспользуюсь именно теми концами, при которых мы получаем корректный результат.
.После я задаю шаг. Шаг = (Максимальное значение - Минимальное значение) / Количество точек в промежутках между узлами (в нашем случае 100).
.С помощью указанной выше функции Table[] генерируем нашу таблицу.
.Потом на основе прогенерированной таблицы строим график, использовав функцию ListPlot[].
.Завершающим шагом является совмещение графиков: полученного по начальным значениям и с полученным в третьем задании. Это мы делаем с помощью функции Show[].
10.P. S. На совмещённом графике можно заметить расхождения в некоторых местах. Это происходит из-за большого заданного порядка полинома. Следовательно, взяв во внимание данный факт, можно сказать, что полученный результат корректный.
b.Проиллюстрированный порядок действий при выполнении данного задания в пакете Mathematica:
.3 Лабораторная работа № 3
.1-ое задание:
a.Последовательность действий при выполнении данного задания;
.На первом этапе работы мы считываем данные из файла, для этого мы используем функцию Import[], а в качестве формата считывания выбираем функцию Table, с помощью которой считанные данные будут в виде таблицы.
.На основе считанных данных строим график исходных данных, используя функцию ListPlot[].
.Затем находим минимальное и максимальное значения нашей выборки. Для этого используем функции Min[] и Max[].
.Дальнейшим нашим действием станет построения интерполирующего полинома и его проверка. Данную операцию нам поможет произвести встроенная в пакет Mathematica функция Interpolation[].
5.Затем данную операцию нам по заданию необходимо сделать при различных порядках полинома (1, 2, 5 и автоматическим). Здесь нам поможет аргумент InterpolationOrder p.
.Потом строим график, показывающий данные, полученные с помощью интерполяционного полинома для различных порядков интерполирования (1, 2, 5 и автоматическим). Построение графика происходит с помощью функции Plot[].
.График для сравнения получаем путём объединения графиков различных порядков, полученных с помощью интерполирующего полинома. Данное действие также производим с помощью функции Plot[].
.Завершающим этапом станет график сравнения графика исходных данных и графика интерполяционного полинома. Здесь нам поможет функция Show[]. В нашем случае мы видим, что оба графика очень похожи, что говорит о том, что полученный нами результат корректен.
b.Проиллюстрированный порядок действий при выполнении данного задания в пакете Mathematica;
.2-ое задание:
a.Последовательность действий при выполнении данного задания;
.На первом этапе работы мы находим среднее значение данной выборки. Для этого мы будем использовать встроенную функцию Mean[].
.Далее мы должны определить дисперсию данной выборки, что тоже делается довольно легко, если использовать встроенную функцию Variance[].
.Последующим нашим шагом является фитирование исходных данных на основе степенного ряда, исходя из этого, для решения такой задачи воспользуемся функцией Fit[data, funs, vars], тем самым меняя степень ряда мы определим ту степень ряда, при которой он будет хорошо описывать данные из файла.
.Основываясь на полученный в результате фитирования степенной ряд строем его график, используя функцию Plot[].
.Затем строим график исходных данных, то есть тех которые мы считали в самом начале. Делаем это с помощью функции ListPlot[].
.Для сравнения графика степенного ряда и графика исходных данных совмещаем их на одном графике. Это мы делаем при помощи функции Show[]. В нашем случае оба графика достаточно близки друг другу, и как следствие делаем вывод, что мы получили корректный результат.
.Потом нам необходимо провести фитирование исходных данных с помощью заданной в условие функции. Производим данное вычисление посредством функции FindFit[data, expr, pfrs, vars]. С её помощью мы найдём значения параметров в соответствии с нашими исходными данными.
.Найденные в предыдущем пункте значения подставляем в функции и уже на основе них строим график, задействовав функцию Plot[].
.Проверим найденные нами значения, путём сравнения двух графиков: графика исходных данных и графика нашей функции. Данное действие производим при помощи функции Show[]. В нашем случае оба графика практически неотличимы, что свидетельствует о корректности нашего результата.
.Далее производим фитирование той же самой функции, но уже с условием о том, среднее значение и дисперсия известны и были получены нами ранее.
.Взяв за основу значения параметров, полученных при проделывании предыдущего пункта, построим график функции.
.Завершающим этапом станет сравнение графика функции при известных значениях параметров с графиком, полученным на основе наших исходных данных. Данную операцию проделываем с помощью функции Plot[].
b.Проиллюстрированный порядок действий при выполнении данного задания в пакете Mathematica;
Вывод
При выполнении заданий летней учебной практики мы:
.Вспомнили функции пакета Mathematica, изученные ранее (в 1-ом семестре);
.Научились решать дифференциальные уравнения и системы дифференциальных уравнений с помощью пакета Mathematica;
.Изучили программирование в пакете Mathematica;
.Освоили обработку экспериментальных данных в пакете Mathematica;
.Смогли совмещать функции пакета Mathematica, изученные ранее и функции, изученные во время летней учебной практики;
.Сумели организовать общую работу программы с помощью циклов;
.Приобрели практические и теоретические навыки работы в пакете Mathematica;
Выполнение заданий летней учебной практики проходило по плану:
.Изучили теоретический материал, предоставленный нам в методических пособиях к лабораторным работам;
.Выполнили задания, предложенные нам в трёх лабораторных работах, произведя требуемые вычисления;
.Составили отчеты по проделанным лабораторным работам;
.Углубленно рассмотрели тему: «Циклические операции в пакете Mathematica» и провели сравнение применения данных операций между различными языками программирования;
.Составили общий отчёт по всей летней учебной практики, основываясь на проделанную ранее работу;
Заключение по проделанным лабораторным работам и по вопросу для углубленного рассмотрения:
Лабораторная работа №1
В данной лабораторной работе мы произвели вычисления дифференциальных уравнений и систем дифференциальных уравнений различными способами, далее построили графики по каждому заданию, тем самым закрепили освоенный нами теоретический материал. И затем составили отчёт по выполненной работе. Благодаря данной работе мы научились решать простые и сложные дифференциальные уравнения различных порядков, как в численном, так и в аналитическом виде (в том числе и при заданных начальных условиях). Также в базу наших знаний вошло умение решать систему дифференциальных уравнений различных порядков, как в численном, так и в аналитическом виде (в том числе и при заданных начальных условиях). Плюс мы вспомнили различные функции пакета Mathematica, которые изучали в первом семестре. В их числе есть череда функций, которые строят различные графики и с их помощью построили графики по каждому заданию, основываясь на полученные данные. Конечным результатом нашей работы стали, приобретённые знания и навыки, а так же верно выполненные задания.
Лабораторная работа №2
В данной лабораторной работе мы освоили новое направление в пакете Mathematica, а именно: программирование в нём с использованием функций пользователя и организацией программы с помощью циклов. Общей целью нашей работы стало создание программы, которая производила бы требуемые вычисления, а так же выполняла определённые условия, благодаря которым общее решение имеет смысл, это было сделано с помощью циклов. Более конкретно можно сказать, наши вычисления это были нахождение среднего и дисперсии выборки, а также построение интерполирующего полинома. Конечным результатом нашей работы стала верно, работающая программа, производящая необходимые вычисления по определённым условиям, а также приобретённые знания и улучшенные навыки в работе с пакетом Mathematica.
Лабораторная работа №3
В данной лабораторной работе мы освоили новое направление в пакете Mathematica, а именно: обработка экспериментальных данных. В ходе нашей работы был произведен ряд вычислений: нахождение среднего значения и дисперсии, построение интерполирующего полинома с разными порядками, проведение фитирования данных на основе степенного ряда и на основе заданной функции (в нашем случае это функция плотности нормального распределения) и конечно же построение обычных и совмещённых графиков на основе данных для сравнение исходных данных с полученными. Результатом нашей лабораторной работы стали, верно, выполненные задания, приобретённый опыт и накопленные знания при работе в пакете Mathematica.
Вопрос для углубленного рассмотрения.
Исследовав циклические конструкции в различных языках программирования (в нашем случае с пакетом Maple), можно сделать вывод, что по принципам построения они схожи между собой, а если и есть различия, то они связаны с синтаксисом. Ведь основная задача циклических конструкций - это многократное выполнение одних и тех же операций, что существенно облегчает работу программисту и позволяет организовать выполнение итерационных процессов. Программа немыслима без циклических конструкций, так как большая часть программ основана на повторении.
Общий итог по пройденной летней учебной практики:
За период летней учебной практики мы не только закрепили свои знания в использовании пакета Mathematica, но приобрели новые по темам: «Решение дифференциальных уравнений и систем дифференциальных уравнений», «Программирование в пакете Mathematica», из данного цикла наиболее углубленно мы разобрали тему «Циклические операции в пакете Mathematica», и «Обработка экспериментальных данных в пакете Mathematica».
Практическим результатом летней учебной практики стали верно, выполненные три лабораторные работы с отчётами и рассмотренный вопрос для углубленного изучения. Также практическим результатом нашей летней практики является презентация пройденного материала, что включает в себя общий отчёт по пройденной летней учебной практики, устная защита и презентация Microsoft Power Point.
Конечным результатом летней учебной практики являются приобретённые навыки, полученные новые и закреплённые старые знания, а так же практические умение работы с пакетом Mathematica и умение посредством анализа провести сравнение между различными языками программирования.
Список использованной литературы
1.Аладьев В.З., Бойко В.К., Ровба Е.А. Программирование в пакетах Maple и Mathematica: Сравнительный аспект: Учебное пособие. - Гродно: 2011 г. - 516 стр.
.Аладьев В.З., Бойко В.К., Ровба Е.А. Программирование и разработка приложений в Maple: Учебное пособие. - Гродно - Таллинн: 2007 г. - 459 стр.
.Большакова И.В., Мастяница В.С. Экономико-математические расчёты в системе Mathematica: Учебное пособие. - Минск: 2005 г. - 128 стр.
.Гринберг А.С., Иванюкович В.А., Скуратович Е.А. Практикум по высшей математике на персональном компьютере: Учебное пособие - Минск: 2001 г. - 116 стр.
.Дьяконов В.П. Mathematica 5/6/7 Полное руководство. - Москва: 2010 г. - 624 стр.
.Дьяконов В. П. Математическая система Maple: Учебное пособие. - Москва: 1998 г. - 397 стр.
.Задания к лабораторным работам и Методические пособия к ним, предоставленные нам преподавателем.
.Калинин Б.Н. Методическое пособие по дисциплине «Вычислительная математика». - Москва: 2006 г. - 31 стр.
.Чигарев А.В., Кравчук А.И., Кравчук А.С. Основы системы Mathematica. Задачи и решения: Учебное пособие. - Минск: 2002 г. - 150 стр.
Приложение
Здесь представлена таблица отсортированных элементов из лабораторной работы № 2, задание 2, пункт 4:
{
{-7.4782, 0.0106483},
{-6.85853, 0.0155772},
{-5.78615, 0.027839},
{-5.03823, 0.0393735},
{-4.99631, 0.0400891},
{-4.98803, 0.0402313},
{-4.70885, 0.0451759},
{-4.66189, 0.0460352},
{-4.65957, 0.0460779},
{-4.14826, 0.055878},
{-4.10359, 0.0567668},
{-4.00253, 0.0587934},
{-3.78303, 0.0632571},
{-3.70748, 0.0648086},
{-3.4716, 0.0696824},
{-3.42546, 0.0706385},
{-3.33794, 0.0724518},
{-3.26111, 0.0740419},
{-3.23262, 0.0746307},
{-3.22664, 0.0747543},
{-3.18977, 0.0755155},
{-3.03802, 0.0786339},
{-2.99739, 0.079464},
{-2.92275, 0.0809819},
{-2.76488, 0.084156},
{-2.73958, 0.0846594},
{-2.59039, 0.0875915},
{-2.56396, 0.0881041},
{-2.53653, 0.0886334},
{-2.48824, 0.0895591},
{-2.42702, 0.0907205},
{-2.31468, 0.0928136},
{-2.26879, 0.0936532},
{-2.23725, 0.0942249},
{-2.18801, 0.0951082},
{-2.18487, 0.095164},
{-2.17403, 0.0953569},
{-2.16714, 0.0954791},
{-2.08527, 0.096913},
{-2.00528, 0.0982804},
{-1.9779, 0.0987404},
{-1.95213, 0.0991696},
{-1.92017, 0.0996964},
{-1.88082, 0.100337},
{-1.83551, 0.101063},
{-1.77032, 0.102086},
{-1.74419, 0.102488},
{-1.69581, 0.103221},
{-1.68421, 0.103394},
{-1.6214, 0.104317},
{-1.61288, 0.104441},
{-1.57167, 0.105029},
{-1.52306, 0.105708},
{-1.51899, 0.105764},
{-1.49981, 0.106026},
{-1.43581, 0.106883},
{-1.38891, 0.107491},
{-1.38107, 0.107591},
{-1.37897, 0.107618},
{-1.26905, 0.108967},
{-1.24768, 0.109219},
{-1.20729, 0.109683},
{-1.18774, 0.109903},
{-1.12867, 0.110549},
{-1.10224, 0.110829},
{-1.02905, 0.111571},
{-1.0246, 0.111615},
{-0.916701, 0.112621},
{-0.878606, 0.112951},
{-0.845743, 0.113225},
{-0.831933, 0.113338},
{-0.75413, 0.113938},
{-0.751781, 0.113955},
{-0.709905, 0.114254},
{-0.698932, 0.11433},
{-0.6642, 0.114562},
{-0.629672, 0.114782},
{-0.611002, 0.114895},
{-0.603572, 0.11494},
{-0.557605, 0.115203},
{-0.55321, 0.115227},
{-0.551948, 0.115234},
{-0.511814, 0.115445},
{-0.385103, 0.116008},
{-0.372646, 0.116055},
{-0.356314, 0.116114},
{-0.354265, 0.116121},
{-0.34753, 0.116145},
{-0.301259, 0.116294},
{-0.287058, 0.116336},
{-0.27696, 0.116364},
{-0.271608, 0.116379},
{-0.246378, 0.116444},
{-0.227495, 0.116488},
{-0.223415, 0.116498},
{-0.194202, 0.116558},
{-0.151379, 0.116632},
{-0.122362, 0.116672},
{-0.120863, 0.116674},
{-0.0866393, 0.116709},
{-0.0829562, 0.116712},
{-0.0585845, 0.11673},
{0.00600694, 0.116747},
{0.0606645, 0.116728},
{0.096617, 0.1167},
{0.113049, 0.116683},
{0.196407, 0.116554},
{0.202199, 0.116543},
{0.237233, 0.116466},
{0.255625, 0.116421},
{0.29595, 0.11631},
{0.346224, 0.116149},
{0.413565, 0.115895},
{0.443302, 0.115769},
{0.44741, 0.11575},
{0.468027, 0.115657},
{0.469277, 0.115651},
{0.470993, 0.115643},
{0.492542, 0.11554},
{0.518275, 0.115412},
{0.53809, 0.115308},
{0.543459, 0.11528},
{0.544308, 0.115275},
{0.581366, 0.115069},
{0.587041, 0.115037},
{0.632007, 0.114767},
{0.635349, 0.114746},
{0.64768, 0.114669},
{0.651488, 0.114644},
{0.662533, 0.114573},
{0.665815, 0.114552},
{0.675237, 0.11449},
{0.689789, 0.114392},
{0.7502, 0.113967},
{0.767072, 0.113842},
{0.789008, 0.113676},
{0.793117, 0.113644},
{0.841433, 0.113261},
{0.843524, 0.113243},
{0.845986, 0.113223},
{0.848055, 0.113206},
{0.848552, 0.113202},
{0.859214, 0.113114},
{0.938491, 0.112426},
{0.942623, 0.112388},
{0.953243, 0.112292},
{0.980984, 0.112034},
{0.983599, 0.112009},
{0.996821, 0.111884},
{1.052, 0.111343},
{1.05875, 0.111276},
{1.06756, 0.111186},
{1.09044, 0.110951},
{1.13021, 0.110533},
{1.13087, 0.110526},
{1.17871, 0.110004},
{1.17948, 0.109995},
{1.18695, 0.109912},
{1.19486, 0.109824},
{1.20989, 0.109654},
{1.23078, 0.109415},
{1.24848, 0.109209},
{1.3046, 0.108541},
{1.3614, 0.10784},
{1.37143, 0.107713},
{1.3781, 0.107629},
{1.404, 0.107297},
{1.43329, 0.106916},
{1.44496, 0.106762},
{1.52335, 0.105704},
{1.53267, 0.105575},
{1.55543, 0.105258},
{1.57512, 0.10498},
{1.59, 0.104769},
{1.59574, 0.104687},
{1.61586, 0.104398},
{1.62506, 0.104264},
{1.63726, 0.104087},
{1.6373, 0.104086},
{1.65432, 0.103837},
{1.65705, 0.103797},
{1.66669, 0.103654},
{1.6706, 0.103596},
{1.67353, 0.103553},
{1.70747, 0.103045},
{1.73143, 0.102682},
{1.78421, 0.10187},
{1.89903, 0.100042},
{1.90419, 0.0999577},
{1.90603, 0.0999277},
{1.90629, 0.0999235},
{1.90665, 0.0999175},
{1.96055, 0.0990298},
{1.98199, 0.098672},
{2.01035, 0.0981947},
{2.04085, 0.0976765},
{2.0738, 0.0971111},
{2.12778, 0.0961726},
{2.17575, 0.0953263},
{2.18609, 0.0951424},
{2.19928, 0.094907},
{2.20195, 0.0948592},
{2.23117, 0.0943345},
{2.23316, 0.0942988},
{2.23396, 0.0942844},
{2.25542, 0.0938961},
{2.27076, 0.0936174},
{2.27567, 0.0935279},
{2.29102, 0.0932476},
{2.31354, 0.0928345},
{2.32149, 0.0926882},
{2.36292, 0.091921},
{2.38063, 0.0915911},
{2.39664, 0.0912916},
{2.39669, 0.0912906},
{2.40942, 0.0910518},
{2.42112, 0.0908317},
{2.4298, 0.0906681},
{2.47151, 0.0898779},
{2.4887, 0.0895503},
{2.51912, 0.0889681},
{2.52577, 0.0888403},
{2.52746, 0.0888079},
{2.53212, 0.0887183},
{2.59852, 0.0874335},
{2.6223, 0.0869699},
{2.62337, 0.086949},
{2.66297, 0.086173},
{2.66701, 0.0860936},
{2.69592, 0.0855241},
{2.73373, 0.0847756},
{2.7929, 0.0835968},
{2.80427, 0.0833692},
{2.80586, 0.0833373},
{2.82836, 0.0828863},
{2.90151, 0.0814119},
{2.90782, 0.0812842},
{2.91626, 0.0811133},
{2.96886, 0.0800453},
{2.97023, 0.0800174},
{2.99671, 0.0794779},
{3.00748, 0.0792581},
{3.02658, 0.0788679},
{3.02876, 0.0788234},
{3.05275, 0.0783325},
{3.06567, 0.0780677},
{3.07282, 0.0779212},
{3.1035, 0.0772915},
{3.11883, 0.0769764},
{3.18641, 0.0755848},
{3.19925, 0.0753197},
{3.22277, 0.0748343},
{3.24221, 0.0744326},
{3.24867, 0.0742991},
{3.26139, 0.0740361},
{3.26271, 0.0740088},
{3.28102, 0.0736301},
{3.30084, 0.0732199},
{3.32045, 0.0728139},
{3.35878, 0.0720201},
{3.36354, 0.0719215},
{3.42813, 0.0705831},
{3.44019, 0.0703332},
{3.45265, 0.070075},
{3.52587, 0.0685586},
{3.53392, 0.0683919},
{3.53821, 0.0683031},
{3.54464, 0.0681701},
{3.55603, 0.0679343},
{3.59112, 0.0672087},
{3.61139, 0.0667899},
{3.62968, 0.0664122},
{3.66369, 0.0657106},
{3.67209, 0.0655373},
{3.68236, 0.0653258},
{3.69415, 0.065083},
{3.69864, 0.0649906},
{3.70662, 0.0648264},
{3.72322, 0.0644848},
{3.73264, 0.0642912},
{3.74054, 0.0641289},
{3.75064, 0.0639214},
{3.77697, 0.0633812},
{3.78409, 0.0632354},
{3.85874, 0.0617092},
{3.86947, 0.0614906},
{3.90501, 0.0607672},
{3.97131, 0.0594235},
{4.0508, 0.0578229},
{4.06708, 0.0574966},
{4.07816, 0.057275},
{4.10886, 0.0566617},
{4.11379, 0.0565636},
{4.11521, 0.0565352},
{4.11856, 0.0564685},
{4.12071, 0.0564256},
{4.12377, 0.0563648},
{4.20131, 0.0548282},
{4.24714, 0.0539266},
{4.27764, 0.0533296},
{4.32187, 0.052468},
{4.34414, 0.0520362},
{4.34423, 0.0520345},
{4.39183, 0.0511161},
{4.41343, 0.0507015},
{4.44029, 0.0501878},
{4.45456, 0.0499159},
{4.46596, 0.0496989},
{4.51485, 0.0487733},
{4.52398, 0.0486012},
{4.54656, 0.0481769},
{4.56364, 0.0478569},
{4.59545, 0.0472636},
{4.6114, 0.0469673},
{4.63019, 0.0466194},
{4.63544, 0.0465224},
{4.69813, 0.0453713},
{4.70263, 0.0452893},
{4.70785, 0.0451942},
{4.73968, 0.0446159},
{4.78296, 0.0438354},
{4.79753, 0.0435742},
{4.85061, 0.042629},
{4.86823, 0.0423177},
{4.89684, 0.0418144},
{4.91435, 0.0415079},
{4.9181, 0.0414425},
{4.92057, 0.0413993},
{4.93681, 0.0411165},
{4.94071, 0.0410488},
{4.9465, 0.0409484},
{4.95329, 0.0408306},
{4.96468, 0.0406336},
{4.96777, 0.0405801},
{4.9699, 0.0405434},
{5.00783, 0.0398917},
{5.01737, 0.0397286},
{5.03499, 0.0394285},
{5.07554, 0.0387423},
{5.08171, 0.0386385},
{5.0841, 0.0385984},
{5.15162, 0.0374729},
{5.15972, 0.037339},
{5.16322, 0.0372814},
{5.18311, 0.0369543},
{5.20833, 0.036542},
{5.23206, 0.0361563},
{5.23598, 0.0360929},
{5.28161, 0.0353587},
{5.35496, 0.0341969},
{5.42714, 0.0330763},
{5.43959, 0.0328851},
{5.44066, 0.0328688},
{5.46372, 0.0325167},
{5.46407, 0.0325115},
{5.47144, 0.0323994},
{5.48304, 0.0322235},
{5.50413, 0.0319054},
{5.50956, 0.0318238},
{5.52336, 0.031617},
{5.53203, 0.0314876},
{5.56358, 0.0310191},
{5.58279, 0.030736},
{5.59727, 0.0305236},
{5.60751, 0.0303741},
{5.64536, 0.0298252},
{5.64844, 0.0297807},
{5.6757, 0.0293897},
{5.6916, 0.0291631},
{5.70087, 0.0290315},
{5.72203, 0.0287326},
{5.7467, 0.0283867},
{5.75911, 0.0282136},
{5.85798, 0.0268596},
{5.85966, 0.0268369},
{5.8905, 0.0264238},
{5.89726, 0.0263337},
{5.91352, 0.026118},
{6.02307, 0.0246958},
{6.02478, 0.0246741},
{6.08547, 0.0239096},
{6.09769, 0.0237577},
{6.10041, 0.023724},
{6.12504, 0.02342},
{6.13797, 0.0232616},
{6.16122, 0.0229785},
{6.1738, 0.0228264},
{6.30222, 0.0213128},
{6.34003, 0.020881},
{6.37369, 0.0205019},
{6.38352, 0.0203922},
{6.39353, 0.0202807},
{6.40016, 0.0202072},
{6.47313, 0.0194106},
{6.56679, 0.0184215},
{6.59013, 0.0181809},
{6.60438, 0.0180351},
{6.60617, 0.0180169},
{6.61357, 0.0179415},
{6.69617, 0.0171165},
{6.76254, 0.0164742},
{6.84414, 0.0157093},
{6.84975, 0.0156577},
{6.94866, 0.0147689},
{7.25161, 0.0122842},
{7.27628, 0.0120971},
{7.32872, 0.0117068},
{7.38742, 0.0112817},
{7.42035, 0.0110487},
{7.42969, 0.0109832},
{7.471, 0.0106975},
{7.4798, 0.0106374},
{7.52678, 0.0103211},
{7.61499, 0.00974737},
{7.62953, 0.00965531},
{7.6969, 0.0092377},
{7.71255, 0.00914279},
{7.76698, 0.00881882},
{8.02356, 0.00741425},
{8.03289, 0.00736683},
{8.08026, 0.00712997},
{8.15724, 0.00675841},
{8.31598, 0.00604249},
{8.31929, 0.00602822},
{8.43413, 0.00555154},
{8.49317, 0.00531896},
{8.63742, 0.00478492},
{8.86813, 0.00402505},
{8.92102, 0.00386611},
{9.05229, 0.0034946},
{9.12741, 0.0032961},
{9.15409, 0.003228},
{9.29459, 0.00288887},
{9.41283, 0.00262781},
{9.55927, 0.00233309},
{10.4673, 0.0010709},
{11.0329, 0.000636271},
{11.0592, 0.000620586},
{11.2544, 0.000515024},
{11.7031, 0.000331333},
{12.1107, 0.000218662}}