Линейное програмирование

Автор: Пользователь скрыл имя, 23 Октября 2011 в 11:32, лабораторная работа

Описание работы

Цель работы: решить задачу линейного программирования

Работа содержит 1 файл

attachment.doc

— 43.00 Кб (Скачать)

Министерство  образования и науки Российской Федерации

федеральное государственное автономное образовательное 

учреждение  высшего профессионального образования

«Уральский  федеральный университет имени

первого Президента России Б.Н. Ельцина»

Кафедра вычислительной техники 

ОТЧЕТ

о лабораторной работе №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. Она обеспечивает поиск минимума нелинейной задачи с ограничениями, причем необязательно линейными, как в нашем случае.

  1. Создаем 2 м-файла: myfun и mycon:
  • function [c,ceq] = mycon(x)

     c=[-x(1)*x(2)+1; x(1)^2+x(2)^2-9];

     ceq=[];

  • function f = myfun(x)

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

  1. Затем вводим ограничения:

 Начальная точка:

x0=[10; 10];

Линейные ограничения пустые множества:

A= [];

b= [];

Линейных неравенств нет, поэтому их задали в форме  пустых множеств:

 Aeq= [];

beq= [];

Верхняя и нижняя границы берутся из неравенств:

 lb= [0 0];

ub= [10 10];

@mycon

ans =

    @mycon

@myfun

ans =

    @myfun 

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

 x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)

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\fmincon.m at line 213

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

Полученные ответы равны ответам, приведенным в задании. 

Информация о работе Линейное програмирование