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

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


Скачать 3.25 Mb.
НазваниеОсновы работы с математическими пакетами (MathCad)
Дата28.09.2022
Размер3.25 Mb.
Формат файлаpdf
Имя файлаТема-3-5.pdf
ТипДокументы
#702801
страница13 из 17
1   ...   9   10   11   12   13   14   15   16   17
Тема 3.5. Основы работы с математическими пакетами
Страница 364
аппарат локальных переменных. Структура такого модуля с одним выходным параметром выглядит следующим образом:
имя-файла
function var=f_name(Cnиcoк_napaмeтpов)
% Основной комментарий
% Дополнительный комментарий
Тело m-файла
vаr=выражение
m-
функции имеют следующие особенности:

он начинается с объявления function, после которого указывается имя переменной
var - выходного параметра, имя самой функции и список ее входных параметров;

функция возвращает свое значение и может использоваться в виде
f_name (список_параметров) в математических выражениях;

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

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

правила вывода комментариев те же, что у файлов-программ;

файл-функция служит средством расширения системы MatLab;

при обнаружении файла-функции он компилируется и затем исполняется, а созданные машинные коды хранятся в рабочей области системы MatLab.
Последняя конструкция vаг=выражение вводится, если требуется, чтобы функция возвращала результат вычислений.
Приведенная форма файла-функции характерна для функции с одним выходным параметром. Если выходных параметров больше, то они указываются в квадратных скобках после слова function. При этом структура модуля имеет следующий вид:
имя-файла
function [varl,var2....]=f_name(Список_параметров)
% Основной комментарий
% Дополнительный комментарий
Тело файла с любыми выражениями
vаг1=выражение
vаг2=выражение
Такая функция во многом напоминает процедуру. Ее нельзя слепо использовать непосредственно в математических выражениях, поскольку она возвращает не единственный результат, а множество результатов — по числу выходных параметров.
Если функция используется как имеющая единственный выходной параметр, но имеет ряд выходных параметров, то для возврата значения будет использоваться первый из них.
Это зачастую ведет к ошибкам в математических вычислениях. Поэтому, как отмечалось,
данная функция используется как отдельный элемент программ вида:
[var1,var2,... ]=f_nаmе(Список_параметров)
После его применения переменные выхода varl, var2,... становятся определенными и их можно использовать в последующих математических выражениях и иных сегментах

Тема 3.5. Основы работы с математическими пакетами
Страница 365
программы. Если функция используется в виде f_nаmе(Список_параметров), то возвращается значение только первого выходного параметра — переменной varl.
Переменные, указанные в списке параметров функции, являются локальными и служат для переноса значений, которые подставляются на их место при вызовах функций.
Эта особенность переменных-параметров хорошо видна при разборе примера 5.3.3, результат работы которого показан на рис. 5.3.3.
Пример_5_3_2_2
function z=fun(x,y)
% Пример 5.3.2-2
z=x^2+y^2;
Пример 5.3.2-2
>> z=fun(2,3);
>> x=
0
>> y=
0
>>z=
13
>>
В этом примере в окне редактора создана функция fun(x,y) двух переменных х и у,
вычисляющая z = х
2
+ у
2
. Поскольку переменные х и у указаны как параметры функции
fun(x, у), то они являются локальными. В примере вне тела функции им заданы нулевые значения. Очевидно, что при вычислении значения fun(2, 3) в теле функции задается х=2 и
у=3. Поэтому результат - z=13. Однако после выхода из тела функции переменные х и у
принимают свои исходные значения, равные нулю. Так что эти переменные меняют свои значения на значения параметров функции только локально — в пределах тела функции.
А каков статус переменной z в нашем примере? Она, как и любая переменная, определенная в теле функции, также будет локальной. Изначально ее значение не определено. В теле функции переменная принимает значение z=13. А после возврата из функции, как нетрудно увидеть из примера 5.3.3, переменная z, несмотря на ее применение в теле функции,
остается неопределенной. На это указывает сообщение, отображаемое после попытки вывода значения переменной z.
Возврат из функции производится после обработки всего тела функции, т. е. при достижении конца файла функции. При использовании в теле функции условных операторов, циклов или переключателей иногда возникает необходимость осуществить возврат функции раньше, чем будет достигнут конец файла. Для этого служит команда
return. В любом случае, результатом, возвращаемым функцией, являются значения выходных параметров (в нашем случае выходным параметром является переменная z),
присвоенные им на момент возврата.
У нашей функции имеется один недостаток — вывод на индикацию значения z=13 из тела функции, хотя после этого z остается равным 0. Чтобы убрать побочный эффект вывода значения z, достаточно установить знак ; после математического выражения, определяющего
z.
Этот пример наглядно показывает, что пропуск любого слова или даже простого оператора (вроде знака ;) может привести к не сразу понятным побочным эффектам и даже неверной работе функции. Программирование требует особой точности и педантичности.
Из сказанного ясно, что переменные в файлах-программах являются глобальными, а в файлах-функциях - локальными. Нередко применение глобальных переменных в

Тема 3.5. Основы работы с математическими пакетами
Страница 366
программных модулях может приводить к побочным эффектам. Применение локальных переменных устраняет эту возможность и отвечает требованиям структурного программирования.
Однако передача данных из модуля в модуль в этом случае происходит только через входные и выходные параметры, что требует тщательного планирования такой передачи.
Однако и при создании файлов-функций порой желательно применение глобальных переменных. Ответственность за это должен брать на себя программист, создающий программные модули.
Команда
global varl var2...
позволяет объявить переменные модуля-функции глобальными. Таким образом, внутри функции могут использоваться и такие переменные, если это нужно по условиям решения вашей задачи. Причем, чтобы несколько программных модулей могли совместно использовать глобальную переменную, она должна быть объявлена как global во всех модулях.
Часто в ходе вычислений возникают ошибки. Например, при вычислении функции
sin(x)/x - при х = 0 имеет место ошибка вида «деление на ноль». При появлении ошибки вычисления могут завершиться досрочно с выводом сообщения об ошибке. Следует, однако,
отметить, что не все ошибки вызывают остановку вычислений. Некоторые сопровождаются только выдачей предупреждающей надписи. Такие ситуации должны учитываться программистом, отмечаться как ошибочные и по возможности устраняться. Для вывода сообщения об ошибке служит команда
error('Сообщение об ошибке');
при выполнении, которой вычисления прерываются, и выдается сообщение об ошибке,
заданное в апострофах. Ниже дан пример вычисления функции sd(x)=sin(x)/x, в котором задано сообщение об ошибке:
Пример_5_3_2_3
function f=sd(x)
if x==0 error('Ошибка - деление на 0'). end
f=sin(x)/x ;
Для выявления ситуации об ошибке использован оператор условного перехода if,
который будет описан детально несколько позднее. Результат выполнения данной функции приводится ниже:
Пример 5.3.2-3
>>x=0;
>>f=sd(x);
???Ошибка - деление на 0
>>x=1;
>>f=sd(x);
>> f=
>>

Тема 3.5. Основы работы с математическими пакетами
Страница 367
Если остановка программы при появлении ошибки нежелательна, то может использоваться команда вывода предупреждающего сообщения
warning('Предупреждающее сообщение').
Эта команда выводит стоящее в апострофах сообщение, но не препятствует дальнейшей работе программы. Признаком того, что является ошибкой, а что - предупреждением, являются символы ??? и слово Warning в соответствующих сообщениях.
При создании функций со специальными свойствами весьма полезны две приведенные ниже функции:
nargin — возвращает число входных параметров данной функции;
nargout — возвращает число выходных параметров данной функции.
Пусть, к примеру, мы хотим создать функцию, вычисляющую сумму квадратов пяти аргументов xl, х2, хЗ, х4 и х5.
Обычный путь состоит в следующем — создаем функцию с именем sum2_5:
sum2_5_Пример_5_3_2_4
function f=sum2_5(x1,x2,x3,x4,x5);
f=x1^2+x2^2+x3^2+x4*2+x5^*2;
Пример 5.3.2-4
» sum2_5_Пример_5_3_2_4 (l,2,3,4,5)
ans =
55
» sum2_5(l,2)
??? Input argument 'хЗ' is undefined.
Error in ==> C:\MATI_AB\bin\sum2_5.m
On line 2 ==> f=x1^2+x2^2+x3^2+x4^2+x5^2;
>>
Итак, при наличии всех пяти аргументов функция работает корректно. Но если аргументов менее пяти, она выдает сообщение об ошибке. С помощью функции nargin
можно создать функцию sum2_5m, которая работает корректно при любом числе заданных входных аргументов в пределах от 1 до 5:
sum2_5_Пример_5_3_2_5
f unction f=sum2_5m(x1 ,x2 , хЗ ,x4 , x5) ;
n=nargin;
if n==1 f=x1^2; end
if n==2 f=x1^2+x2^2;end
if n==3 f=x1^2+x2^2+x3^2; end
if n==4 f=x1^2+x2
^
2+x3^2+x4
^
2: end
if n==5 f=x1^2+x2^2+x3^2+x 4^2+x5^2
В данной функции используется условный оператор if...end, который будет детально описан далее. Но и без этого ясно, что благодаря применению функции nargin и условного оператора, вычисления всякий раз идут по формуле с числом слагаемых, равным числу входных аргументов - от одного до пяти. Это видно из приведенных ниже примеров:
Пример 5.3.2-5

Тема 3.5. Основы работы с математическими пакетами
Страница 368
» sum2_5m(1)
ans =
1
» sum2_5m(1,2)
ans =
5
» sum2_5m( 1,2,3)
ans =
14
» sum2_5m(1,2,3,4)
ans =
30
» sum2_5m(1,2,3,4,5)
ans=
55
» sum2_5m(1,2,3,4,5,6)
??? Error using ==> sum2_5m
Too many input arguments.
>>
Итак, при изменении числа входных параметров от 1 до 5 вычисления проходят корректно. При большем числе параметров выводится сообщение об ошибке. Это уже действует встроенная в интерпретатор MatLab система диагностики ошибок
Как отмечалось, команда help name, где name — имя m-файла, обеспечивает чтение первой строки с текстовым комментарием и тех строк с комментариями, которые следуют непосредственно за первой строкой. Комментарий, расположенный за пределами этой области, не выводится. Это позволяет создавать невыводимый программный комментарий.
Пустая строка прерывает вывод комментария при исполнении команды
help name. Команда type name выводит текст программы со всеми комментариями, в том числе и следующими после пустых строк.
Команда help catalog, где catalog — имя каталога с
m
-файлами, позволяет вывести комментарий, общий для всего каталога. Такой комментарий содержится в файле
contents.m, который пользователь может создать самостоятельно с помощью редактора
m
-
файлов. Если такого файла нет, то будет выведен список первых строк комментариев для всех m-файлов каталога.
m
-файлы-функции могут использоваться как в командном режиме, так и вызываться из других
m
-файлов. При этом необходимо указывать все входные и выходные параметры.
Исключением является случай, когда выходной параметр единственный — в этом варианте функция возвращает единственный результат и может использоваться в математических выражениях. При использовании глобальных переменных они должны быть объявлены во всех
m
-файлах, используемых в решении заданной задачи, и во всех входящих в них встроенных подфункциях.
Имена функций должны быть уникальными. Это связано с тем, что при обнаружении каждого нового имени MatLab проверяет, относится ли это имя к переменной, подфункции в данном
m
-файле, частной функции в каталогах PRIVATE или функции в одном из каталогов пути доступа. Если последняя встречается, то будет исполнена именно эта функция.
Если аргумент функции используется только для вычислений и его значения не меняются, то аргумент передается ссылкой, что уменьшает затраты памяти. В других случаях аргумент передается значением. Для каждой функции выделяется своя (рабочая)
область памяти, не входящая в область, предоставляемую системе MatLab. Глобальные

Тема 3.5. Основы работы с математическими пакетами
Страница 369
переменные принадлежат ряду областей памяти. При их изменении меняется содержимое всех этих областей.
При решении задач с большим объемом данных может ощущаться нехватка оперативной памяти. Признаком этого становится появление сообщения об ошибке
«Out
of memory».
В этом случае может быть полезным применение следующих мер:

стирание ставших ненужными данных, прежде всего больших массивов;

увеличение размеров файла подкачки Windows;

уменьшение размера используемых данных;

снятие ограничений на размеры используемой памяти;

увеличение объема физической памяти компьютера.
Чем больше емкость ОП компьютера, на котором используется система MatLab тем меньше вероятность возникновения указанной ошибки. Опыт показывает, что даже при решении задач умеренной сложности емкость ОЗУ не должна быть менее 256 Мбайт.
3.5.3.4.3. Работа с m-файлами
Во время работы в MatLab часто необходимо создавать или редактировать
m
-файлы, а после этого возвращаться в командное окно MatLab для отладки или вычислений. Для этого имеется специальный редактор/отладчик, в котором можно исправлять текст и выполнять пошаговую отладку программы. После исправления необходимо сохранить сделанные изменения. Причем
m
-файлы, с которыми работают,
должны быть доступны. Для этого либо текущая директория должна быть директорией с вашими файлами, либо необходимо проложить туда путь. Это можно сделать с помощью пункта меню File/Set Path, который позволяет сделать директории доступными.
Для поиска
m
-файлов система MatLab использует механизм путей доступа,
поскольку
m
-файлы записываются в каталоги или папки файловой системы. Например, при поиске файла с именем foo, МatLab выполняет следующие действия:
∂ просматривает, не является ли foo именем переменной;
∂ просматривает, не является ли foo встроенной функцией;
∂ ищет в текущем каталоге
m
-файл с именем foo.m;
∂ ищет
m
-файл с именем foo.m во всех каталогах списка путей доступа.
Реально применяемые правила поиска являются более сложными. Однако приведенный выше упрощенный порядок поиска точно отражает механизм поиска
m
-
файлов, с которыми обычно работает пользователь.
В процессе сеанса работы можно вывести на дисплей или внести изменения в список путей доступа, используя следующие функции:
path - выводит на экран список путей доступа;
path(s) - заменяет существующий список списком s;
addpath/home/lib и path(path, ’/home/lib’) -добавляют новый каталог текущего подкаталога в список путей доступа;
rmpath /home/lib -удаляет путь /home/lib из списка.
Список путей доступа, используемый по умолчанию, определен в файле pathdef.m,
который размещен в каталоге lосаl; этот файл выполняется при каждом запуске системы
MatLab.
Кроме работы из командной строки, существует средство просмотра путей доступа
Path Browser, которое поддерживает удобный графический интерфейс для просмотра и изменения списка путей.

Тема 3.5. Основы работы с математическими пакетами
Страница 370
Система MatLab использует понятие текущего каталога при работе с m-файлами во время сеанса работы. Начальный текущий каталог определен в файле запуска.
Для вывода текущего каталога на экран предназначена команда cd. Для изменения текущего каталога следует использовать команду
сd <новый путь доступа>.
Как было указано выше, при работе в системе Windows имеется специальное средство для просмотра и изменения путей доступа Set Path (рис. 5.3.3-1). Показанное далее окно открывается либо из меню File/Set Path основного окна, либо с помощью кнопки на инструментальной панели.
После дополнения списка путей доступа необходимо сохранить новый путь с помощью пункта меню File/Save Path, в противном случае установленный путь будет известен системе только на время одного сеанса работы.
Рис. 5.3.3-1. Окно Set Path
Редактор/отладчик предоставляет из себя как средства редактирования текста m-
файла, так и средства пошаговой его отладки. Один из способов вызова редактора – вызов из командной строки MatLab с помощью команды edit. Например, команда
edit
poof откроет встроенный редактор для редактирования файла poof.m, если в меню File в диалоговом окне Preferences не установлен вами другой редактор.
Можно открыть редактор и другим способом – с помощью меню File/New или кнопки New File на панели инструментов. Для открытия существующего m-файла
выберите пункт File/Open или щелкните на кнопке Open File.
После вызова редактор/отладчик будет иметь вид, показанный на рис. 5.3.3-2

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


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