![]() |
|
|
Курсовая работа: Градиентный метод первого порядкаP12, P23 - эффекты двойного взаимодействия, а P123 - эффекты тройного взаимодействия. Эффекты взаимодействия определяют аналогично линейным эффектам:
7. Проверка однородности дисперсии и значимости коэффициентов регрессии. Если дополнительно поставить параллельные опыты, можно определить s2воспр - дисперсию воспроизводимости, проверить значимость коэффициентов регрессии, а при наличии степеней свободы – адекватность уравнения. В связи с тем, что корреляционная матрица (U*U)-1 для спланированного эксперимента есть матрица диагональная
коэффициенты уравнения регрессии некоррелированы между
собой. Значимость коэффициентов уравнения регрессии можно проверять для каждого
коэффициента в отдельности, пользуясь критерием Стьюдента : bj Диагональные элементы корреляционной матрицы равны между собой, поэтому все коэффициенты уравнений Y = + … + oпределяются с одинаковой точностью: s bj= s2воспр 8. Проверка адекватности уравнения Проверка адекватности уравнения проводится по критерию Фишера: Рассчитывается значение F= s2ост/ s2воспр ; s2ост где m - число значимых коэффициентов в уравнении регрессии. 2. После проведения полного факторного эксперимента определены коэффициенты регрессии Тогда
частные производные будут пропорциональны 3. Делая, с учетом последнего выражения,
шаг в сторону, противоположную среднему, определяем новую точку 4. Повторяем первые три шага, пока не приблизимся к точке экстремума. При приближении к точке экстремума алгоритм начинает работать плохо при близости к нулю частных производных, то есть линейная модель становится неадекватной и требует введения квадратичных членов. По условию дано: Уравнение выхода системы:
Значение параметров системы:
Характер помехи и ее статистические параметры:
Здесь
Необходимо - составить в соответствии с математическим ожиданием системы ее имитационную модель для формирования реализации вектора и состояния системы на интервале определения; - составить алгоритм и программу решения задачи построения динамической модели в соответствии с заданным типом модели методом идентификации и точностью решения задачи; - отладить программу; - провести расчеты и анализ полученных результатов. Построение математической моделиУчитывая характер помехи можно составить следующую имитационную модель системы для формирования реализации вектора и состояния системы на интервале определения:
Здесь
Здесь [0, T] – интервал определения системы. Уравнение выхода системы:
Здесь
Значение параметров системы:
Здесь А, В – матрицы коэффициентов (параметров) системы. Характер помехи и ее статистические параметры: Помеха
имеет нормальное распределение с математическим ожиданием, равным Алгоритм реализации решения задачи построения динамической моделиИдея построения требуемой динамической системы состоит в следующем: для заданного значения параметра t с его интервала определения градиентным методом первого порядка находим соответствующее значение параметра x, который изменяется динамически. Поэтому необходимо в каждый момент ti найти оптимальное соответствующее значение фактора х и функции отклика у, которые наиболее близко описывали бы исходную систему. Помеха имеет нормальное распределение, поэтому включаем ее в функцию отклика таким образом, как показано в выше предложенных формулах. Для
поиска решения необходимо рассчитать оптимальный шаг Это делается по выше указанной формуле ( 6 ) – поиск шага варьирования. Именно так и реализуем в программном решении данной задачи. Для
поиска оптимального решения используем матрицы коэффициентов модели Проведен анализ полученных результатов, что также отражено в предложенной программе. Апробирование машинной программыКак было отмечено ранее, в данной программе кроме ручного ввода исходных значений факторов Х (т. е. задание так называемой «нулевой точки») существует задание количества факторов и количества опытов, как по умолчанию, так и непосредственно пользователем. Программа исследований программного эксперимента: Решает задачу оптимизации поверхности отклика. В начале работы требуется задать значения функции отклика Y, для которых и будет найдены соответствующие значения факторов X, при которых функция отклика принимает максимальное значение. 1.Задаем количество факторов и экспериментов Получаем значения факторов в натуральном масштабе, заполняем матрицу планирования. 2.Производим кодирование в безразмерной системе координат, для каждого фактора определяются нулевые уровни и интервалы варьирования. Они будут использованы для определения градиента в данной точке. 3.Получаем значения коэффициентов регрессии. 4.Считаем выборочные дисперсии, и если они однородны, выводим значение дисперсии воспроизводимости 5.Проверяем на значимость коэффициенты регрессии. В данном случае все коэффициенты значимы. 6. Получаем информацию о том, описывает ли уравнение эксперимент адекватно. 7. Делаем шаг в сторону, противоположную градиенту и находим новую точку (набор факторов). 8. Для нового набора переходим к шагу 2. Выполняем указанные действия до тех пор, пока не приблизимся к точке экстремума, на что указывает убыль последующих значений функции отклика. Результаты работы программыМатрица значений функции отклика системы:
Матрица помех:
Найденные значения факторов, про которых функция отклика принимает максимальное значение: ВыводВ данном курсовом проекте рассматривался градиентный метод первого порядка, в качестве ядра которого использовался полный факторный эксперимент первого порядка, что предполагает такое проведение исследований, которое позволяет некоторым оптимальным образом получить информацию об объекте, оформить её в виде полиномиальной линейной модели и провести её статистический анализ. Так же в работе был составлен алгоритм моделирования , на основе которого была написана программа для проведения исследований градиентным методом. Список литературы1. Ю.П. Зайченко. Исследование операций. “Вища школа”. Киев 1988. 2. А.Г. Бондарь, Г.А. Статюха, Т. В. Землянкин , И.А. Потяженко. Планирование эксперимента при оптимизации процессов химической технологии. “Вища школа”. Киев 1980. 3. В.В. Кафаров. Методы кибернетики в химии и химической технологии. Москва. «Химия». 1985. 4. А.В. Бондаренко, Г.А. Статюха. Планирование эксперимента в химической технологии. “Вища школа”. Киев 1976. 5. А. Кофман, Р. Крюон “Массовое обслуживание. Теория и приложения”. 6. Е.С. Венцель “Исследование операций”.Листинг программыunit MainUnit;interface uses Windows,Classes,Graphics,SysUtils,StdCtrls,Math,Grids, ListControl, Forms; type SelType = (stNONE,stPOINT,stCON); // Тип текущего элемента PPoint = ^TPoint; TPoint = record UIN : integer; Value : integer; X,Y : integer; end; PConnection = ^TConnection; TConnection = record toPoint : PPoint; fromPoint : PPoint; Value : integer; end; CurElement = record ceType : SelType; element : pointer; end; TGraph = class private WasChanged : boolean; ChangedAfter : boolean; PointRadius : integer; MaxUIN : integer; Points : TList; Connections : TList; Selected,Current : CurElement; function CheckCicle(FP,TP:PPoint):boolean; function MouseOverPoint(X,Y:integer):PPoint; function MouseOverConnection(X,Y:integer):PConnection; procedure DrawConnections(C:TCanvas;minW,minH,maxW,maxH:integer); procedure DrawPoints(C:TCanvas;minW,minH,maxW,maxH:integer); procedure Clear; public constructor Create; destructor Destroy;override; function MouseOver(X,Y:integer):CurElement; function DeleteSelected:boolean; procedure DrawGraph(C:TCanvas;minW,minH,maxW,maxH:integer); procedure AddPoint(X,Y:integer;Value:integer); function AddConnection(fromPoint,toPoint:PPoint;Value:integer):boolean; procedure ChangeCur(dX,dY:integer); procedure ChangeCurAndDrawContur(X,Y,GridDelta:integer;C:TCanvas;DrawFirst,D rawSecond:boolean); procedure GetDeltaOfCurrent(X,Y:integer;var dX,dY:integer); procedure SaveToFile(filename:string); procedure OpenFromFile(filename:string); procedure SelectCurrent; procedure DeselectCurrent; procedure MoveOnTop; function IsChanged:boolean; function WasChangedAfter:boolean; function GetPoints:TList; function GetConnections:TList; function GetPointByID(ID:integer):PPoint; procedure ZoomOn(coef:extended); procedure ZoomOff(coef:extended); procedure ChangeValue(Elem:CurElement;Value:integer); function GetConsCount:integer; function GetPointsCount:integer; end; PProcCon = ^TProcCon; PProcPoint = ^TProcPoint; TProcCon = record Value : integer; toPoint : PProcPoint; Next : PProcCon; end; TProcPoint = record UIN : integer; Value : integer; Merged : boolean; UBorder,DBorder : integer; UCon,DCon : integer; UFixed,DFixed : boolean; Prev,Next : PProcCon; end; PWay = ^TWay; TWay = record Numbers : string; Length : integer; Weight : integer; Current : PProcPoint; end; PLinkTask = ^TLinkTask; PProcTask = ^TProcTask; PHolder = ^THolder; THolder = record Task : PProcTask; Link : PLinkTask; Next : PHolder; end; TProcTask = record UIN : integer; ProcNum : integer; StartTime : integer; Length : integer; Prev : PHolder; MayBeBefore : boolean; MayBeAfter : boolean; Ready : integer; end; TLinkTask = record fromUIN : integer; toUIN : integer; fromProc : integer; toProc : integer; fromTask : PProcTask; toTask : PProcTask; StartTime : integer; Length : integer; PrevLink : PLinkTask; PrevTask : PProcTask; end; PPossibleMove = ^TPossibleMove; TPossibleMove = record UIN : integer; processor : integer; afterUIN : integer; ProcCount,Time:integer; CurrentState : boolean; end; TSubMerger = class private Selected : PProcTask; MinProcNum:integer; MaxProcNum:integer; Points : TList; Procs : TList; Links : TList; AllProcTasks : Tlist; function GetProcPointByUIN(UIN:integer):PProcPoint; function GetProcTaskByUIN(UIN:integer):PProcTask; procedure Clear; procedure ClearProcs(FreeElements:boolean); procedure ClearLinks(FreeElements:boolean); procedure FormLinkTasksAndSetTimes(NumOfProcs:integer); // -- Optimization -- // procedure ClearPossibleMoves(var List:TList); function GetPossibleMoves(UIN:integer):TList; function GetTime:integer; function GetProcCount:integer; procedure SaveBackUp(var List:Tlist); procedure RestoreBackUp(var List:Tlist;NOP:integer;ClearCurrent:boolean); public constructor Create; procedure Init(GPoints,GConnections:TList); procedure DoBazovoe; procedure SelectTask(UIN:integer); procedure DeselectTask; procedure MoveSelectedAfter(ProcNum,UIN:integer); procedure ShowSubMerging(SG:TStringGrid); function IncNumOfProc:boolean; function DecNumOfProc:boolean; function OptimizeOneStep(L1,L2:TLabel):boolean; procedure OptimizeAuto(Form:TForm;L1,L2:TLabel); end; // --- --- --- // function MinInt(I1,I2:integer):integer; function MaxInt(I1,I2:integer):integer; procedure MinMaxInt(I1,I2:integer;Var Min,Max:integer); implementation // -- Native functions -- // function MinInt(I1,I2:integer):integer; begin if I1<I2 then Result:=I1 else Result:=I2 end; function MaxInt(I1,I2:integer):integer; begin if I1>I2 then Result:=I1 else Result:=I2 end; procedure MinMaxInt(I1,I2:integer;Var Min,Max:integer); begin if I1<I2 then begin Min:=I1; Max:=I2 end else begin Min:=I2; Max:=I1 end end; // -- Objects -- // function TGraph.GetConsCount:integer; begin Result:=Connections.Count end; function TGraph.GetPointsCount:integer; begin Result:=Points.Count end; procedure TGraph.ZoomOn(coef:extended); var PP:PPoint; i:integer; begin for i:=0 to Points.Count-1 do begin PP:=Points[i]; PP.X:=round(PP.X*coef); PP.Y:=round(PP.Y*coef); end; end; procedure TGraph.ZoomOff(coef:extended); var PP:PPoint; i:integer; begin for i:=0 to Points.Count-1 do begin PP:=Points[i]; PP.X:=round(PP.X/coef); PP.Y:=round(PP.Y/coef); end; end; constructor TGraph.Create; begin inherited Create; MaxUIN:=0; Points:=TList.Create; Connections:=TList.Create; Current.ceType := stNONE; Current.element := nil; Selected.ceType := stNONE; Selected.element := nil; PointRadius := 15; WasChanged := false; ChangedAfter := false; end; destructor TGraph.Destroy; begin Clear; Points.Destroy; Connections.Destroy; inherited Destroy end; procedure TGraph.Clear; begin while Points.Count<>0 do begin dispose(PPoint(Points.first)); Points.delete(0); end; while Connections.Count<>0 do begin dispose(PConnection(Connections.first)); Connections.delete(0); end; MaxUIN:=0; Current.ceType := stNONE; Current.element := nil; Selected.ceType := stNONE; Selected.element := nil; end; function TGraph.DeleteSelected:boolean; var i:integer; PP:PPoint; PC:PConnection; begin if Selected.ceType = stNONE then Result:=false else begin WasChanged:=true; ChangedAfter:=true; Result:=true; if Selected.ceType = stCON then begin PC:=Selected.element; for i:=0 to Connections.Count-1 do begin if Connections[i] = PC then begin Connections.delete(i); break end; end; dispose(PC); end else begin PP:=Selected.element; for i:=0 to Points.Count-1 do begin if Points[i] = PP then begin Points.delete(i); break end; end; i:=0; while i<Connections.Count do begin PC:=Connections[i]; if(PC.toPoint=PP)or(PC.fromPoint=PP)then begin Connections.delete(i); dispose(PC) end else i:=i+1 end; dispose(PP) end; Selected.ceType:=stNONE; Selected.element:=nil end; end; procedure TGraph.MoveOnTop; var PP:PPoint; num:integer; begin if Current.ceType = stPoint then begin WasChanged:=true; // ChangedAfter:=true; PP:=Current.element; num:=0; while num<Points.count do begin if Points[num]=PP then break; num:=num+1 end; Points.delete(num); Points.add(PP) end; end; procedure TGraph.SelectCurrent; begin Selected:=Current end; procedure TGraph.DeselectCurrent; begin Selected.ceType:=stNONE; Selected.element:=nil end; function TGraph.MouseOverPoint(X,Y:integer):PPoint; var PP:PPoint; d,i:integer; begin Result:=nil; for i:=Points.Count-1 downto 0 do begin PP:=Points[i]; d := round(sqrt((X-PP.X)*(X-PP.X)+(Y-PP.Y)*(Y-PP.Y))); if d<=15 then begin Result:=Points[i]; break end; end; end; function TGraph.MouseOverConnection(X,Y:integer):PConnection; var PC:PConnection; i:integer; TX,TY,FX,FY,d:integer; begin Result:=nil; for i:=Connections.Count-1 downto 0 do begin PC:=Connections[i]; if MinInt(PC.fromPoint.X,PC.toPoint.X) = PC.fromPoint.X then begin FX:=PC.fromPoint.X; FY:=PC.fromPoint.Y; TX:=PC.toPoint.X; TY:=PC.toPoint.Y end else begin FX:=PC.toPoint.X; FY:=PC.toPoint.Y; TX:=PC.fromPoint.X; TY:=PC.fromPoint.Y end; if (X>=FX-5)and(X<=TX+5)then begin d := (TY-FY)*X + (FX-TX)*Y + TX*FY - FX*TY; d := abs(round(d/sqrt((TY-FY)*(TY-FY)+(FX-TX)*(FX-TX)))); if d<=5 then begin Result:=Connections[i]; break end end end end; function TGraph.MouseOver(X,Y:integer):CurElement; begin current.element:=MouseOverPoint(X,Y); if current.element<>nil then current.ceType:=stPOINT else begin current.element:=MouseOverConnection(X,Y); if current.element<>nil then current.ceType:=stCON else current.ceType:=stNONE end; Result:=current; end; procedure TGraph.GetDeltaOfCurrent(X,Y:integer;var dX,dY:integer); var PP:PPoint; begin PP:=current.element; if PP<>nil then begin dX:=X - PP.X; dY:=Y - PP.Y end else begin dX:=0; dY:=0 end; end; procedure TGraph.ChangeCur(dX,dY:integer); var PP:PPoint; begin WasChanged:=true; // ChangedAfter:=true; PP:=current.element; if PP<>nil then |
|
|||||||||||||||||||||||||||||
![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |