Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Система компьютерной математики Octave. Лабораторный практикум
.pdf
dt
dt
Решение задачи сводится к решению системы дифференциальных уравнений
tdQ
tRI
dt
)(
=
tI
);(
ω
tALC
tQ
+−=
)(
1)(
+
sin
0
tdI
)(
dt
при начальных условиях Q(0) = Q0, I(0) = 0.
Здесь
Q(t), I(t) – заряд конденсатора и сила тока в цепи в момент времени t;
R – сопротивление резистора;
C – емкость конденсатора.
Вариант 10
Исследуйте решение уравнения Ван дер Поля, описывающего электрические колебания в замкнутом контуре, состоящем из соединенных последовательно конденсатора, индуктивности, нелинейного сопротивления и элементов,
обеспечивающих подкачку энергии извне. Уравнение Ван дер Поля сводится к
его каноническому виду:
2
xd
µ
2
dx
2
x
0)1(
=+−− x
.
Неизвестная функция времени x(t) имеет смысл электрического тока,
а в параметре µ заложены количественные соотношения между составляющими
электрической цепи, в том числе и нелинейной компонентой сопротивления.
Постройте фазовые кривые решения уравнения и получите зависимость
формы предельного цикла от параметра µ (µ ≥ 0).
140

ЛИТЕРАТУРА
1. Введение в Octave для инженеров и математиков: / Е.Р. Алексеев,
О.В. Чеснокова. – М.: ALT Linux, 2012. – 368 с.: ил. – (Библиотека ALT Linux).
2. Сайт http://www.gnu.org/software/octave/doc/interpreter/ – официальная до-
кументация на английском языке.
3. Сайт https://octave.sourceforge.io/docs.php – описание пакетов расширений
на английском языке.
4. Иллюстрированный самоучитель по Matlab [Электронный ресурс]. –
http://samoychiteli.ru/document21400.html
5. Ашманов С.А., Тимохов А.В. Теория оптимизации в задачах и упражнени-
ях. – М.: Наука, 1991. – 448 с. (переиздание: Лань, 2012. – 448 с.)
6. Галанин М.П., Ходжаева С.Р. Разработка и тестирование методов реше-
ния жестких обыкновенных дифференциальных уравнений // Математическое
моделирование и численные методы. – 2014. – № 4. – С. 95–119.
7. Хайрер Э., Ваннер Г. Решение обыкновенных дифференциальных уравнений. Жесткие и дифференциально-алгебраические задачи: Пер. с англ. – М.:
Мир, 1999. – 685 с., ил.
8. A.C. Hindmarsh and K. Radhakrishnan. Description and Use of LSODE, the
Livermore Solver for Ordinary Differential Equations. NASA, 1993. – 108 с.
9. Самарский А.А. Теория разностных схем. – М.: Наука, 1977. – 656 с.
10. Рабинович М.И., Трубецков Д.И. Введение в теорию колебаний и волн. –
М.: НИЦ «Регулярная и хаотическая динамика», 2000. – 560 с.
11. Мун Ф. Хаотические колебания: Вводный курс для научных работников
и инженеров: Пер. с англ. – М.: Мир, 1990. – 312 с.
12. Паршаков А.Н. Физика колебаний: учеб. пособие. – Пермь: Изд-во Перм.
гос. техн. ун-та, 2010. – 302 с.
141

ПРИЛОЖЕНИЯ
Приложение 1
Объекты и операторы языка Octave
1. Константы и переменные. В язык Octave встроено несколько именован-
ных констант, в частности:
pi – значение числа π = 3.14159265358979;
e = 2.71828182845905 (основание натуральных логарифмов);
i – мнимая единица (используется для работы с комплексными числами).
Объявления переменных отсутствуют, переменная создается при первом присваивании значения этой переменной. Тип переменной определяется типом присваиваемого ей значения и может меняться в процессе работы программы. Таким
образом, в языке Octave реализуется динамическая типизация переменных.
2. Оператор присваивания. Оператор присваивания объявляет и инициализирует новую переменную или изменяет значение уже существующей переменной.
Синтаксис оператора:
переменная = выражение
элемент массива = выражение
элемент структуры = выражение
Имя переменной может содержать буквы, цифры и символы подчеркивания
"_", но не может начинаться с цифры. Отметим также, что язык Octave чувстви-
телен к регистру, т. е. V и v – это разные переменные.
Как и в обычных языках программирования, переменные Octave подразделяются на глобальные (определенные в файлах-сценариях) и локальные (определенные в файлах-функциях). Локальную переменную можно превратить в
глобальную с помощью ключевого слова
global
.
В Octave можно определить локальную переменную как "постоянную", т. е.
сохраняющую свое значение между вызовами функции. Для этого используется
ключевое слово
Язык содержит встроенную переменную
persistent
.
ans
, значение которой есть результат последнего вычисленного выражения. Эту переменную можно использовать в программе как обычную переменную.
3. Форматы вывода. По умолчанию Octave выводит результаты расчетов
в формате short. Изменить формат вывода можно командой format. Приведем пример. Выведем значения константы pi в разных форматах:
format bank 3.14
format short 3.1416
format short e 3.1416e+000
format long 3.14159265358979
format long e 3.14159265358979e+000
142

В большинстве случаев результат вычислений выводится автоматически
(если не подавить вывод точкой с запятой). Для организации простого вывода
можно также использовать функцию
disp(объект)
. Кроме того, язык Octave
содерит большой набор функций в стиле языка программирования Си
(printf(…), fprintf(…) и др.), позволяющих организовать форматный
вывод данных как в командное окно, так и в файл.
4. Операторы ввода. Иногда удобнее вводить исходные данные с клавиа-
туры или из файла. Для ввода данных с клавиатуры можно использовать функцию input:
переменная = input(строка-приглашение)
Кроме того, язык Octave содержит большой набор функций в стиле языка
программирования Си (scanf(…), fscanf(…) и др.) для ввода данных с
клавиатуры или из файла.
5. Условный оператор. Условный оператор позволяет выбрать определен-
ную последовательность действий в зависимости от истинности или ложности
некоторого выражения. Все варианты оператора начинаются с ключевого слова
if
и заканчиваются ключевым словом
endif
(или
end
для совместимости с
языком Matlab).
Неполное ветвление:
if (условие) операторы_1 endif (или end)
Полное ветвление (общий случай):
if (условие_1)
операторы_1
elseif (условие_2)
операторы_2
…
else
операторы_else
endif (или end)
Обязательным является только наличие условия_1, остальные проверки могут отсутствовать. Очевидно, что в общем случае оператор полного ветвления
может заменить несколько вложенных условных операторов.
6. Простые и сложные условия. Простые условия имеют вид
выражение_1 операция_сравнения выражение_2
где операция сравнения задается символами:
"меньше" (<)
"меньше или равно" (<=)
"больше" (>)
"больше или равно" (>=)
"равно" (==) т.е., два знака =
"не равно" (!=)
143

Заметим, что в сравниваемых выражениях можно использовать предикаты
all
("для каждого") и
any
("существует"). Например, если X есть вектор, то
выполнение условия
тельны, а выполнение условия
all(X>0)
означает, что все компоненты вектора положи-
any(X>0)
означает, что существует хотя бы од-
на положительная компонента вектора X.
Сложные условия есть комбинация простых условий с помощью логических
операций ! (логическое "НЕ"), && (логическое "И") и || (логическое "ИЛИ").
Операции && и || реализуют режим неполных вычислений сложных условий,
т. е. вычисления останавливаются, когда результат всего выражения определяется уже вычисленными условиями. Режим полных вычислений реализуется
при использовании одиночного символа & вместо && для логической операции
"И" и, соответственно, одиночного символа | вместо || для логической операции "ИЛИ".
7. Оператор выбора. Оператор выбора в Octave имеет вид:
switch (выражение)
case значение_1 операторы_1
case значение_2 операторы_2
…
otherwise операторы_otherwise
endswitch
(или
end
для совместимости с Matlab).
Если одни и те же операторы должны выполняться для нескольких значений, то в директиве case указывается список этих значений в фигурных скобках. Пример:
n = input('n=');
switch(n)
case 1 disp('very bad')
case 2 disp('bad')
case {3,4} disp('good')
case 5 disp('very good')
otherwise disp('error')
endswitch
Заметим, что использование оператора выбора вместо условного оператора
(в тех случаях, когда это возможно) позволяет упростить и сделать более
наглядным код программы.
8. Операторы цикла.
А) Цикл с предусловием. Синтаксис оператора:
while (условие)
операторы тела цикла
endwhile
144

(или
end
для совместимости с Matlab)
Б) Цикл с постусловием. Синтаксис оператора:
do
операторы тела цикла
until (условие выхода)
В) Цикл с параметром. Синтаксис оператора:
for параметр = выражение
тело цикла
endfor
(или
end
для совместимости с Matlab)
Примеры
Цикл
disp(k)
endfor
выведет значения параметра k от 1 до 5 с шагом 1 (по одному числу в каждой
строке вывода).
Выражение может быть структурой, вектором или матрицей (в последнем
случае вывод происходит по столбцам).
Цикл
for k=[7,1,-2,3]
disp(k)
endfor
выведет последовательность 7, 1, -2, и 3, а цикл
for k=[7,1; -2,3]
disp(k)
endfor
выведет последовательность 7, -2, 1, 3, т. е. сначала первый столбец, а затем
второй.
Для досрочного перехода к следующей итерации любого цикла использует-
ся команда
continue
, а для досрочного выхода – команда
break
.
9. Объявление и вызов функций. Функцию в языке Octave можно объ-
явить несколькими способами.
А) inline-функции. Синтаксис объявления:
имя_функции = inline('код функции')
Такая функция объявляется непосредственно в теле программы. Пример:
f=inline('sin(x).*cos(2*x)');
X=0:0.02:6;
145

plot(X,f(X))
Б) @-функции. Синтаксис объявления:
имя_функции = @(список параметров) код функции
Такая функция также объявляется непосредственно в теле программы. По
своим возможностям этот вариант практически идентичен предыдущему. Пример:
f=@(x) sin(x).*cos(2*x);
X=0:0.02:6;
plot(X,f(X))
Более сложные функции оформляются в виде отдельного файла с расшире-
нием .m, при этом имя файла должно совпадать с именем функции. Код такой
функции в общем случае имеет вид:
function список_возврата имя_функции(список_аргументов)
операторы тела функции
endfunction
(или end для совместимости с Matlab)
10. Комментарии. Наличие в коде комментариев облегчает понимание реали-
зованных в программе алгоритмов. Комментарии в Octave бывают двух типов.
Комментарии первого типа начинаются знаком % или #, который действует только на текущую строку. Комментарии второго типа действуют сразу на несколько
строк, поэтому кроме символов %{, открывающих комментарий, в конце комментария нужны символы %}, закрывающие комментарий. Заметим, что в комментариях второго типа также возможно использовать символ # вместо %.
Приложение 2
Некоторые отличия Octave от MatLab
Разработчики пакета Octave стремились к максимальной совместимости
с пакетом Matlab, однако некоторые различия все равно имеются. В лабораторном практикуме использовался только полностью совместимый синтаксис языков Octave и Matlab. В данном приложении приводятся список некоторых отличий Octave и Matlab.
1. В Octave можно использовать операторы сложного присваивания и авто-
изменения, например k+=1; x*=0.2; n - -. В Matlab такие операторы не работают. Кроме того, в Octave для возведения в степень кроме символа ^ можно
использовать две звездочки, например n = 2^10 и n = 2**10.
2. В Matlab все алгоритмические инструкции завершаются одинаковым для
всех инструкций словом 'end'. В Octave кроме этого можно использовать специализированный синтаксис: ветвление завершать словом 'endif', цикл – словом
'endfor', функцию – словом 'endfunction' и т. д.
146

3. В Matlab для обозначения комментариев используется символ %, в Octave
кроме него можно использовать символ #. Аналогично для задания текстовых
литералов в Octave кроме одиночных "матлабовских" кавычек могут использоваться и двойные кавычки.
4. Для переноса длинных строк в Matlab используется многоточие '...',
в Octave же можно также использовать обратный слеш или просто перевод
строки.
5. В Octave можно обращаться к спискам сразу после их создания, например
elem = [1:10](2). В Matlab для этого нужно создавать промежуточную переменную:
L = [1:10]; elem = L(2)
6. В Matlab нет команды
printf
, которая в Octave используется для вывода
текста на экран. Следующий код сработает в Octave, но непригоден для Matlab:
res = 5;
printf('My result is: %d\n', res)
Для печати на экран в Matlab можно использовать команду
fprintf
(в Octave эта команда используется для вывода в файл):
res = 5;
fprintf('My result is: %d\n', res)
7. В Octave при построении нескольких графиков одной командой
plot
дополнительные параметры нужно указывать для каждого графика (иначе будут
использоваться параметры по умолчанию), а в MatLab – один раз для всех графиков.
Пример:
plot(x1, y1, '-b', x2, y2, '-r', 'linewidth',2)
MatLab выведет обе части графика толщиной 2 пикселя, а Octave – только
второй. В то же время команда
plot(x1, y1, '-b', 'linewidth',2,
x2, y2, '-r', 'linewidth',2)
вызовет ошибку в Matlab, а в Octave выведет график с толщиной линий 2 пикселя.
Следует отметить, что в дополнительных модулях ("тулбоксах") одни и те
же функции часто имеют разные названия, что затрудняет перенос написанных
программ из одного пакета в другой.
Более подробно о различиях Octave и Matlab можно прочитать в соответствующем разделе официальной документации, размещенной в сети Интернет:
http://www.gnu.org/software/octave/doc/interpreter/index.html.
147

СОДЕРЖАНИЕ
Введение ............................................................................................................................................. 3
Лабораторная работа № 1. Режим непосредственных вычислений.
Работа с векторами и матрицами ...................................................................................................... 3
Лабораторная работа № 2. Табулирование функций. Построение графиков ......................... 12
Лабораторная работа № 3. Решение уравнений и систем уравнений ...................................... 33
Лабораторная работа № 4. Решение задач оптимизации .......................................................... 47
Лабораторная работа № 5. Интерполяция и аппроксимация ................................................... 70
Лабораторная работа № 6. Численное дифференцирование и интегрирование ..................... 86
Лабораторная работа № 7. Решение обыкновенных дифференциальных уравнений ........ 100
Лабораторная работа № 8. Метод конечных разностей. Решение уравнений
в частных производных ................................................................................................................. 114
Лабораторная работа № 9. Разработка интерфейса пользовательских приложений .......... 124
Лабораторная работа № 10. Выполнение исследовательского проекта ................................ 135
Литература ...................................................................................................................................... 141
Приложения .................................................................................................................................... 142
Приложение 1. Объекты и операторы языка Octave ................................................................. 142
Приложение 2. Некоторые отличия Octave от MatLab ............................................................... 146
Учебное издание
ГУТМАН Геннадий Натанович
Система компьютерной математики Octave
Редактор Г.В. Загребина
Компьютерная верстка И.О. Миняева
Выпускающий редактор Ю.А. Петропольская
Подписано в печать 20.06.18
Формат 60×84 1/16. Бумага офсетная
Усл. п. л. 8,76. Уч.-изд. л. 8,72.
Тираж 100 экз. Рег. № 93/18
_______________________________________________________________
Федеральное государственное бюджетное
образовательное учреждение высшего образования
«Самарский государственный технический университет»
443100, г. Самара, ул. Молодогвардейская, 244. Главный корпус
Отпечатано в типографии
Самарского государственного технического университета
443100, г. Самара, ул. Молодогвардейская, 244. Корпус № 8
148
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
