Всё для Учёбы — студенческий файлообменник
1 монета
doc

Студенческий документ № 027817 из ИССО

ФЕДЕРАЛЬНОЕ АГЕНТСТВО

ПО ОБРАЗОВАНИЮ

ОРЛОВСКИЙ ГОСУДАРСТВЕННЫЙ

ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

ФАКУЛЬТЕТ ЭЛЕКТРОНИКИ

И ПРИБОРОСТРОЕНИЯ

Кафедра "Проектирование и технология электронных и вычислительных систем"

Колоколов Ю.В., Моновская А.В.

Методические указания и задания

по выполнению лабораторных работ

Дисциплина - "Исследование сложных электронных систем"

Специальности - 220500 (210202) "Проектирование и технология электронных и вычислительных средств", 220008 (210201) "Проектирование и технология радиоэлектронных средств"

Печатается по решению редакционно-

издательского совета ОрелГТУ

Орел 2005

Авторы д. т. н., проф. Колоколов Ю.В.

к. т. н., доц. Моновская А.В.

Рецензент д. т. н., проф. каф. ПТЭиВС Суздальцев А.И.

Настоящие методические указания предназначены для выполнения лабораторных работ по курсу "Исследование сложных электронных систем" студентами специальностей 220500 и 220008 очной формы обучения. Лабораторные работы нацелены на формирование у студентов базовых знаний о проведении вычислительного эксперимента в интерактивной системе MatLAB, ориентированной на проведение инженерных и научных расчетов.

Методические указания содержат теоретическую часть, контрольные вопросы и практические задания.

Редактор

Технический редактор

Орловский государственный технический университет

Лицензия ИД №00670 от 05.01.2000 г.

Подписано к печати. Формат 60x84 1/16.

Печать офсетная. Уч. изд. л. Усл. печ. л. . Тираж экз.

Заказ № Отпечатано с готового оригинал-макета

на полиграфической базе ОрелГТУ,

302030, г. Орел, ул. Московская, 65.

(c) ОрелГТУ,

(c) , ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ 4

1. ЛАБОРАТОРНАЯ РАБОТА № 1 "Интерфейс среды MatLAB. Вычисления в режиме научного калькулятора Основные классы вычислительных объектов и элементарные операции с переменными классов. Векторные и матричные операции. Вычисления в режиме научного калькулятора. Операции с полиномами, аппроксимация и интерполяция"

1.1. ТЕОРЕТИЧЕСКИЕ УКАЗАНИЯ 8

1.2. ЗАДАНИЕ №1 26

1.3. КОНТРОЛЬНЫЕ ВОПРОСЫ 27

2. ЛАБОРАТОРНАЯ РАБОТА № 2 "Выполняемые файлы ядра MatLAB. Управление вычислительным процессом. Стандартное графическое окно. Создание function-файлов"

2.1. ТЕОРЕТИЧЕСКИЕ УКАЗАНИЯ 28

2.2. ЗАДАНИЕ №2 35

2.3. КОНТРОЛЬНЫЕ ВОПРОСЫ 38

3. ЛАБОРАТОРНАЯ РАБОТА № 3 "Ввод и вывод информации в диалоговом режиме. Стандартное окно Menu. Функции функций. Создание проекта в форме script-файла"

3.1. ТЕОРЕТИЧЕСКИЕ УКАЗАНИЯ 39

3.2. ЗАДАНИЕ №3 46

3.3. КОНТРОЛЬНЫЕ ВОПРОСЫ: 47

СПИСОК ЛИТЕРАТУРЫ 49

ВВЕДЕНИЕ

В 70-х годах началась и продолжается до настоящего времени научная революция, связанная с появлением новой технологии научных исследований - вычислительным экспериментом [1] - исследованием с помощью вычислительных средств динамики моделей систем. Вычислительный эксперимент предоставил возможность анализировать нелинейные явления, характерные для динамики сложных систем, что привело к рождению новых идей, теорий, методов, к развитию междисциплинарных подходов [2,3]. Его следует рассматривать как новую ступень в развитии математического моделирования, пронизывающего большинство областей науки, в том числе применительно к проектированию электронных систем. В основе компьютерных технологий для реализации вычислительного эксперимента лежат пакеты прикладных программ, применение которых позволяет качественно изменить и существенно улучшить технологию изучения, перевести ее в виртуальную действительность, осуществить в этой виртуальной лаборатории необходимые исследования с получением количественных результатов [3-8]. При этом выбор конкретной среды разработки для численных исследований является одним из ключевых моментов, который определяет, насколько эффективно будут использоваться "инструменты" вычислительного эксперимента, в частности, при изучении теоретических основ, моделировании и исследовании динамики электронных систем. При этом необходимо учитывать два момента.

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

Для этого необходимо:

1. Достаточно ясно представлять сущность моделируемого процесса;

2. Выбрать эффективный алгоритм для решаемой задачи;

3. Выявить основные потоки данных и их формат.

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

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

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

Система MatLAB (сокращение от MATrix LABoratory - матричная лаборатория) кратко характеризуется следующими основными особенностями:

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

* прародителем всех используемых классов MatLAB является обобщенный класс объектов-массивов. Это обуславливает базу для реализации современного математического анализа динамики посредством: наличия развитой встроенной матричной и комплексной арифметики; поддержки выполнения операций с матрицами и массивами данных; реализации сингулярного и спектрального разложений; поддержки работы с полиномами; решения нелинейных, дифференциальных и разностных уравнений; интегрирования и т.д.

* MatLAB совместима с С, С++ приложениями, и допускает их преобразование в выполняемые MatLAB-файлы, а также ускорение этих файлов трансляцией в псевдокод (p-code);

* МatLAB включает специализированные пакеты (Toolbox) и допускает модификацию кода компонентов ядра MatLAB и пакетов ToolBox на требуемом уровне программирования. В частности, MatLAB имеет большие возможности для работы с сигналами, расчета и проектирования аналоговых и цифровых фильтров, а также для построения их частотных, импульсных и переходных характеристик, средства для спектрального анализа и синтеза, в том числе реализации прямого и обратного преобразований Фурье;

* MatLAB позволяется обеспечить интерактивные вычисления с использованием мощной графической и интерфейсной поддержки.

Более полная информация о системе, примеры, рекомендации по ее использованию, а также новые программные продукты системы представлены на сайтах [9,10]. В дополнение необходимо добавить, что МatLAB - модульная система, которая постоянно развивается. Перечисленные особенности дают основания к тому, чтобы рассматривать МatLAB как одну из перспективных и привлекательных систем для проектирования электронных устройств.

ЛАБОРАТОРНАЯ РАБОТА № 1

Интерфейс среды MatLAB. Вычисления в режиме научного калькулятора Основные классы вычислительных объектов и элементарные операции с переменными классов. Векторные и матричные операции. Операции с полиномами, аппроксимация и интерполяция данных.

1.1. ТЕОРЕТИЧЕСКИЕ УКАЗАНИЯ

1.1.1.Интерфейс среды MatLAB.

Интерфейс среды MatLAB аналогичен интерфейсу стандартных Windows-приложений. В данной лабораторной работе необходимо пояснить три момента, связанные с использованием основного меню:

* показ рабочих окон (командного, рабочего пространства и т.д.) посредством View-.....

* вызов демонстрационных программ и подсказок посредством ? (Help) - ...

* установка формата представления чисел, выводимых в командное окно посредством File-Preferences-General..........

Работа в среде MatLAB осуществляется в двух режимах: калькулятора и программируемом (см. далее лабораторные работы №№ 2,3). В режиме калькулятора операторы последовательно вводятся и выполняются в командном окне (эта последовательность может быть воспроизведена пооператорно нажатием клавиши ?). Формат ввода переменных (если ставится ";", то результат не выводится в командное окно):

= [;]

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

i, j - мнимая единица

pi - число ?

inf - машинная бесконечность

NaN - неопределенный результат (0/0, inf/inf)

ans - запоминается системой как значение системной переменной равной результату действия последнего оператора.

Формат ввода комплексных чисел:

= + i[j]

Примерами типовых элементарных функций являются:

sin(Z), asin(Z), cos(Z), tan(Z), cot(Z), exp(Z), log(Z), sqrt(Z), abs(Z), angl(Z), real(Z), image(Z), fix(Z), floor(Z), ceil(Z), round(Z), sign(Z).

Общая запись оператора:

[параметры результата] = (входные параметры)

1.1.2. Основные классы вычислительных объектов и элементарные операции с переменными классов.

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

array - обобщенный класс объектов-массивов, прародитель всех используемых классов;

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

char - массив (строка) символов, каждый символ которой занимает 16 битов;

struct - массив записей, состоящий из полей, каждое из которых имеет свое имя;

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

sparse - разряженные матрицы, для хранения матриц с незначительным числом ненулевых элементов;

uint8- массивы 8-разрядных чисел без знаков, которые размещаются в 1/8 части памяти, необходимой для чисел с двойной точностью.

Поясним основные операции, которые производятся с переменными этих классов.

Диапазон представления модуля действительных чисел 10-308 ... 10308, с точными значениями в 15 десятичных разрядах. Простейшие арифметические операции: + - * / \ ^

Ввод символьной переменной char осуществляется в апострофах, например:

st1 = 'это ' ; st2 = 'строка ' ; st3 = 'символов ';

Объединение нескольких переменных в единую строку осуществляется либо

горизонтальной конкатенацией, например:

st=[st1 st2 st3]; или st=strcat(st1,st2,st3);

st= это строка символов

либо вертикальной конкатенацией, например:

stv=strvcat(st1,st2,st3);

st= это строка

символов

Обращение к элементам полученной строки возможно либо по отдельности, например: st(3)

ans= о либо к интервалу (горизонтальная конкатенация), например: st(6:9), либо к массиву (вертикальная конкатенация), например: st(2,2:5). Примерами наиболее распространенных функций являются: upper(st) / lower(st) - смена регистра; findstr(st,st1) - выдает номер элемента строки st первого элемента st1 из этой строки; strrep(s1,s2, s3) - заменяет в строке s1 элементы s2 на элементы s3.

Массивы записей struct объединяют данные разных классов. Первый способ задания записи заключается в том, что отдельные экземпляры класса создаются автоматически при задании полей в форме ., например:

Name.fam='Sergeev'

Name= fam: 'Sergeev'

Name(2).fam='Petrov'

Name(2).imya='Petr'

Name(3).god=21

Для другого способа создания записи используется следующая форма:

=struct('','', '',''...)

Примерами наиболее распространенных функций являются:

fieldnames(Name) - функция для получения и информации о всех полях записи, например:

ans=

'fam' 'imya'

'god' S=rmfield(S,''), где S - имя массива записей, которая используется для удаления поля из всех элементов.

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

Пример индексации ячеек:

C(1,1)={'Sergeev'};

C(1,2)={[1 2 4 5 8]};

C(2,1)={5-3i}; C(2,2)={2:3:56};

Пример индексации содержимого:

C{1,1}='Sergeev';

C{1,2}=[1 2 4 5 8];

C{2,1}=5-3i; C{2,2}=2:3:56;

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

Создание шаблона:

A=cell(2,2) Заполнение ячейки:

A(1,1)={1 2 5 3}

Для извлечения элементов используется форма обращения, в которой указывается ячейка и элементы в ней, например:

C{1,2}(2:3)

ans= 2 4 5

1.1.3. Векторные и матричные операции.

1.1.3.1. Формирование матриц.

Вектор рассматривается как матрица из одного столбца или строки. Для ввода матрицы используются квадратные скобки, пробелами или запятыми отделяются элементы в строке, а точкой с запятой отделяются разные строки. Сооттветственно, формат ввода матрицы: A=[, ; ];

Для интервального ввода элементов используется форма, где значение шага по умолчанию равно 1:

: :

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

zeros (M,N) - создает матрицу размером (M*N) с нулевыми элементами:

>> zeros (3,5) ans =

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

ones (M,N) - создает матрицу размером (M*N) с единичными элементами:

>> ones (3,5)

ans = 1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

eye (M,N) - создает матрицу размером (M*N) с единичными элементами по главной диагонали и остальными нулевыми элементами:

>> eye (3,5)

ans = 1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

rand (M,N) - создает матрицу размером (M*N) из случайных чисел, равномерно распределенных в диапазоне от 0 до 1:

>> rand (3,5)

ans = 2.1896e-001 6.7930e-001 5.1942e-001 5.3462e-001 7.6982e-001

4.7045e-002 9.3469e-001 5.3262e-002 8.5695e-001 4.2321e-002

5.3225e-001 6.6623e-001 2.3325e-001 7.0560e-002 4.8988e-001

randn (M,N) - создает матрицу размером (M*N) из случайных чисел, распределенных по нормальному закону с нулевым математическим ожиданием и стандартным (среднеквадратическим) отклонением, равным единице:

>> randn (3,5)

ans = 1.1650e+000 3.5161e-001 5.9060e-002 8.7167e-001 1.2460e+000

6.2684e-001 -6.9651e-001 1.7971e+000 -1.4462e+000 -6.3898e-001

7.5080e-002 1.6961e+000 2.6407e-001 -7.0117e-001 5.7735e-001

fliplr (A) - формирует матрицу переставляя столбцы известной матрицы A относительно вертикальной оси, например:

A = 1 2 3 4 5 6

7 8 9 10 11 12

13 14 15 16 17 18

>> fliplr (A) ans =

6 5 4 3 2 1

12 11 10 9 8 7

18 17 16 15 14 13

flipud (A) - формирует матрицу переставляя столбцы известной матрицы A относительно горизонтальной оси, например:

>> flipud (A)

ans = 13 14 15 16 17 18

7 8 9 10 11 12

1 2 3 4 5 6

rot90 (A) - формирует матрицу путем поворота заданной матрицы A на 90 градусов против часовой стрелки:

>> rot90 (A)

ans = 6 12 18

5 11 17 4 10 16

3 9 15 2 8 14

1 7 13

tril(A) - образует нижнюю треугольную матрицу на основе матрицы А путем обнуления ее элементов выше главной диагонали:

>> tril (A) ans =

1 0 0 0 0 0

7 8 0 0 0 0

13 14 15 0 0 0

triu (A) - образует верхнюю треугольную матрицу на основе матрицы А путем обнуления ее элементов ниже главной диагонали:

>> triu (A) ans =

1 2 3 4 5 6

0 8 9 10 11 12

0 0 15 16 17 18

diag (х) - формирует или извлекает диагональ матрицы. Если х - вектор, то функция diag (x) создает квадратную матрицу с вектором х на главной диагонали:

>> V = [ -5 6 7 4 ]

>> diag (V) ans =

-5 0 0 0

0 6 0 0 0 0 7 0

0 0 0 4

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

>>diag (V,-1) ans =

0 0 0 0 0

-5 0 0 0 0

0 6 0 0 0

0 0 7 0 0

0 0 0 4 0

Если х - матрица, то функция diag создает вектор-столбец, состоящий из элементов главной диагонали заданной матрицы х, например для матрицы A, указанной перед примером применения процедуры fliplr:

>> diag (A)

ans = 1 8

15 Если при этом дополнительно указать номер диагонали, то можно получить вектор-столбец из элементов любой диагонали матрицы х, например:

>> diag (A,3) ans =

4 11

18 1.1.3.2. Извлечение и вставка частей матриц

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

Пусть имеем некоторую матрицу А:

>> А = [ 1 2 3 4; 5 6 7 8; 9 10 11 12 ]

А = 1 2 3 4

5 6 7 8

9 10 11 12

Получить значение элемента этой матрицы, расположенного на пересечении второй строки с третьим столбцом, можно таким образом:

>> А (2,3)

ans = 7 Если нужно, наоборот, вставить на это число некоторое число, например ?, то это можно сделать так:

>> А(2,3) = pi; А

А = 1.0000 2.0000 3.0000 4.0000

5.0000 6.0000 3.1416 8.0000

9.0000 10.0000 11.0000 12.0000

Иногда требуется сформировать меньшую матрицу из большей путем извлечения из последней ее нескольких строк или столбцов, или, наоборот, вставить меньшую матрицу таким образом, чтобы она стала определенной частью матрицы большего размера. Это делается в MatLAB с помощью знака двоеточия (:). Рассмотрим эти операции на примерах.

Пусть требуется создать вектор V1, который состоит из элементов третьего столбца предыдущей матрицы А. Для этого:

>> V1 = А (:,3)

V1 = 3.0000

3.1416 11.0000

Создать вектор V2, состоящий из второй строки матрицы А, можно следующим образом:

>> V2 = A (2, : )

V2 = 5.0000 6.0000 3.1416 8.0000

Допустим, что необходимо из матрицы А создать матрицу В размером (2*2), состоящую из элементов нижнего левого угла матрицы А. Тогда делают следующее:

>> B = А (2:3, 1:2)

B =

5 6 9 10

Аналогичным образом можно " вставить " матрицу В в верхнюю середину матрицы А:

>> А (1:2, 2:3) = В

А =

1 5 6 4

5 9 10 8

9 10 11 12

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

Примечание _________________________________________________________

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

_______________________________________________________________________________________

Например:

>> А = (2:end,2:end)

ans = 9 10 8

10 11 12 Эти операции очень удобны для формирования матриц, большинство элементов которых одинаковы, в частности так называемых разреженных матриц, которые состоят в основном из нулей. Для примера рассмотрим формирование разреженной матрицы размером (5*7) с единичными элементами в центре:

>> А = zeros (5,7) ;

>> В = ones (3,3) ;

>> A (2:4,3:5) = В

А = 0 0 0 0 0 0 0

0 0 1 1 1 0 0

0 0 1 1 1 0 0

0 0 1 1 1 0 0

0 0 0 0 0 0 0

"Растянуть" матрицу (А) в единые вектор (V) можно с помощью простой записи V = А (:). При этом создается вектор-столбец с количеством элементов (M*N), в котором столбцы исходной матрицы размещены сверху вниз в порядке самих столбцов:

>> А = [ 1 2 3 ; 4 5 6 ]

А = 1 2 3

4 5 6 >> V = А (:)

V = 1 4 2

5 3

6 "Расширить" матрицу, составляя ее из отдельных заданных матриц ("блоков") можно тоже довольно просто. Если заданы несколько матриц-блоков А1,А2, ... , An с одинаковым числом строк, то из них можно "слепить" единую матрицу А, объединяя блоки в одну "строку" таким образом:

А = [ А1, А2, ... , Аn ]

Эту операцию называют горизонтальной конкатенацией (сцеплением) матриц. Аналогично, вертикальную конкатенацию матриц можно реализовать при условии, что все составляющие блоки-матрицы имеют одинаковое число столбцов, применяя для отделения блоком вместо запятой - точку с запятой:

А = [ А1; А2; ... ; Аn ]

Пример горизонтальной конкатенации:

>> А1 = [ 1 2 3; 4 5 6; 7 8 9 ];

>> A2 = [ 10; 11; 12 ];

>> A3 = [ 14 15; 16 17; 18 19 ];

>> A = [ A1, A2, A3]

A = 1 2 3 10 14 15

4 5 6 11 16 17

7 8 9 12 18 19

Пример вертикальной конкатенации:

>> В1 = [ 1 2 3 4 5 ];

>> В2 = [ 6 7 8 9 10; 11; 12 13 14 15 ];

>> В3 = [17 18 19 20 21 ];

>> В = [ В1, В2, В3 ]

В = 1 2 3 4 5

6 7 8 9 10

11 12 13 14 15

17 18 19 20 21

1.1.3.3. Поэлементные матричные операции

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

вместо А * B используется запись A.*B

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

>> A=[1 2 3; 4 5 6]

A = 1 2 3

4 5 6

>> B=[4 5 6 ;7 8 9]

B = 4 5 6

7 8 9

>> A*B

??? Error using ==> *

Inner matrix dimensions must agree.

>> A.*B ans =

4 10 18

28 40 54

>> B=[4 5;6 7; 8 9]

B = 4 5

6 7

8 9 >> A*B

ans = 40 46

94 109 >>

1.1.3.4.Матричные и векторные функции.

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

sort(V); sum(V); cumsum(V); prod(V); cumprod(V);diff(V); std(V); mean(V);

[max, s] = max(V); [min, s] = min(V).

Примерами матричных функций являются (на примере матрицы A):

inv(A) - вычисление обратной матрицы;

sqrtm(A) - вычисляет такую матрицу Y , что Y*Y=A;

eig(A) или [R,D] = eig(A) - вычисление собственных векторов матрицы, в последнем случае из условия A*R=R*D;

Вычисление матричной экспоненты (еА) производится с помощью функций expm, expm1, expm2 и expm3. Функция expm (А) вычисляет матричную экспоненту путем использования разложения Паде матрицы А. Функция expm2 (А) вычисляет матричную экспоненту, используя разложение Тейлора матрицы А. Функция expm3 (А) вычисляет матричную экспоненту, используя спектральное разложение А.

1.1.4. Операции с полиномами. Аппроксимация и интерполяция.

Полином (многочлен) как функция определяется выражением:

В MatLAB полином задается и хранится в виде вектора, элементами которого являются коэффициенты полинома от до

Ввод полиномов в MatLAB осуществляется таким же образом, как и ввод вектора длиной n+1, где n - порядок полинома. Система MatLAB имеет функцию roots (P), которая вычисляет вектор элементы которого являются корнями заданного полинома Р. Например, пусть требуется найти корни полинома:

Для этого необходимо выполнить следующее:

>> P = [ 1,8,31,80,94,20 ];

>> disp(roots(P))

-1.0000 +3.0000i

-1.0000 -3.0000i

-3.7321 -2.0000

-0.2679 Обратная операция - построение вектора p коэффициентов полинома по заданному вектору корней - осуществляется функцией poly:

p = poly (r)

где r - заданные вектор значений корней, p - вычисленный вектор полинома, причем полученный вектор не показывает старшего коэффициента, который по умолчанию полагается равным единице. Например:

>> p = [ 1,8,31,80,94,20 ]

p = 1 8 31 80 94 20

>> r = rotts (p)

r = -1.0000 +3.0000i

-1.0000 -3.0000i

-3.7321 -2.0000

-0.2679 >> p = poly (r)

p1 = 8.0000 31.0000 80.0000 94.0000 20.0000

Для вычисления полинома по заданному значению его аргумента в MatLAB предусмотрена функция polyval. Обращение к ней происходит по схеме:

y = polyval (p,x)

где p - заданный вектор коэффициентов полинома, а х - заданное значение аргумента.

Пример: >> y = polyval (p,2)

y = 936 Отличие аппроксимации и интерполяции данных заключается в том, что при аппроксимации график не точно проходит через узловые точки, при интерполяции - точно. Полиномиальная аппроксимация данных измерений, которые сформированы как некоторый вектор Y, при некоторых значениях аргумента, которые образуют вектор Х такой же длинны, что и вектор Y, осуществляется процедурой polyfit (X,Y,n). Здесь n - порядок аппроксимирующего полинома.

Пусть задан массив значений аргумента:

x = [ 1 2 3 4 5 6 7 ]

и массив соответствующих значений измеренной величины:

y = [ -1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1 ]

Тогда, применяя указанную функцию при разных значениях порядка аппроксимирующего полинома, получим:

>> x = [ 1 2 3 4 5 6 7 ];

>> y = [ -1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1 ];

>> polyfit (x,y,1)

ans = 0.1143 -0.2393

>> polyfit (x,y,2)

ans = -0.1024 1.0357 -1.7750

>> polyfit (x,y,3)

ans = 0.0177 -0.3410 1.9461 -2.6500

>> polyfit (x,y,4)

ans = -0.0044 0.0961 -0.8146 3.0326 -3.3893

Это означает, что заданную зависимость можно аппроксимировать прямой:

квадратной параболой:

кубической:

или параболой четвертой степени:

Построим в одном графическом поле графики заданной дискретной функции и графики всех полученных при аппроксимации полиномов (группа операторов 1):

>> x = [ 1 2 3 4 5 6 7 ];

>> y = [ -1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1 ];

>> p = polyfit (x,y,1);

>> p = polyfit (x,y,2);

>> p = polyfit (x,y,3);

>> p = polyfit (x,y,4);

>> plot (x,y); >> hold on

>> x1 = 0.5 : 0.005 : 8.5 ;

>> y1 = polyval (P1,x1)

>> y2 = polyval (P2,x1)

>> y3 = polyval (P3,x1)

>> y4 = polyval (P4,x1)

>> plot (x1,y1,x1,y2, x1,y3, x1,y4) ,

Функция spline (X,Y,Xi) осуществляет интерполяцию кубическими сплайнами. При обращении: Yi = spline (X,Y,Xi)

Она интерполирует значения вектора Y, заданного при значениях аргумента, представленных в векторе X, и выдает значение интерполирующей функции в виде вектора Yi при значениях аргумента, заданных вектором Xi. В случае, когда вектор X не указан, по умолчанию принимается, что он имеет длину вектора Y и каждый его элемент равен номеру этого элемента. Например:

>> x = -0.5 : 0.1 : 0.2 ;

>> y = [ -1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1 ];

>> x1 = -0.5 : 0.01 : 0.2 ;

>> y2 = spline (x,y,x1);

>> plot (x,y,x1,y2)

Одномерную табличную интерполяцию производит процедура interp 1. Обращение к ней в общем случае имеет вид:

Yi = interp1 (X,Y,Xi, '')

И позволяет дополнительно указать метод интерполяции в четвертом аргументе: nearest - ступенчатая интерполяция, cubik - кубическая, spline - кубическими сплайнами. Если метод не указан, по умолчанию осуществляется линейная интерполяция.

Например (для того же вектора):

>> x = -0.5 : 0.1 : 0.2 ;

>> y = [ -1.1 0.2 0.5 0.8 0.7 0.6 0.4 0.1 ];

>> x1 = -0.5 : 0.01 : 0.2 ;

>> y1 = interp1 (x,y,x1)

>> y4 = interp1 (x,y,x1, 'nearest')

>> y2 = interp1 (x,y,x1, 'cubik')

>> y3 = interp1 (x,y,x1, 'spline')

>> plot (x1,y1,x1,y2, x1,y3, x1,y4)

1.2. ЗАДАНИЕ №1

1. Определить назначение следующих элементарных функций числа Z:

sin(Z), asin(Z), cos(Z), tan(Z), cot(Z), exp(Z), log(Z), sqrt(Z), abs(Z), angl(Z), real(Z), image(Z), fix(Z), floor(Z), ceil(Z), round(Z), sign(Z).

2. Определить назначение следующих векторных функций вектора V:

sort(V); sum(V); cumsum(V);prod(V); cumprod(V);diff(V); std(V); mean(V);

[max, s] = max(V); [min, s] = min(V).

3. Создать в режиме научного калькулятора последовательность операторов, включающую:

* преобразование исходной матрицы (или вектора) так, чтобы продемонстрировать рассмотренные в теоретических указаниях основные группы функций (операторов);

* операции с полиномами;

* интерполяцию и аппроксимацию.

4. Ознакомиться с примерами, представленными в демонстрационной системе.

1.3. КОНТРОЛЬНЫЕ ВОПРОСЫ

* Назначение, преимущества и недостатки среды разработки MatLAB;

* Охарактеризовать основные классы вычислительных объектов: назначение, создание, модификация переменных;

* Охарактеризовать группы операций с матрицами. Пояснить пример 1;

* Организация работы с полиномами;

* Организация интерполяции и аппроксимации данных.

ЛАБОРАТОРНАЯ РАБОТА № 2.

Выполняемые файлы ядра MatLAB. Управление вычислительным процессом. Использование стандартного графического окна. Создание function-файлов.

2.1. ТЕОРЕТИЧЕСКИЕ УКАЗАНИЯ

2.1.1. Выполняемые файлы ядра MatLAB.

Выполняемые файлы в MatLAB имеют расширение *.m и создаются, например, посредством выполнения последовательности команд меню командного окна: File-New-m-file. В результате вызывается встроенный текстовый редактор-отладчик в котором набирается текст выполняемого файла, в котором он сохраняется (File-Save-...) с некоторым именем в операционной системе. При этом посредством последовательности команд меню командного окна: File-Set Path-... необходимо установить путь по которому данный файл будет вызываться на выполнение при запуске из командного окна. Для редактирования текста файла выполняется последовательность File-Open-... или он просто запускается из файловой системы.

Выполняемые файлы в MatLAB разделяются на script-файлы (управляющие программы или файлы-сценарии) и function-файлы (файлы-функции, процедуры, функции-функций). Обычно, посредством script-файлов оформляются основные программы, которые управляют либо модулем, либо всем вычислительным процессом. Как function-файлы оформляются части программы, которые рассчитаны на неоднократное применение в любых фрагментах кода и не могут быть выполнены без предварительного задания значений их входных переменных. Условно script-файлы и function-файлы отличаются по размеру и сложности (т.е. обычно функции более простые и короткие). Их главное внешнее отличие заключается в оформлении первой строки. Function-файлы обязательно начинаются с заголовка со служебным словом function:

function [] = ()

Принципиальное отличие script-файлов и function-файлов заключается в различном восприятии системой имен переменных. В function-файлах все имена переменных в заголовке, внутри файла воспринимаются как локальные, т.е. их значения исчезают после завершения работы функции, а области оперативной памяти освобождается. В script-файлов все переменные образуют так называемое рабочее пространство (Workspace) и их значения сохраняются не только на протяжении работы программы, но и во время всего сеанса MatLAB. Именно поэтому можно их использовать в иных script-файлах текущего сеанса. Для вызова рабочего пространства используется последовательности команд меню командного окна: File-Show Workspace.

Трактовка переменных внутри цикла является "закрытой" от остальной части программы, как и в иных языках программирования. Возможность доступа к локальным переменным внутри цикла и function-файла обеспечивается посредством следующих команд: keyboard/return. Когда в тексте программы встречается команда keyboard, то ее выполнение прекращается и управление передается клавиатуре. Этот специальный режим работы сопровождается появлением в командном окне приглашения к действиям:

k>> Пользователь может изменять любые текущие переменные, и ему доступны все команды системы. Для завершения этого режима необходимо с клавиатуры набрать return, тогда начинает выполняться следующий за keyboard оператор.

Второй пример особой трактовки переменных связан с использованием глобальных переменных. В этом случае существует возможность сделать так, чтобы внутри function-файла некоторая переменная рабочего пространства сохранила свое значение и имя. С этой целью в function-файле и script-файле должна присутствовать одинаковая запись объявления глобальных переменных посредством служебного слова global:

global a b c

При этом глобальные переменные разделяются пробелом.

Приведем основные особенности по оформлению текста программ выполняемых файлов в MatLAB:

* Обычно оператор записывается в отдельной строке и результат его выполнения не выводится на экран, если используется в конце строки символ ";". Если в одной строке записывается несколько операторов, то они разделяются символом ";" или ",". И наоборот, длинный оператор можно разбить на несколько строк символом "..." .

* Строка, начинающаяся символом "%" воспринимается системой как текстовый комментарий. Причем строки комментария, предшествующие началу программы, воспринимаются системой как ее описание, которое выводится в командное окно при обращении:

help

* В языке MatLAB переменные могут не описываться, любое новое имя воспринимается как имя матрицы. Ее размер определяется системой автоматически при первом ее вычислении.

* Имена переменных начинаются с буквы, общая длина не более 19 символов, прописные и строчные буквы различаются.

* Оператор завершения программы в языке MatLAB отсутствует

2.1.2. Управление вычислительным процессом.

Операторы управления вычислительным процессом могут быть использованы и в тексте выполняемых файлов и в режиме калькулятора. Они разделяются на 3 группы: операторы условного перехода, переключения и цикла. Операторы безусловного перехода отсутствуют, поэтому понятия "метки" не существует. Все эти операторы являются сложными (состоят из последовательности нескольких простых), "открываются" одним из служебных слов (if, while, switch, for) и выполняются после "закрывающей скобки", в качестве которой выступает служебное слово end внешнего сложного оператора.

Оператор условного перехода в общем случае следующий вид:

if elseif

elseif

... else

end Соответственно, простейшая форма записи означает выполнение одного блока операторов 1 по некоторому условию 1 (операторы вне фигурных скобок). Далее она расширяется посредством выполнения другого блока операторов 4 в случае отсутствия выполнения условия 1 (добавляются операторы внешних фигурных скобок). Операторы 2, 3 ... и условия 2, 3... позволяют формировать разветвленную структуру условных переходов в соответствии с выполнением соответствующих условий (добавляются операторы внутренних фигурных скобок). Для формирования условий используются следующие знаки:

, =, == , ~= , & (и), | (или), ~ (не).

Оператор переключения осуществляет ветвление вычислений в зависимости от значения переменной или выражения, которое получается в строке switch. Происходит выполнение той группы операторов, у которых значение в строке switch совпадает со значением в строке case. Если ни с каким значением case нет совпадения, то выполняются операторы следующие за otherwise.

Структура оператора переключения имеет следующий вид:

switch

case case

.............

otherwise end

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

while

end Во втором случае оператор имеет следующий вид:

for = :: end

где - имя переменной-счетчика, и - ее начальное и конечное значения, соответственно, - шаг ее изменения (по умолчанию равен 1).

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

2.1.3. Использование стандартного графического окна.

Функциями построения графиков являются: plot, plot3, loglog и т.п. Функция plot3 используется для построения трехмерных графиков, функции типа loglog строят графики специальных форматов. Формат всего семейства функций построения графиков аналогичен и будет далее рассмотрен на примере основной функции - plot. Общая форма обращения к функции plot:

plot(x1, y1, 's1', x2, y2, 's2', ... xN, yN, 'sN')

В данной функции предусмотрено построение N графиков, каждый из которых определяется двумя числовыми массивами x и y (значения x откладываются вдоль горизонтальной оси, значения y - вдоль вертикальной), а также строковой переменной s, которая состоит из трех полей: цвет графика/форма точек графика /форма линии. Например,

s1='y*:' означает, что график имеет желтый цвет, узловые точки нарисованы звездами и соединены посредством точечной линии;

s2='r' означает, что график имеет красный цвет, узловые точки не выделяются, а соединены (по умолчанию) сплошной линией;

sN='*' означает, что цвет графика устанавливается по умолчанию, узловые точки нарисованы звездами и не соединяются линией.

Полный список возможных значений полей можно просмотреть посредством записи в командной строке help plot.

Графики построенный любой функцией выводятся в отдельном (графическом) окне, которое называется фигурой, а соответствующее обращение к конкретному N-ому окну для построения графика: figure(N).

Например:

x=-2.9:0.1:2.9; y=randn(59,1);

figure(10); plot(x,y)

Надписи для обозначения названия графика, осей, которые автоматически выводятся на экран:

title ('')

xlable ('') ylabel ('')

Если необходимо выбрать место для размещения некоторой надписи, то используют функцию gtext(''). Тогда работа программы приостанавливается до тех пор, пока щелчком левой кнопки мыши не будет обозначено начало вывода надписи. Для включении/выключения разметки сетки используется grid on/off соответственно. Для сохранения/уничтожения предыдущего графика, построенного в окне, в которое строится текущий график, используется функция hold on/off соответственно. Для изменения показываемого диапазона и систем координат используются функции семейства axis, такие как, например:

axis([xmin xmax ymin ymax])

axis ('auto')

axis ('ij')

axis ('xy')

axis ('square')

axis ('equal')

Для построения специальных графиков используются, например, функции:

bar(), stem(), hist(), loglog(), semilogx(), semilogy().

Для формирования подокон используется функция subplot(vert,goriz,pole), где vert означает число равных частей на которое делится все окно по вертикали, goriz - по горизонтали, pole - формирует поле из соседних под-окон для вывода информации, например:

subplot(3,2,[2 3 5 6]);

plot(x,y) Схема порядка нумерации под-окон показана на рисунке 1. Начальный диапазон изменения координат по осям от 0 до 1, начало координат располагается в левом нижнем углу.

1 2 3 4 5 6 7 ...

Рисунок 1 - Схема порядка нумерации под-окон.

2.2. ЗАДАНИЕ №2

Варианты для выполнения самостоятельного задания №2. Задание выполняются с использованием команды help и демонстрационных примеров.

1. Вывести график в заданном формате (варианты задания см. в таблице 1)

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

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

Таблица 1 - Варианты для выполнения задания 1.

Вариант Заданный формат 1 график имеет зеленый цвет, узловые точки нарисованы треугольниками обращенными вверх и соединены посредством сплошной линии 2 график имеет черный цвет, узловые точки нарисованы окружностями и не соединены 3 график имеет синий цвет, узловые точки не нарисованы а соединены посредством штриховой линии 4 график имеет бордовый цвет, узловые точки нарисованы треугольниками обращенными вправо и соединены посредством сплошной линии 5 график имеет синий цвет, узловые точки нарисованы ромбами и соединены посредством точечной линии 6 график имеет зеленый цвет, узловые точки нарисованы треугольниками обращенными вверх и соединены посредством сплошной линии 7 график имеет черный цвет, узловые точки нарисованы окружностями и не соединены 8 график имеет синий цвет, узловые точки не нарисованы а соединены посредством штриховой линии 9 график имеет бордовый цвет, узловые точки нарисованы треугольниками обращенными вправо и соединены посредством сплошной линии 10 график имеет синий цвет, узловые точки нарисованы ромбами и соединены посредством точечной линии

Таблица 2 - Варианты для выполнения задания 2.

Вариант Фукции 1 axis([xmin xmax ymin ymax]), axis ('auto') 2 axis ('ij'), axis ('xy') 3 axis ('square'), axis ('equal') 4 bar(), stem(), hist() 5 loglog(), semilogx(), semilogy() 6 axis([xmin xmax ymin ymax]), axis ('auto') 7 axis ('ij'), axis ('xy') 8 axis ('square'), axis ('equal') 9 bar(), stem(), hist() 10 loglog(), semilogx(), semilogy()

Таблица 3 - Варианты для выполнения задания 3.

Вариант Операторы и функции 1 if ...end, keyboard/return 2 if ... elseif ...end, break 3 switch ... case, pause(...) 4 for ... end, pause 5 while ... end, keyboard/return 6 if ...end, keyboard/return 7 if ... elseif ...end, break 8 switch ... case, pause(...) 9 for ... end, pause 10 while ... end, keyboard/return

2.3. КОНТРОЛЬНЫЕ ВОПРОСЫ

* Перечислить различия и сходства function- и script-файлов;

* Перечислить варианты использования локальных и глобальных переменных;

* Пояснить выполнение оператора условного перехода с использованием общего вида его записи;

* Пояснить выполнение оператора переключения;

* Пояснить выполнение операторов цикла;

ЛАБОРАТОРНАЯ РАБОТА № 3.

Ввод и вывод информации в диалоговом режиме. Использование стандартных Menu-окон. Функции функций. Создание проекта.

3.1. ТЕОРЕТИЧЕСКИЕ УКАЗАНИЯ

3.1.1. Ввод и вывод информации в диалоговом режиме.

Примерами наиболее распространенных встроенных функций для ввода-вывода информации в диалоговом режиме при выполнении M-файла в системе MatLAB являются следующие:

disp, sprintf, input, menu, text

Функция disp осуществляет вывод значений указанной переменной или указанного текста в командное окно. Обращение к ней имеет вид:

disp ().

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

x1=1.24; x2=-3.45; ... xN=100;

x=[x1 x2 ... xN] ;

disp(x)

Аналогично можно объединить несколько текстовых переменных:

x1=' alpha' ; x2='beta'; ... xN='teta';

disp([x1 x2 ... xN])

Одним из вариантов объединения численных и текстовых переменных является перевод числового значения в текстовое с помощью функции num2str (при этом форма представления числового значения определяется установленным режимом вывода чисел на экран (см. лабораторная №1), например:

x=-9.3088e-15;

T='Значение параметра x равно';

disp([T x])

Другим способом достижения того же результата является использование функции sprintf, обращение к которой имеет вид:

Y=sprintf(' %g ' , X)

В результате создается текстовая строка Y, состоящая из текста, указанного в и значения числовой переменной X в соответствии с форматом %g , причем текст из фрагмента размещается после значения переменной X. Например,

x=-9.3088e-15;

disp (sprintf ('Параметр1= %g', x))

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

x = input ('')

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

3.1.2. Использование стандартного Menu-окна.

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

k=menu('Заголовок меню', 'Альтернатива1', 'Альтернатива2', ...

АльтернативаN')

Аналогичная запись с использованием латинских букв (на английском):

k=menu('Header', 'Alternative1', 'Alternative2', ...

AlternativeN')

Такое обращение приводит к автоматическому появлению на экране стандартного окна меню. Выполнение программы временно приостанавливается, и система ожидает выбора одной из кнопок с альтернативами (посредством нажатия в соответствующей области окна на правую кнопку мыши), после чего выходному параметру k присваивается значение выбранной альтернативы. Максимальное число альтернатив равно 32. Таким образом, в зависимости от значения параметра k, можно построить процесс разветвления вычислений или присвоений, например, с помощью таких операторов управления вычислительным процессом (см. лабораторная №2). Например цикл if ... else (elseif) ... end использует следующую форму (группа операторов 1):

if k==1

x1=input([sprintf('Текущее значение x1= %g', x1) ...

'Новое значение x1 =']);

end Второй пример, с использованием цикла while .... end, позволяет организовать повтор действий (группа операторов 2):

k=1;

while k==1 k=menu('Что делать?', 'Продолжить работу', 'Завершить работу');

end Также при диалоговом вводе-выводе информации полезно использовать такие команды, как break, pause, keyboard/return (см. лабораторная №2).

Для выведения текстовой информации в графическое окно, наряду с функциями типа xlabel, title, gtext и т.п. (см. лабораторная №2), используется функция text. Общая форма обращения к этой функции следующая:

h=text(x,y,'', 'FontName', '', '', ...

) Эта функция осуществляет вывод указанного текста указанным шрифтом указанного размера, начиная с точки подокна (см. лабораторная №2), определенной координатами x,y. Эти координаты измеряются в единицах величин, откладываемых вдоль соответствующих осей графика подокна и диапазон изменения этих координат находится в интервале [0 ... 1], с учетом того, что поле подокна больше поля графика.

3.1.3. Функции функций.

Некоторые важные встроенные процедуры в MatLAB используют в качестве переменного параметра имя функции, с которой они оперируют (и соответственно m-файла), в которой в определенном формате сформировано одно или система из алгебраических или дифференциальных уравнений. Примерами таких функций функций являются: quad, quad8, ode23, ode45, fmin, fmns, fzero.

Для вычисления интеграла используются функции quad, quad8, например:

[I, cnt]=quad('', a, b)

где I - вычисленное значение интеграла, cnt - число обращений при вычислении интеграла к функции, представленной m-файлом и указанной в параметрах, a и b - нижняя и верхняя границы изменения аргумента функции.

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

options=odeset('RelTol',1e-8,'AbsTol',[1e-10,1e-10,1e-10]);

[t,X]=ode45('',[интервал времени],[н.у.],options);

где после служебного слова 'RelTol' указывается точность вычисления по всем переменным, после служебного слова 'AbsTol' - точность вычисления по каждой из переменных (в данном случае трем), t -массив значений аргумента, соответствующих шагам интегрирования, X - матрица проинтегрированных значений переменных, в которой каждый столбец соответствует одной их них, [интервал времени] - вектор из начального и конечного значений моментов времени (аргумента), [н.у.] - вектор начальных значений каждой из переменных, options - предварительно формируемые параметры точности вычислений.

Для вычисления минимумов и корней функций используются, соответственно, fmin, fmins и fzero, при этом:

fmin - вычисляет в интервале X1', X1, X2)

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

Xmin=fmins ('', X0)

fzero - вычисляет нули функции одной переменной при исходном значении X0 с заданной относительной погрешностью вычислений tol и необходимостью вывода промежуточных результатов trace в соответствии со следующим обращением:

Xzero=fzero('', X0, tol, trace)

В заключение приведем принцип формирования функции, используемой в качестве параметра. Пусть задана система дифференциальных уравнений, называемая системой Росслера:

dx1/dt=-x2 -x3

dx2/dt=x1+ax2

dx3/dt=x1x3 -cx3+b

в форме function-файла будет выглядеть следующим образом:

function xdot=rossler(t,x)

global a b c

xdot(1)=-x(2)-x(3);

xdot(2)=x(1)+a*x(2);

xdot(3)=b+x(1)*x(3)-c*x(3);

xdot=xdot';

Соответственно, обращение к ней в функциях функций будет 'rossler', например:

options=odeset('RelTol',1e-8);

[t,y]=ode45('rossler',[0,time],[0,0,0],options);

3.1.4. Создание проекта.

При формировании проекта в форме script-файла желательно принимать во внимание следующее:

* Удобно оформлять весь проект диалогового изменения параметров в виде отдельного script-файла, к примеру, с именем ScrFile_Menu, где под сокращением ScrFile подразумевается имя основного (собирательного) script-файла;

* Т.к. уже в самом начале работы с программой в меню выбора изменяемого параметра должны сразу выводиться некоторые значения параметров, то перед главным циклом программы, обеспечивающим возвращение к началу вычислений, необходимо разместить часть программы, которая задает их начальные значения. Кроме того, в начале работы программы удобно вывести на экран краткий комментарий, содержащий информацию о назначении программы, используемой математической модели, параметрах этой модели (в том числе "вшитых" и не изменяемых в меню). Данную информацию желательно оформить отдельным script-файлом, например, ScrFile_Zastavka;

* По завершению работы программы, обычно возникает необходимость упорядочить рабочее пространство переменных, например, очистить от глобальных переменных, закрыть открытые окна и т.д, что также желательно оформить отдельным script-файлом, например, ScrFile_End.

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

% %

% % ScrFile_Zastavka

k=menu('Что делать?', 'Продолжить работу', 'Завершить работу');

if k==1 while k==1

ScrFile_Menu

ScrFile_Main

k=menu('Что делать?', 'Продолжить работу', 'Завершить работу');

end end ScrFile_End

3.2. ЗАДАНИЕ №3

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

* Организовать изменение параметров системы дифференциальных уравнений в диалоговом режиме с использованием стандартного Menu-окна;

* Решить систему дифференциальных уравнений с использованием встроенной функции ode45? с целью определения длительности переходного процесса при нулевых исходных значениях вектора переменных состояний;

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

Таблица 4 - Варианты для выполнения самостоятельного задания №3:

Вариант №

1 2 3 4 5 6 7 8 9 10 Варьируемые параметры

в меню R1 E0

R2 L L R1 C

R2 E0

C R1 C R2 E0 L

R2 C L E0 R1

Формируемый

график iL (t) iL(uC) uC (t) Переходный процесс iL (t) Переходный процесс uC (t) Исходные значения параметров R1=R2=0.1 Ом, L=10-4 Гн, C=10-5 Ф, E0 = 24 В, R3=10 Ом

3.3. КОНТРОЛЬНЫЕ ВОПРОСЫ:

* Объясните особенность объединения числовых и текстовых переменных при выводе их в одну строку посредством функции disp;

* Пояснить выполнение функций в группе операторов 1;

* Пояснить выполнение функций в группе операторов 2;

* Что необходимо сделать, чтобы вывести (посредством функции text) текст в центр поля подокна текущей фигуры;

* Пояснить целесообразность использования приведенных в теоретических указаниях рекомендаций по типовой схеме оформления отдельного проекта в форме script-файла;

* Пояснить формирование системы дифференциальных уравнений AX=B (рисунок 2).

СПИСОК ЛИТЕРАТУРЫ

1 Малинецкий Г.Г. Хаос. Структуры. Вычислительный эксперимент: Введение в нелинейную динамику. - М.: Едиториал УРСС, 2000. - 256 с.: ил.

2 Малинецкий Г.Г., Потапов А.Б. Современные проблемы нелинейной динамики. - М.: Едиториал УРСС, 2002. - 360 с.: ил.

3 Симо К., Смейл С., Шенсине А. и др. Современные проблемы хаоса и нелинейности. - Ижевск: Институт компьютерных исследований, 2002. - 304 с.: ил.

4 Герман-Галкин С.Г. Компьютерное моделирование полупроводниковых систем в MatLAB 6.0: Учебное пособие. - СПб.: "Корона" принт, 2001. - 320 с.: ил.

5 Дьяконов В., Круглов В. Серия: MatLAB. Специальный справочник. "Математические пакеты расширения". - СПб: "Питер", 2002. - 488 с.

6 Егоренков Д. Л., Фрадков А. Л., Харламов В. Ю. Основы математического моделирования с примерами на языке MatLAB. Издание 2-е.- СПб.: БГТУ,1996. - 192 с.: ил.

7 Лазарев Ю. MatLAB 5.x .- Киев: "Ирина", BHV, 2000, - 384 с.: ил.

8 Джон Г. Мэтьюз, Куртис Д. Финк. Численные методы. Использование MatLAB. 3-е изд. : Пер. с англ. - М.: Издательский дом "Вильямс", 2001. - 270 с.: ил.

9 www.matlab.ru

10 www.mathworld.wolfram.com

? ode45 предполагает, что, во-первых, параметры системы дифференциальных уравнений используются одни и те же в script- function-файлах. Во-вторых, вектор выходных переменных состояния в function-файле описывается для каждой из переменных, а затем "собирается" в форме вектор-столбца.

---------------

------------------------------------------------------------

---------------

------------------------------------------------------------

1

4

Показать полностью…
454 Кб, 24 февраля 2013 в 15:00 - Россия, Москва, ИССО, 2013 г., doc
Рекомендуемые документы в приложении