Автор: Пользователь скрыл имя, 16 Декабря 2012 в 18:36, лабораторная работа
Оценить симплексным методом, в модели ...., где – случайная переменная; V – детерминированная переменная; P – ширина давления; – относительная плотность (по отношению к плотности воздуха); n – число труб (постоянная).
по высшему образованию
технический университет
Кафедра автоматики и телемеханики
ЛАБОРАТОРНАЯ РАБОТА №1
Тема: метод квадратурных компонентов для определения частотных характеристик
Проверил преподаватель Леготкина Т. С.
Приведенные ниже данные между перепадом давления в трубах и расходом газа описываются уравнением (1).
Оценить симплексным методом, в модели
где – случайная переменная; V – детерминированная переменная; DP – ширина давления; d – относительная плотность (по отношению к плотности воздуха); n – число труб (постоянная).
Таблица 1
V, м/мин |
|
400 470 590 610 620 840 950 1200 1400 1550 |
0,0125 0,0165 0,0215 0,0225 0,0235 0,0420 0,0530 0,0750 0,0970 0,1200 |
Оценим методом прямого поиска. Выберем для всех параметров начальные значения вместе с некоторыми начальными приращениями
В разультате работы программы (см. прил. 1) следующие результаты
Lambda[1] = 0.000000980
Lambda[2] = 1.589200000
Измеренные значения Модель
0.0125 0.0134
0.0165 0.0173
0.0215 0.0248
0.0225 0.0262
0.0235 0.0268
0.0420 0.0435
0.0530 0.0529
0.0750 0.0767
0.0970 0.0980
0.1200 0.1152
За 21 шаг
В алгоритме были использованы две основные проверки: размер шага и изменение значения сравнивается с заданным, т. е. График для представлен на рис. 1.
Рис. 1
Рассчитаем дисперсию
(2)
где
Оценим симплексным методом. В разультате работы программы (см. прил. 2) следующие результаты
Lambda[1] = 0.000000392
Lambda[2] = 1.717233937
Измеренные значения Модель
0.0125 0.0115
0.0165 0.0152
0.0215 0.0225
0.0225 0.0238
0.0235 0.0245
0.0420 0.0412
0.0530 0.0509
0.0750 0.0760
0.0970 0.0990
0.1200 0.1180
За 262 шага
В программе были исползованы следующие параметры: коэффициент отражения коэффициент растяжения коэффициент сжатия Критерием окончания счёта было выражение
График для представлен на рис. 2.
Рассчитаем дисперсию
(3)
В качестве модели возмём прямую Тогда в результате работы программы (см. прил. 2) получим следующие результаты
Lambda[1] = 0.000092048
Lambda[2] = -0.031099344
Измеренные значения Модель
0.0125 0.0057
0.0165 0.0122
0.0215 0.0232
0.0225 0.0251
0.0235 0.0260
0.0420 0.0462
0.0530 0.0563
0.0750 0.0794
0.0970 0.0978
0.1200 0.1116
За 39 шагов
График для представлен на рис. 2.
Рис. 2
Рассчитаем дисперсию
(4)
где
Как видно нелинейная модель (1) лучше описывает процесс, чем прямая, т. к. её дисперсия (3) на порядок меньше дисперсии линейной модели (4).
Вычислим доверительные пределы для . После расчёта получаем матрицы
Для уровня значимости и числа степеней свободы значение квантиля равно 2,306.
Тогда
(5)
Вычислим доверительные пределы для математического ожидания величины .
Воспользуемся формулой для оценки доверительных пределов выходного сигнала с модели
где
В качестве математического ожидания возьмём среднее значение.
Проведём две линии по обе стороны от предсказанной кривой, определяющие доверительные пределы при уровне значимости, равном 0,05 (см. рис. 3).
Рис. 3
Приложения
1. Turbo Pascal-программа для расчёта методом прямого поиска
{ Метод прямого поиска }
program Method_Of_Direct_Searching;
uses Crt;
const
m = 2; { Число параметров }
N = 10; { Количество измеренных значений }
X: array[1..N] of real = (400, 470, 590, 610, 620, 840, 950, 1200,
1400, 1550);
Y: array[1..N] of real = (0.0125, 0.0165, 0.0215, 0.0225, 0.0235,
0.0420, 0.0530, 0.0750, 0.0970, 0.1200);
var
f_: text;
I, J, Step: Integer;
Summ, Pred_F: real;
Lambda1, Lambda2, b1, b2, Delta_b1, Delta_b2, Min_Delta_b: real;
function F(Beta1, Beta2: real): real; { Минимизируемая функция }
var
I_: Integer;
Sum: real;
Eta: array[1..N] of real; { Модель }
begin
Sum := 0;
for I_ := 1 to N do
begin
Eta[I_] := Beta1 * Exp(Beta2 * Ln(X[I_]));
Sum := Sum + Sqr(Y[I_] - Eta[I_]);
end;
F := Sum;
end;
begin
ClrScr;
b1 := 0.1;
Delta_b1 := 0.01;
b2 := 2;
Delta_b2 := 0.1;
Step := 0;
repeat
Pred_F := F(b1, b2);
I := 0;
J := 0;
if F(b1 + Delta_b1, b2) < F(b1, b2) then
begin
b1 := b1 + Delta_b1;
Inc(I);
end;
if F(b1 - Delta_b1, b2) < F(b1, b2) then
begin
b1 := b1 - Delta_b1;
Inc(I);
end;
if F(b1, b2 + Delta_b2) < F(b1, b2) then
begin
b2 := b2 + Delta_b2;
Inc(J);
end;
if F(b1, b2 - Delta_b2) < F(b1, b2) then
begin
b2 := b2 - Delta_b2;
Inc(J);
end;
if I = 0 then Delta_b1 := Delta_b1 / 10;
if J = 0 then Delta_b2 := Delta_b2 / 10;
ПРИЛОЖЕНИЕ 1
if Delta_b1 < Delta_b2 then
Min_Delta_b := Delta_b1
else
Min_Delta_b := Delta_b2;
Inc(Step);
until (Abs(Pred_F - F(b1, b2)) < 1E-6) and (Min_Delta_b < 1E-9);
Lambda1 := b1;
Lambda2 := b2;
WriteLn('Lambda[1] = ', Lambda1:1:9);
WriteLn('Lambda[2] = ', Lambda2:1:9);
WriteLn(' Измеренные значения Модель ');
for I := 1 to N do
WriteLn(' ', Y[I]:1:4, ' ',
Lambda1 * Exp(Lambda2 * Ln(X[I])):1:4);
WriteLn('За ', Step, ' шаг ');
ReadLn;
end.
ПРИЛОЖЕНИЕ 2
2. Turbo Pascal-программа для расчёта симплексым методом
{ Симплексный метод }
program Simplex_Method;
uses Crt;
const
a = 1; { Расстояние между двумя вершинами }
m = 2; { Число параметров }
N = 10; { Количество измеренных значений }
Gamma_r = 1; { Коэффициент отражения }
Gamma_e = 2; { Коэффициент растяжения }
Gamma_c = 0.5; { Коэффициент сжатия }
Epsilon = 1E-7; { Погрешность }
X: array[1..N] of real = (400, 470, 590, 610, 620, 840, 950, 1200,
1400, 1550);
Y: array[1..N] of real = (0.0125, 0.0165, 0.0215, 0.0225, 0.0235,
0.0420, 0.0530, 0.0750, 0.0970, 0.1200);
type
Mass = array[1..m] of real;
var
I, J, u, e: Integer;
Max, Min, Summ, Avg_F: real;
Lambda, Sum_, C, b_Sign, b_Sign_Sign: Mass;
b: array[1..m + 1] of Mass;
function F(Beta_: Mass): real; { Минимизируемая функция }
var
I_: Integer;
Sum: real;
Eta: array[1..N] of real; { Модель }
begin
Sum := 0;
for I_ := 1 to N do
begin
Eta[I_] := Beta_[1] * Exp(Beta_[2] * Ln(X[I_]));
Sum := Sum + Sqr(Y[I_] - Eta[I_]);
end;
F := Sum;
end;
begin
ClrScr;
{ 1. Вычисление начальных b и F исходного симплекса }
for I := 1 to m + 1 do
ПРИЛОЖЕНИЕ 2
for J := 1 to m do
begin
if I = J + 1 then
b[I][J] := a / (m * Sqrt(2)) * (Sqrt(m + 1) + m - 1)
else
b[I][J] := a / (m * Sqrt(2)) * (Sqrt(m + 1) - 1);
if I = 1 then b[I][J] := 0;
end;
repeat
{ 2. Вычисление b_u, b_e, C }
Min := F(b[1]);
for I := 1 to m + 1 do
if F(b[I]) <= Min then
begin
Min := F(b[I]);
e := I;
end;
Max := F(b[1]);
for I := 1 to m + 1 do
if F(b[I]) >= Max then
begin
Max := F(b[I]);
u := I;
end;
for J := 1 to m do
begin
Sum_[J] := 0;
for I := 1 to m + 1 do
if I <> u then Sum_[J] := Sum_[J] + b[I][J];
C[J] := 1 / m * Sum_[J];
end;
{ 3. Отражение, вычисление b* }
for J := 1 to m do
b_Sign[J] := (1 + Gamma_r) * C[J] - Gamma_r * b[u][J];
if F(b_Sign) < F(b[u]) then
begin
for J := 1 to m do
b_Sign_Sign[J] := (1 - Gamma_e) * C[J] + Gamma_e * b_Sign[J];
J := 0;
for I := 1 to m + 1 do
if F(b_Sign_Sign) < F(b[I]) then Inc(J);
if J = m + 1 then
for J := 1 to m do
b[u][J] := b_Sign_Sign[J]
else
for J := 1 to m do
b[u][J] := b_Sign[J];
end
else
begin
J := 0;
for I := 1 to m + 1 do
if (F(b_Sign) > F(b[I])) and (I <> u) then Inc(J);
if J = m then
begin
if F(b_Sign) > F(b[u]) then
else
for J := 1 to m do
b[u][J] := b_Sign[J];
for J := 1 to m do
b_Sign_Sign[J] := (1 - Gamma_c) * C[J] + Gamma_c * b[u][J];
if F(b_Sign_Sign) > F(b[u]) then
for I := 1 to m + 1 do
for J := 1 to m do
b[I][J] := 1 / 2 * (b[I][J] + b[e][J])
else
ПРИЛОЖЕНИЕ 2
for J := 1 to m do
b[u][J] := b_Sign_Sign[J];
end
else
for J := 1 to m do
b[u][J] := b_Sign[J];
end;
Summ := 0;
for I := 1 to m + 1 do
Summ := Summ + F(b[I]);
Avg_F := 1 / (m + 1) * Summ;
Summ := 0;
for I := 1 to m + 1 do
Summ := Summ + Sqr(F(b[I]) - Avg_F);
until Sqrt(Summ / m) <= Epsilon;
for J := 1 to m do Lambda[J] := b[e][J];
for J := 1 to m do WriteLn('Lambda[', J, '] = ', Lambda[J]:1:9);
WriteLn(' Измеренные значения Модель ');
for I := 1 to N do
WriteLn(' ', Y[I]:1:4, ' ',
Lambda[1] * Exp(Lambda[2] * Ln(X[I])):1:4);
ReadLn;
end.
Информация о работе Метод квадратурных компонентов для определения частотных характеристик