Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Glava_2a70_2014.doc
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

§ 2.21. Поиск минимального значения функции

В системе MATLAB имеются функции, осуществляющие поиск минимальных значений (минимумов) заданных функций, причем как для функций одной переменной, так и для функций многих переменных.

В частности, для отыскания минимума функции одной переменной используется функция fminbnd:

fminbnd(hFunction,x0,xl)

где hFunction – дескриптор функции, для которой находится минимум; x0 и xl задают границы отрезка поиска.

Рассмотрим использование данной функции на примере поиска минимума многочлена на отрезке . Для построения графика обратимся к функции fplot (рис. 2.21.1):

>> f=inline('x^4+4*x^3-6*x^2+12*x-1','x')

f =

Inline function:

f(x) = x^4+4*x^3-6*x^2+12*x-1

>> fplot(f,[-5 5])

Согласно рис. 2.21.1, минимум рассматриваемой функции существует на отрезке . Для нахождения минимума будем иметь:

>> fminbnd(f,-5,-3)

ans =

-3.9514

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

>> [x,y]=fminbnd(f,-5,-3)

x =

-3.9514

y =

-145.0966

Для поиска минимума функции нескольких переменных используется функция fminsearch:

fminsearch(hFunction,x0)

где hFunction – дескриптор функции нескольких переменных, для которой находится минимум; x0 – вектор аргументов функции, с которого начинается поиск минимума.

Продемонстрируем использование данной функции на примере поиска минимума функции . Имеем:

>> f=inline('x(1)^2+x(2)^2','x')

Рис. 2.20.1. График функции .

Рис. 2.21.1. График функции .

f =

Inline function:

f(x) = x(1)^2+x(2)^2

>> xmin=fminsearch(f,[1 1])

xmin =

1.0e-04 *

-0.2102 0.2548

Отметим, что для функции нескольких переменных большое значение (более существенное, чем для функции одной переменной) имеет предварительная оценка количества и приблизительного расположения локальных минимумов. Полезным здесь может оказаться опять-таки предварительное построение графика рассматриваемой функции.

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

[xmin,val,flag,output]=fminsearch(hFun,x0)

где output – объект, содержащий полную информацию о процессе нахождения минимума функции. В частности, в поле output.iterations находится количество совершенных итераций. Для вывода соответствующего значения на экран следует использовать следующий синтаксис обращения:

>> [x,val,flag,output]=fminsearch(f,[1 1])

x =

1.0e-04 *

-0.2102 0.2548

val =

1.0915e-09

flag =

1

output =

iterations: 38

funcCount: 69

algorithm: 'Nelder-Mead simplex direct search'

message: 'Optimization terminated:

the current x satisfies the termination criteria using ...'

§ 2.22. Численное интегрирование

2.22.1. Использование метода трапеций.

Одной из основных проблем численного анализа является задача вычисления определенных интегралов [104,125]. Одним из наиболее часто используемых методов численного (приближенного) интегрирования является метод трапеций, который в системе MATLAB реализует функция trapz:

trapz(x,y)

где x – вектор, содержащий дискретные значения аргументов подынтегральной функции; y – вектор, содержащий соответствующие значения подынтегральной функции.

Результатом данного обращения будет вычисление площади криволинейной трапеции, расположенной под графиком соответствующей функции , в котором все точки, заданные векторами x и y, соединены прямыми. Для интегрирования, как правило, выбирают равномерную сетку, т.е. значения элементов вектора x задаются отстоящими друг от друга на определенную величину, именуемую шаг интегрирования. Разумеется, чем меньше шаг интегрирования, тем больше точность вычисления интеграла.

Заметим, что если вектор x в приведенном обращении отсутствует (т.е. не задан) и обращение имеет вид trapz(y), то по умолчанию предполагается, что шаг интегрирования является постоянным и равным единице.

Пусть требуется вычислить интеграл

, где ; ; .

Следовательно, будем иметь:

>> a=0; b=3;

>> dx=0.01;

>> x=a:dx:b;

>> y=1-x+x.^2-x.^3;

>> trapz(x,y)

ans =

-12.750175000000000

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

>> a=0; b=3;

>> dx=0.005;

>> x=a:dx:b;

>> y=1-x+x.^2-x.^3;

>> trapz(x,y)

ans =

-12.750043750000000

Сопоставление полученных результатов позволяет заключить, что значения интеграла при использовании шагов интегрирования 0.01 и 0.005, отличаются в четвертом знаке после запятой. Итак, можно считать, что в пределах первых трех знаков после запятой результат является точным.

Метод трапеций является достаточно эффективным при интегрировании не слишком гладких функций. Если же подынтегральная функция является достаточно гладкой (т.е. существуют непрерывные производные этой функции нескольких порядков) целесообразно использовать методы численного интегрирования более высоких порядков точности (при одном и том же шаге интегрирования эти методы в общем случае позволяют получить более точные, по сравнению с методом трапеций, результаты).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]