Тема-3-5. Основы работы с математическими пакетами (MathCad)
Скачать 3.25 Mb.
|
Тема 3.5. Основы работы с математическими пакетами Страница 356 ∂ int(S, v) — возвращает неопределенный интеграл от S по переменной v . ∂ int(S, a, b) — возвращает определенный интеграл от S с пределами интегрирования от а до b, причем пределы интегрирования могут быть как символьными, так и числовыми. ∂ int(S, v, a, b) — возвращает определенный интеграл от S по переменной v с пределами от а до b. Пример 7.3.8-1 >> int(sin(x)^3, x) ans = - l/3*sin(x)^2*cos(x)-2/3*cos(x) >> int(log(2*x), x) ans = log(2*x)*x - x >> int((x^2-2)/(x*3-l), x, l, 2) ans = -inf >> int((x^2-2)/(x*3-l), x, 2, 5) ans = - 2/3*1og(2)+ 2/3*1og(31) + 2/3*3^(l/2)*atan(11/3*3^(l/2)) -... 2/3*log(7) - 2/3*3^(1/2)*atan(5/3*3^(l/2)) >> int([x^3 sin(x) exp(x)], x) ans = [ l/4*x^4, -cos(x), exp(x)] >> int(log(sin(x)),x,0,pi/2) ans = -pi/2*log(2) >> С помощью функции int( ) можно вычислять имеющие аналитическое решение сложные интегралы, например с бесконечными пределами (или одним из пределов), а также кратные интегралы. Пример 7.3.8-2 » int(log(1+exp(-x),x,0,inf) ans = pi^2/12 » syms x a b » int(int(int(x^2 + y^2)*z, x, 0, a), y, 0, a), z, 0, a) ans = 1/3*a^6 >> 3.5.3.3.7 Средства визуализации результатов символьных вычислений Визулизация функции одной переменой осуществляется при помощи функции ezplot(). 1. Графопостроитель – funtool Команда funtool создает интерактивный графический калькулятор, позволяющий быстро построить две функции одной переменной - f(x) и g(x). Например, одна может задавать собственно функцию, а другая — ее производную. Функции обозначаются как ' f = ' и ' g = ' и после знака равенства можно набрать функции с помощью клавиш калькулятора в его нижней части. С помощью полей 'х = ' и ' а = ' можно задать диапазон изменения переменной х и значение масштабирующего параметра а. При запуске команды funtool появляются окна для двух функций и окно калькулятора (рис. 5.3.1). По умолчанию заданы функции f(x) = х и g(x) = 1, предел изменения х от -2π до 2π и а = 1/2. Верхний ряд кнопок вычислителя относится только к функции f(x) и задает следующие операторы: ∂ df/dx — символьное дифференцирование f(x); ∂ int f — символьное интегрирование f(x) при наличии замкнутой формы; Тема 3.5. Основы работы с математическими пакетами Страница 357 Рис. 7.3.9-1. Внешний вид графопостроителя funtool ∂ simple f – упрощение выражения, если таковое возможно; ∂ num f – выделение числителя рационального выражения; ∂ den f – выделение знаменателя рационального выражения; ∂ 1/f – замена f(x) на 1 / f(x); ∂ finv – замена f(x) инверсной функцией. ∂ второй ряд клавиш выполняет операции масштабирования и сдвига f(x) с применением параметра 'а'. ∂ третий ряд клавиш предназначен для осуществления бинарных операций над функциями f(x) и g(x). ∂ четвертый ряд клавиш служит для работы с памятью калькулятора и иных операций: ∂ Insert – помещает текущую функцию в список функций. ∂ Cycle – выполняет текущую функцию из списка. ∂ Delete – удаляет выделенную функцию из списка. ∂ Reset – устанавливает f, g, x, а и fxl i st в исходное состояние. ∂ Help – выводит описание калькулятора. ∂ Demo – запускает демонстрационный пример. ∂ Close – завершает работу с калькулятором. Благодаря описанным средствам, вычислитель позволяет задать инересующую вас функцию, выполнить ее преобразования (например, дифференцирование и интегрирование) и, наконец, построить график функции и результатов ее преобразования (рис.5.3.2) Тема 3.5. Основы работы с математическими пакетами Страница 358 Рис. 7.3.9-2. Построения графиков некоторых функций Таким образом, графопостроитель funtool является весьма удобным средством визуализации графиков самых различных функций. 2. Графики поверхностей – ezsurf( ) и ezsurfc( ) Команда ezsurf служит для построения графиков поверхностей, задаваемых функциями двух переменных f(x, у): • ezsurf(f) – построение поверхности f(x,y) с параметрами х и у, меняющимися по умолчанию от -2π до 2π; • ezsurf(f,domain) – построение поверхностиf(x,y) с пределами изменения х и у, заданными параметром domain; • ezsurf(x,y,z) – построение поверхности, заданной параметрически зависимостями x(s, t), y(s, t), z(s, t) при s и t, меняющихся в интервале от -2π до 2π; • ezsurf(x,y,z,[smin, smax, tmin, tmax]) – построение поверхности, заданной параметрически зависимостями x(s, t), y(s, t), z(s, t) при s и t меняющихся в заданном интервале. Следующий пример показывает действие этой команды: - Пример 7.3.9-1 >>syms x у >> ezsurf(rea1(asec(x+i*y))) >> Тема 3.5. Основы работы с математическими пакетами Страница 359 Рис. 7.3.9-3. Пример построения графика поверхности командой ezsurf Аналогичная по синтаксису записи группа команд ezsurfc( ) строит еще и контурный график поверхности на плоскости, лежащей под поверхностью. 3.5.3.4. М-файлы и программирование средствами MatLab 3.5.3.4.1. Основные понятия и средства программированиям в MatLab До сих пор мы в основном использовали систему MatLab в режиме непосредственного счета — в командном режиме . Однако при решении серьезных задач возникает необходимость сохранения используемых последовательностей вычислений, а также их дальнейшей модификации. Иными словами, существует необходимость программирования решения задач. Это может показаться отходом от важной цели, которая преследуется разработчиками большинства математических систем, — выполнения математических вычислений без использования традиционного программирования. Однако это не так. Выше было показано, что множество математических задач решается в системе MATLAB без программирования. С использованием языков высокого уровня для их решения потребовалось бы написать и оттестировать сотни программ. Практически невозможно предусмотреть в одной, даже самой большой и мощной, математической системе возможность решения всех задач, которые могут интересовать пользователя. Программирование в системе MatLab является эффективным средством ее расширения и адаптации к решению специфических проблем. Оно реализуется с помощью языка программирования системы MatLab. Большинство объектов этого языка, в частности все команды, операторы и функции, одновременно являются объектами входного языка общения с системой в командном режиме работы. Так что фактически мы приступили к описанию языка программирования системы MatLab с первых строк данной книги. Тема 3.5. Основы работы с математическими пакетами Страница 360 Так в чем же отличие входного языка от языка программирования? В основном — в способе фиксации создаваемых ими кодов. Сессии в командном режиме работы не сохраняются в памяти компьютера (ведение дневника не в счет). Хранятся только определения созданных в ходе их выполнения переменных и функций. А вот программы на языке программирования MatLab сохраняются в виде текстовых m -файлов. При этом могут сохраняться как целые программы в виде файлов-программ, так и отдельные программные модули — функции. Кроме того, важно, что программа может менять структуру алгоритмов вычислений в зависимости от входных данных и данных, создаваемых в ходе вычислений. С позиций программиста язык программирования системы является типичным проблемно-ориентированным языком программирования высокого уровня. Точнее говоря, это даже язык сверхвысокого уровня, содержащий сложные операторы и функции, реализация которых на обычных языках (например, Бейсике, Паскале или Си) потребовала бы много усилий и времени. К таким функциям относятся матричные функции, функции быстрого преобразования Фурье и др., а к операторам — операторы построения разнообразных графиков, генерации матриц определенного вида. Итак, программами в системе MatLab являются m -файлы текстового формата, содержащие запись программ в виде программных кодов. Язык программирования системы MatLab имеет следующие средства: ∂ данные различного типа; ∂ константы и переменные; ∂ операторы, включая операторы математических выражений; ∂ встроенные команды и функции; ∂ функции пользователя; ∂ управляющие структуры; ∂ системные операторы и функции; ∂ средства расширения языка. Тексты программ в системе MatLab пишутся на языке высокого уровня, достаточно понятном для пользователей умеренной квалификации в области программирования. Язык программирования MatLab является типичным интерпретатором. Интерпретация означает, что MatLab не создает исполняемых конечных программ. Они существуют лишь в виде m -файлов, для выполнения которых необходима среда MatLab. Однако для программ на языке MatLab созданы компиляторы, транслирующие программы MatLab в коды языков программирования С и C++. Это решает задачу создания исполняемых программ, первоначально разрабатываемых в среде MatLab. Компиляторы для системы MatLab являются вполне самостоятельными программными средствами. Начальное представление о переменных, встроенных константах и функциях уже было дано в предшествующих главах. В MatLab определены следующие основные типы данных, в общем случае представляющих собой многомерные массивы: ∂ single — числовые массивы с числами одинарной точности; ∂ double — числовые массивы с числами удвоенной точности; ∂ char — строчные массивы с элементами-символами; ∂ sparse — наследует свойства double, разреженные матрицы с элементами-числами удвоенной точности; ∂ сеll — массивы ячеек; ячейки, в свою очередь, тоже могут быть массивами; ∂ struct — массивы структур с полями, которые также могут содержать массивы; ∂ function_handle — дескрипторы функций: ∂ int32, uint32 — массивы 32-разрядных чисел со знаком и без знаков; ∂ int16,uint16 — массивы 16-разрядных целых чисел со знаком и без знаков; Тема 3.5. Основы работы с математическими пакетами Страница 361 ∂ int8, uint8 — массивы 8-разрядных целых чисел со знаками и без знаков. Каждому типу данных можно соотнести некоторые характерные для него операции, называемые методами. Поскольку в иерархии типов данных сверху находятся данные типа array , это значит, что все виды данных в MatLab являются массивами. Язык программирования системы MatLab вобрал в себя почти все средства, необходимые для реализации различных технологий программирования: ∂ процедурного; ∂ операторного; ∂ функционального; ∂ логического; ∂ структурного (модульного); ∂ объектно-ориентированного; ∂ визуально-ориентированного. В основе процедурной, операторной и функциональной технологии программирования лежат процедуры, операторы и функции, используемые как основные объекты языка. Эти типы объектов присутствуют в MatLab. Логическое программирование реализуется в MatLab с помощью логических операторов и функций. Наиболее ярко в MatLab представлены идеи структурного программирования. Подавляющее большинство функций и команд языка представляют собой вполне законченные модули, обмен данными между которыми происходит через их входные параметры, хотя возможен обмен информацией и через глобальные переменные. Программные модули оформлены в виде текстовых m -файлов, которые хранятся на диске и подключаются к программам по мере необходимости. Важно отметить, что в отличие от многих языков программирования, применение тех или иных модулей не требует предварительного объявления, а для создания и отладки самостоятельных модулей MatLab имеет все необходимые средства. Подавляющее большинство команд и функций системы MatLab поставляется в виде таких модулей. Объектно-ориентированное программирование также широко представлено в системе MatLab. Оно особенно актуально при программировании задач графики. Что качается визуально-ориентированного программирования, то в MatLab оно представлено в основном в пакете моделирования заданных блоками устройств и систем Simulink. Здесь необходимо отметить, что для языка системы MatLab различие между командами (выполняемыми при вводе с клавиатуры) и программными операторами (выполняемыми из программы) является условным. И команды, и программные операторы могут выполняться как из программы, так и в режиме прямых вычислений. В общем виде функция преобразует одни данные в другие. Для многих функций характерен возврат значений в ответ на обращение к ним с указанием списка входных параметров — аргументов. Например, говорят, что функция sin(x) в ответ на обращение к ней возвращает значение синуса аргумента х. Поэтому функцию можно использовать в арифметических выражениях, например 2*sin(x+1). Для операторов (и команд), не возвращающих значения, такое применение обычно абсурдно. Важное фактором является двойственность операторов и функций. Многие операторы имеют свои аналоги в виде функций. Так, например, оператор «+» имеет аналог в виде функции sum(). Команды, записанные в виде Command argument нередко имеют форму записи и в виде функции Command(' argument') . Указанная двойственность лежит в основе выбора между процедурным и функциональным подходами к программированию, каждый из которых имеет своих поклонников и противников и может (в той или иной мере) подходить для решения различных классов задач. При этом переход от одного подхода программирования к другому Тема 3.5. Основы работы с математическими пакетами Страница 362 возможен в пределах одной программы и происходит настолько естественно, что большинство пользователей даже не задумывается над тем, каким же подходом (или стилем) программирования они преимущественно пользуются. Имеющиеся в языке MatLab управляющие структуры: условных операторы if... else...elseif...end, case, циклы for...end и while...end, похожи на те, которые используются в языках Бейсик и Паскаль . Программирование простых задач в среде MatLab очень напоминает программирование на языке Bаsic. Во многих случаях программы на языке Bаsic можно почти дословно перевести на язык системы, учтя небольшие отличия в синтаксисе этих языков. 3.5.3.4.2. m-файлы, программ и функций Итак, мы установили, что работа в командном режиме (сессия) не является программированием. Внешним атрибутом последнего в MatLab служит задание последовательности действий по программе, записанной в виде m -файла. Для создания m - файлов может использоваться как редактор, встроенный в MatLab, так и любой текстовый редактор, поддерживающий формат ASCII. Подготовленный и записанный на диск m -файл с соответствующем именем становится частью системы, и его можно вызывать как из командной строки, так и из другого m -файла. Имеется два типа m -файлов: файлы- программы и файлы-функции. Важно, что в процессе своего создания они проходят синтаксический контроль с помощью встроенного в систему MatLab редактора/отладчика m -файлов. Файл-программа, именуемый также Script-файлом, является просто записью последовательности команд без входных и выходных параметров. Он имеет следующую структуру: -Имя_файла % Основной комментарий % Дополнительный комментарий Тело файла с любыми выражениями Файлы-программы имеют следующие особенности: ∂ они не имеют входных и выходных аргументов; ∂ работают с данными из рабочей области; ∂ в процессе выполнения не компилируются; ∂ представляют собой зафиксированную в виде файла последовательность операций, полностью аналогичную той, что используется в сессии. Основным комментарием является первая строка текстовых комментариев, а дополнительным - последующие строки комментариев. Это связано с тем, что основной комментарий выводится при выполнении команд lookfor и help имя_каталога. Полный комментарий выводится при выполнении команды help Имя_файла. В качестве примера рассмотрим файл-программу PlotSin и пример вызова ее Тема 3.5. Основы работы с математическими пакетами Страница 363 -Пример_5_3_2_1 % Построение графика синусоиды линией красного цвета % с масштабной сеткой в интервале [xmin.xmax] x=xmin:0.1:xmax; plot(x.sin(x).'r') grid on Пример 5.3.2-1 >> xmin=-1; >> xmax=1; >> Пример_5_3_2_1; >> Первые две строки файла Пример_5_3_2_1 – это комментарий, остальные – тело файла. Знак % в комментариях должен начинаться с первой позиции строки. В противном случае команда help name_файла не будет воспринимать комментарий и возвратит сообщение вида No help comments found in-name.m. Обратите внимание на то, что такой файл нельзя запустить без предварительной подготовки, сводящейся к заданию значений переменным xmin и хmах, которые используются в теле файла. Это следствие первого свойства файлов-программ - они работают с данными из рабочей области. Переменные, используемые в файлах-программах, являются глобальными, т. е. они действуют одинаково в командах сессии и внутри программного блока, которым является файл-сценарий. Поэтому заданные в сессии значения переменных используются и в теле файла. Имена файлов-программ нельзя использовать в качестве параметров функций, поскольку файлы-программы не возвращают значений. Можно сказать, что файл-программа – это простейшая программа на языке программирования MatLab . Результаты работы Примера 5.3.2-1. приведены на рис. 5.3.2-1. Рис.5.3.2-1. Результат работы файла-программы Пример_5_3_2_1 m -функция является типичным объектом языка программирования системы MatLab. Одновременно он является полноценным модулем с точки зрения структурного программирования, поскольку содержит входные и выходные параметры и использует |