Методическое пособие 182
.pdf5. Для построения графиков разобьем графическую область окна Figure на 4 подобласти с помощью функции subplot :
>> subplot(2,2,1)
Первое число указывает число окон по вертикали, второе – по горизонтали, третье – номер окна в которое будет выведен текущий график (нумерация окон слева – направо).
6.Строим график потенциала:
>>surf(x, y, P);
7.Строим график величины напряженности в следующем окне:
>>subplot(2,2,2);
>>surf(x, y, E);
8.Для построения векторного поля напряженности воспользуемся функцией quiver :
>>subplot(2,2,3);
>>quiver(x, y, Ex, Ey);
Данная функция строит векторное поле по значениям проекций вектора в данной точке. При этом необходимо следить, чтобы размерность x, y, Ex, Ey была одинаковой.
9. Построим графики сечений поверхности напряженности в направлении оси x и в направлении y следующим образом:
>>subplot(2,2,4);
>>plot(y0,E(:,10),'k.--',x0,E(10,:),'-o');
Приведенный алгоритм рекомендуется выполнить с помощью текстового редактора MATLAB (см. работу №1).
Полученный графический результат необходимо дополнить соответствующими пояснениями как показано на рис. 9., с использованием меню окна Figure.
19
ОТЧЕТ ПО РАБОТЕ
Отчет по работе должен содержать все необходимые сведенья для построения графиков функций одной переменной и поверхностей, а так же дополнительных возможностей для пояснений к графикам. Результатом выполнения практической части должен быть рисунок, приведенный на рис. 9 (сохранить в формате jpg).
Рис. 9
КОНТРОЛЬНЫЕ ВОПРОСЫ
1.Графические возможности системы MATLAB?
2.Системные процедуры, используемые для построения графика функции одной переменной?
3.Как задается равномерная сетка в плоскости Oxy?
20
4.Системные процедуры, используемые для построения поверхностей?
5.Какие возможности предусмотрены в системе для пояснения графиков и их редактирования?
6.Какую функцию необходимо использовать для разбиения графического окна на несколько областей?
7.С помощью какой функции строится векторное поле?
ЛАБОРАТОРНАЯ РАБОТА № 3 ОСНОВЫ ПРОГРАММИРОВАНИЯ В MATLAB
Цель работы : изучение особенностей программирования в системе MATLAB.
В практической части работы предлагается написать программу определения показателя политропы.
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
Практически невозможно предусмотреть в одной, даже самой большой и мощной, математической системе возможность решения всех задач, которые могут интересовать пользователя. Программирование в системе MATLAB является эффективным средством ее расширения и адаптации к решению специфических проблем. Оно реализуется с помощью языка программирования системы. Большинство объектов этого языка, в частности все команды, операторы и функции, одновременно являются объектами входного языка общения с системой в командном режиме работы. Программы на языке программирования MATLAB сохраняются в виде текстовых m-файлов.
Приведенные выше примеры программ (см. работы №№ 1, 2) часто называют скриптами (script – файлы). Более удобной разновидностью m – файлов являются функции, первой строкой которых является заголовок, использующий оператор
21
function. Использование функций является удобным средством разделения программы на отдельные блоки алгоритмов, обратиться к которым можно из любой точки программы.
Функции получают исходные данные в виде списка входных параметров и возвращают результаты своей работы также в виде списка выходных параметров. Одной из самых важных особенностей функций является аппарат локальных переменных. Все переменные, появляющиеся в теле функции, за исключением глобальных переменных, входных и выходных параметров, считаются локальными. Они образуют локальное рабочее пространство и доступны только в теле породившей их функции, и никакие скрипты или другие функции воспользоваться ими не могут. При написании программ – функций требуется, чтобы имя m – файла, в котором запоминается программа обязательно совпадало с именем функции.
Пример универсальной программы вычисления n! может быть написан следующим образом и должен быть сохранен под именем fact.m :
function y=fact(n) k=1
for i=1:n k=k*I ;
end y=k ;
Для вычисления 5! Достаточно набрать в текущей строке :
>>p=fact(5)
p=
120
Отметим, что при обращении к функции должно выполнятся соответствие между числом входных и выходных параметров. Так например обращения типа:
>>[k1,k2]=fact(5)
22
???Ошибка использования ==> fact Слишком много выходных аргументов. >> k1=fact(5,6)
???Ошибка использования ==> fact Слишком много входных аргументов. >> [k1,k2]=fact(5,6)
???Ошибка использования ==> fact Слишком много входных аргументов.
вызовут ошибку, и работа программы будет прекращена.
Влюбом m – файле можно описать несколько функций (в скриптах не допускается описание функций). Самая первая из них обладает тем преимуществом, что может быть вызвана извне. Все остальные функции считаются внутренними и доступны только в рамках данного m – файла. Функция может не содержать входных и выходных параметров. Если такая функция является внешней, то она выполняет роль скрипта. Однако в отличии от скрипта в ней могут присутствовать другие подфункции, отпадает необходимость в использовании функций как отдельных m – файлов, и текст программы можно целиком поместить в одном файле, а внешние подключать как дополнительные библиотеки (например файлы данных). Поэтому рекомендуем для написания программы отказаться от скриптов и оформлять программу сразу в виде функции без входных и выходных параметров.
Входной язык Matlab насчитывает всего 9 операторов, использующих 14 служебных слов. Соответствующие синтаксические конструкции приведены ниже (табл. 1):
23
|
|
|
|
|
|
|
Таблица 1 |
|
|
Формат |
|
|
|
|
|
|
|
№ |
оператора |
|
|
Пояснение |
|
|
|
|
|
|
|
|
|
|
|||
|
|
Оператор |
|
присваивания, |
вычисляет |
|||
1 |
var =expr |
значение выражения expr |
и заносит |
|||||
результаты |
|
вычислений |
в |
|||||
|
|
|
||||||
|
|
переменную var |
|
|
|
|
||
2 |
if условие 1 |
Условный |
|
|
оператор. |
|
Если |
|
|
операторы_1 |
справедливо |
условие_1, |
то |
||||
|
elseif условие_2 |
выполняется группа операторы_1, |
||||||
|
операторы_2 |
если справедливо условие_2, то |
||||||
|
elseif условие_3 |
выполняется группа операторов_2,… |
||||||
|
операторы_3 |
Если все указанные условия не |
||||||
|
…………………… |
справедливы, |
то |
выполняются |
||||
|
else |
операторы, |
расположенные |
между |
||||
|
операторы |
else и end |
|
|
|
|
||
|
end |
|
|
|
|
|
|
|
3 |
switch expr |
Переключатель |
по |
|
значению |
|||
|
case var_1 |
выражения expr. Если оно совпадает |
||||||
|
операторы_1 |
с величиной var_1, то выполняются |
||||||
|
case var_2 |
операторы_1, … |
|
|
|
|
||
|
операторы_2 |
Если expr не совпадает ни с одной из |
||||||
|
……………. |
перечисленных |
величин, |
то |
||||
|
Otherwise |
выполняются |
|
|
операторы |
|||
|
операторы |
расположенные |
между |
otherwise |
||||
|
end |
и end |
|
|
|
|
|
|
|
|
|
|
|
||||
4 |
for var=e1:e2:e3 |
Цикл |
типа |
арифметической |
||||
|
операторы |
прогрессии, в котором переменная |
||||||
|
end |
var при каждом повторении тела |
||||||
|
|
цикла |
|
изменяется |
|
от |
||
|
|
первоначального значения |
e1 с |
|||||
|
|
шагом e2 до конечного значения e3. |
||||||
|
|
24 |
|
|
|
|
|
|
Продолжение табл. 1
|
|
|
|
|
||
5 |
while условие |
Цикл |
с |
предусловием, |
||
|
операторы |
повторяющийся до тех пор пока |
||||
|
end |
истинно указанное условие. |
||||
6 |
try |
Попытка |
выполнить |
|
группу |
|
|
операторы_1 |
операторы_1. При условии, что |
||||
|
catch |
в результате их выполнения |
||||
|
операторы_2 |
произошла |
|
ошибка, |
то |
|
|
end |
управление |
передается |
группе |
||
|
|
операторы_2. Если ошибка не |
||||
|
|
произошла |
|
выполняются |
||
|
|
операторы_1. |
|
|
||
7 |
break |
Досрочный |
выход |
из |
||
|
|
конструкций |
типа |
|
for, |
|
|
|
while, |
|
switch, |
|
try- |
|
|
catch |
|
|
|
|
8 |
function |
Заголовок функции. y1, y2,… - |
||||
|
[y1,…]=fun(x1,…) |
список выходных параметров. |
||||
|
|
x1,x2,… |
- |
список |
входных |
|
|
|
параметров. |
|
|
|
|
9 |
return |
Досрочный |
выход |
из |
тела |
|
|
|
функции. |
|
|
|
|
Комментарии начинаются с символа % и располагаются с начала строки либо правее любого последнего оператора строки. Начальные комментарии выполняют особую роль. Первая группа строк с подряд идущими комментариями до пустой строки образует текст, выдаваемый в командном окне по команде help с именем m – файла. Добавим, например, к приведенной выше программе вычисления 5! Следующий комментарий (рис. 1):
Выполним команду: >> help fact
25
Функция вычисления факториала числа
>>
Рис. 1 Важным при написании программ является взаимодействия
пользователя с программой. Простейший способ ввода числовой и символьной информации, набираемой с клавиатуры, использует функцию input. Эта функция допускает два формата обращения :
>> x=input('Введите x= ');
Введите x=
В данном случае программа ожидает ввода (с клавиатуры) значения, которое будет присвоено переменной x. Вместо конкретного значения пользователь может ввести выражение, величина которого будет подсчитана с учетом текущего состояния переменных рабочего пространства.
Второй формат обращения к функции input имеет вид : x=input('Введите x','s');
В данном случае текст, вводимый пользователем, будет рассматриваться как строка символов.
26
Для того чтобы вывести на экран значение некоторой переменной можно исключить знак ';' в конце строки, например :
>>x= 5;
>>x
x=
5
Более гибким вариантом вывода является использование
функции disp :
>>disp(x)
5
>>disp('x^2+3')
x^2+3
>>
Как видно данная функция не отображает имя выводимой переменной и дает возможность дополнить вывод определенными пояснениями, например :
>> disp(strcat('Значение переменной x= ',num2str(x)));
Значение переменной x=5
>>
В данном примере текст выводимый функцией disp был составлен из двух строк : ' Значение переменной x= ', '5' (функция num2str(x,n) преобразует значение переменной x в строковый тип, n – количество цифр дробной части ). Функция strcat('s1','s2') выполняет операцию горизонтального объединения двух строк s1 и s2. Для вертикального объединения можно воспользоваться функцией strvcat :
>> disp(strvcat('Значение переменной x= ',int2str(x)));
Значение переменной x= 5
27
>>
Отладка программы производится с помощь пунктов Debug и Breakpoint меню окна текстового редактора системы, путем установки точек останова программы. Выполнение программы приостанавливается при достижении строки помеченной точкой как показано на рис. 2. При этом можно проверить значения переменных, выполнить определенные действия по определению корректного значения переменных и т.д. Дальнейшее выполнение программы можно организовать пооператорно (для продолжения нажать F10), что облегчает поиск ошибки, а можно и в обычном режиме (до конца или до следующей точки останова) используя клавишу F5. Как видно из рис.2 с помощью пункта Breakpoints можно регулировать условия останова выполнения программы в случае появления ошибки (stop if error), недопустимого значения переменных (stop if NaN Or Inf) или появлении предупреждения (stop if warning).
Рис. 2
28