Главная страница

Тема-3-5. Основы работы с математическими пакетами (MathCad)


Скачать 3.25 Mb.
НазваниеОсновы работы с математическими пакетами (MathCad)
Дата28.09.2022
Размер3.25 Mb.
Формат файлаpdf
Имя файлаТема-3-5.pdf
ТипДокументы
#702801
страница14 из 17
1   ...   9   10   11   12   13   14   15   16   17

Тема 3.5. Основы работы с математическими пакетами
Страница 371
Рис. 5.3.3-2. Общий вид редактора/отладчика
Редактор, используемый в системе, имеет синтаксическую раскраску, т.е. слово или символ по мере ввода приобретают тот цвет, который соответствует их типу. Редактор различает такие типы вводимых слов:
∂ комментарии
∂ ключевые слова
∂ незаконченные строки
∂ законченные строки
∂ другой текст.
С помощью пункта меню Tools/Fonts можно настроить такие важные параметры,
как используемый шрифт. В основном данный редактор не отличается от обычного многооконного текстового редактора - в нем работают все редактирующие клавиши (Del,
Bspace, Home и т.д.). При редактировании файлов вы можете непосредственно перейти к требуемой строке при помощи пункта меню Edit/GoTo Line и указать номер требуемой строки в появившемся окне. После редактирования файла и повторного его запуска из командного окна желательно предварительно сохранить новый вариант файла. Но можно запускать редактируемый файл на выполнение, не выходя из редактора (т.е. не переходя в командное окно) с помощью пункта меню Debug/Run. При этом предварительное сохранение текста исправлений не требуется.
Одной из важных особенностей данного редактора является то, что после проведения вычислений можно в редакторе просмотреть значения переменных, которые они имеют в текущий момент в рабочей области. Для этого достаточно установить курсор мыши на этой переменной, и появится прямоугольник с желтым фоном, на котором выводится текущее значение переменной. Если переменная является большой матрицей, то таким образом увидеть целиком ее не удастся. Для просмотра (и возможного исправления при отладке) всех значений матрицы есть специальный пункт меню View/Workspace Browser. Имеется еще два интересных пункта в меню View. Это пункт Evaluate Selection, который позволяет вычислять значение выделенного выражения и помещать результат в командное окно, и пункт Auto Indent Selection, который выполняет автоматическое форматирование текста программы с отступами в соответствии с правилами MatLab. Выбор пункта меню
View/Options позволяет получить доступ к диалоговому окну, в котором можно настроить параметры редактора.
Отладка программного кода - это процесс, в ходе которого могут быть выявлены ошибки двух видов:

Тема 3.5. Основы работы с математическими пакетами
Страница 372
синтаксические, которые связаны с неточностью записи имен m-функций или арифметических выражений. MatLab обнаруживает большинство синтаксических ошибок, сопровождая их сообщением об ошибке с указанием номера строки соответствующего m-файла;
ошибки времени выполнения, которые, как правило, имеют алгоритмическую природу и проявляются в том, что приводят к непредвиденным результатам.
Достаточно легко можно исправить синтаксические ошибки, которые сопровождаются сообщениями о причинах их возникновения. Ошибки времени выполнения выявить более сложно, потому что локальная рабочая область m-функции оказывается потерянной, если ошибка приводит к возврату в рабочую область системы MatLab. Чтобы определить причину такой ошибки, можно использовать один из следующих приемов:
∂ реализовать вывод результатов промежуточных вычислений на дисплей, удалив в соответствующих операторах точки с запятой, которые подавляют вывод на экран промежуточных результатов;
∂ добавить в m-файл команды keyboard, которые останавливают выполнение m-
файла и разрешают проверить и изменить переменные рабочей области вызываемой m-функции(в этом режиме появляется специальное приглашение ), а возврат к выполнению функции реализуется командой return);
∂ закомментировать заголовок функции и выполнить m-файл как сценарий (это позволяет проследить результаты промежуточных вычислений в рабочей области системы);
∂ использовать отладчик системы МatLab.
Отладчик полезен для исправления ошибок во время выполнения программы именно потому, что он дает возможность отслеживать рабочие области функции и проверять или изменять значения соответствующих переменных. Отладчик позволяет устанавливать и удалять контрольные точки, то есть специальным образом помеченные строки m-файла, в которых выполнение останавливается. Это дает возможность изменять содержимое рабочей области, просматривать стек вызова m-функций и выполнять
m
-файл построчно. Отладчик может функционировать как в режиме командной строки, так и в режиме графического интерфейса пользователя.
Далее мы рассмотрим отладку только в режиме графического интерфейса пользователя, поскольку он наиболее прост и нагляден. Рассмотрим возможности отладки,
которые нам предоставляет Editor/Debugger.
Для его запуска используется команда edit <имя_файла> или пункт меню File/Open.
Можно открыть окно редактора/отладчика и с помощью пункта меню File/New/M-file. При таком варианте имя отлаживаемого файла открывается уже из меню самого редактора/отладчика. Общий вид окна редактора показан на рис. 5.3.3-2.
Способ использования кнопок понятен из их названия. Часть кнопок представляют собой обычные редактирующие кнопки, используемые при сохранении, копировании, печати и поиске файлов. Другая часть связана непосредственно с отладкой. Это кнопки установки и очистки точек остановки, кнопки пошагового перемещения по программе с заходом в подпрограммы (Step in) и без захода в под- программы (Single Step), кнопка продолжения вычислений (Continue) и кнопка остановки отладки (Quit Debugging). Как было отмечено выше, с помощью пункта меню
View/Workspace Browser можно не только просмотреть, но и изменить значение любой переменной. При этом в одном из окон редактора открывается таблица, подобная электронной таблице, и в ней можно не только просматривать, но и исправлять значения переменных.

Тема 3.5. Основы работы с математическими пакетами
Страница 373
3.5.3.4.4. Редактор m-файлов
В MatLab имеется редактор
m
-файлов, для запуска которого следует нажать кнопку
New m-file на панели инструментов рабочей среды, либо выбрать в меню File в команду
New/ m-file. На экране появляется окно редактора. Наберите в нем какие-либо команды,
например для построения графика:
Пример 5.3.4-1
%
%
x=[-1:0.01:1];
y=exp(x);
plot(x,y)
grid on
title('Экспоненциальная функция')
Для запуска программы или ее части есть несколько способов. Первый, самый простой – выделить операторы при помощи мыши, удерживая левую кнопку, или при помощи клавиши со стрелками,
,
и выбрать Text пункт
Evaluate Selection (или нажать
). Выделенные операторы выполняются последовательно, точно так же, как если бы они были набраны в командной строке.
Очевидно, что работать в m-файле удобнее, чем из командной строки, поскольку можно сохранить программу, добавить операторы, выполнять отдельные команды, не пробегаясь по истории команд, как в случае командной строки.
После того, как программа сохранена в
m
-файле, к примеру, в myprog.m, для ее запуска можно использовать пункт Run меню Debug, либо набрать в командной строке имя
m
-файла (без расширения) и нажать , то есть выполнить, как команду MatLab. При таких способах запуска программы следует учесть важное обстоятельство — путь к каталогу с
m
-файлом должен быть известен MatLab. Сделайте каталог с файлом myprog текущим.
В MatLab в меню File рабочей среды перейдите к пункту Set Path… Появляется диалоговое окно Path Browser (навигатор путей). В строке ввода Current Directory
установите требуемый каталог. Воспользуйтесь кнопкой, расположенной справа от строки ввода, для выбора каталога.
В MatLab установка текущего каталога производится из окна Current Directory
рабочей среды. Если это окно отсутствует, то следует выбрать пункт Current Directory
меню View рабочей среды. Для выбора желаемого каталога на диске нажмите кнопку,
расположенную справа от раскрывающегося списка.
Когда текущий каталог установлен, то все
m
-файлы, находящиеся в нем, могут быть запущены из командной строки, либо из редактора
m
-файлов. Все переменные файл- программ после ее запуска доступны в рабочей среде, т. е. являются глобальными. Убедитесь в этом, выполнив команду whos. Более того, файл-программа может использовать переменные рабочей среды. Например, если была введена команда:
-Пример 5.3.4-2
>> a=[0.1 0.4 0.3 1.9 3.3];
>>
то файл-программа,

Тема 3.5. Основы работы с математическими пакетами
Страница 374
-Пример_5_3_4_2
%
%
bar(а)
содержащая строку bar(а), построит столбцевую диаграмму вектора a (разумеется, если он не был переопределен в самой файл-программе).
Файл-функции отличаются от файл-программ тем, что они могут иметь входные и выходные аргументы, а все переменные, определенные внутри файл-функции, являются локальными и не видны в рабочей среде.
m
-файл, содержащий файл-функцию, должен начинаться с заголовка, после него записываются операторы MatLab. Заголовок состоит из слова function, списка выходных аргументов, имени файла-функций и списка входных аргументов. Аргументы в списках разделяются запятой. Пример 5.3.4-3 содержит простейшей файл-функции с двумя входными и одним выходным аргументами.
-Пример_5_3_4_3
function c=mysum(a,b)
c=a+b;
Наберите этот пример в новом файле в редакторе и сохраните его. Обратите внимание, что
MatLab предлагает в качестве имени
m
-файла название файла-функций, т.е. mysum.m.
Всегда сохраняйте файл-функцию в
m
-файле, имя которого совпадает с именем файл- функции! Убедитесь, что каталог с файлом mysum.m является текущим и вызовите файл- функцию mysum из командной строки:
Пример 5.3.4-3
>> s=mysum(2,3)
s =
5
>>
При вызове файл-функции mysum произошли следующие события:
∂ входной аргумент a получил значение 2;
∂ входной аргумент b стал равен 3;
∂ сумма a и b записалась в выходной аргумент c;
∂ значение выходного аргумента c получила переменная s рабочей среды и результат вывелся в командное окно.
Заметьте, что оператор c=a+b в файл-функции mysum завершен точкой с запятой для подавления вывода локальной переменной c в командное окно. Для просмотра значений локальных переменных при отладке файл-функций, очевидно, не следует подавлять вывод на экран значений требуемых переменных.
Практически все функции MatLab являются файл-функциями и хранятся в одноименных m-файлах. Функция sin допускает два варианта вызова: sin(x) и y=sin(x), в первом случае результат записывается в ans, а во втором — в переменную y. Наша функция
mysum ведет себя точно так же. Более того, входными аргументами mysum могут быть массивы одинаковых размеров или массив и число.
Разберем теперь, как создать файл-функцию с несколькими выходными аргументами.
Список выходных аргументов в заголовке файл-функции заключается в квадратные скобки,

Тема 3.5. Основы работы с математическими пакетами
Страница 375
сами аргументы отделяются запятой. В качестве Примера 5.3.4-4 приведена файл-функция
quadeq, которая по заданным коэффициентам квадратного уравнения находит его корни.
Пример_5_3_4_4
function [x1,x2]=quadeq(a,b,c)
%
D=b^2-4*a*c;
x1=(-b+sqrt(D))/(2*a);
x2=(-b-sqrt(D))/(2*a);
Пример 5.3.4-4
%При вызове quadeq из командной строки используйте квадратные скобки для
%указания переменных, в которые будут занесены значения корней:
>> [r1,r2]=quadeq(1,3,2)
r1 =
-1
r2 =
-2
>>
Заметьте, что файл-функцию quadeq можно вызвать без выходных аргументов, или только с одним выходным аргументом. В этом случае вернется только первый корень.
Файл-функция может и не иметь входных или выходных аргументов. Заголовки таких файл-функций приведены ниже:
function noout(a,b),
function [v,u]=noin,
function noarg()
Умение писать собственные файл-функции и файл-программы необходимо как при программировании в MatLab, так и при решении различных задач средствами MatLab (в частности, поиска корней уравнений, интегрирования, оптимизации). Разберем только один пример, связанный с построением графика функции
y=exp(-x).*(sin(x)+0.1*sin(100*pi*x)) на отрезке [0;1].
Используйте поэлементные операции для того, чтобы myfun( ) можно было вызывать от вектора значений аргумента и получать вектор соответствующих значений функции.
Пример_5_3_4_5
function y=myfun(x);
%
y=exp(-x).*(sin(x)+0.1*sin(100*pi*x));
%
График y можно получить двумя способами. Первый способ состоит в
%создании вектора %значений аргумента, скажем с шагом 0.01, заполнении
%вектор значений функции и вызове plot:
>> x=[0:0.01:1];
>> y=myfun(x);
>> plot(x,y)
>>

Тема 3.5. Основы работы с математическими пакетами
Страница 376
Пример 5.3.4-5
%%График
y можно получить двумя способами. Первый способ состоит в
%создании вектора значений аргумента, скажем с шагом 0.01, заполнении
%вектор значений функции и вызове plot:
>> x=[0:0.01:1];
>> y=myfun(x);
>> plot(x,y)
>>
3.5.3.4.5. Основные операторы m-языка
Помимо программ с линейной структурой, инструкции которых исполняются строго по порядку, существует множество программ, структура которых нелинейна. При этом ветви программ могут выполняться в зависимости от определенных условий, иногда с конечным числом повторений - циклов, иногда в виде циклов, завершаемых при выполнении заданного условия. Практически любая серьезная программа имеет нелинейную структуру.
Для создания таких программ необходимы специальные управляющие структуры. Они имеются в любом языке программирования, и в частности в MatLab.
Операторы ввода/вывода
. Приведем простой пример диалоговой программы.
Пример_5_3_5_1
% Вычисление длины окружности с диалоговым вводом радиуса r=0;
while r>=0,
r=input('Введите радиус окружности r=');
if r>=0 disp(' Длина окружности l='); disp(2*pi*r), end end
Эта программа служит для многократного вычисления длины окружности по вводимому пользователем значению радиуса r. Обратите внимание на то, что здесь мы впервые показываем пример организации простейшего диалога. Он реализован с помощью команды input:
input(`'Введите радиус окружности r=');
При выполнении этой команды вначале выводится запрос в виде строки, затем происходит остановка работы программы и ожидается ввод значения радиуса r (в общем случае числа). Ввод, как обычно, подтверждается нажатием клавиши <Enter>, после чего введенное число присваивается переменной r. Следующая строка
if r>=0 disp(' Длина окружности l = '); disp(2*pi*r);end
с помощью команды disp при r>=0 выводит надпись «Длина окружности 1=» и вычисленное значение длины окружности. Она представляет собой одну из наиболее простых управляющих структур типа if...end. В данном случае она нужна для остановки вычислений, если вводится отрицательное значение г (прием, который любят начинающие программисты).
Приведенные строки включены в управляющую структуру while...end. Это необходимо для циклического повторения вычислений с вводом значений r. Пока r>=0. цикл повторяется. Но стоит задать r<0, вычисление длины окружности перестает выполняться, а цикл завершается.

Тема 3.5. Основы работы с математическими пакетами
Страница 377
Если данная программа записана в виде
m
-файла Пример_5_3_5_1, то работа с ней будет выглядеть следующим образом:
Пример 5.3.5-1
Введите радиус окружности R=1
Длина окружности l=
6.2832
Введите радиус окружности R=2
Длина окружности l=
12.5664
Введите радиус окружности R=-1
»
Функция input может использоваться и для ввода произвольных строковых выражений. При этом она задается в следующем виде:
input('Комментарий', V)
При выполнении этой функции она останавливает вычисления и ожидает ввода строкового комментария. После ввода возвращается набранная строка. Это иллюстрирует следующий пример:
Пример 5.3.5-2
» S=input('Введите выражение ','s')
Введите выражение (Вводим) 2*sin(l)
S =
2*sin(l)
» eval(S)
ans =
1.6829
>>
Обратите внимание на то, что функция eval позволяет вычислить выражение,
заданное в символьном виде.
Условный оператор.
Условный оператор if в общем виде записывается следующим образом:
if Условие1
Инструкции_1
еlse lf Условие2
Инструкции_2
else
Инструкции_3
еnd
Эта конструкция допускает несколько частных вариантов. В простейшем
if Условие
Инструкции
end
Пока Условие возвращает логическое значение 1 (то есть «истина»), выполняются
Инструкции, составляющие тело структуры if...end. При этом оператор end указывает на

Тема 3.5. Основы работы с математическими пакетами
Страница 378
конец перечня инструкций. Инструкции в списке разделяются оператором , (запятая) или ;
(точка с запятой). Если Условие не выполняется (дает логическое значение 0, «ложь»), то
Инструкции также не выполняются.
Еще одна конструкция
if Условие
Инструкции_1
else
Инструкции_2
end
выполняет Инструкции_1, если выполняется Условие, или Инструкции_2 в противном случае.
Условия записываются в виде:
Выражение_1 Оператор_отношения Выражение_2,
причем в качестве Операторов_отношения используются следующие операторы: ==, <, >,
<=, >= или

=.
Оператор цикла – for...end.
Оператор цикла типа for...end обычно используются для организации вычислений с заданным числом повторяющихся циклов.
Конструкция такого цикла имеет следующий вид:
for vаг= s:d:e
Инструкция
….
Инструкция
end
где s — начальное значение переменной цикла var, d — приращение этой переменной и е - конечное значение управляющей переменной, при достижении которого цикл завершается.
Возможна и запись в виде s:е (в этом случае d=l). Список выполняемых в цикле инструкций завершается оператором end.
Следующие примеры поясняют применение цикла для получения квадратов значений переменной цикла:
Пример 5.3.5-3
» for 1=1:5 i^2, end;
ans =
1
ans =
4
ans =
9
ans =
16
ans =
25
» for x=0:.25:1 Х
^
2, end:
ans =
0
ans =

1   ...   9   10   11   12   13   14   15   16   17


написать администратору сайта