Метод Лагранжа
Использование метода множителей Лагранжа. Определение экстремальных точек функции. Программа реализации метода множителей Лагранжа. Взятие частных производных от полученных выражений. Использования метода связки подстановок и упрощений в уравнении.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 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