Для перехода в режим программирования в окне управления выбираем пункт File и входим в редактор MatLab'а: New (создать новый М-файл) или Open(открыть существующий файл с расширением .m). В дальнейшем может производиться обычный набор текста программы или его корректура и действия в соответствии с меню (сохранение под текущим или другим именем, запуск на исполнение в обычном и отладочном режимах и др.).
Различают два вида М-файлов: М-сценарии и М-функции.
М-сценарий - это файл, содержащий последовательность команд и комментариев (строк, начинающихся символом %) и пользующийся данными из рабочей области. Заголовок его начинается командой script или может отсутствовать.
Для М-функции допускаются входные и выходные аргументы, локализация внутренних ее переменных и возможность обращения к ней из других программ. М-функции включаются в библиотеку функций системы в виде текстовых файлов.
Заголовок М-функции имеет вид:
function [<список выходных переменных>]=
<имя функции> (<список входных переменных>)
например, функция вычисления факториала положительного числа и его обратной величины может быть описана файлом fact.m:
function [f,g]=fact(n) % факториал и обратная величина
f=prod (1:n);
g=1/f;
Кроме использованных выше операторов присваивания, программирование в MatLab'е допускает и ряд других традиционных для программных сред операторов.
Условный оператор выступает в одной из следующих форм:
if <условие> if <условие> if<условие>
<команды> <команды> <команды>
end else elseif <условие>
<команды> <команды>
End else
<команды>
End
В роли условия может использоваться любое логическое выражение, построенное на основе операций отношения и логических. Если значение этого выражения является массивом, то условие считается истинным, если все его элементы истинны (истина - 1, ложь - 0).
Оператор цикла с заданным числом повторений, в основном используемый в форме:
for V=A :H:B for V=A:B
<команды> <команды>
End end
(V -переменная/параметр цикла, A,B - начальное и конечные значения; H - приращение, по умолчанию 1). Допускаются и вложенные циклы, например:
for i=1:n for i=1:n-1
for j=1:m for k=i+1:n
a(i,j)=x(i)^j; if a(i) < a(k)
end m=a(i)
end a(i)=a(k)
a(k)=m
end
end
end
В заголовке цикла можно использовать одномерный массив. Так цикл
k=1;
for i=[0 5 7]
x(k)=2^i;
k=k+1;
end
формирует массив Х=[1 32 128].
Оператор цикла с предусловием имеет традиционную конструкцию:
while <условие>
<команды>
End
и обеспечивает выполнение команд тела цикла, пока истинно проверяемое условие. Заметим, что работа цикла может быть прервана (выход из внутреннего цикла) оператором break:
while a<1
n=n+1
if n>250
break
end ...
Оператор переключения обобщает условный оператор на случай более двух условий и имеет конструкцию:
switch <выражение>
case <значение 1>
<команды>
case <значение 2>
<команды>
. . . . .
otherwise % может отсутствовать
<команды>
End
Контрольные значения проверяются на равенство и могут задаваться и списком:
swith k
case 0
t=1
case (1, 2,5)
t=2
otherwise
t=0
end
Выход из функции в вызывающую программу обеспечивается выполнением последнего ее оператора или командой return.
Кроме упомянутых основных операторов, традиционных для любой системы программирования, остановимся на ряде операторов обеспечения пользовательского интерфейса.
Ввод с клавиатуры реализуется командой вида
<переменная>= input ('подсказка')
Например,
" x=input(' степень полинома '); степень полинома 3
Приостановка выполнения программы может быть предусмотрена включением в текст команды pause (приостановка до нажатия любой клавиши), pause (n) (приостановка на n сек),keyboard (приостановка с возможностью выполнять практически любые команды и последующим возвратом в программу командой return ).
Можно построить выбор варианта с клавиатуры созданием меню:
Например, команда: k=menu('Использовать метод','Гаусса','Краута','простой итерации') создаст на экране всплывающее меню с указанными пунктами-клавишами и щелчок по клавише задаст значение переменной k, рав-ное 1, 2 или 3.
Мы не останавливаемся на многообразии операторов, связанных с выводом на экран (вывод значения disp, форматированный вывод fprint), отладкой и сигнализацией об ошибках, анализом списка аргументов и др.
Приведем несколько простейших примеров использования программного режима.
Пример 1. Анализ скорости убывания элементов числовой последовательности
до значений, меньших 0.0001)
Чтобы с легкостью отыскивать значения элементов последовательности, опишем функцию (файл y.m):
Теперь можно в командной строке набрать вызов limit1, получая на экране число элементов последовательности k, значения элементов последовательности Y (n=1¸k) и "график" функции:
Число элементов последовательности равно k =6 Значения элементов последовательности
Y =
1.0000
-0.2500
0.0370
-0.0039
0.0003
-0.0000
Пример 2. Поиск оценки суммы ряда.
с точностью 10-6.
Файл limit2.m (сценарий):
y=1;
s=y;
m=1;
while abs(y)>1e-6
y=-y*(2*m-1)/(2*m+1).^2;
s=s+y;
m=m+1 ;
End
disp('Число слагаемых' )
disp( m-1)
disp('Оценка суммы')
disp(s)
В командной строке набираем limit2 , получая на экране число элементов отрезка суммы, превышающих 10-6 и саму оценку суммы: