хi
|
Метод Рунге-Кутта
|
Точное решение
|
0.0
|
1.0
|
1.0
|
0.1
|
1.2221
|
1.2221
|
0.2
|
1.4977
|
1.4977
|
0.3
|
1.8432
|
1.8432
|
0.4
|
2.2783
|
2.2783
|
0.5
|
2.8274
|
2.8274
|
0.6
|
3.5202
|
0.7
|
4.3928
|
4.3928
|
0.8
|
5.4895
|
5.4895
|
0.9
|
6.8645
|
6.8645
|
1.0
|
8.5836
|
8.5836
|
Как следует из таблицы 3 численное решение программой ode45 является точным.
5. Приближенное вычисление определенных интегралов
.1 Постановка задачи
К вычислениям определенных интегралов сводятся многие практические задачи
физики, химии, экологии, механики и других естественных наук. На практике
формулой Ньютона-Лейбница не всегда удается воспользоваться. В этом случае
используются методы численного интегрирования. Они основаны на следующих
соображениях: с геометрической точки зрения определенный интеграл представляет собой площадь
криволинейной трапеции. Идея методов численного интегрирования сводится к
разбиению интервала [a; b] на множество меньших интервалов и
нахождению искомой площади как совокупности элементарных площадей, полученных
на каждом частичном промежутке разбиения. В зависимости от использованной
аппроксимации получаются различные формулы численного интегрирования, имеющие
различную точность. Рассмотрим методы трапеций и Симпсона (парабол).
5.2 Метод трапеций
Здесь используется линейная аппроксимация, т. е. график функции y = f(x) представляется
в виде ломаной, соединяющей точки yi.
Формула трапеций при постоянном шаге , где п - число участков, имеет вид
. (2.8)
В MATLAB данную формулу реализуют программы
(у)(x,y)
trapz(y)(x,y)
Наиболее интересна последняя из них. Данная функция вычисляет интеграл от
функции у(х) по х методом трапеций. Аргумент и функция задаются в виде векторов
или х - в виде вектора, а у - в виде матрицы. Если у(х) - матрица, то функция
возвращает вектор значений интеграла для каждого столбца матрицы.
5.3 Метод Симпсона
Если подынтегральную функцию заменить параболой, то формула Симпсона с
постоянным шагом интегрирования предстанет в виде
. (2.9)
В MATLAB формула Симпсона реализуется
программой quad(name, a, b [,tol, trace]),
где
name -
имя М-функции, задающей подынтегральное выражение;
a, b - пределы интегрирования;
tol -
точность вычисления;
trace
- параметр, позволяющий получить информацию о ходе вычислений в виде таблицы, в
столбцах представлены значение количества вычислений, начальная точка текущего
промежутка интегрирования, его длина и значение интеграла.
Подынтегральная функция может задаваться с помощью дескриптора @, тогда
она программируется в файле - функции, или с помощью апострофов, тогда она
записывается в самой программе quad.
Точность вычисления интегралов по умолчанию принята равной 1×10-6.
Рисунок 7 - алгоритма метода Симпсона
5.4 Вычисление интегралов
Символьные вычисления неопределенных интегралов в MATLAB осуществляется при помощи функции:int(fun, var),где
fun - символьное выражение,
представляющее собой подынтегральную функцию, а var - переменная интегрирования.
Пример вычисления неопределенного интеграла:
symsx
%Определение символьной переменной
f=sym('exp(x) -x'); %Определение символьной функции
int(f,x) %Вычисление неопределенного интеграла
Результатом будет:
ans =
exp(x)-1/2*x^2
Для того чтобы вычислить определенный интеграл, можно использовать
функцию:
int(fun, var, a, b),
где fun -подынтегральная функция, а var - переменная интегрирования, a, b - пределы интегрирования.
Пример вычисления определенного интеграла:
I1=int('exp(x)-x','x',-1,0); %Символьное решение
vpa(I1,5)%Численное решение
Результатом будет:
ans =
.1321
5.5 Примеры
Пример: Вычислить и вывести на печать по методам трапеций и Симпсона
значения интеграла
Протокол программы метода трапеций
>>x = 0 : 0.0001 : 1.0 ;
>>y = 1./ (1+x.^2) ;
>>z = trapz(x, y)
Результат вычислений
z =
.7854
Протокол программы метода Симпсона
>>quad( ¢ (1./(1+x.^2)) ¢, 0, 1)
Результат вычислений
ans =
0.7854
Как видно из примера 6 полученные результаты являются практически
точными, а сами протоколы весьма просты.
6. Численное решение систем нелинейных уравнений
.1 Постановка задачи
Задача нахождения корней нелинейных уравнений встречается в различных
областях научно-технических исследований. Проблема формулируется следующим
образом. Пусть задана непрерывная функция f(x) и требуется
найти корень уравнения
f(x) = 0.
Будем предполагать, что имеется интервал изменения х [a; b], на котором необходимо исследовать функцию f(x) и найти значение х0, при котором f(x0) равно или весьма мало отличается от нуля.
Данная задача в системе MATLAB
может быть решена следующим образом. Вначале необходимо построить график
функции f(x) на заданном интервале и убедиться в существовании корня или
нескольких корней. Затем применить программы поиска корней. Если существует
один корень и график f(x) пересекает ось ох, то можно
применить программу fzero. Если f(x) имеет больше одного корня и может касаться и пересекать ось
ох, то следует применить более мощную программу fsolve из пакета OptimizationToolbox, которая решает задачу методом наименьших квадратов.
Программа fzero использует известные численные методы:
деление отрезка пополам, секущей и обратной квадратичной интерполяции.
Рисунок 8 - метод
Ньютона для решения систем нелинейных уравнений
Так как метод Ньютона отличается высокой скоростью сходимости при
выполнении условий сходимости, на практике критерием работоспособности метода
является число итераций: если оно оказывается большим (для большинства задач
>100), то начальное приближение выбрано плохо.
.2 Примеры
Пример: Найти корень нелинейного уравнения 10х + 2х - 100 = 0
на интервале [1.0; 2.0].
Протокол программы
>> % Строим график заданной функции
>>x = 1.0 : 0.001 : 2.0; y = 10.0.^x + 2.0*x - 100.0;
>>рlot (x, y) ; grid on
Появляется окно с графиком функции 10х + 2х - 100 (см. рис.
1), из которого следует, что корень функции на заданном интервале существует.
Для точного определения корня применяем fzeroиfsolve.
Рисунок 9
>>X1 = fzero ( ¢ (10.0.^x +
2.0*x - 100.0) ¢, [1.0 2.0])
Результат решения
Х1 = 1.9824
>>X2 =fsolve ( ¢ (10.0.^x +
2.0*x - 100.0) ¢, 1.0 : 2.0)
Результат решения
Х2 = 1.9824
7. Численное решение оптимизационных задач
.1 Постановка задачи
Под оптимизацией понимают процесс выбора наилучшего варианта из всех
возможных. С точки зрения инженерных расчетов методы оптимизации позволяют
выбрать наилучший вариант конструкции, наилучшее распределение ресурсов,
минимальный урон природной среде и т. п. В процессе решения задачи оптимизации
необходимо найти оптимальные значения некоторых параметров, их называют
проектными параметрами. Выбор оптимального решения проводится с помощью
некоторой функции, называемой целевой функцией. Целевую функцию можно записать
в виде
, (1)
где х1, х2, … , хп - проектные
параметры.
Можно выделить 2 типа задач оптимизации - безусловные и условные.
Безусловная задача оптимизации состоит в отыскании максимума или минимума
функции (1) от п действительных переменных и определении соответствующих
значений аргументов на некотором множестве Gn-мерного пространства. Обычно рассматриваются задачи
минимизации; к ним легко сводятся и задачи на поиск максимума путем замены
знака целевой функции на противоположный. Условные задачи оптимизации - это
такие, при формулировке которых задаются некоторые условия (ограничения) на
множестве G. Здесь рассмотрим только безусловные
задачи оптимизации.
Поиск минимума функции одной переменной
Для решения этой задачи используются методы золотого сечения или
параболической интерполяции (в зависимости от формы задания функции),
реализованные в программе fminbnd.
Поиск минимума функций нескольких переменных
Данная задача значительно сложнее первой. Рассмотрим ее решение на
примере функции двух переменных. Алгоритм может быть распространен на функции
большего числа переменных. Для минимизации функций нескольких переменных MATLAB использует симплекс - метод
Нелдера-Мида. Данный метод является одним из лучших методов поиска минимума
функций многих переменных, где не вычисляются производные или градиент функции.
Он сводится к построению симплекса в п-мерном пространстве, заданного п + 1
вершиной. В двухмерном пространстве симплекс является треугольником, а в
трехмерном - пирамидой. На каждом шаге итераций выбирается новая точка решения
внутри или вблизи симплекса. Она сравнивается с одной из вершин симплекса.
Ближайшая к этой точке вершина симплекса заменяется этой точкой. Таким образом,
симплекс перестраивается и позволяет найти новое, более точное положение точки
решения. Алгоритм поиска повторяется, пока размеры симплекса по всем переменным
не станет меньше заданной погрешности решения. Программу, реализующую
симплекс-методы Нелдера-Мида, удобно использовать в следующей записи
[x, min f] = f min search ( … ),
где х - вектор координат локального минимума; minf - значение целевой функции в точке минимума. Саму
целевую функцию удобно представить с помощью дескриптора @ в М-файле.
7.2 Примеры
Пример: Найти и вывести на печать минимальное значение функции (одной переменной)
f(x) = 24 - 2x /3 + x2/ 30 на [5; 20].
Строим график этой функции, чтобы убедиться в наличии минимума на
заданном интервале.
Протокол программы
>>x = 5.0 : 0.001 : 20.0 ; y = 24 - 2* x/3 + x.^2/30
;
>>рlot(x, y) ; gridon
Появляется окно с графиком этой функции (рис. 8), где отмечаем наличие
минимума.
Рисунок 10
Далее, для точного определения координаты и значения минимума привлекаем
программу fminbnd.
>> [x, y] = fminbnd ( ¢ (24.0 - 2* x/3 + x.^2/30)
¢,
5.0, 20.0)
Результат поиска
х = 10.0000
у = 20.6667
Заключение
В заключение можно отметить, что представленные примеры использования
возможностей MATLAB в решении различных
научно-технических проблем являются лишь небольшой иллюстрацией значительно
большего потенциала системы, а данный материал может служить некоторым
введением при самостоятельном изучении и применении интегрированного пакета
математического моделирования.
Список
использованных источников
1. Мартынов
Н.Н. Введение в MATLAB 6. -М.:КУДИЦ-ОБРАЗ, 2002.-352 с.
. Мэтьюс Джон
Г., Финк Куртис Д. Численные методы. Использование MATLAB. -М. Вильямс, 2001. -
720 с.
. Ортега Дж.,
Пул У. Введение в численные методы решения дифференциальных уравнений. М.:
Наука, 1986. - 288 с.
. Потемкин
В.Г. Система инженерных и научных расчетов MATLAB 5.х: - в 2-х т. Том 1. -
М.:ДИАЛОГ - МИФИ,1999. - 306 с.
. Потемкин
В.Г. Система инженерных и научных расчетов MATLAB 5.х: - в 2-х т. Том 2. -
М.:ДИАЛОГ - МИФИ,1999. - 304 с.
. Справочник
по специальным функциям с формулами, графиками и таблицами / Под ред. М.
Абрамовича и И. Стиган: Пер. с англ. М.: Наука, 1979. - 832 с.
. Демидович
Б.П., Марон И.А., Шувалова Э.З. Численные методы анализа. - М.:Наука, 1967. -
386 с.
. Каханер Д.,
Моулер К., Нэш С. Численные методы и математическое обеспечение. - М.: Мир,
1998. - 575 с.
. Копченова
М.В., Марон И.А. Вычислительная математика в примерах и задачах. - М.: Наука,
1977. - 367 с.