Brian_-_Matlab_R2007_s_nulya_33 (771739), страница 25
Текст из файла (страница 25)
Для этого в программе МАТ(АВ существует команда мЬз.1е. сз Используя команду иЬ11е, можно легко случайно создать «бесконечный цикл», который будет выполняться бесконечно, так как заданное вами условие никогда не возникнет. Помните, что прервать выполнение такого цикла вы можете с помощью клавиатурного сочетания ЩЩ в против. ном случае вам придется закрьггь программу МАТ).АВ. Неограниченные циклы Ниже представлен простой пример М-файла — сценария, который использует команду иЬ11е для числового суммирования бесконечной серии 1/1' + 1/2' + 1/3" + ..., которое останавливается только тогда, когда элементы становятся настолько малыми (сравнимо с машинной точностью), что числовая сумма перестает изменяться.
в=1) о14 = -1; пеившв = 0) иЬ11е пемвша > о1евшв о1евша = пеъгвшаз пеивша = пемвша + п*(-4)) п п + 1) Здесь мы устанавливаем переменную пеивша равной нулю и п равной 1, затем в цикле мы последовательно добавляем п" (-4) к пеивит, добавляем 1 к п и повторяем цикл. Назначение переменной о1овша состоит в том, что эта переменная МАТ(.АВ 128 отслеживает, насколько изменяется переменная пеииит от одной итерации к следующей. Каждый раз, когда программа МАТЮКАВ достигает конца цикла, она начинает цикл снова с выражения мЬх1еь Если переменная пеияизв больше о1с)иияь содержимое выражения иЬ11е является истинным и цикл выполняется снова. Но когда выражение в первый раз становится ложным, что произойдет, когда пвнзвит станет равно о1аяюв, программа МАТсАВ переходит к выражению епй и выполняет следующую строку, которая отображает конечное значение пемяизк (результат равен 1.0823 до 5 значащих цифр).
Начальное значение -1, которое мы придали переменной о1йяит, является произвольным, но оно должно быть отрицательным, чтобы при первом выполнении выражения мЬз1е его содержимое было истинным; если мы придздим переменной о1йиизв значение О, тогда программа МАТЕАВ перейдет к выражению епй без какого-либо выполнения команд в цикле.
$Г Несмотря на то, что вы можете составить М-файл, как показано выше, без точного определения количества запусков цикла, тем не менее, может быть полез. ным задать это количество хотя бы приблизительно. Так как вычисления с плавающей точкой на большинстве компьютеров выполняются с точностью до 16 десятичного знака, представленный выше цикл будет запускаться, пока и" (-4) не достигнет величины 10* (-16); то есть пока и не станет равна 10 "4. Таким образом, на большинстве компьютеров вычисление займет очень мало времени. Однако, если степень будет равна 2, а не 4, вычисление будет состоять из 10"8 операций, что отнимет много времени на большинстве современных компьютеров — достаточно много, чтобы поискать более эффективный способ суммирования серий, например, используя команду я1нвяияь если у вас установлен модуль ЗугпЬойс МвФ Тоо!Ьох (Инструментарий символьной математики).
влг Хотя здесь мы классифициювали команду ьгЬ11е как ииклическую, она также может быть командой ветвления. В действительности типы рафешенных въфажений и методов вычисления для въфажения мЬ11е являются точно такими же, как и для вьфажения зк. Скот)зите всчше фаздел «Леваческие вы(зажения», чтобы. познакомиться ближе с возможными вьфажениями, котсфые можно вводить внутрь вьфажения ьгЬз1 е. Прерывание цикла Иногда бывает необходимо, чтобы программа МАТьАВ преждевременно вышла из цикла бок, например, при возникновении определенного условия. Или в цикле иЬ11е может быть вторичное условие, когда необходима проверка в дополнение к основному условию в выражении иЬ11е.
Внутри любого из этих типов цикла вы можете использовать команду Ькев)с, чтобы заставить программу МАТ(.АВ остановить выполнение цикла и перейти к следующей строке после конца цикла. Команда Ькев)с в основном используется в составе выражения 16. В представ. ленном ниже М-файле-сценарии вычисляется та же сумма, что и в предыдущем примере, за исключением того, что в нем вводится точное значение верхнего предела количества итераций. 127 Глава 6.
Программирование аеввож = 0 Бог о = 1:100000 о14виж = пеевша) иенвша = иеевиза + и"(-4)г Н оы Ьгеа)с иеевиж В зтом примере цикл останавливается после того, как и достигает величины 100000 или когда переменная иемвиж останавливает изменение, причем неважно, что происходит первым. Обратите внимание, что команда Ьгеа)с игнорирует выражение еио, ассоциированное с хй, и переходит далее к ближайшему выражению еш), ассоциированному с командой цикла, в данном случае — с командой аког. Аругие команды программирования Ниже рассматриваются дополнительные команды и техники программирования. Подфунк((ми Кроме применения в первой строке в М-файле-функции команда хииск1ои может использоваться и далее в М-файле для задания вторичной функции, или подфункции, которая может быть использована везде в пределах М-файла, но не будет доступна напрямую из командной строки.
Например, в представленном ниже М-файле суммируются кубические корни вектора х вещественных чисел: йиаскйоа у = вшасиЬегоокв(х) у ~ виза(сиЬегоок(х) ); Ъ ---- ЯиЬйиисойои вФагФв Ьеге. хиосв1ои в сиЬегоов (х) г = вхви(х) .+вЬв(х) ."(1/3) г Здесь подфункция сиЬегоос извлекает кубический корень х позлементно. Подфункции можно использовать только в М.файле-функции, но не в М-файле- сценарии. В качестве примеров применения подфункций вы можете посмотреть многие встроенные М.файлы-функции программы МАТ(АВ.
Например, при вводе команды куре екр1оо будет отображено три различных подфункции. 128 МАТ~АВ Массивы ячеек и структур В главе 4 мы рассмотрели несколько типов данных; ранее в этой главе познакомились с еще одним типом, а именно — с логическими массивами. Два других типа данных, полезных в программировании МАТ[.А — это массивы ячеек и массивы структур. В сущности, массивы ячеек представляют собой «массивы массивов»; элементы массива ячеек могут иметь различные типы данных и различные размеры. Пустой массив ячеек создается с помощью команды са11, но более распространенным способом его создания является способ с использованием фигурных скобок: » са = (1, [2 3], 'еоиг') са = [1] [1х2 доиЫе] 'гонг' Фигурные скобки используются также для доступа к определенному элементу ячейкового массива; например, введите команду са(2), чтобы отобразить второй элемент из са.
Массивы структур похожи на структуры в языках программирования, подобным языку С; они позволяют присваивать имена элементам массива, а не нумеровать их. Как и в массивах ячеек, элементы могут иметь различные типы и размеры. Одним из способов создания массива структур является команда вегасе: » ва = вегасе( 'дава', [1 4 9 16 25], 'девсг1рс(оп', 'регресс вс(аагев') даТа: [1 4 9 16 25] денег(ре(оп: 'регресс вс]цагев' Для доступа к определенному элементу, или «полю», введите имя массива и нмя поля, разделив их точкой, например, ва.дага.
Вы можете использовать такой же синтаксис для создания и добавления полей к структурному массиву. Другой способ определения массива ва производится с помощью представленных ниже команд: » аа = вггпсг) » аа.дава [1 4 9 16 25]) » аа.девсгзрг1оп 'регеесг всиагев' Первая команда определяет [задает) пустую структуру, а последующие команды добавляют к ней поля. 1Г Программа МАТ[АВ имеет также знаковые и беззнаковые целочисленные типы данных; в качестве примера см. онлайновую справку для команд 1пг32 и ивпв32. Глава 6. Программирование Команды лля синтаксического разбора ввола и вывода 129 Возможно, вы заметили, что многие функции в программе МАТ(АВ позволяют варьировать тип и/или количество аргументов, которые вы задаете в качестве параметра ввода в функции. Вы можете использовать команды пагдап, пагдсис„ чагагдап и чагагдопк в своих собственных М-файлах, чтобы управлять различным количеством аргументов ввода и/или вывода, тогда как для раздельной обработки различных типов аргументов ввода можно использовать команды авш1пегас, авсЬег и т.д.
Когда М-файл-функция выполняется, функции пагдХп и пагдсппг сообщают, соответственно, о количестве аргументов ввода и вывода, которые были заданы в командной строке. Чтобы проиллюстрировать использование команды пагдап, рассмотрим представленный ниже М-файл аб(с(.пз, в котором суммируются два или три аргумента ввода. 4 ав в = ааа(х. у.
а) 44 пагдап < 2 еггог('лг 1еавг гмо апрашу агдшаепкв аге гедпзгее.') епс И пахдзл == 2 в=и+у) е1ве в =х+у+ и) епо Чтобы разрешить большее количество возможных значений ввода в файл адб(.щ, можно добавить дополнительные аргументы в первую строку М-файла и добавить больше вариантов (случаев) для команды пагдХп. Лучший способ сделать это— использовать аргумент ввода чагагдап. Сначала М-файл проверяет, не было ли задано менее двух аргументов ввода, и если это так, то выводится сообщение об ошибке и файл закрывается.