Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatika.pdf
Скачиваний:
240
Добавлен:
26.03.2015
Размер:
6.48 Mб
Скачать

ОДУ или систему ОДУ. В нашем случае программа на Mathcad может иметь следующий вид (см. рис. 6.36).

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

запрограммировать

вычисление

величин

xi = a + i ×h, fi = f (xi ),

æ f

0

+ f

n

n−1

ö

 

 

I = h ×ç

 

 

+ å fi ÷ Поэтому программная единица на встроенном языке

 

 

2

 

è

 

 

 

i=1

ø

 

 

программирования Mathcad может быть, например, такой, как на рис. 6.37.

6.10. Практическое занятие № 12. Вычисления в среде Matlab

Пакет Matlab получил свое название от сокращения Matrix Laboratory, поскольку в системе Matlab определено шесть базовых типов данных, каждый из которых является мно-

272

гомерным массивом. Двумерные версии этих массивов называются матрицами, отсюда и появилось название Матричная Лаборатория.

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

Первая версия системы Matlab была написана в университете Нью-Мексико и Стан- фордском университете в конце 70-х годов XX века. Система с момента создания была ори- ентирована на использование пакетов программ, написанных на языке Fortran.

Наиболее известные области применения системы Matlab:

математика и вычисления;

разработка алгоритмов;

вычислительный эксперимент, имитационное моделирование;

научная и инженерная графика;

разработка приложений, включая графический интерфейс пользователя. Matlab – это интерактивная система, основным объектом которой является массив,

для которого не требуется указывать размерность явно. Другая сильная сторона системы за- ключается в том, что на языке Matlab могут быть написаны программы для многократного использования. Эти программы оформляются в виде так называемых M-файлов, что приво- дит к концепции пакетов прикладных программ (ППП).

В системе Matlab есть специальное средство ППП – The Matlab Notebook – динамиче- ский интерфейс системы Matlab с текстовым редактором Microsoft Word. Он позволяет соз- давать интерактивные текстовые документы, которые содержат исполняемые команды сис- темы Matlab и графический вывод. Технология, реализованная в ППП Matlab Notebook – это динамический обмен данными между системой Matlab и редактором Word.

Операционная среда системы Matlab – это множество интерфейсов, которые поддер- живают связь этой системы с внешним миром. Реализуются эти интерфейсы через команд- ное окно, инструментальную панель, системы просмотра рабочей области и путей доступа редактор-отладчик M-файлов, специальное меню и т. п.

1. Командное окно и инструментальная панель. Командное окно изображено на рис. 6.38. Его строение анало- гично программ-

ным продуктам

Windows - при-

ложений. Основ- ное меню и рас-

положенная ниже его инструмен-

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

резать, ставить, так и специальные: вызвать окно запуска Script-файла или М- файла, вызвать средство просмотра рабочей области или путей доступа и т. п.

В состав системы Matlab входит редактор-отладчик М-файлов (M-file Editor-Debugger), который может быть вызван из командной строки командой edit. Он имеет свою инструментальную панель.

273

2.Рабочая область системы Matlab – это область памяти, в которой размещены переменные системы. Содержимое этой области можно просмотреть из ко- мандной строки с помощью команд who и whos. Команда who выводит только имена переменных, а команда whos – информацию о размерах массивов и типе переменной. Специальное средство просмотра Workspace Browser обеспечива- ет представление команды whos в виде графического интерфейса, в котором можно удалять и переименовывать массивы.

Команды save и load позволяют в любой момент сохранить содержимое ра- бочей области или загрузить новые данные в процессе сеанса работы. С помо- щью этих команд можно также осуществлять экспорт и импорт ASCII-файлов.

Команда save позволяет сохранить содержимое рабочей области в двоич- ном Mat-файле, который можно в дальнейшем вызвать командой load. Для то- го, чтобы форматами файлов в команде save следует в дополнении к имени файла и списку переменных использовать следующие флаги:

- mat – двоичный Mat-файл;

- ascii – ASCII – формат (8 цифр);

- ascii – double – ASCII формат (16 цифр);

- append – double – tabs – формат с разделителями и метками табуляции;

- append – добавить к существующему Mat- файлу.

В системе Matlab имеется возможность вывода на терминал списка путей доступа. Для этого используется функцию path.

3.Использование памяти. Система Matlab требует для хранения каждой матрицы непрерывной области памяти. Ели отсутствует фрагмент памяти, достаточный для размещения матрицы, то возникает ошибка out of memory, хотя общий объём свободной памяти может быть большим. Это связано с фрагментацией памяти в процессе её выделения. Чтобы ликвидировать фрагментацию памяти, следует воспользоваться командой pack; другой способ разместить массивы больших размеров в оперативной памяти заранее в начале сеанса работы. Сис- тема Matlab использует для выделения динамической памяти стандартные функции malloc и free языка С. Чтобы поддержать быстродействие системы, утилиты malloc и free не возвращают использованную память операционной системе. Эти подпрограммы исходят из предположения, что если большой объём памяти потребовался один раз, то в нём возникнет необходимость снова.

Вся память возвращается только по завершению работы системы Matlab.

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

Формат команды обычно имеет вид <имя_команды> <опция1> <опция2>… и не ис- пользует скобок, но может быть представлена и как функция <имя_команды> (‘<опция1>’, ‘<опция2>’,…). Формат функции обычно использует скобки и имеет вид [out1, out2,…]=<имя_функции> (‘arg1’, ‘arg2’,…), но может быть представлен в виде команды в случае отсутствия выходных аргументов <имя_функции> arg1 arg2…

Самым распространённым вычислительным оператором является оператор присваи- вания. Он позволяет реализовывать в командной строке математический калькулятор для выполнения инженерных расчётов. Например, можно задать элементы массива

274

или вычислить степень этой же матрицы

Приведённые примеры соответствуют операторам с явным присваиванием. Однако в системе Matlab существуют и операторы с неявным присваиванием. Если в операторе при- сваивания отсутствует левая часть, то система Matlab автоматически создаёт переменную с именем ans, которая сохраняет своё значение до вызова следующего оператора с неявным присваиванием. Например, функция factor(n) возвращает все простые множители целого числа n.

Для того чтобы ввести несколько операторов в одной строке, следует использовать два типа разделителей: запятую (,) и точку с запятой (;). Последний разделитель при этом подавляет вывод результата на экран дисплея. Если оператор не удаётся разместить одной строке, его можно продолжить в следующей, если в конце первой строки указать знак про- должения (…) в виде трёх последовательных точек.

При вводе операторов в командной строке можно пользоваться рядом очень удобных приёмов, например, возможностью частичного ввода имени переменной или оператора и ав- томатического завершения ввода с помощью клавиши табуляции <Tab>, а также возможно- стью движения по командной строке и окну в целом с помощью клавиш перемещения.

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

Для редактирования командной строки можно применять следующие клавиши стре- лок и команды (комбинации клавиш) (см. табл. 6.2).

 

 

Таблица 6.2

 

 

 

Клавиша

Команда

Результат действия

<−>

Ctrl+P

Вызов предыдущей командной строки

<↓>

Ctrl+N

Вызов следующей командной строки после применения

 

 

клавиши <−>

<→>

Ctrl+F

Перемещение курсора на один символ вперёд

<←>

Ctrl+B

Перемещение курсора на один символ назад

 

Ctrl+→

Перемещение курсора на один слово вперёд

275

 

 

Продолжение таблицы 6.2

 

 

 

 

Ctrl+←

Перемещение курсора на один слово назад

<Home>

Ctrl+A

Перемещение курсора в начало командной строки

<End>

Ctrl+E

Перемещение курсора в конец командной строки

 

Ctrl+Home

Перемещение курсора в первую строку командного окна

 

Ctrl+End

Перемещение курсора в последнюю строку командного

 

 

окна

<Esc>

Ctrl+U

Удаление командной строки

<Delete>

Ctrl+D

Удаление символа в командной строке в позиции справа от

 

 

курсора

<Backspace>

Ctrl+H

Удаление символа в командной строке в позиции слева от

 

 

курсора

6.10.2. Программирование в система Matlab. Язык программирования Matlab не яв-

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

Существуют два типа М-файлов: М-сценарии и М-функции со следующими характе- ристиками (см. табл. 6.3).

 

Таблица 6.3

 

 

М-сценарий

М-функция

Не допускает входных и выходных

Допускает входные и выходные аргу-

аргументов

менты

Оперирует только данными из рабо-

Внутренние переменные являются

чей области

локальными по отношению к функ-

 

ции

Автоматизирует алгоритм, выпол-

Входит в личную библиотеку функ-

няемый много раз

ций пользователя

Сценарии являются самым простым типом М-файла. У них нет входных и выходных параметров. Они полезны для автоматизации последовательности Matlab-команд, которые должны были бы многократно вводиться из командной строки. Сценарии оперируют данны-

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

верше-

ше-

ния

сце-

нария

и

могут

 

быть

ис-

пользо

зо-

ваны

для

даль-

 

ней-

ших

вычис-

чис-

лений.

 

Сле-

дует

пом-

 

нить,

что

имена

М-

функ-

ций

276

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

Структура сценария показана на рис. 6.39. Сценарий открывается заголовком Script. Затем следует строка комментария. Комментарии начинаются с символа % и могут присут- ствовать в сценарии в виде отдельной строки или следовать за вызовом любого оператора. Дальнейшее содержимое сценариев состоит из набора любых операторов языка Matlab.

Сценарий, представленный на рис. 6.39 вычисляет и строит реализации случайного процесса на заданном интервале (см. рис. 6.40).

Когда выполнение сценария будет завершено, все переменные, которые создаст сце- нарий, сохранятся в рабочей области. Для того чтобы их увидеть, можно применить команду whos (см. рис. 6.41).

277

Ввод команды Proz.m в командной строке системы Matlab вызывает выполнение опе- раторов этого сценария.

М- файл, оформленный в виде функции, состоит из следующих компонентов (см. рис. 6.42). Строка определения функции имя, количество и порядок следования входных и выходных параметров. Первая строка комментария определяет назначение функ- ции. Она выводится на экран с помощью команды lookfor или help <имя каталога>. Далее следует тело функции

программный код, который реализует вычисления и присваивает значение выходным аргу- ментам. Здесь f - выходной аргумент, function – ключевое слово, n - входной аргумент. Ес-

ли функция имеет более одного выходного аргумента, список выходных аргументов поме- щается в квадратные скобки. Для отделения аргументов во входном и выходном списках применяются запятые function[x,y,z]=sphere(theta,phi,rho).

Тело функции содержит код языка Matlab, который выполняет вычисления и при- сваивает значения выходным параметрам. Операторы в теле функции могут состоять из вы- зовов функций, программных конструкций для управления потоком команд, интерактивного ввода-вывода, вычислений, присваиваний, комментариев и пустых строк.

М-файл создаётся текстовым редактором, который запускается командами Файл Создать М-файл (File – New –M-file). Имена файлов текущего каталога выводятся на экран командой what, текст М-файла выводится на экран командой type <имя>.

При вызове М-функции система Matlab транслирует функцию в псевдокод и загружа- ет в память. Это позволяет избежать повторного синтаксического анализа. Псевдокод остаёт- ся в памяти до завершения сеанса работы. Можно сохранить откомпилированные М- функции или М-сценарии для последующих сеансов, используя команду pcode <имя>. Ко- манда сохраняет псевдокод в файле с именем <имя>.p. Это полезно, когда пользователь хо- чет скрыть алгоритм, реализованный в М-файле.

6.10.3. Типы переменных и операторы системы Matlab. Переменные не требуют объявлений, их имена начинаются с буквы, верхний и нижний регистр различаются. Имя не должно содержать более 31 символа. Переменные могут быть локальными и глобальными. Для работы с глобальными переменными необходимо:

·объявить её глобальной в каждой М-функции, в которой она необходима;

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

·в рабочей области переменная объявляется глобальной из рабочей строки. Система Matlab имеет следующие специальные переменные (см. табл. 6.4).

 

Таблица 6.4

 

 

 

 

 

 

 

Переменная

Назначение

 

 

 

 

 

ans

Последний результат; если выходная переменная не указана, то Matlab ис-

 

пользует переменную ans

 

 

 

 

 

eps

Точность вычислений с плавающей точкой, eps » 2.22×10−16

 

 

 

 

 

realmax

Максимальное число с плавающей точкой realmax »1.798×10308

 

 

 

 

 

realmin

Минимальное число с плавающей точкой realmin » 2.23×10−308

 

 

 

 

 

pi

p: pi = 3.141592653589793

 

 

 

 

 

i, j

Специальные обозначения для мнимой единицы

 

 

 

 

 

inf

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

 

 

 

NaN

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

0

 

или

inf

 

 

0

 

inf

 

 

 

 

278

 

Продолжение таблицы 6.4

 

 

computer

Переменная для обозначения типа используемого компьютера, для PC –

 

PCWIN

flops

Количество операций с плавающей точкой

version

Номер используемой версии системы Matlab

Все операторы языка Matlab делятся на три категории:

·арифметические операторы;

·операторы отношения;

·логические операторы.

Арифметические операторы (по старшинству): 1. поэлементное транспонирование (.’); 2. поэлементное возведение в степень (.^); 3. эрмитово транспонирование (’); 4. возведение в степень (^); 5. умножение массивов (.*);

6. правое деление массивов (./);

7. левое деление массивов (.\);

8. умножение матриц (*);

9. сложение, вычитание (+), (-);

10. формирование массивов (:).

Отличие арифметических выражений, применяемых в языке Matlab, от таких же вы-

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

Операция транспонирования элементов массива это замена его строк столбцами. Символ операции (.’), который наличием точки (.) указывает, что это поэлементная опера- ция. Формула этой операции имеет вид

A./ = [a(i, j)]./ = [a( j,i)]

(6.10.1)

Поэлементное возведение в степень для массивов (.^) определяется как

A. B = [a(i, j) b(i, j)]

(6.10.2)

Операция эрмитова транспонирования связана не только с переменой местами строк и столбцов, но и с операцией комплексного сопряжения, т. е.

A/ = [a(i, j)]/ = [a( j,i) ]

(6.10.3)

Если элементы матрицы A действительные числа, то a/ = A./ .

Для случая, когда n целое число, возведение матрицы в степень соответствует умно-

жению матрицы самой на себя n раз

 

A n = A× A×...× A

(6.10.4)

14243

 

n раз

Если степень n целое и отрицательное число, то это соответствует умножению обратной матрицы самой на себя n раз

A (- n) = A−1 × A−1 ×...× A−1

(6.10.5)

1442443

 

n раз

Операция произведения массивов выполняется поэлементно и удовлетворяет сле-

дующему соотношению

A.* B = [a(i, j)×b(i, j)],

(6.10.6)

причём исходные массивы должны иметь один и тот же размер.

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

279

ì A./ B = [a(i, j)/b(i, j)],

 

(6.10.7)

í

 

îA. \ B = [b(i, j)/ a(i, j)].

 

 

Умножение матриц стандартная операция линейной алгебры выполняется в системе

Matlab обычным образом

].

 

k

 

Cn×m = An×k × Bk×m = åaip ×bpj = [A(i,:)× B(:, j)]= [cij

(6.10.8)

p=1

Наконец, операция (:) применяется для формирования векторов, выделения строк, столбцов, подблоков массивов, например,

Операторы отношения:

1.< меньше;

2.<= меньше или равно;

3.> больше;

4.>= больше или равно;

5.== равно тождественно;

6.~= не рано.

Операторы отношения всегда выполняются поэлементно, например,

Операторы отношения часто применяются в теле операторов управления if, for, while, switch для изменения последовательности выполнения операторов программы.

Логические операторы: & - и, | - или, ~ - не. Эти операторы предназначены для работы с данными, которые принимают только значения 0 или 1. Логическое выражение a&b истин- но, если оба сомножителя отличны от нуля, например,

Логическое выражение a|b ложно, если оба слагаемых равны нулю, например,

280

Одноместный логический оператор а реализует операцию логическое НЕТ, напри-

мер,

Имеется, кроме того, логическая функция xor(a,b) – исключительное ИЛИ. Выраже- ние, содержащее исключительное или, истинно, если один из операторов имеет значение true, т. е. 1, а другой false, т. е. 0. Для числовых операторов функция возвращает 1, если один из операндов не равен нулю, а другой равен нулю.

В языке Matlab зарезервированы 17 ключевых слов, которые используются при фор-

мировании операторов: break, case, catch, continue, else, elseif, end, for, function, global, if, otherwise, persistent, return, switch, try, while. Эти слова можно использовать только по прямому назначению при построении конструкций языка. Для иных целей их применять нельзя. Для получения справки о зарезервированных в системе ключевых словах предназначена М- функция iskeyword. Оператор iskeyword возвращает список всех ключевых слов языка Matlab, а функция iskeyword (‘строка’) возвращает 1, если строкасовпадает с зарезервиро- ванным ключевым словом, например,

6.10.4. Ввод и вывод информации. Функция input выводит на экран запрос и ждёт ответа пользователя. Её синтаксис выглядит следующим образом: input(‘запрос’). Эта функ- ция возвращает введённое с клавиатуры значение. Она может возвращать и строковые выра- жения. Для этого необходимо добавить строку ‘s’ к списку параметров функции: name= input(‘введите адрес:’,’s’).

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

281

нибудь клавиша. Чтобы реализовать паузу в n секунд, необходимо выполнить оператор pause(n).

Результат выполнения любого оператора будет выводиться в командное окно, ели этот оператор завершается разделителем (,) или не завершается никаким разделителем. Если информация, выводимая на экран, занимает несколько экранных страниц, то управление та- ким выводом можно реализовать с помощью оператора more on. По умолчанию постранич- ный вывод подавлен.

6.10.5. Пакет прикладных программ символьной математики (Symbolic Mathematics Toolbox). Пакет прикладных программ символьной математики реализует в системе Matlab не только символьные вычисления, но и вычисления с переменной точностью. В со- став пакета включено ядро системы символьных вычислений Maple V. Пакет поддерживает реализованные в виде М-файлов более 100 символьных и числовых операций.

1.Базовые операции. sym – сформировать символьную переменную или объект. Функция x = sym(' x') - создаёт символьную переменную x . syms – сформиро-

вать группу символьных объектов. syms x y z. Список базовых операций до- вольно многочисленен, их полное описание можно найти в справочниках по системе Matlab.

2.Арифметика переменной точности. Сама система Matlab выполняет вычисле-

ния только в арифметике с плавающей точкой. Относительная точность ариф- метических операций составляет около 16 десятичных цифр. По мере увеличе- ния числа цифр возрастает время вычислений и требуемая память. По умолча- нию в пакете Symboli Math Toolbox точность представления составляет 32 де- сятичные цифры.

Можно установить количество значащих цифр результата с помощью функции digits. d=digits – возвращает текущую установку значащих цифр. По умолча- нию она равна 32. Функция digits(d) устанавливает текущее количесто знача- щих цифр равное d. vpa – вычислить в арифметике с переменной точностью. Функция R=vpa(A) вычисляет элементы массива А с текущим количеством значащих цифр. Функции R=vpa(A,d) и vpa A d вычисляют элементы массива

Ас количеством значащих цифр, равным d.

3.Упрощение математических выражений. В системе Matlab для этого служат почти те же операторы, что и в системе Mathcad. Синтаксис: R=simplify(S). Функция simplify упрощает каждый элемент символьного массива S. Напри- мер,

282

Раскрыть символьное выражение. Функция R=expand(S) позволяет раскрыть каждый элемент символьного массива S. Например,

4.Математический анализ. Предел функции одного переменного находит функ- ция limit. Синтаксис: limit(F,x,a) – определяет предел функции F при x→a.

Функция diff(S,n,’x’) – дифференцирует n раз символьное выражение S по пере- менной, указанной в ‘x’. Например,

Функция R=int(S,x) – вычисляет неопределённый интеграл от S по переменной x.

Функция R=symsum(S,n,a,b) выполняет суммирование по индексу n в пределах

k! = ex .

от a до b. Например, вычислим сумму ряда åxk

k =0

 

283

Разложение в ряд Тейлора в точке а осуществляет функция R=taylor(F,n,x,a). Разложение происходит по степеням переменной х до n-1-го порядка включи- тельно. При обращении к этой функции допустима любая комбинация входных аргументов. Например,

6.10.6. Символьное решение уравнений и систем уравнений. Функция y = solve(eq, x) решает уравнение относительно переменной x. Уравнение задаётся в виде

символьного или строкового выражения, предполагаемый вид уравнения eq=0.

 

 

 

ì eq = 0,

Функция y = solve(eq1,eq2,...,eqn, x1, x2,...,xn) решает систему уравнений

ï

... от-

í

 

ï

 

 

îeqn = 0

носительно переменных x1, x2,...,xn . Левую часть и аргументы в обращении можно опус- кать.

Результаты вычислений представляются тремя разными способами:

·для уравнения с одним выходным аргументом решение получается в виде од- номерного или многомерного массива значений;

·для системы уравнений с одним выходным аргументом решение возвращается в виде массива записей;

·для системы n уравнений с n выходными аргументами решение возвращается

упорядоченными по именам переменных списками в алфавитном порядке. Например,

284

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

Функция X = B \ A находит решение систем уравнений вида A× X = B , где A - пря- моугольная матрица размером n × m и B - матрица размером m ´ k . Функция X = B / A на- ходит решение системы уравнений вида X × A = B , где A - прямоугольная матрица размером m × n и B - матрица размером n ´k . При решении используются разные алгоритмы в зави- симости от структуры матрицы A .

Например, для системы A× X = B или в скалярной форме

ì 9.50× x1 + 0.42× x2 + 0.51× x3 + 0.60× x4 = 9.7191, ïï0.28× x1 + 8.60× x2 + 0.46× x3 + 0.55× x4 = 10.5000, íï0.22 × x1 + 0.32× x2 + 7.70× x3 + 0.50× x4 =10.9195, ïî0.17 × x1 + 0.26× x2 + 0.35× x3 + 6.80× x4 = 10.9775.

Для системы X × A = B

6.10.7. Интегрирование обыкновенных дифференциальных уравнений и систем дифференциальных уравнений. Система Matlab может решать дифференциальные уравне- ния и системы дифференциальных уравнений символьно. Функция y=dsolve(‘eq1’, ‘eq2’,…, ‘cond1’, ‘cond2’, , ‘x’) находит аналитическое решение обыкновенных дифференциальных уравнений, заданных уравнениями eq1, eq2,… относительно независимой переменной х с граничными или начальными условиями, определяемыми переменными cond1, cond2,…. По умолчанию в качестве независимой переменной принимается время t. Символ D обозначает

дифференцирование по независимой переменной, т. е. d dt . Символ D, за которым следует цифра, обозначает повторное дифференцирование, т. е. d 2dt2 . Например,

285

Задача Коши решается с помощью функций ode23 и ode45, реализующих метод Рун- ге-Кутты соответственно 2-го и 3-го или 4-го и 5-го порядка. Обращение к ним имеет вид: [t,X]=ode23(‘<имя_функции>’, t0, tf, x0) или [t,X]=ode45(‘<имя_функции>’, t0, tf, x0). Эти функции имеют следующие параметры:

·‘<имя_функции>’ – строковая переменна, являющаяся именем М-файла, в ко- тором вычисляются правые части уравнения или системы ОДУ;

·t0 – начальное значение аргумента (времени);

·tf – конечное значение времени;

·x0 – начальное условие или вектор начальных условий.

Выходными параметрами являются:

·t – текущее время;

·X – массив, где каждый столбец соответствует одной переменной.

В качестве примера

 

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

y/ = 1- sin(0.75× x - y)+

1.75

,

y(0) = 0 . Первый шаг процедуры интегрирования это созда-

x +1

 

 

 

ние М-файла для вычисления правой части исходного дифференциального уравнения. Дадим этому файлу имя urav.

Чтобы проинтегрировать уравнение, определяемое функцией urav в интервале x Î[0,1], вызовем функцию ode23:

286

6.10.8. Графические средства пакета Matlab. Функция plot(y) строит график одно-

мерного массива y в зависимости от номера элемента. plot(x, y) соответствует построению обычной функции, т. е. в этом случае одномерный массив x соответствует значениям аргу- мента, а одномерный массив y – значениям функции. Функция plot(x, y, s) позволяет выде- лить график функции, указав способ отображения линии, её цвет и т. п. С помощью строко- вой переменной s, например, s=’-*y’: тип линии непрерывный, тип точки звёздочка, цвет линии жёлтый. Функция plot(x1, y1, s1, x2, y2, s2,…) позволяет объединить на одном гра- фике несколько функций y1(x1), y2(x2) и т. д.

Функция ezplot(y) строит график символьной функции y от одной переменной. Пере- менная должна быть объявлена символьной с помощью команды syms.

Функция polar(phi, rho) или polar(phi, rho, s) строит графики плоских кривых в поляр- ных координатах. Здесь phi – полярный угол, а rho – полярный радиус, параметр s имеет тот же смысл, что и ранее. Например,

Графики соответствующих функций приведены на рис. 6.43.

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

В системе Matlab имеется несколько функций для построения трёхмерных графиков. Значения элементов числового массива z рассматриваются как аппликаты точек над плоско- стью, определяемой координатами x и y.

Функции plot3(x, y, z) и plot3(x, y, z, s) являются трёхмерными аналогами функции plot. Функция [x,y]=meshgrid(x, y) задаёт сетку на плоскости XOY в виде двумерных масси- вов. Например,

287

Рисунок поверхности z = x ×ex2 y2 изображён на рис. 6.44.

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

Например, команда funtool вызывает специальный графический калькулятор, выпол- няющий манипуляции с двумя функциями f (x) и g(x) от одной переменной (по умолчанию это функции y = x и y = 1). После выполнения той или иной операции заменяется функция f (x).

Калькулятор включает три графических окна (см. рис. 6.45), два из которых предна- значены для вывода графиков, третье для управления. В третьем окне имеются четыре строки, в которые можно записывать функции f (x) и g(x), интервал изменения x , а также задавать значение параметра a . При внесении изменений в текстовые поля графики функций

f (x) и g(x) перерисовываются.

Команда funtool выводит также панель управляющих кнопок, которые

позволяют выполнить серию операций над функциями f (x) и g(x):

Insert –

поместить

текущую

функцию в список;

 

Cycle –

выполнить

текущую

функцию из списка;

 

Delete – удалить активную функ- цию из списка;

Reset – перевести установки гра-

фического калькулятора в начальное положение;

Help – вывести текст описания команды funtool;

Demo – запустить демонстраци- онный пример;

Close – завершить работу с каль- кулятором.

288

6.10.9. Матричная алгебра. Матрицы являются основным объектом Matlab и широко используются при решении обыкновенных дифференциальных уравнений, дифференциаль- ных уравнений в частных производных, решении оптимизационных задач, задач линейной алгебры и т. п. Рассмотрим несколько функций, позволяющих получить основные характе- ристики матриц.

1.Определитель матрицы. Функция R = det(A) вычисляет определитель сим- вольной или числовой матрицы. Например,

2.Формирование единичной матрицы. Функция A = eye(n,m) формирует еди-

ничную матрицу размера n × m с единицами по диагонали.

3.Ранг целочисленной матрицы. Функция r = rank(A) возвращает ранг символь- ной или целочисленной матрицы.

4.Нормы векторов и матриц. Функция n = norm(x, p) вычисляет p - норму век- тора x , определяемую следующим образом: x p = sum(abs(x).^ p)^ 1 p . Функ-

ция n = norm(A, p) вычисляет p - норму матрицы A для значений p , равных

289

1, 2, inf. При этом norm(A,1) = max(sum(abs(A))), norm(A,2) = σmax (A), norm(A,inf ) = max(sum(abs(A/ ))). Например,

5.Число обусловленности матрицы. Число обусловленности матрицы по отно- шению к операции обращения это мера относительной погрешности, харак- теризующая точность операции обращения матрицы или решения системы ли- нейных уравнений. Функция k = cond(A) вычисляет число обусловленности,

при этом k = (A−1 ) / (A) , где (A) - норма матрицы погрешностей исход- ных данных.

6.Обращение символьной или целочисленной матрицы. Функция B = inv(A) фор-

мирует матрицу B , обратную матрице A .

290

7.Собственные значения и собственные векторы матриц. Функция d = eig(A)

вычисляет собственные значения матрицы A , функция [V , D]= eig(A) возвра-

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

щим образом: [V , D]= eig(A/ ). Функции d = eig(vpa(A)) и [V , D]= eig(vpa(A))

вычисляют числовые значения собственных значений и собственных векторов в арифметике переменной точности. Например,

291

Задание 1

1. Упростить следующие математические выражения:

a)

cos(4a)+1

;

 

 

 

 

ctg(a)− tg(a)

 

 

 

 

 

b)

(a + b)2 - 4ab

+

b2 - a2

:

a + b

.

a2 - b2

2ab + 2b2 - 3a - 3b

 

 

 

 

2b - 3

2. Выполнить необходимые математические действия:

a)

lim

 

x3

-1

;

 

 

 

 

 

x

-1

 

 

 

 

 

x→1

 

 

 

 

 

 

 

 

æ

 

 

 

 

 

ö

 

 

 

 

 

 

b)

lim

x + x -

 

ç

x ÷ ;

 

x→∞è

 

 

 

 

ø

c)y = ln(2x3 + 3x2 ), dydx = ? ;

d) F =

éex2

x

xln(x ) ù,

dF

= ? ;

 

 

 

 

ê

sin(x)

ú

dx

 

 

ë

û

 

e)F = [a(t - sin(t)) a(1- cos(t))], ddt2 F2 = ? ;

f)ò x cos(x2 )dx ;

g)ò x ln(x)dx ;

h)ò x5 dx- x2 ;

 

2n +1

 

 

i)

ån=3

n(n2 -1)

;

 

 

1

 

 

 

j)

å(-1)n

 

;

 

n

 

 

n=1

 

 

 

k)получить многочлен Тейлора третьей степени для функции y = x x-1 в

точке x0 = 2 ;

l) получить многочлен Тейлора третьей степени для функции

y= arcsin(x) в точке x0 = 0 ;

m)получить многочлен Тейлора третьей степени для функции y = 1x в

точке x0 =1.

3. Найти det(A), rank(A), A 2 , число обусловленности

 

æ1

2

 

ç

0

1

числа и собственные векторы матрицы, если

ç

A = ç

3

0

 

ç

 

ç

2

3

 

è

4. Решить систему линейных и нелинейных уравнений:

ì0.04x - 0.08y + 4z = 20,

ì

x2 - y2 = 5,

ï

4x + 0.24y - 0.08z = 8,

í

í

- xy + y2 = 7.

ï

0.09x + 3y - 0.15z = 9,

îx2

î

 

 

A , A−1 , собственные

3

0

ö

2

3

÷

÷

1

2

÷ .

÷

0

1

÷

ø

292

5. Построить графики следующих функций:

a)y = x2 +1 ; x

b)y = x +1+ sin(x -1);

=æ 1 ö

c)y arctgç ÷ ;

è x - 4 ø

d)z = x y - y x ;

e)z = (x2 + y2 )e(x2 + y2 )−1 .

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

6.Решить задачу Коши для следующей системы дифференциальных уравнений первого порядка на отрезке x Î[-1,3].

ì

y1/

= sin(y1 )×cos3 (y3 ),

ì y1

(-1) = 0.5,

ïy/ = x ×cos(y )×cos(y

3

),

ïy

2

(-1)= 0.5,

í

2

1

 

í

 

ï

1

= sin(x - y2 - y3 ),

 

ï

 

(-1)= 0.5.

î

y3

 

îy3

7.Составить программы вычисления оценок математического ожидания и дис- персии по имеющейся выборке наблюдений x1, x2 ,..., xn .

Технология работы

1.Для упрощения символьных математических выражений служит встроенная функция simplify. Её синтаксис очень прост: R = simplify (S), где S - упрощае-

мое символьное выражение. Примеры п. 1 решаются следующим образом: a)

b)

Здесь cot – котангенс, tan – тангенс принятые обозначения этих тригономет- рических функций в пакете Matlab.

2.Самые распространённые действия и операции математического анализа вы- полняются строенными функциями limit, diff, int, symsum и taylor. Например,

а)

293

b)

c)

d)

e)

f)

g)

,

h)

i)

294

j)

k)

l)

m)

3.Алгебраические задачи, связанные с матрицами, объединяются в раздел мате- матики, получивший название линейной алгебры. Самые простые из них ре- шаются с помощью функций det, rank, norm, cond, inv, eig. Далее приведены примеры решения задач п. 3 по порядку следования.

295

4.При решении систем линейных уравнений вида A× X = b с квадратной невы- рожденной матрицей A лучше пользоваться формулой X = A−1 ×b, чем ис- пользовать, описанные в п. 6.10.6 решатели систем линейных уравнений. В

нашем случае

Нелинейные системы (как и линейные) решаются с использованием функции solve. Например,

296

5.Для построения графиков плоских кривых воспользуемся функцией plot, син- таксис которой описан в п. 6.10.8. Зададим непрерывный тип линии, точкой или звёздочкой обозначим тип точки, а цвет кривой зададим красным, зелёным или синим. Таким образом, строковая переменная s будет иметь вид: s=’-.r’, s=’-*g’ или s=’-*b’.

Интервал отображения аргумента задаётся стандартным способом x=a:h:b, где a – левый конец интервала, h – шаг изменения, b – правый конец интервала.

Функция [X,Y]=meshgrid(x,y) задаёт сетку на плоскости XOY в виде мас- сивов X и Y. Масштабирование осей и вывод на экран осуществляется функ- цией axis([xmin xmax ymin ymax]), команда grid on наносит координатную сет- ку на текущие оси, grid off удаляет координатную сетку, а grid выполняет роль переключателя с одной функции на другую.

Аналогично команда hold on включает режим сохранения текущего гра- фика, так что последующие команды приведут к добавлению новых графиков в графическом окне. Команда hold off выключает режим сохранения графика, а hold обеспечивает переключение от одного режима к другому.

Заголовки и подписи для двух- и трёхмерных графиков размещают функ-

ции title(‘<текст>’), xlabel(‘<текст>’), ylabel(‘<текст>’) и zlabel(‘<текст>’). По-

вторное использование любой функции (команды) приводит к замене старого текста новым. Команда text(x, y, ’<текст>’) помещает в заданной точке (x, y) двумерного графика текст, указанный в качестве третьего аргумента в тексто- вой переменной.

Наконец, функция meshc(X, Y, Z) в дополнение к трёхмерным поверхно- стям строит проекции линий постоянного уровня.

Графики функций п. 5 строятся следующим образом.

График этой функции изо- бражён на рис. 6.46.

Графики этих функций изображены в одной системе координат (см. рис. 6.47). Наконец, построим два графика функции трёх переменных.

297

Этот график построен с помощью функции surf(X,Y,Z), выводящей на экран сетчатую поверхность для значений массива Z, определённых на множестве значений массивов X и Y (см. рис. 6.48).

298

При построении последнего графика использована функция colormap(С). Она устанавливает палитру цветов согласно матрице С. Аргумент hsv (hue- saturation-value color map) устанавливает палитру радуги.

6.Для решения задачи Коши предложенной системы уравнений создадим снача- ла М-файл, вычисляющий правые части системы. Поскольку М-файл является обычным текстовым файлом, для его создания используется текстовый редак- тор. Выполним команды Файл Создать М-файл и в окне текстового редак- тора наберём следующий текст:

Далее сохраним этот файл обычным образом командами Файл Сохранить как – zk.m. Для численного интегрирования системы ОДУ на интервале x [−1, 3] применим функцию ode23:

Функция gtext позволяет вставлять надписи на графики построенных функций. Для этого нужно подвести курсор к нужному месту графика. Появится пере- крестие нитей, проходящее через весь график. Щелчок левой кнопки мыши вставляет в перекрестие текст, содержащийся в строковой величине s функции

299

gtext(‘s’). В нашем случае это надписи, определяющие номера проинтегриро- ванных функций: y1, y2 и y3 (см. рис. 6.50).

7.Оформим требуемые программы в виде двух М-функций. Если дана выборка наблюдений x1, x2 ,...xn , то оценка математического ожидания этой выборки

ˆ

1

n

рассчитывается по среднему арифметическому, т. е. θ = mx =

 

åxi , а для

 

n i=1

оценки дисперсии в вычислительной практике применяются две оценки: сме-

*

~

 

*

 

1

n

 

2

~

1

n

2

 

щённая Dx

и несмещённая Dx

:

Dx

=

 

å(xi

mx )

 

, Dx =

 

å(xi mx )

 

.

 

 

 

 

 

 

 

 

 

n i=1

 

 

 

n 1 i=1

 

 

Как видно,

формулы для вычисления mx

~

однотипны, следовательно, бу-

и Dx

дут похожи и их М-функции.

М-функции это М-файлы, допускающие входные и выходные параметры. Кроме того, М-функции работают с переменными в своей рабочей области, от- личной от рабочей области системы Matlab.

Основные определения М-сценариев и М-функций описаны в п. 6.10.2. В наших двух функциях необходимо использовать оператор цикла. В системе Matlab, как и в системе Mathcad, можно применять цикл с определённым чис- лом повторений типа for и цикл с неопределённым числом повторений типа while. Кроме того, используются условные операторы if, операторы прерыва- ния цикла break, операторы формирования сообщений об ошибке и т. п. Пол- ный список команд, функций и операторов системы Matlab можно найти в справочных пособиях по системе.

Создадим наши функции вычисления средней и дисперсии по приведённым формулам. Для этого выполним команды Файл Создать М-файл. Откроется окно текстового редактора, в котором следует последовательно набрать сле- дующий текст:

После этого сохраним текст введённой программы в М-файле командами Файл Сохранить как – sred.m. Аналогичные действия надо проделать с функ-

цией disper:

300

Для запуска и проверки работы составленных программ выполним сле- дующие операции:

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

301

Соседние файлы в предмете Информатика