Материал: Scilab ЛабПрактикум и теория

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Для получения численного решения ОДУ используются методы Рунге-Кутты. Методы различаются порядком. Чем выше порядок метода, тем точнее решение, полученное при равном шаге интегрирования.

Для решения дифференциальных уравнений и систем в Sciab предусмотрена функция:

[y,w,iw]=ode([type],y0,t0,t [,rtol [,atol]],f [,jac] [,w,iw]),

для которой, обязательными входными параметрами являются:

y0 - вектор начальных условий;

t0 - начальная точка интервала интегрирования;

t - координаты узлов сетки, в которых происходит поиск решения;

f - внешняя функция, определяющая правую часть уравнения или системы уравнений;

y - вектор решений.

Таким образом, для того чтобы решить обыкновенное дифференциальное уравнение необходимо вызвать функцию y=ode(y0,t0,t,f).

Рассмотрим необязательные параметры функции ode:

type– параметр, с помощью которого можно выбрать метод решения или тип решаемой задачи, указав одну из строк: adams - применяют при решении дифференциальных уравнений или систем методом прогноза - коррекции Адамса;

stiff - указывают при решении жестких задач;

rk - используют при решении дифференциальных уравнений или систем методом Рунге-Кутты четвертого порядка;

rkf - указывают при выборе пятиэтапного метода Рунге-Кутты четвертого порядка;

fix - тот же метод Рунге-Кутты, но с фиксированным шагом;

rtol, atol - относительная и абсолютная погрешности вычислений, вектор, размерность которого совпадает с размерностью вектора y, по умолчанию rtol=0.00001, atol=0.0000001 (при использовании параметров rkf и fix - rtol=0.001, atol=0.0001);

jac- матрица, представляющая собой якобиан правой части жесткой системы дифференциальных уравнений, задают матрицу в виде внешней функции вида J=jak(t,y);

w, iw - векторы, предназначенные для сохранения информации о параметрах интегрирования, которые применяют для того, чтобы последующие вычисления выполнялись с теми же параметрами.

Рассмотрим использование функции ode() на примере решения следующей задачи.

Пример 2.4.1-1. Найти решение ОДУ на отрезке [0;5] cшагом 0.5 при начальных условиях

Рис. 2.4.1-1. Решение ОДУ с использованием функции ode()

Рис. 2.4.1-2. Графическое решение ОДУ

Пример 2.4.1-2.Решить систему ОДУ

Решение системы ОДУ в Scilab начинается с функции, описывающей систему (рис.2.4.1-3).

Для решения дифференциального уравнения (системы уравнений) используем команды, где решение системы ОДУ записывается в переменную y. При этом элемент y(1) содержит значение функцииy(x), а y(2) значение производной y'(x). Команда plot(x, y) строит график функции решения ОДУ и ее производной (рис. 2.4.1-4).

Рис.2.4.1-3. Решение системы ОДУ

Рис.2.4.1-4. Графики функций решения ОДУ и производной

Scilab, к сожалению не позволяет получить символьного выражения производной от функции, но он содержит встроенную функцию numderivative(f,a), позволяющую проводить вычисление значения производной в точке (рис.2.4.1-5). В качестве параметров этой функции выступают:

f - функция, которую нужно дифференцировать;

х - точка, в которой требуется вычислить производную.

Рис.2.4.1-5. Вычисление производной в точке с использованием функции numderivative()

2.4.2. Лабораторная работа по теме

«Технология решения обыкновенных

дифференциальных уравнений средствами Scilab»

1. Вопросы, подлежащие изучению

  1. Постановка задачи решения ОДУ.

  2. Вычисление числовых значений производных в точках с использованием функции numderivative().

  3. Функция Scilab, предназначенная для решения ОДУ ode().

  4. Вывод результатов решения ОДУ в виде таблицы.

  5. Получение графического решения ОДУ.

2. Общее задание

  1. Изучите материал Темы 2.4 (п. 2.4.1).

  2. Выберите индивидуальный вариант задания из табл. 2.4.2-1.

  3. Вычислить значение производной от функции f(x) в произвольной точке с использованием функции numderivative();

  4. Найдите решение ОДУ на отрезке [a;b] с шагом h с использованием функции ode() .

  5. Создайте матрицу решений, записав в первый столбец аргумент, а во второй - решение, полученное с использованием функций ode().

  6. Выведите полученную таблицу по столбцам.

  7. Постройте график полученных решений ОДУ.

  8. Сохраните текст рабочего окна на внешнем носителе.

  9. Предоставьте результаты работы преподавателю, ответьте на поставленные вопросы.

  10. Оформите отчет по выполненной работе.

  1. Варианты индивидуальных заданий

Таблица 2.4.2-1

№

f(x)

ОДУ

Начальные условия

b

h

1

2,5

0,5

2

2.2

3

1.2

4

3

0,5

5

2.4

0,2

6

1

7

1.2

0,2

8

1.5

0,25

9

1,25

10

0,25

11

0,6

0,15

12

1,5

0,25

13

2,5

0.5

14

2

0,5

15

4

0,5

16

3

0,5

17

3

0,5

18

4

0,5

19

3

0,5

20

3

0,25

21

2

22

4

0,5

23

2,5

0,5

24

2

25

3

0,5

26

4

0,5

27

5

0,5

28

2,4

0,2

29

2

0,2

30

2

0.5

Тема 2.5. Технология решения задач одномерной оптимизации средствами Scilab

2.5.1. Решение задач одномерной оптимизации функций

2.5.2. Лабораторная работа

2.5.3. Контрольные вопросы по теме

2.5.1. Решение задач одномерной оптимизации

При решении задачи поиска экстремума (максимума или минимума) функции y=f(x) одной переменной выделяют задачи поиска локального и глобального экстремума. При этом задача нахождения максимума целевой функции сводится к задаче нахождения минимума путем замены функции f(x)на-f(x), поэтому в дальнейшем будем говорить только о поиске минимума функции, то есть такогоx*[a, b], при котором f(x*) = minf(x).

Интервал, на котором локализован единственный минимум, называется отрезком неопределенности.

Задача одномерной оптимизации имеет единственное решение в том случае, если функция f(x) на отрезке [a;b] имеет только один экстремум. Тогда говорят, что функция унимодальная на отрезке [a;b].

Известно, что необходимым условием существования экстремума дифференцируемой функции f(x) является выполнение равенства f¢(х) = 0.

Достаточным условием унимодальности функции f(x) на отрезке [a;b] является следующее: если функция f(x) дважды дифференцируема на отрезке [a,b] и f¢¢(х*)>0 в любой точке этого отрезка, то функция f(x) - унимодальна на отрезке [a,b].

Для решения задачи одномерной оптимизации с заданной степенью точности используются методы: дихотомии, золотого сечения, средней точки и многие другие. При этом суть методов одномерного поиска заключается в том, что на каждой итерации интервал неопределенности уменьшается и стягивается к точке минимума. Уменьшение отрезка происходит до тех пор, пока на некоторой n-й итерации отрезок неопределенности bn;an не станет соизмеримым с заданной погрешностью , то есть будет выполняться условие |bn-an| <. Тогда за точку минимума можно принять любую точку, принадлежащую этому отрезку, в частности, его середину.

В Scilab поиск локального минимума любой функции (одномерной или многомерной) осуществляет функция optim(). В случае решения задачи одномерной оптимизации функция имеет следующий формат:

[fmin,xmin]=optim(costf,x0),

где входными параметрами функции optim() в случае решения задачи одномерной оптимизации являются:

x0- начальное приближение к точке минимума;

costf- имя вспомогательной функции, в которой вычисляется значение функции и вектор градиент или производную.

Функция optim() возвращает значения следующих параметров:

fmin - минимальное значение функции;

xmin - точка, в которой функция имеет минимальное значение.

Для поиска минимума одномерной функции используется вспомогательная функция, предназначенная для вычисления целевой функции и производной, который имеет следующую структуру:

function [f,g,ind]= costf (x,ind)

f = f0(x)

Источник: https://studfile.net/preview/16689967/