Содержание отчета
Лабораторная работа № 3
ОСНОВЫ ПРОГРАММИРОВАНИЯ В MATLAB
Цель работы: научиться создавать файлы-функции и файлы-
программы с циклами и ветвлениями в MATLAB.
24
Оборудование: дисплейный класс, программа MATLAB R2008 или
выше.
М-файлы
При реализации алгоритма функции преобразования какого-либо
измерительного прибора или исследования влияния внешнего или внут-
реннего параметра на результаты измерения необходимо написать про-
грамму в MATLAB.
Для написания текста программ в MATLAB используется редактор
М-файлов (рис. 9). При помощи редактора можно создавать собственные
функции, вызывать их, в том числе и из командной строки. Для вызова ре-
дактора М-файлов нужно выбрать в меню File основного меню MATLAB
вкладку New, а в ней M-file.
Файлы программ сохраняются в MATLAB с расширением *.m. Ком-
ментарии в тексте программы
начинаются со знака %.
В MATLAB М-файлы
делятся на два вида: файл-
функции (functions) и файл-
сценарии (scripts). Сценарии
содержат определенную по-
следовательность команд, не
имеют входных и выходных
аргументов. Функции напро-
тив производят определенные
действия с входными аргу-
ментами и возвращают ре- Рис. 9. Редактор М-файлов MATLAB
зультат в выходных аргумен- R2008
тах.
Слово function определяет, что данный файл содержит функцию.
Первая строка является заголовком функции, в которой размещается имя
функции и список входных и выходных аргументов. Далее следует тело
функции
function f=myfunction(x)
f=log(x)/sin(x)
В рассмотренной функции с именем myfunction входным аргументом
является х, а результат вычислений – это выходной аргумент f. Файл-
функцию следует сохранять под тем же именем, которое указано в первой
строке файла. Созданную функцию можно вызвать в командной строке
или в другой функции.
>>myfunction(2)
25
f=
0.7623
Входных и выходных аргументов может быть несколько
function [X, Y, Z] = name (x, y, z)
Операторы цикла
Цикл for
Этот цикл предназначен для выполнения определенного числа по-
вторяющихся действий. Его структура выглядит следующим образом
for count = start : step : final
команды MATLAB
end
В данном примере count – счетчик цикла, start – начальное значение
счетчика, step – шаг изменения счетчика, final – конечное значение счетчи-
ка. Счетчик может принимать не только целые значения, но и веществен-
ные.
26
Рис. 10. Семейство кривых
function summa
S=0;
for k=1:10
S=S+1/factorial(k);
end
Ответ
S=
1.7183
Циклы for могут быть вложены друг в друга, при этом переменные
вложенных циклов должны быть разными.
27
Цикл while
Цикл while используется тогда, когда неизвестно количество необхо-
димых итераций в теле цикла. Он выполняется до тех пор, пока выполня-
ется условие цикла:
while условие цикла
команды MATLAB
end
Для задания условий используются следующие операторы (табл. 4).
28
Проверим вычисленное значение созданной функции и библиотеч-
ной функции sin(x)
>> mysinus(pi/2)
ans =
1.0000
>> sin(pi/2)
ans =
1
Условный оператор if
Условный оператор if применяется для реализации разветвленных
алгоритмов. Обобщенная его структура такова:
if условие
команды MATLAB
elseif условие
команды MATLAB
else
команды MATLAB
end
Пример использования оператора ветвления.
function vybor(a)
if (a==0)
disp('a равно нулю')
elseif a==1
disp ('a равно единице')
elseif a==2
disp ('а равно двум')
elseif a>=3
disp ('а больше или равно трем')
else
disp ('a меньше трех, но не единица, не ноль и не два')
end
Вызов этой функции в командном окне
>> vybor(5)
а больше или равно трем
>> vybor(1)
a равно единице
>> vybor(-4)
a меньше трех, но не единица, не ноль и не два.
29
Оператор disp выводит на экран необходимое сообщение. Оператор
if полезен для построения кусочно-заданных функций.
Пример. Построить функцию, заданную кусочно:
sin( x) − 1, x < π
y ( x) x / π , − π ≤ x < π
− cos( x), x ≥ π .
Текст программы в MATLAB
function y=kus(x)
if x<pi
y=sin(x)-1;
elseif x<pi % проверка x>pi не нужно
y=x/pi;
else % здесь x>pi
y=-cos(x);
end
При вызове функции plot в командном окне кусочная функция не по-
строится.
>> x=[-3*pi:0.1:3*pi];
>> y=kus(x);
>> plot(x,y)
Правильнее в данном случае использовать функцию fplot
>> fplot('kus',[-3*pi, 3*pi])
График кусочно-заданной функции приведен на рис. 11.
Оператор switch
Оператор переключения switch позволяет разделить алгоритм про-
граммы на равнозначные ветви, каждая из которых выполняется, когда пе-
ременная оператора принимает одно из значений из списка. После выпол-
нения какой-либо из ветвей происходит выход из switch. Если подходящих
значений для переменной не нашлось, то выполняется ветвь программы,
соответствующая otherwise.
Пример.
switch a
case -1
disp (‘a = -1’)
case 0
disp (‘a = 0’)
case 1
disp (‘a = 1’)
case (2, 3, 4)
30
Рис. 11. Кусочно-заданная функция
31
Команда fopen открывает файл. Имя файла указывается в апострофах
первым входным аргументом. Второй аргумент задает способ доступа к
файлу.
- ‘rt’ – открываемый текстовый файл предназначен только для чте-
ния;
- ‘rt+’ – открываемый текстовый файл предназначен для чтения и
записи;
- ‘wt’ – создаваемый пустой текстовый файл предназначен только
для записи;
- ‘wt+’ – создаваемый пустой текстовый файл предназначен для чте-
ния и записи.
Желательно указывать полное имя и путь файла, при задании только
имени MATLAB ищет файл только в текущем каталоге.
Информация выводится в текстовый файл при помощи функции
fprintf.
fprintf (F,’строка добавлена командой fprintf.’)
Следующая команда выводит заданную строку сразу за предыдущей,
а не на новой строке.
fprintf (F,’еще одна строка.’)
Для вывода текста с новой строки следует добавить символ перевода
строки \n в начало новой строки после апострофа:
fprintf (F,’\n текст с новой строки.’)
Символ перевода строки \n можно разместить в конце строки, после
которой текст должен начинаться с новой строки.
function zapis_tabl
% открытие нового файла для записи
[F, mes] = fopen (‘table.dat’, ‘w’);
% печать в файл заголовка таблицы
fprintf (F,’таблица значений функции \n’);
% печать в файл шапки таблицы
fprintf (F, ‘ -------------------------\n‘);
fprintf (F, ‘ | x | y |\n‘);
fprintf (F, ‘ -------------------------\n‘);
% закрытие файла
fclose (F),
Функция fprintf позволяет управлять форматом записываемых чисел
в файл.
fprintf (имя файла, ‘формат’, список переменных);
fprintf (F, ‘| %7.4f| %11.8f|‘, x, y);
32
Обозначение %7.4f задает формат вывода переменной х, которая
расположена на первом месте в списке вывода. Знак % обозначает начало
формата, цифра 7 обозначает количество позиций под целое значение х,
цифра 4− количество цифр после точки, буква f указывает на то, что выво-
дится число в формате с плавающей точкой.
№ Функция № Функция
п/п п/п
33
Окончание
№ №
п/п Функция п/п Функция
34
Окончание
№
п/п Функция
15 Z = 2 * x + 1 * sin(2 * x ), где x0 = 0, Δx = 0.25, xk = 3.5
16 Z = ln(2 * x ) + 5 * x, где x0 = 0.5, Δx = 0.5, xk = 6
17
Z = x / 3 x 2 − 4, где x0 = 0, Δx = 0.2, xk = 3
18 Z = x ( x − 1) 2 ( x − 2)3 , где x0 = 0, Δx = 0.25, xk = 4
19 2
−4 x
Z = 2e x , где y0 = 1, Δy = 0.5, yk = 5
20 Z = 2 x3 + 3 x 2 − 12 x + 5, где x0 = 0, Δx = 0.4, xk = 4
1 ∞
xn Подобрать различные х
n
n =0
Точность 10-10
2 ∞
xn Подобрать различные х
(−1)n−1
n =0 n Точность 10-10
3 ∞
x 2 n −1 Подобрать различные х
n = 0 2n − 1
Точность 10-10
4 ∞
x 2 n −1 Подобрать различные х
(−1)n−1
n =0 2n − 1 Точность 10-10
5 ∞ Подобрать различные х
(n + 1) x
n =0
n
Точность 10-10
6 ∞ Подобрать различные х
(−1)
n=0
n −1
(2n − 1) x 2 n − 2 Точность 10-10
7 ∞ Подобрать различные х
n(n + 1) x
n =0
n −1)
Точность 10-10
8 ∞ Подобрать различные х
n/ x
n =0
n
Точность 10-10
9 ∞ Подобрать различные х
x
n =0
4 n −3
/(4n − 3) Точность 10-10
10 ∞
(−1)n −1 Точность 10-9
n = 0 (2n − 1)3
n −1
35
Окончание
№ Ряд Замечания
п/п
11 ∞
2n − 1 Точность 10-8
n =0 2n
12 ∞
(1 + n) Точность 10-9
n =0 3n
13 ∞
(−1) n − n Точность 10-8
n =0 3n
14 ∞
(1 + n) Точность 10-9
n =1 3n
15 ∞
n Точность 10-8
n =1 (2 n + 1)5
n
16 ∞
1 Точность 10-9
n =1 n ( n + 1)
17 ∞ Подобрать различные х
(
k =1
2 k +1
x − 2 k −1 x ) Точность 10-10
18 ∞
(−1) n−1 Точность 10-8
n =1 n
19 ∞
1 Точность 10-9
n =1 n !2
n
20 ∞
(−1) n Точность 10-8
n =1 n!
Содержание отчета
Отчет оформляется каждым студентом самостоятельно. Защита про-
исходит в начале каждого следующего занятия с демонстрацией работы
программы на ЭВМ. Студент, не подготовивший или не защитивший отчет
по работе, к следующей лабораторной работе не допускается.
Содержание отчета:
1. Титульный лист.
2. Цель работы.
3. Вариант задания.
4. Текст программы в MATLAB и полученные графики.
5. Выводы по работе.
36
от файл-сценария?
3. Как задаются входные и выходные аргументы функции?
4. В чем отличие цикла for от цикла while?
5. Каков синтаксис оператора ветвления в MATLAB?
Лабораторная работа № 4
ИССЛЕДОВАНИЕ ФУНКЦИЙ НА ОСНОВЕ ЧИСЛЕННЫХ МЕТОДОВ В MATLAB
Цель работы: научиться использовать встроенные функции для ана-
лиза функций в MATLAB.
Оборудование: дисплейный класс, программа MATLAB R2008 или
выше.
Решение уравнений
При анализе экспериментальных данных и при исследовании изме-
рительных преобразований возникает потребность использовать в про-
грамме численные функции, реализующие численные методы.
В MATLAB используется множество встроенных функций, реали-
зующих численные методы и охватывающих широкий спектр задач: реше-
ние уравнений, нахождение максимума или минимума функции, интегри-
рование, интерполирование, решение дифференциальных уравнений. Для
работы со встроенными функциями необходимо сначала написать файл-
функцию для вычисления исследуемой функции.
Нахождение корней произвольных уравнений осуществляет встро-
енная функция fzero, для определения корней полиномов применяется
roots.
Функция fzero позволяет приближенно вычислить корень уравнения
по заданному начальному приближению (значение или отрезок).
fzero (имя функции, приближение).
Имя функции задается в апострофах или начинаясь с символа @.
Пример. Найти корни уравнения sin(x) - x2cos(x)=0 на отрезке [-5, 5].
Сначала необходимо построить график функции. Для этого зададим
файл-функцию.
Текст программы:
function yravnenie
% рисуем график функции
fplot(@myfunction,[-5 5])
% чертим сетку на графике
grid on
% значение корня вблизи -5
x1=fzero(@myfunction,-5)
% вычислим значение функции в точке х1
37