Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Система компьютерной математики Octave. Лабораторный практикум

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
Г.Н. ГУТМАН
СИСТЕМА КОМПЬЮТЕРНОЙ МАТЕМАТИКИ
OCTAVE
Лабораторный практикум
Самара
2018
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САМАРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
К а ф едра «Прикладная математика и информатика»
Г.Н. ГУТМАН
СИСТЕМА КОМПЬЮТЕРНОЙ МАТЕМАТИКИ
OCTAVE
Лабораторный практикум
Самара
Самарский государственный технический университет
2018
Печатается по решению редакционно-издательского совета СамГТУ
УДК 519.7:004:42:519.6(076.5) ББК 22.18:32.97:22.19я73 Г 971
Гутман Г.Н.
Г 971 Система компьютерной математики Octave: лабораторный практи-
кум / Г.Н. Гутман. – Самара: Самар. гос. техн. ун-т, 2018. – 148 с.
Предназначен для проведения лабораторных работ по магистерским курсам «Современные компьютерные технологии», «Программирование инженерных задач». Лабораторный практикум состоит из десяти лабораторных работ, по­следняя из которых носит исследовательский характер. Тематика работ охваты­вает широкий спектр методов вычислительной математики, включая нахожде­ние корней уравнений, решение систем линейных алгебраических уравнений, аппроксимацию и интерполяцию функций, численное дифференцирование и интегрирование, решение обыкновенных дифференциальных уравнений и уравнений в частных производных. Большое внимание уделяется графическому представлению полученных результатов.
Р е ц ензент: канд. техн. наук, доцент О.С. Афанасьева
УДК 519.7:004:42:519.6(076.5)
ББК 22.18:32.97:22.19я73
Г 971
© Г.Н. Гутман, 2018 © Самарский государственный
технический университет, 2018
ВВЕДЕНИЕ
Система компьютерной математики Octave – это свободный пакет матема­тических вычислений. По возможностям и качеству реализации интерпретатора встроенного языка пакет Octave можно сравнивать с проприетарной програм­мой MATLAB, причем синтаксис обоих языков очень схож.
Хотя книга на русском языке, посвященная данному пакету, всего одна [1], а в сети Интернет можно найти лишь официальную документацию на англий­ском языке [2, 3] и ряд сайтов, существует вполне обоснованное мнение, что среди свободных программных продуктов именно Octave является бесплатной альтернативой пакету MATLAB.
В данном лабораторном практикуме используется GNU Octave версии 4.2.0, однако все задания могут быть выполнены и на других версиях пакета. Следует отметить существенную особенность пакета: он не допускает символы кирил­лицы ни в командах, ни в именах функций, ни в путях и именах файлов. Един­ственное место, где возможно использование символов кириллицы, – коммен­тарии в программном коде.
При выполнении лабораторной работы студент должен изучить теоретиче­ский материал, проиллюстрированный примерами, выполнить свой вариант за­дания (звездочкой отмечены более трудные задачи) и оформить отчет по лабо­раторной работе. Отчет содержит:
– постановку задачи;
– последовательность команд Octave (решение задачи);
– результаты.
Лабораторная работа № 1
РЕЖИМ НЕПОСРЕДСТВЕННЫХ ВЫЧИСЛЕНИЙ.
РАБОТА С ВЕКТОРАМИ И МАТРИЦАМИ
Цель работы: знакомство с интерфейсом пакета GNU Octave, освоение ре­жима непосредственных вычислений.
Окно приложения содержит меню, панель инструментов и несколько рабо­чих окон.
Диспетчер файлов – показывает список файлов в рабочей директории и обеспечивает удобный доступ к файлам пользователя. Так, например, при двойном щелчке по файлу с расширением .m он открывается в окне редактора.
Журнал выполненных команд – содержит историю команд и вызовов функ­ций пользователя. Двойным щелчком можно запустить выбранную команду (функцию) на выполнение.
Область переменных – показывает переменные, определенные пользовате­лем в текущем сеансе, их тип и значение.
Командное окно – окно, в котором можно выполнять отдельные команды в режиме непосредственных вычислений. Кроме того, в это окно выводятся все результаты, имеющие текстовый и числовой характер.
3
Редактор – окно, в котором пользователь имеет возможность набирать и редактировать текст программы (скрипта).
Документация – окно, в котором пользователь может получить справку по своему запросу. Окно содержит кнопки увеличения и уменьшения шрифта, что создает дополнительные удобства для пользователя. Однако вся документация системы компьютерной математики Octave приведена только на английском языке.
При запуске окна Редактор и Документация скрыты командным окном и видны только их ярлыки.
Режим непосредственных вычислений. При запуске приложения в командном окне после вывода информации о версии пакета, заявления об от­казе от ответственности и другой служебной информации появляется пригла­шение к вводу – знаки ">>". Теперь можно набрать любое математическое вы­ражение или команду Octave и нажать клавишу Enter – выражение будет вы­числено и результат появится в командном окне.
Примеры:
>> 36*2.31+17 <Enter>
ans = 100.16
>> 36/2.31-17 <Enter>
ans = -1.4156
В дальнейшем мы не будем явно указывать нажатие на клавишу Enter.
По умолчанию результат выводится с пятью значащими цифрами, однако пользователь может с помощью команды
format long
получить в выводе 15
значащих цифр:
>> format long
>> 36/2.31-17
ans = -1.41558441558442
Чтобы вернуться к краткому формату вывода результатов, достаточно набрать команду
format short
.
В режиме непосредственных вычислений можно определить переменную и вывести значение выражения, включающего эту переменную. При этом пере­менная может содержать как единственное значение, так и набор значений (массив). После создания переменной ее можно использовать в выражениях.
Варианты синтаксиса создания переменной:
имя = значение или выражение
имя = [список значений или выражений]
имя = первое_значение : шаг : последнее_значение
Если в последнем варианте параметр "шаг" отсутствует, то он принимается равным единице.
4
Примеры:
>> a=pi/6
a = 0.52360
>> k=1:4
k =
1 2 3 4
>> x=.2*k
x =
0.20000 0.40000 0.60000 0.80000
>> sin(x)
ans =
0.19867 0.38942 0.56464 0.71736
При задании векторов и матриц значения элементов строк перечисляются через пробел или запятую, переход на следующую строку – нажатие клавиши Enter или символ "точка с запятой" (;):
>> A = [3.7, 12.1; -7, 18]
A =
3.7000 12.1000
-7.0000 18.0000
Обратите внимание, что Octave автоматически выводит значение вводимых и вычисленных выражений. Чтобы убрать вывод, необходимо в конце выраже­ния поставить символ "точка с запятой" (;).
Работа с векторами и матрицами. Обращение к элементам матрицы:
имя(индекс1 или диапазон1, индекс2 или диапазон2, …)
Индекс представляет собой число или выражение, диапазон задается с помощью оператора "двоеточие". Значения индексов должны быть коррект­ными, иначе генерируется сообщение об ошибке. Отметим, что нумерация эле­ментов матриц начинается с единицы.
Диапазон индексов, заданный единственным двоеточием, эквивалентен диапазону
1:end
. Вместо
end
можно указать соответствующий размер матри-
цы, который можно получить, используя функцию
[R, C] = size(A),
где
A – произвольная матрица;
R – число строк (от английского слова row);
C – число столбцов (от английского слова column).
5
size
:
Пример 1. Создадим матрицу 3×3 из случайных целых чисел и выделим ее второй столбец.
>> B=round(100*rand(3,3))
B =
96 98 7
11 62 41
83 30 46
>> B(:,2)
ans =
98
62
30
В пакете Octave реализовано большое количество встроенных математиче­ских функций. Полный список функций можно найти в документации, встро­енной в пакет. Пользователь может либо самостоятельно перейти в окно Доку- ментация, либо в командном окне набрать команду
doc('имя_функции')
чтобы получить доступ к соответствующему разделу.
Для справки приведем синтаксис некоторых "популярных" функций:
abs(X)
– вычисляет абсолютную величину для каждого x из X;
,
exp(X)
log(X)
log10(X)
sqrt(X)
power(X,Y)
– вычисляет экспоненту для каждого x из X; – вычисляет натуральный логарифм для каждого x из X;
– вычисляет десятичный логарифм для каждого x из X;
– вычисляет корень квадратный из каждого x из X;
– вычисляет значение x^y, где x и y – элементы матриц X и Y,
стоящие на одних и тех же местах;
sin(X)
cos(X)
sum(X)
– вычисляет синус для каждого x из X; – вычисляет косинус для каждого x из X; – сумма элементов одномерного массива, если X – матрица, то
суммируются элементы каждого столбца. Можно при вызове функции указать дополнительный параметр – номер размерности, по которой следует вести сум­мирование;
sum(X,1)
sum(X,2)
prod(X)
– суммирование элементов каждого столбца матрицы; – суммирование элементов каждой строки матрицы;
– произведение элементов одномерного массива, если X – матри-
ца, то вычисляются произведения элементов для каждого столбца;
prod(X,1)
prod(X,2)
max(X)
– произведение элементов каждого столбца матрицы; – произведение элементов каждой строки матрицы;
– возвращает максимальное значение одномерного массива,
в случае матрицы – массив максимальных значений для каждого столбца.
В случае матрицы можно использовать дополнительные параметры:
max(X, [], 1)
max(X, [], 2)
– массив максимальных значений для каждого столбца; – массив максимальных значений для каждой строки;
6
min(X)
– возвращает минимальное значение одномерного массива, в случае
матрицы – массив минимальных значений для каждого столбца.
В случае матрицы можно использовать дополнительные параметры:
min(X, [], 1)
min(X, [], 2)
Не следует путать
– массив минимальных значений для каждого столбца; – массив минимальных значений для каждой строки.
max(X, [], 1)
и
max(X, 1)
. В последнем случае каж­дый элемент матрицы X сравнивается с единицей и возвращается матрица мак­симумов из X(i,j) и 1. Аналогичное замечание справедливо и для функции ми­нимума.
Функции
max(X)
и
min(X)
кроме значения максимального (минимального) элемента могут вернуть и позицию этого элемента в массиве. Если таких значе­ний несколько, то возвращается индекс первого появления значения в массиве.
Операции с матрицами:
– поэлементное сложение матриц одинакового размера (операция "+"); – поэлементное умножение матриц одинакового размера (операция ".*"); – умножение матриц (матричное умножение, операция "*"); – транспонирование матрицы (знак операции – апостроф); – обращение матрицы (функция
inv(A)
, где A – квадратная матрица).
Специальные матрицы:
zeros(n,m)
– матрица из n строк и m столбцов, все элементы которой рав-
ны нулю;
ones(n,m)
– матрица из n строк и m столбцов, все элементы которой равны
единице;
eye(n,m)
– диагональная единичная матрица из n строк и m столбцов (если
второй параметр отсутствует, то создается квадратная матрица);
rand(n,m)
– матрица из n строк и m столбцов, все элементы которой есть
случайные числа, равномерно распределенные на интервале (0;1).
Программирование в пакете Octave. Кроме режима непосредственных вычислений в пакете Octave можно создавать так называемые m-файлы – про­граммы, содержащие последовательность команд и алгоритмических операто­ров. Для этого нужно перейти на вкладку Редактор и набрать текст программы. Прежде чем запускать программу на выполнение, ее следует сохранить на жестком диске (напомним, что путь к файлу-программе не должен содержать символов кириллицы). Результат выполнения будет выведен в командное окно.
Язык программирования Octave содержит все основные алгоритмические операторы языка высокого уровня: операторы присваивания, ветвления, выбо­ра, цикла. Части программы можно также оформить в виде отдельных функций.
Подробно синтаксис операторов языка приведен в прил. 1.
7
x
x
sin
−
−
e
x
+
−
3
8
x
x
−
Варианты заданий к лабораторной работе № 1
Вариант 1
x
e
1
А) Вычислить значения функции
xf
−
)(
=
для x = -2.3, -1.0, 0.7, 2.2
и найти сумму полученных значений.
21147
Б) Создать матрицу
 
⋅=
12.0A
 
−
 
. Вычислить матрицу B, рав-
13180
ную произведению исходной матрицы на результат ее транспонирования. Полу­чить матрицу C, обратную к B. Возвести в квадрат каждый элемент матрицы C.
В*) Создать квадратную матрицу D размером N×N (значение N вводится с клавиатуры), в которой элемент D(i,j) равен произведению номера строки на корень квадратный из номера столбца.
Вариант 2
x
А) Вычислить значения функции
xf
=
)(
sin21
для
x
−
+
x = -0.8, 0.0, 0.9, 1.2
и найти сумму полученных значений
Б) Создать матрицу
37.0A
.
1693
 
⋅=
−
 
.
Вычислить матрицу
0428
B,
рав
ную произведению исходной матрицы на результат ее транспонирования. По лучить матрицу элементу матрицы
В
*)
Создать квадратную матрицу с клавиатуры строки на номер столбца
C,
обратную к
C.
), в
которой элемент
.
B.
Применить функцию косинуса к каждому
D
D(i,j)
размером
равен произведению квадрата номера
N×N (
значение
N
вводится
Вариант
А) Вычислить значения функции
и найти сумму полученных значений
Б) Создать матрицу
3
cos2
xf
2
−
)(
=
xx
для
x = 1.8, 2.9, 4.2, 5.7
−+
.
12742
 
⋅=
3.0A
 
−
 
.
Вычислить матрицу
8013
B,
рав
-
-
-
ную произведению исходной матрицы на результат ее транспонирования. По лучить матрицу менту матрицы
В
*)
Создать квадратную матрицу с клавиатуры квадрат номера столбца
C,
обратную к
C.
), в
которой элемент
.
B.
Применить функцию синуса к каждому эле
D
D(i,j)
размером
равен произведению номера строки на
8
N×N (
значение
N
вводится
-
-
x
−
−
−
−
x
x
sin
−
−
Вариант 4
x2
А) Вычислить значения функции
xf
2
)(+−=
ex
для x = -3.2, -2.9, 0.3,
1.8 и найти сумму полученных значений.
7140
Б) Создать матрицу
 
⋅=
21.0A
 
−
 
. Вычислить матрицу B, рав-
8352
ную произведению исходной матрицы на результат ее транспонирования. По­лучить матрицу C, обратную к B. Применить функцию квадратного корня к каждому элементу матрицы C, взятому по абсолютной величине.
В*) Создать квадратную матрицу D размером N×N (значение N вводится с клавиатуры), в которой элемент D(i,j) равен произведению синуса номера строки на номер столбца.
Вариант 5
5
А) Вычислить значения функции
)(
xf
x
=
x
для x = 1.2, 2.9, 4.3, 5.8
2
)1(cos
−
и найти сумму полученных значений.
8233
Б) Создать матрицу
 
⋅=
17.0A
−
 
. Вычислить матрицу B, рав-
1054
ную произведению исходной матрицы на результат ее транспонирования. По­лучить матрицу C, обратную к B. Извлечь кубический корень из каждого эле­мента матрицы C.
В*) Создать квадратную матрицу D размером N×N (значение N вводится с клавиатуры), в которой элемент D(i,j) равен половине произведения номера строки на номер столбца.
Вариант 6
x
А) Вычислить значения функции
и найти сумму полученных значений
 
⋅=
Б) Создать матрицу
08.0A
 
xf
)(
=
.
−
ln1
для
2
1072
 
12356
x = 0.9, 1.2, 3.5, 4.8
.
Вычислить матрицу
B,
равную произведению исходной матрицы на результат ее транспонирования Получить матрицу ки матрицы
В
*)
с клавиатуры
C.
Создать квадратную матрицу
), в
строки на номер столбца
C,
обратную к
которой элемент
.
B.
Вычислить суммы элементов каждой стро
D
D(i,j)
9
размером
равен косинусу произведения номера
N×N (
значение
N
вводится
.
-
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]