Автор: Пользователь скрыл имя, 23 Октября 2011 в 11:32, лабораторная работа
Цель работы: решить задачу линейного программирования
Министерство образования и науки Российской Федерации
федеральное государственное автономное образовательное
учреждение
высшего профессионального
«Уральский федеральный университет имени
первого Президента России Б.Н. Ельцина»
Кафедра
вычислительной техники
ОТЧЕТ
о лабораторной работе №3
ЛИНЕЙНОЕ ПРОГРАММИРОВАНИЕ
Вариант
3
Преподаватель Поротников
А. В.
Студенты Зубкова С.В.
Гр Фт-48062
Екатеринбург 2011
Цель работы: решить задачу линейного программирования
Работа 3а
1 Найти минимум функции sin(.r) в интервале (0, 2л:)
Минимум имеет место для
x = fminbnd(@sin,0,2*pi)
x = 4.7124
Значение функции в точке минимума будет
y = sin(x)
y =
-1.0000
Для того, что бы найти минимум функции на интервале (0, 5), сперва запишем М-файл
function f = myfun(x)
f = (x-3).^2 - 1;
Далее вызовем программу оптимизации.
x = fminbnd(@myfun,0,5)
что дает решение
x =
3
Значение в точке минимума будет
y = f(x)
y =
-1
2 Найти значение х, которые минимизируют , начиная с точки x = [10; 10; 10] и с учетом ограничений
Прежде всего, запишем М-файл, который возвращает скалярное значение f как функции от х.
function f = myfun(x)
f = -x(1) * x(2) * x(3);
Далее перепишем ограничения в виде меньше или равно константе.
Поскольку оба ограничения являются линейными, то представим их как матричные неравенства , где
......
Далее зададим начальную точку и запустим программу оптимизации.
x0 = [10; 10; 10]; % начальное
предположение о решении
[x,fval] = fmincon(@myfun,x0,A,b)
После 66 расчетов функции решение будет
x =
24.0000
12.0000
12.0000
где значение функции будет
fval =
-3.4560e+03
и оценка ограничений в виде линейных неравенств <= 0 дает
A*x-b=
-72
0
Работа 3b
Рабочее задание:
;
,
,
,
Решение задачи в Matlab
Для решения этого задания использовали команду fmincon. Она обеспечивает поиск минимума нелинейной задачи с ограничениями, причем необязательно линейными, как в нашем случае.
c=[-x(1)*x(2)+1; x(1)^2+x(2)^2-9];
ceq=[];
f
= 7*(x(1)-6).^2 + 3*(x(2)-4).^2
Начальная точка:
x0=[10; 10];
Линейные ограничения пустые множества:
A= [];
b= [];
Линейных неравенств нет, поэтому их задали в форме пустых множеств:
Aeq= [];
beq= [];
Верхняя и нижняя границы берутся из неравенств:
lb= [0 0];
ub= [10 10];
@mycon
ans =
@mycon
@myfun
ans =
@myfun
x = fmincon(@myfun,x0,A,b,Aeq,beq,
Warning: Large-scale (trust region) method does not currently solve this type of problem,
switching to medium-scale (line search).
> In C:\MATLAB6p5\toolbox\optim\
f =
220
f =
220.0000
f =
220.0000
f =
351.6699
f =
351.6699
f =
351.6699
f =
82.3276
f =
82.3276
f =
82.3276
f =
96.5425
f =
96.5425
f =
96.5425
f =
97.2734
f =
97.2734
f =
97.2734
f =
97.1397
f =
97.1397
f =
97.1397
f =
97.3093
f =
97.3093
f =
97.3093
f =
97.3095
f =
97.3094
f =
97.3094
f =
97.3095
f =
97.3722
f =
97.3175
Optimization terminated successfully:
Search direction less than 2*options.TolX and
maximum constraint violation is less than options.TolCon
Active Constraints:
6
x =
2.7955
1.0885
Полученные ответы
равны ответам, приведенным в задании.