Метод Лагранжа

Использование метода множителей Лагранжа. Определение экстремальных точек функции. Программа реализации метода множителей Лагранжа. Взятие частных производных от полученных выражений. Использования метода связки подстановок и упрощений в уравнении.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 25.10.2013
Размер файла 913,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

1. Метод множителей Лагранжа

Этот метод обычно используется, когда на переменные накладывается ограничения типа равенств fi(x1,…,xn) на независимые переменные. Причем fi(x1,…,xn)= 0, i=1…m, m<n.Число ограничений равно числу неопределенных множителей Лагранжа.

Вспомогательная функция Лагранжа:

Экстремальные точки функции F(x1,…,xn) определяются решением системы уравнений, получаемой приравниванием к нулю производных от функции ц:

Система содержит m+n уравнений, из которых можно исключить m-неопределенных множителей Лагранжа, имеющих вспомогательные значения, и найти координаты экстремальных точек. Каждое ограничение добавляет еще 1 уравнение, и на каждое ограничение применяется 1 множитель Лагранжа.

Начальные условия (ограничения для оптимизируемых переменных):

Перейдем от одной формы записи неравенств к другой, более удобной для представления во вспомогательной функции Лагранжа:

Составим новую вспомогательную функцию Лагранжа:

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

Исходя из последних двух неравенств, делаем вывод, что возможны следующие случаи реализации оптимального решения для шести переменных, на которые наложены известные ограничения:

В первом случае получаем вышерассмотренную реализацию метода Лагранжа для ограничения в виде равенства, однако эти значения оптимальных переменных будут выбиваться за пределы, наложенные в данном методе (3-й и 6-й результаты вычислений меньше 80000).

Во втором случае все значения переменных принимают равными 120000, так как U1i = 0 => Qi - 120000 = 0. Отсюда можно найти л2i, но это уже не имеет практического смысла.

Таким образом, здесь оптимизация невозможна, в связи с тем, что сумма значений оптимальных переменных превысит фиксированную величину в 500000 и составит 720000.

Третий случай аналогичен второму, разница лишь в том, что сумма не достигнет указанной отметки (примет, соответственно, значение 480000).

Остается четвертый случай, проверка которого реализована в программе написанной в среде программирования Delphi 7.

Итак, исходя из (4), получаем:

Так как то взятие частных производных от полученных выражений будет происходить как от сложной функции:

Упрощая, получим:

Далее выражаем вторые и третьи множители Лагранжа через первый:

Путем связки подстановок и упрощений получим выражение для первого множителя Лагранжа:

Далее одним уз вышеуказанных способов (ниже приводится программа на Pascal) идет определение неизвестных по следующим этапам:

2. Программа реализации метода множителей Лагранжа

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, ComCtrls, TabNotBk, Buttons ,Math, ExtCtrls;

type

TForm1 = class(TForm)

TabbedNotebook1: TTabbedNotebook;

GroupBox1: TGroupBox;

GroupBox2: TGroupBox;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

GroupBox3: TGroupBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

StringGrid3: TStringGrid;

StringGrid4: TStringGrid;

StringGrid5: TStringGrid;

StringGrid6: TStringGrid;

GroupBox4: TGroupBox;

GroupBox5: TGroupBox;

GroupBox6: TGroupBox;

GroupBox7: TGroupBox;

GroupBox8: TGroupBox;

GroupBox9: TGroupBox;

GroupBox10: TGroupBox;

StringGrid7: TStringGrid;

StringGrid8: TStringGrid;

StringGrid9: TStringGrid;

GroupBox11: TGroupBox;

GroupBox12: TGroupBox;

GroupBox13: TGroupBox;

StringGrid10: TStringGrid;

StringGrid11: TStringGrid;

StringGrid12: TStringGrid;

GroupBox14: TGroupBox;

StringGrid13: TStringGrid;

Panel1: TPanel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

Label11: TLabel;

Label12: TLabel;

Label13: TLabel;

procedure FormActivate(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure M(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);

const

M ='Лабораторная работа по Мат.Моделированию ';

M1= 'Выполнили cтуденты группы 31-61: Арапов П.С., Шайхетдтнов Р.Ф.';

M2= 'Метод множителей Лагранжа';

begin

ShowMessage(M) ;

ShowMessage(M1) ;

ShowMessage(M2) ;

StringGrid1.Cells[0,0]:='80000' ; // Q Рассход

StringGrid1.Cells[0,1]:='90000' ;

StringGrid1.Cells[0,2]:='100000' ;

StringGrid1.Cells[0,3]:='110000' ;

StringGrid1.Cells[0,4]:='120000' ;

StringGrid2.Cells[0,0]:='12,56' ; //Таблица Т

StringGrid2.Cells[0,1]:='11,56' ;

StringGrid2.Cells[0,2]:='10,46' ;

StringGrid2.Cells[0,3]:='9,70' ;

StringGrid2.Cells[0,4]:='9,20' ;

StringGrid2.Cells[1,0]:='13,90' ;

StringGrid2.Cells[1,1]:='12,78' ;

StringGrid2.Cells[1,2]:='11,66' ;

StringGrid2.Cells[1,3]:='10,00' ;

StringGrid2.Cells[1,4]:='9,75' ;

StringGrid2.Cells[2,0]:='13,34' ;

StringGrid2.Cells[2,1]:='12,78' ;

StringGrid2.Cells[2,2]:='12,22' ;

StringGrid2.Cells[2,3]:='11,54' ;

StringGrid2.Cells[2,4]:='10,61' ;

StringGrid2.Cells[3,0]:='12,90' ;

StringGrid2.Cells[3,1]:='12,16' ;

StringGrid2.Cells[3,2]:='11,41' ;

StringGrid2.Cells[3,3]:='10,53' ;

StringGrid2.Cells[3,4]:='9,50' ;

StringGrid2.Cells[4,0]:='14,59' ;

StringGrid2.Cells[4,1]:='13,30' ;

StringGrid2.Cells[4,2]:='12,01' ;

StringGrid2.Cells[4,3]:='10,78' ;

StringGrid2.Cells[4,4]:='10,05' ;

StringGrid2.Cells[5,0]:='13,46' ;

StringGrid2.Cells[5,1]:='12,71' ;

StringGrid2.Cells[5,2]:='11,95' ;

StringGrid2.Cells[5,3]:='11,62' ;

StringGrid2.Cells[5,4]:='10,10' ;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

var

i,j: Integer ;

ly1,T,C1,C2,A1,B1,sum1,sum2,sum3,sum4,sum5,sum6,znam,kvadrat,sumG,sumQ : Real;

a,b,r,s,e,f,ly2,ly3,Q,G : array [1..6] of real;

const

M='Вы уверены?';

begin

ShowMessage(M) ;

C1:= StrToFloat(Edit2.Text);

C2:= StrToFloat(Edit3.Text);

For i:=1 to 5 do

begin

sum1:=sum1+StrToFloat(StringGrid1.Cells[0,i-1])*

StrToFloat(StringGrid1.Cells[0,i-1]);

sum2:=sum2+StrToFloat(StringGrid1.Cells[0,i-1]);

end;

kvadrat:=sum2*sum2;

znam:=sum1-0.2*kvadrat;

For i:=1 to 6 do

For j:=1 to 5 do

begin

sum3:= sum3 + StrToFloat(StringGrid2.Cells[i-1,j-1]);

sum4:= sum4 + StrToFloat(StringGrid2.Cells[i-1,j-1])*

StrToFloat(StringGrid1.Cells[0,j-1]);

a[i]:= (0.2*sum3*sum2-sum4)/(sum1-0.2*kvadrat);

b[i]:= 0.2*(sum3+a[i]*sum2);

A1:=C2/(C2-C1);

B1:=16.02*C1/(C2-C1);

r[i]:=-0.085*A1*a[i];

s[i]:=0.085*A1*b[i]-0.085*B1;

If j=5 Then begin

sum3:=0;

sum4:=0;

e[i]:=r[i];

f[i]:=s[i];

StringGrid3.Cells[i-1,0]:=FloatToStr(RoundTo(a[i],-9));

StringGrid4.Cells[i-1,0]:=FloatToStr(b[i]);

StringGrid5.Cells[i-1,0]:=FloatToStr(RoundTo(r[i],-9));

StringGrid6.Cells[i-1,0]:=FloatToStr(RoundTo(s[i],-4));

sum5:=sum5+(f[i]/(2*e[i]));

sum6:=sum6+(1/(2*e[i]));

end

end;

ly1:=(-100000-(sum5/3))/(sum6/3);

StringGrid9.Cells[0,0]:=FloatToStr(RoundTo(ly1,-4));

For i:=1 to 6 do

begin

ly2[i]:= -(f[i]/3)-(ly1/3)-(( 320000*e[i])/3);

ly3[i]:= (f[i]/3)+(ly1/3)+((80000*e[i])/3);

Q[i]:= (-f[i]-ly1-ly2[i]+ly3[i])/(2*e[i]);

sumQ:= sumQ+ Q[i];

G[i]:= e[i]*sqr(Q[i])+f[i]*Q[i];

sumG:=sumG +G[i];

StringGrid7.Cells[i-1,0]:=FloatToStr(RoundTo(ly2[i],-4));

StringGrid8.Cells[i-1,0]:=FloatToStr(RoundTo(ly3[i],-4));

StringGrid10.Cells[i-1,0]:=FloatToStr(RoundTo(Q[i],-4));

StringGrid11.Cells[i-1,0]:=FloatToStr(RoundTo(G[i],-4));

end;

StringGrid13.Cells[0,0]:=FloatToStr(sumQ);

StringGrid12.Cells[0,0]:=FloatToStr(sumG);

множитель лагранж уравнение

end;

procedure TForm1.M(Sender: TObject; var Action: TCloseAction);

const

M= 'Спасибо за внимание :-P';

begin

ShowMessage(M) ;

end;

end.

Размещено на Allbest.ru


Подобные документы

  • Особенности метода неопределенных множителей Лагранжа, градиентного метода и метода перебора и динамического программирования. Конструирование алгоритма решения задачи. Структурная схема алгоритма сценария диалога и описание его программной реализации.

    курсовая работа [1010,4 K], добавлен 10.08.2014

  • Формулировка общей задачи математического программирования. Классификация задач нелинейного программирования. Понятие о функции Лагранжа. Задача теоремы Куна-Таккера. Экономическая интерпретация множителей Лагранжа, формулирование условий оптимальности.

    презентация [669,1 K], добавлен 25.07.2014

  • Описание параметрических и непараметрических методов штрафных функций в области нелинейного программирования. Решение задачи с использованием множителей Лагранжа. Непрерывность, гладкость, выпуклость, простота вычисления значения функции и производных.

    курсовая работа [114,8 K], добавлен 25.11.2011

  • Определение стационарной точки. Проверка стационарной точки на относительный максимум или минимум. Составление функции Лагранжа. Применение к функции Лагранжа теорему Куна-Таккера. Метод потенциалов, северо-западного угла. Свободные переменные.

    курсовая работа [466,4 K], добавлен 29.09.2008

  • Графоаналитический метод решения задач. Получение задачи линейного программирования в основном виде. Вычисление градиента и поиск экстремумов методом множителей Лагранжа. Параболоид вращения функции. Поиск решения на основе условий Куна-Таккера.

    контрольная работа [139,3 K], добавлен 13.09.2010

  • Создание программы, вычисляющей значение функции, заданной таблично при помощи интерполяционного полинома Лагранжа на языке Pascal с комментариями. Диалоговое взаимодействие пользователя с программой, модули для ввода и вывода данных и основных действий.

    курсовая работа [49,2 K], добавлен 02.11.2011

  • Роль интерполяции функций в вычислительной математике. Реализация интерполирования функций полиномом Лагранжа в программном продукте MatLab. Интерполяционная формула Лагранжа. Интерполяция по соседним элементам, кубическими сплайнами. Анализ результатов.

    курсовая работа [1,4 M], добавлен 10.06.2012

  • Построение пространства допустимых решений. Нахождение оптимального решения с помощью определения направления убывания целевой функции. Нахождение оптимальной точки. Поиск экстремумов методом множителей Лагранжа. Условия экстремума Куна-Таккера.

    контрольная работа [396,2 K], добавлен 13.09.2010

  • Интерполирование функций методом Лагранжа. Получение функциональной зависимости по экспериментальным данным. Близость интерполяционного многочлена к заданной функции. Интерполяционный полином в форме Лагранжа. Построение интерполяционных графиков.

    лабораторная работа [315,8 K], добавлен 24.05.2014

  • Сущность и описание симплекс-метода и улучшенного симплекс-метода (метода обратной матрицы), преимущества и недостатки их применения в линейном прогаммировании. Листинг и блок-схема программы на языке Turbo Pascal для решения математической задачи.

    курсовая работа [45,0 K], добавлен 30.03.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.