Минимизация унимодальной функции одной переменной

ЛАБОРАТОРНАЯ РАБОТА 1

Минимизация функций в MATLAB

Минимизация унимодальной функции одной переменной

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

Вызов функции в простейшем варианте проводится оператором:

x = fminbnd(fun, a, b).

Здесь fun – минимизируемая функция – может быть задана либо в виде формулы, заключённой в кавычки, либо в виде ссылки на функцию, составленную пользователем;

a, b – начало и конец интервала поиска.

При этом возвращается значение аргумента x в точке минимума.

Вызывая справочную функцию help, изучить параметры и способы использования функции fminbnd.

>> help fminbnd

Поместите пояснения в отчёт.

Пример 1.

Найти значение аргумента в точке минимума функции x3–2x на отрезке [0, 2].

В командной строке задайте:

>> x = fminbnd('x^3-2*x', 0, 2)

Результат запишите.

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

>> [x, f] = fminbnd('x^3-2*x', 0, 2)

Результат запишите. Дайте пояснения.

Измените команду в виде:

>> [x, f, e_flag, out] = fminbnd('x^3-2*x', 0, 2)

Объясните полученные результаты.

В режиме редактирования (>> edit) с помощью следующих операторов создайте новую функцию:

function y=fun(x)

y= x^3-2*x;

Сохраните её в m-файл под именем fun.m, располагая его в рабочей папке по согласованию с преподавателем.

Обратитесь к функции поиска минимума в виде:

[x, f] = fminbnd(@fun, 0, 2)

Результаты всех вычислений запишите.

1.3. Самостоятельно найдите минимумы функций, заданных в табл.1, согласно варианту. Используйте различные формы обращения к функции fminbnd. Результаты приведите в отчёте и прокомментируйте.

Таблица 1.

Вариант Вид функции fun(x) Интервалы поиска
1(1, 9, 17) x2–x–2 [0, 1]
2(2, 10, 18) 3x4–4x3–12x2 [–2, 0]; [0, 3]
3(3, 11, 19) cos x + ch x [–1, 1]
4(4, 12, 20) | x | – x2 [–1, 1]
5(5, 13, 21) x3–6x2+9x–4 [0, 4]
6(6, 14, 22) x4–2x2 [–2, 0]; [0, 2]
7(7, 15, 23) x(x–1)2 (x–2)2 [0, 1]; [1, 2]
8(8, 16, 24) x + 1/x [–2, 2]
9(9, 18, 3) 2x / (1 + x2) [–2, 0]
10(10, 19, 1) (x2 – 3x + 2)/(x2 + 2x + 1) [0, 2]
11(11, 20, 2) (2x – x2)1/2 [0, 2]
12(12, 21, 3) x(x – 1)1/3 [0, 1]
13(13, 22, 4) 1 – x e–x [0, 2]
14(14, 23, 5) x1/2 ln x [0, 1]
15(15, 24, 6) (ln 2 x) /x [0.5, 1.5]
16(16, 3, 7) cos x + 0.5 cos 2x [0, 2]; [6, 8]
17(17, 10, 4) 10/(1 + sin2 x) [0, 2]; [4, 6]
18(18, 11, 5) 0.5 ln(1 + x2) – arc tg x [0, 2]
19(19, 12, 6) ex sin x [–1, 0]; [5, 6]
20(20, 13, 9) | x |e– |x – 1| [–1, 1]
21(21, 14, 8) 2x [–1, 5]
22(22, 15, 10) x2 – 4x + 6 [–3, 10]
23(23, 16, 9) | x2 – 3x + 2 | [–10, 10]
24(24, 18, 5) (5 – 4x)1/2 [–1, 1]

1.4. Выполните следующие команды:

f = inline('sin(x)+3');

x = fminbnd(f,2,5)

получим

x = 4.7124

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

[x, y] = fminbnd(f,2,5)

x = 4.7124

y = 2.0000

С помощью функции help изучите описание функции inline. Пояснения запишите в отчёт.

Далее выполните

f = inline('x^3-2*x');

x = fminbnd(f,0,3)

и

f = inline('x^3-2*x');

[x, y] = fminbnd(f,0,3)

Поясните полученные результаты.

1.5. В режиме редактирования:

>> edit

набрать текст программы:

function prog15_3

xx=-2:0.1:3;

yy=fun(xx);

plot(xx,yy,'k-')

hold on; grid;

xlabel('x'); ylabel('y');

[x,f]=fminbnd(@fun,-2,0)

line(x,f, 'Marker', '.', 'MarkerSize', 20);

[x,f]=fminbnd(@fun,0,3)

line(x,f, 'Marker', '.', 'MarkerSize', 20);

function y=fun(x)

y= 3*x.^4-4*x.^3-12*x.^2;

Сохранить программу как m-файл с именем prog15_3.m в рабочей директории с помощью команды «Сохранить как».

Примечание: незнакомые выражения языка MATLAB изучить, используя режим справки help.

Вызвать написанную программу из командной строки:

>> prog15_3

Результат прокомментировать

x = -1.0000

f = -5.0000

x = 2.0000

f = -32.0000

Привести рисунок:

1.6. Создать в рабочей папке файл fun.m, содержащий текст:

function y=fun(x)

y= 3*x.^4-4*x.^3-12*x.^2;

Выполнить команду:

[x,f]=fminbnd(@fun,-2,3)

Прокомментировать результат

x = 2.0000

f = -32.0000

1.7. Провести исследование следующей функции, для чего повторить шаги:

– Редактирования,

– Сохранения в файл,

– Вызова.

function prog15_4

line([-2,-eps],[g(-2),g(-eps)]);

hold on; grid off;

line([eps,2],[g(eps),g(2)]);

xlabel('x'); ylabel('y');

[x,f]=fminbnd(@g,-2,2)

line(x,f, 'Marker', '.', 'MarkerSize', 20);

function y=g(x)

if x<=0

y=-x-1;

else

y=x+1;

end

>> prog15_4

x = -1.9290e-005

f = -1.0000

Ответьте на вопрос, как изменится результат, если в определении целевой функции g(x) заменить условие if x<=0 на if x<0?

Результаты работы по данному пункту отразить в отчёте.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: