Скачать

Вероятностные процессы и математическая статистика в автоматизированных системах

Развитие современной техники связано с созданием новых и постоянным совершенствованием существующих технологических процессов. Основой их разработки и оптимизации является эксперимент. Заметное повышение эффективности экспериментальных исследований и инженерных разработок достигается использованием математических методов планирования экспериментов. Использование математико-статистических методов при постановке задач. В процессе экспериментирования и при обработке полученных данных существенно сокращает сроки решения, снижает затраты на исследования и повышает качество полученных результатов.

Встречающиеся на практике реальные задачи весьма разнообразны. Достаточно грубо их можно разделить на три основных задачи:

1 Выявление количественных зависимостей между параметрами процесса – задачи описания

2 Определение оптимальных условий протекания процесса – экстремальные задачи

3 Выбор оптимального состава многокомпонентных смесей.

Часто, приступая к изучению какого-либо процесса экспериментатор не имеет исчерпывающих сведений о механизме процесса. Можно только указать параметры определяющие условия протекания процесса, и, возможно требования к его результатам. Поставленная проблема является задачей кибернетики. Действительно, если считать кибернетику «наукой, изучающей системы любой природы, способные воспринимать, хранить и перерабатывать информацию для целей оптимального управления» (1), то такую систему можно представить в виде черного ящика.

Черный ящик объект исследования, имеющий (k+p) входов и m выходов.



X – управляемые параметры, Z – неуправляемые параметры.

Зависимость между выходными параметрами (откликом) и входными параметрами (факторами) называется функцией отклика.

Математическая запись функции отклика представлена в виде формулы (1):

(1)

Этому уравнению в многомерном пространстве соответствует гипперповерхность, которая называется поверхностью отклика, а само пространство – факторным пространством.

Эксперимент можно проводить по разному. В случае, когда исследователь наблюдает за каким-то неуправляемым процессом, не вмешиваясь в него, или выбирает экспериментальные точки интуитивно, на основании каких-то привходящих обстоятельств, эксперимент считают пассивным. В настоящее время пассивный эксперимент считается неэффективным.

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

Под планированием эксперимента понимают процедуру выбора числа и условий проведения опытов, необходимых и достаточных для решения поставленной задачи с требуемой точностью. Основные преимущества активного эксперимента связаны с тем, что он позволяет:

1 Минимизировать общее число опытов;

2 Выбирать четкие логически обоснованные процедуры, последовательно выполняемые экспериментатором при проведении исследования;

3 Использовать математический аппарат, формализующий многие действия экспериментатора;

4 Одновременно варьировать всеми переменными и оптимально использовать факторное пространство;

5 Организовать эксперимент таким образом, чтобы выполнялись многие исходные предпосылки регрессионного анализа;

6 Получать математические модели, имеющие лучшие в некотором смысле свойства по сравнению с моделями, построенными из пассивного эксперимента;

7 Рандомизировать условия опытов, то есть многочисленные мешающие факторы превратить в случайные величины;

8 Оценивать элемент неопределенности, связанный с экспериментом, что дает возможность сопоставлять результаты, полученные разными исследователями (1).

Целью данной работы является освоение анализа плановых экспериментов и анализ данных, полученных при выполнении этих экспериментов.


1. Постановка задачи

Изучали механические свойства одного из алюминиевых деформируемых сплавов в зависимости от содержания в нем лития Х1 (основной уровень 1%, интервал варьирования 0,5%), температуры старения Х2 (основной уровень 175 гр.С, интервал варьирования 25 гр.С) и времени старения Х3 (основной уровень 4 ч., интервал варьирования 2 ч.). В качестве отклика выбран предел прочности сплавов, определяющийся при испытании на растяжение (Y, кгс/кв.мм).

Задание на расчетно-графическую работу:

1) Найти уравнение регрессии 2-го порядка и выполнить статистический анализ модели.

2) Исследовать модель 2-го порядка на выпуклость и вогнутость методами дифференциального исчисления.

3) Определить тип поверхности отклика.

4) Построить графики зависимости отклика от каждого из факторов Y=f(Xi) при фиксированных значениях остальных факторов (каждый рисунок должен содержать 3-4 кривые).

5) Применяя один из методов оптимизации, найти в исследованной области оптимальные сочетания факторов, обеспечивающие максимальное и минимальное значения отклика.

6) Построить двумерные сечения поверхности отклика, соответствующие пересечению поверхности с плоскостями Xi=Ximax. Для этого в уравнение регрессии необходимо подставить значение этого фактора, и по полученным двухфакторным уравнениям рассчитать, а потом построить изолинии поверхности отклика (кривые равного выхода).

7) Определить типы кривых равного выхода.

8) Используя двумерные сечения поверхности, выполнить анализ влияния факторов в изученных интервалах их изменения на функцию отклика.


2. Этапы планирования и статической обработки результатов эксперимента для построения модели 2-го порядка

2.1 Построение модели плана II порядка

Для построения плана II порядка можно использовать следующую модель:

(2)

Для этого необходимо провести эксперимент так, чтобы каждый фактор варьировался на трех уровнях. Простейшим решением этой задачи является план типа 3k. Реализация этого плана для k>3 требует большого числа опытов.

Для построения модели второго порядка обычно используют ортогональный план первого порядка в качестве ядра, на котором достраивается план второго порядка, поэтому такие планы называются композиционными и соответствуют шаговой идее построения планов.

Для удобства работы с приведенной моделью II порядка, с помощью обозначений (3) преобразуем ее к виду (2’):

(3)

(2’)

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

Согласно МНК, для нахождения коэффициентов bi, необходимо минимизировать функцию:

(4)

где N – количество опытов;

xui –значение i-й переменной в u-м опыте;

yu – значение экспериментальных y в u-м опыте;

Из условия минимизации функции ss, можно получить систему нормальных уравнений МНК:

(5)

Представив все результаты в матричной форме, получим:

, , , (6)

где X – матрица условий эксперимента; Y – матрица результатов опытов; B – матрица коэффициентов.

Умножив транспонированную матрицу X на матрицу X, получим матрицу системы нормальных уравнений, которая называется информационной матрицей Фишера (матрицей моментов):

(7)

Умножив транспонированную матрицу X на матрицу Y, получим:

(8)

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

(9)

Обозначая обратную матрицу моментов как:

(10)

получим выражение для матрицы коэффициентов:

(11)

Все статистические свойства коэффициентов линии регрессии определяется матрицей дисперсий ковариаций.

(12)

где cov(bi, bj) – ковариации коэффициентов bi, и bj;

S2(bi) – дисперсия коэффициента bi;

S2(y) – дисперсия опыта.

Дисперсию опыта можно определить по формулам:

(13)

(14)

где m – количество параллельных опытов.

Если параллельные опыты не проводятся, то для оценки дисперсии опыта ставятся эксперименты в центре плана. Тогда дисперсия определяется по формуле:

(15)

где - количество опытов в центре плана.

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

Величина зависит от фактора и от плеча d:

;

Для k=3 ядро =15, =11/15=0.7303, d=1.2154

2.2 Кодирование факторов

Кодирование факторов используется для перевода натуральных факторов в безразмерные величины, чтобы построить стандартную план – матрицу эксперимента.

Для перевода заполняется таблица кодирования факторов на двух уровнях. В качестве 0-го уровня обычно выбирается центр интервала, в котором предполагается вести эксперимент.

Связь между кодовым и натуральным значениями фактора:

(16)

где Xi – натуральное значение фактора;

Xi0 –значение этого фактора на нулевом уровне;

dI – интервал варьирования факторов.

Составим таблицу кодирования факторов, используя исходные данные.


Таблица 1 - Таблица кодирования факторов

2.3 Составление план – матрицы

В план – матрице должны быть указаны все возможные комбинации уровней факторов.

Таблица 2 – Расширенная план – матрица ортогонального плана

2.4 Проверка воспроизводимости опытов

При одинаковом числе параллельных этапов воспроизводимость опытов определяется по критерию Кохрена.

Для этого сначала считаются дисперсии, характеризующие рассевание результатов на каждом u-м опыте.

Проверка воспроизводимости опытов показана на рисунке 2.

Рисунок 2- Воспроизводимость опытов

2.5 Расчет коэффициентов регрессии

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

Значения при ядре плана :

Матрица дисперсий (ковариаций) коэффициентов регрессии рассчитывается по формуле (10).

2.6 Определение значимости коэффициентов

Значимость коэффициентов регрессии проверяют по критерию Стьюдента:

(17)

Дисперсия коэффициентов определяется по формуле


2.7 Проверка адекватности модели

Адекватность модели проверяется с помощью критерия Фишера:

(17)

, (18)

где Sад2 – дисперсия адекватности, рассчитываемая по формуле (18);

Sy2 – дисперсия опыта;

a=0.05;

fад=N-l, число свободы дисперсии адекватности;

fy=N(m-1), число свободы дисперсии опыта;

l – количество значимых коэффициентов.

Если неравенство (17) выполняется, значит модель адекватна.


3. Выбор и описание метода условной оптимизации

3.1 Выбор метода условной оптимизации

При решении поставленной задачи оптимизации был использован метод Фиако-МакКормика, который относится к непрямым методам решения задач нелинейного программирования. Непрямые методы преобразуют задачи с ограничениями в последовательность задач безусловной оптимизации путем введения в целевую функцию штрафных функций.

3.2 Описание метода условной оптимизации (Фиако-МакКормика)

Алгоритм метода Фиако-Маккормика

Этап 1. Задание ,, .

Этап 2. Нахождение методом прямого поиска минимума вспомогательной функции , т.е. .

Этап 3. Проверка условий окончания поиска . Если условие выполняется по переход на этап 6, иначе переход на этап 4.

Этап 4. Уменьшение значения , , .

Этап 5. Увеличение . Переход на этап 2.

Этап 6. Оптимальное решение , .


4. Описание программы

4.1 Общие сведения

Обозначение программы - vpRgr.exe.

Наименование программы - “Расчетно – графическая работа № 1 по дисциплине “ВПиМСвАС”.

Программное обеспечение, необходимое для функционирования программы – Windows 95/98/NT/2000/ME.

Для написания программы была использована интегрированная среда разработки приложений (IDE-Integrated Development Environment) – Delphi 6.0.

4.2 Функциональное назначение

1 Назначение программы: определение оптимального состава алюминиевых деформируемых сплавов из условия получения максимального предела прочности при испытаниях на растяжения

2 Классы решаемых задач: анализ и статистическая обработка полнофакторного эксперимента с ортогональными планами второго порядка, в которую входят нахождение коэффициентов регрессии, оценка из значимости, проверка адекватности и воспроизводимости модели; поиск сочетаний факторов в кодовых и натуральных переменных; построения графиков отклика от изменения каждого параметра; построения кривых равного выхода при фиксировании одного из параметров.

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

4.3 Описание логической структуры программы

При программировании с использованием средств визуального программирования (Delphi, Visual Basic и др.), приложение становится событийно – управляемым, поэтому невозможно построить алгоритм программы, как это имело место при традиционном программировании на Pascal, C++. В связи с этим наиболее полное представление о программе дает ее укрупненная структурная схема с описанием функций составных частей и связи между ними.

Для того, чтобы разделить фазы “конструирования пользовательского интерфейса” и “непосредственного программирования математической модели”, была использована блочно – модульная структура. При этом каждый структурный элемент выносился в отдельный модуль, поддерживающий интерфейс с пользователем и между собой.

Рисунок 1.-логическая связь процедур модуля


Описание структурных элементов программы

type mas=array(1..3) of real;

var x:array(0..9,1..15) of real; //переменные

x2:array(1..3,1..15) of real;//квадраты переменных

x0,ix, //нулевые уровни и интервалы варьирования

xc, //значения координат центра

la, //канонические козффициенты

m,l,n,ml,nl, //направляющие косинусы углов поворота осей и их частные

xp1,xp2,xp3,xh,

xlocmax,xlocmin:mas; //координаты локальных максимума и минимума

y,ys:array(1..2,1..20) of real; //значения функции отклика

x12,x23,x13, //попарные произведения переменных

yc,ycs, //усредненная функция отклика

s2u:array(1..15) of real; //дисперсии эксперементив

b, //коэффициенты модели

s2b, //дисперсии коэффициентов

db:array(0..9) of real; //пределы значимости коэффициентов

kk: d,xc2,

S2UMax, //максимальное значение дисперсии эксперемента

s2y, //дисперсия опыта

ycen, //функция отклика в центре

ylocmax,ylocmin:real;

4.4 Используемые технические средства

Для оптимальной работы программы необходима следующая конфигурация компьютера:

1) процессор Intel Pentium III|| 500;

2) ОЗУ 64 Мб;

3) SVGA монитор (разрешение 800х600);

4) свободное место на жестком диске не менее 2 Mb;

4.5 Вызов и загрузка

Для инсталляции программы необходимо выполнить следующие шаги:

1) убедиться в том, что компьютер, на который устанавливается система, отвечает всем требованиям, изложенным в разделе «Минимальные системные требования»;

2) убедиться в исправности накопителей на гибких магнитных носителях;

3) перекопировать программу на жесткий диск компьютера;

4) запустить файл Rgr.exe.

4.6 Входные данные

Входными данными к программе являются:

1) таблица кодирования (таблица 1);

2) результаты экспериментов.

Входные данные заданы в программе.

4.7 Выходные данные

Выходными данными являются:

1) дисперсии опытов;

2) коэффициенты линии регресии;

3) расчетные значения выходов;

4) заключения о воспроизводимости опытов, значимости коэффициентов модели, адекватности модели;

5) графики отклика при двух постоянных значениях факторов;

6) кривые равного выхода при одном постоянном факторе;

7) наилучшие и наихудшие сочетания факторов.


5. Результаты обработки данных эксперимента

В результате работы программы были получены следующие результаты:

Расширенная план-матрица эксперимента

Нахождение коэффициентов, проверка их значимости и анализ полученной модели показано на рисунке 3.


Рисунок 3 – Результат работа программы


6. графики зависимости отклика

Графики зависимости отклика от каждого из параметров представлены на рисунка 4-6.

Рисунок 4 – зависимость отклика от изменения параметра x1. Зависимость отклика от X1

y= 30,60 + 0,00*x1 + 2,97*x1^2 x2=0 x3=0

y= 25,60 + 3,87*x1 + 2,97*x1^2 x2=1 x3=0

y= 22,73 + 1,02*x1 + 2,97*x1^2 x2=1 x3=1

Рисунок 5 - зависимость отклика от изменения параметра x2. Зависимость отклика от X2

y= 30,60 + -1,94*x2 + -3,05*x2^2 x1=0 x3=0

y= 33,57 + 1,92*x2 + -3,05*x2^2 x1=1 x3=0

y= 34,35 + -4,57*x2 + -3,05*x2^2 x1=1 x3=1

Рисунок 6 - зависимость отклика от изменения параметра x3. Зависимость отклика от X3

y= 30,60 + 3,63*x3 + 0,00*x3^2 x1=0 x2=0

y= 33,57 + 0,78*x3 + 0,00*x3^2 x1=1 x2=0

y= 32,44 + -5,71*x3 + 0,00*x3^2 x1=1 x2=1


7. кривые равного выхода

Графики зависимости отклика от каждого из параметров представлены на рисунках 7-9

Рисунок 7 – Линии уровня отклика при фиксированном x3

Рисунок 8 – Линии уровня отклика при фиксированном x2


Рисунок 9 – Линии уровня отклика при фиксированном x1


Заключение

В ходе выполнения данной расчетно-графической работы был определен оптимальный предел прочности алюминиевых деформируемых сплавов, определяющийся при испытании на растяжение.

Оптимальный параметры прочности:

Содержание Li(%) = 0.6

Температура старения(град.С)=25

Время старения(час.)=2

Содержание Li(%) = 0.6

Температура старения(град.С)=25

Время старения(час.)=2

Содержание Li(%) = 1.5

Температура старения(град.С)=200

Время старения(час.)=6


список использованных источников

1) Конспект лекций по дисциплине «ВП и МСАС».

2) Конспект лекций по дисциплине «ТА и МОПЗ».

3) Конспект лекций по дисциплине «Методы синтеза и оптимизации».

4) Методические указания к лабораторным и расчетно-графической работе по дисциплине "Вероятностные процессы и математическая статистика в автоматизированных системах" / Сост.:Г.Б.Билык, О.В.Веремей, В.И.Кравченко. - ДГМА, 2006. - 24 с. (файл VPLAB).

5) Применение математических методов и ЭВМ. Планирование и обработка результатов эксперимента / Под ред. А.Н. Останина. - Мн.: Выш. шк., 2005. - 218 с.


приложение

Листинг модуля Metod.pas – подпрограммы общего назначения

type mas=array(1..3) of real;

var x:array(0..9,1..15) of real;

x2:array(1..3,1..15) of real;

x0,ix,xc,la,m,l,n,ml,nl,

xp1,xp2,xp3,xh,xlocmax,xlocmin:mas;

y,ys:array(1..2,1..20) of real;

x12,x23,x13,yc,ycs,s2u:array(1..15) of real;

b,s2b,db:array(0..9) of real;

kk:integer;

d,xc2,S2UMax,s2y,ycen,ylocmax,ylocmin:real;

{$R *.dfm}

function sx(l:integer):real;

var s:real; i:integer;

begin s:=0;

for i:=1 to 15 do

s:=s+sqr(x(l,i));

sx:=s;

end;

function sxy(l:integer):real;

var s:real; i:integer;

begin s:=0;

for i:=1 to 15 do

s:=s+x(l,i)*yc(i);

sxy:=s;

end;

function f(l:integer):real;

var xx1,xx2,xx3:real;

begin

xx1:=x(1,l); xx2:=x(2,l); xx3:=x(3,l);

f:=b(0)+b(1)*xx1+b(2)*xx2+b(3)*xx3

+b(4)*xx1*xx2+b(5)*xx1*xx3+b(6)*xx2*xx3+

b(7)*xx1*xx1+b(8)*xx2*xx2+b(9)*xx2*xx2;

end;

function fy(xx1,xx2,xx3:real):real;

begin

fy:=b(0)+b(1)*xx1+b(2)*xx2+b(3)*xx3

+b(4)*xx1*xx2+b(5)*xx1*xx3+b(6)*xx2*xx3+

b(7)*xx1*xx1+b(8)*xx2*xx2+b(9)*xx2*xx2;

end;

function dlambda(lam:real):real;

begin dlambda:=(b(7)-lam)*((b(8)-lam)*(b(9)-lam)-0.25*b(6)*b(6))-

0.5*b(4)*(0.5*b(4)*(b(9)-lam)-0.25*b(5)*b(6))+

0.5*b(5)*(0.25*b(4)*b(6)-0.5*b(5)*(b(8)-lam))

end;

function findl(xa,xb:real):real;

var c:real;

begin

repeat

c:=(xa+xb)/2;

if dlambda(xa)*dlambda(c)<0 then xb:=c

else xa:=c;

until abs(dlambda(xa)-dlambda(xb))<=0.001;

findl:=(xa+xb)/2;

end;

procedure maximminim;

var yt:array(1..2,1..2,1..2) of real; i,j,w:integer;

minim,maxim:real;

begin minim:=fy(1,1,1);

maxim:=fy(1,1,1);

for i:=-10 to 10 do

for j:=-10 to 10 do

for w:=-10 to 10 do

begin if fy(i/10,j/10,w/10)>=maxim then begin

maxim:=fy(i/10,j/10,w/10); xlocmax(1):=i/10;

xlocmax(2):=j/10; xlocmax(3):=w/10; end;

if fy(i/10,j/10,w/10)<=minim then begin

minim:=fy(i/10,j/10,w/10);xlocmin(1):=i/10;

xlocmin(2):=j/10; xlocmin(3):=w/10; end;

end;

ylocmin:=minim;

ylocmax:=maxim;

end;

procedure minmax;

type arr=array (1..3,1..3) of real;

var d,d1,d2,d3:arr; i:integer; bd:mas;

function delta(a:arr):real;

begin delta:=a(1,1)*(a(2,2)*a(3,3)-a(2,3)*a(3,2))-

a(1,2)*(a(2,1)*a(3,3)-a(2,3)*a(3,1))+

a(1,3)*(a(2,1)*a(3,2)-a(2,2)*a(3,1)); end;

begin d(1,1):=2*b(7); d(1,2):=b(4); d(1,3):=b(5);

d(2,1):=b(4); d(2,2):=2*b(8); d(2,3):=b(6);

d(3,1):=b(5); d(3,2):=b(6); d(3,3):=2*b(9);

bd(1):=-b(1); bd(2):=-b(2); bd(3):=-b(3);

for i:=1 to 3 do

begin d1(i,2):=d(i,2); d1(i,3):=d(i,3);

d2(i,1):=d(i,1); d2(i,3):=d(i,3);

d3(i,2):=d(i,2); d3(i,1):=d(i,1);

d1(i,1):=bd(i);d2(i,2):=bd(i);d3(i,3):=bd(i); end;

xc(1):=delta(d1)/delta(d);

xc(2):=delta(d2)/delta(d);

xc(3):=delta(d3)/delta(d);

ycen:=fy(xc(1),xc(2),xc(3));

la(1):=findl(-6,-2);

la(2):=findl(-2,2);

la(3):=findl(2,6);

for i:=1 to 3 do begin

ml(i):=(b(6)*(b(7)-la(i))-0.5*b(4)*b(5))/(b(5)*(b(8)-la(i))-0.5*b(4)*b(6));

nl(i):=(-2*(b(7)-la(i))*(b(8)-la(i))+0.5*b(4)*b(4))/(b(5)*(b(8)-la(i))-0.5*b(4)*b(6));

l(i):=1/sqrt(1+sqr(ml(i))+sqr(nl(i)));

m(i):=ml(i)*l(i);

n(i):=nl(i)*l(i);

maximminim; end; end;

procedure TForm1.FormCreate(Sender: TObject);

var i,j:integer;

begin

x0(1):=1; x0(2):=175; x0(3):=4;

ix(1):=0.5; ix(2):=25; ix(3):=2;

y(1,1):=24.99; y(1,2):=22.61;y(1,3):=26.99; y(1,4):=39.61;

y(1,5):=49.8; y(1,6):=37.8; y(1,7):=26.61; y(1,8):=28.99;

y(1,9):=35.8; y(1,10):=37.61;y(1,11):=27.99;y(1,12):=24.18;

y(1,13):=26.8; y(1,14):=34.99;y(1,15):=32.8;

y(2,1):=25.51;y(2,2):=23.89; y(2,3):=26.89; y(2,4):=39.51;

y(2,5):=53.7; y(2,6):=37.51; y(2,7):=26.7; y(2,8):=28.7;

y(2,9):=38.89;y(2,10):=37.32;y(2,11):=33.51;y(2,12):=28.7;

y(2,13):=30.7; y(2,14):=38.7;y(2,15):=31.51;

xc2:=sqrt(8/15); d:=sqrt((15*xc2-8)/2);

ys:=y;

sgcod.Cells(0,1):='Íóëåâîé óðîâåíü';

sgcod.Cells(0,2):='Èíòåðâàë âàðüèðîâàíèÿ';

sgcod.Cells(0,3):='Íèæíèé óðîâåíü';

sgcod.Cells(0,4):='Âåðõíèé óðîâåíü';

sgcod.Cells(0,5):='Êîäîâîå îáîçíà÷åíèå';

sgcod.Cells(1,0):='Ñîäåðæ. Li,% ';

sgcod.Cells(2,0):='T ñòàð., ãð.Ñ ';

sgcod.Cells(3,0):=' t ñòàð., ÷. ';

for i:=1 to 3 do

begin sgcod.Cells(i,1):=' '+floattostr(x0(i));

sgcod.Cells(i,2):=' '+floattostr(ix(i));

sgcod.Cells(i,3):=' '+floattostr(x0(i)-ix(i));

sgcod.Cells(i,4):=' '+floattostr(x0(i)+ix(i));

end;

sgcod.Cells(1,5):=' x1';

sgcod.Cells(2,5):=' x2';

sgcod.Cells(3,5):=' x3';

sgplan.Cells(1,0):=' x0'; sgplan.Cells(2,0):=' x1';

sgplan.Cells(3,0):=' x2'; sgplan.Cells(4,0):=' x3';

sgplan.Cells(5,0):='x1^2-'+floattostrf(xc2,fffixed,3,2);

sgplan.Cells(6,0):='x2^2-'+floattostrf(xc2,fffixed,3,2);

sgplan.Cells(7,0):='x3^2-'+floattostrf(xc2,fffixed,3,2);

sgplan.Cells(8,0):='x1x2'; sgplan.Cells(9,0):='x1x3';

sgplan.Cells(10,0):='x2x3'; sgplan.Cells(11,0):=' y1';

sgplan.Cells(12,0):=' y2'; sgplan.Cells(13,0):=' yc';

for i:=1 to 15 do begin

if i<=8 then begin

if i mod 2 = 0 then x(1,i):=1 else x(1,i):=-1;

if ((i+1) div 2) mod 2 = 0 then x(2,i):=1 else x(2,i):=-1;

if ((i+3) div 4) mod 2 = 0 then x(3,i):=1 else x(3,i):=-1;

end

else begin

for j:=1 to 3 do

if i=7+2*j then x(j,i):=-d

else if i=8+2*j then x(j,i):=d

else x(j,i):=0;

end;

x12(i):=x(1,i)*x(2,i);

x23(i):=x(2,i)*x(3,i);

x13(i):=x(1,i)*x(3,i);

x(4,i):=x12(i); x(5,i):=x13(i);

x(6,i):=x23(i);

x(0,i):=1;

for j:=1 to 3 do

x2(j,i):=sqr(x(j,i))-xc2;

x(7,i):=x2(1,i);

x(8,i):=x2(2,i);

x(9,i):=x2(3,i);

end;

for i:=1 to 15 do

begin sgplan.Cells(0,i):=inttostr(i);

sgplan.Cells(1,i):=' 1';

for j:=1 to 3 do begin

sgplan.Cells(j+1,i):=' '+floattostr(x(j,i));

sgplan.Cells(j+4,i):=' '+floattostrf(x2(j,i),fffixed,5,3); end;

sgplan.Cells(8,i):=' '+floattostr(x12(i));

sgplan.Cells(9,i):=' '+floattostr(x13(i));

sgplan.Cells(10,i):=' '+floattostr(x23(i));

end;

xh(1):=-1; xh(2):=-1; xh(3):=-1;

kk:=0;

end;

procedure TForm1.Button2Click(Sender: TObject);

var i:integer;

begin

kk:=kk+1;

for i:=1 to 15 do

sgplan.Cells(10+kk,i):=floattostr(ys(kk,i));

if kk>=2 then begin button2.Enabled:=false;

for i:=1 to 15 do begin

yc(i):=(y(1,i)+y(2,i))/2;

ycs(i):=(y(1,i)+y(2,i))/2;

sgplan.Cells(13,i):=floattostr(ycs(i));

end;

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

var k1,k2:integer; yk:real;

begin

randomize;

k1:=random(14)+1;

k2:=random(14)+1;

sgplan.Rows(16):=sgplan.Rows(k1);

sgplan.Rows(k1):=sgplan.Rows(k2);

sgplan.Rows(k2):=sgplan.Rows(16);

yk:=ys(1,k1);

ys(1,k1):=ys(1,k2);

ys(1,k2):=yk;

yk:=ys(2,k1);

ys(2,k1):=ys(2,k2);

ys(2,k2):=yk;

end;

procedure TForm1.PageControl1Change(Sender: TObject);

var u,i,j,li:integer; sums,g,s2ad,fp,xx:real;

begin

if button2.Enabled=false then begin

sgvos.Cells(0,0):=' u';

sgvos.Cells(1,0):=' S2u';

sums:=0;

for u:=1 to 15 do

begin s2u(u):=sqr(yc(u)-y(1,u))+sqr(yc(u)-y(2,u));

sgvos.Cells(1,u):=floattostrf(s2u(u),fffixed,5,3);

sgvos.Cells(0,u):=inttostr(u);

sums:=sums+s2u(u);

end;

s2umax:=s2u(1);

for i:=1 to 15 do

if s2u(i)>s2umax then s2umax:=s2u(i);

label5.Caption:=floattostrf(s2umax,fffixed,7,3);

g:=s2umax/sums;

label7.Caption:=floattostrf(g,fffixed,7,3);

label9.Caption:=floattostrf(0.47,fffixed,7,3);

if g<=0.47 then begin

label10.Caption:=' Îïûòû'+#13+'âîñïðîèçâîäèìû';

s2y:=0;

for i:=1 to 15 do

s2y:=s2y+s2u(i)/15;

if b(0)=0 then begin

for i:=0 to 9 do

b(i):=sxy(i)/sx(i);

sgb.Cells(i,1):=floattostrf(b(i),fffixed,5,3);

for j:=1 to 3 do

b(0):=b(0)-b(6+j)*xc2;

sgb.Cells(0,1):=floattostrf(b(0),fffixed,5,3);

sgb.Cells(0,0):='b0'; sgb.Cells(1,0):='b1';

sgb.Cells(2,0):='b2'; sgb.Cells(3,0):='b3';

sgb.Cells(4,0):='b12'; sgb.Cells(5,0):='b13';

sgb.Cells(6,0):='b23'; sgb.Cells(7,0):='b11';

sgb.Cells(8,0):='b22'; sgb.Cells(9,0):='b33';

for i:=0 to 9 do

begin s2b(i):=s2y/(2*sx(i));

db(i):=1.76*s2b(i);

sgsb.Cells(i+1,1):=floattostrf(s2b(i),fffixed,7,3);

sgsb.Cells(i+1,2):=floattostrf(db(i),fffixed,7,3);

end;

sgsb.Cells(1,0):='b0'; sgsb.Cells(2,0):='b1';

sgsb.Cells(3,0):='b2'; sgsb.Cells(4,0):='b3';

sgsb.Cells(5,0):='b12'; sgsb.Cells(6,0):='b13';

sgsb.Cells(7,0):='b23'; sgsb.Cells(8,0):='b11';

sgsb.Cells(9,0):='b22'; sgsb.Cells(10,0):='b33';

sgsb.Cells(0,1):='S2bi'; sgsb.Cells(0,2):='|bi|';

label16.Caption:=floattostrf(s2y,fffixed,7,3);

label18.Caption:=floattostrf(1.76,fffixed,7,3);

label21.Caption:='Íåçíà÷èìûå êîýôôèöèåíòû:';

li:=0;

for i:=0 to 9 do

if abs(b(i))<=db(i) then begin

li:=li+1;

label21.Caption:=label21.Caption+' b('+

inttostr(i)+')='+floattostrf(b(i),fffixed,7,4);

b(i):=0;

end;

s2ad:=0;

for i:=1 to 15 do

s2ad:=s2ad+sqr(yc(i)-f(i))+2/(li*15);

fp:=s2ad/s2y;

label12.Caption:=floattostrf(s2y,fffixed,7,3);

label20.Caption:=floattostrf(s2ad,fffixed,7,3);

label25.Caption:=floattostrf(2.96,fffixed,7,3);

label26.Caption:=floattostrf(fp,fffixed,7,3);

if fp<=2.96 then

label27.Caption:=' Ìîäåëü àäåêâàòíà'

else

label27.Caption:=' Ìîäåëü íå àäåêâàòíà';

minmax;

memo2.lines.add('Êîîðäèíèòû öåíòðà ïîâåðõíîñòè');

memo2.lines.add(' xc1='+floattostrf(xc(1),fffixed,5,3)+

' xc2='+floattostrf(xc(2),fffixed,5,3)+

' xc3='+floattostrf(xc(3),fffixed,5,3)+

' yc='+floattostrf(ycen,fffixed,5,3) );

if ((la(1)<0) and (la(2)<0) and (la(3)<0)) or

((la(1)>0) and (la(2)>0) and (la(3)>0))

then memo2.lines.add(' Ïîâåðõíîñòü, èìåþùàÿ ýêñòðåìóì')

else memo2.lines.add(' Ïîâåðõíîñòü òèïà ìèíèìàêñà');

memo2.lines.add(' Ëîêàëüíûé ýêñòðåìóì');

memo2.lines.add(' xmax1='+floattostrf(xlocmax(1),fffixed,5,1)+

' xmax2='+floattostrf(xlocmax(2),fffixed,5,1)+

' xmax3='+floattostrf(xlocmax(3),fffixed,5,1)+

' Ymax='+floattostrf(ylocmax,fffixed,5,4));

memo2.lines.add(' xmin1='+floattostrf(xlocmin(1),fffixed,5,1)+

' xmin2='+floattostrf(xlocmin(2),fffixed,5,1)+

' xmin3='+floattostrf(xlocmin(3),fffixed,5,1)+

' Ymin='+floattostrf(ylocmin,fffixed,5,4));

end; end

else label10.Caption:=' Îïûòû íå'+#13+'âîñïðîèçâîäèìû';

for i:=0 to 9 do

sgb.Cells(i,1):=floattostrf(b(i),fffixed,5,3);

end; end;

procedure TForm1.RadioGroup1Click(Sender: TObject);

var xxx:real;

begin series1.Clear; series2.Clear; series3.Clear;

case radiogroup1.ItemIndex of

0: begin groupbox7.Visible:=true;

label28.Caption:='x2='; label29.Caption:='x3=';

label30.Caption:='x2='; label31.Caption:='x3=';

label32.Caption:='x2='; label33.Caption:='x3=';

label34.Caption:='x1=';

xp2(1):=strtofloat(edit1.text); xp3(1):=strtofloat(edit2.text);

xp2(2):=strtofloat(edit3.text); xp3(2):=strtofloat(edit4.text);

xp2(3):=strtofloat(edit5.text); xp3(3):=strtofloat(edit6.text);

xxx:=-1;

while xxx<=1 do

begin series1.AddXY(xxx,fy(xxx,xp2(1),xp3(1)));

series2.AddXY(xxx,fy(xxx,xp2(2),xp3(2)));

series3.AddXY(xxx,fy(xxx,xp2(3),xp3(3)));

xxx:=xxx+0.01; end;

memo3.Clear;

memo3.Lines.Add('Ëèíèè ðåãðåññèè:');

memo3.Lines.Add('y= '+floattostrf(fy(0,xp2(1),xp3(1)),fffixed,4,2)+

' + '+floattostrf(b(1)+b(4)*xp2(1)+b(5)*xp3(1),fffixed,4,2)+

'*x1 + '+floattostrf(b(7),fffixed,4,2)+'*x1^2');

memo3.Lines.Add('y= '+floattostrf(fy(0,xp2(2),xp3(2)),fffixed,4,2)+

' + '+floattostrf(b(1)+b(4)*xp2(2)+b(5)*xp3(2),fffixed,4,2)+

'*x1 + '+floattostrf(b(7),fffixed,4,2)+'*x1^2');

memo3.Lines.Add('y= '+floattostrf(fy(0,xp2(3),xp3(3)),fffixed,4,2)+

' + '+floattostrf(b(1)+b(4)*xp2(3)+b(5)*xp3(3),fffixed,4,2)+

'*x1 + '+floattostrf(b(7),fffixed,4,2)+'*x1^2');

end;

1: begin groupbox7.Visible:=true;

label28.Caption:='x1='; label29.Caption:='x3=';

label30.Caption:='x1='; label31.Caption:='x3=';

label32.Caption:='x1='; label33.Caption:='x3=';

label34.Caption:='x2=';

xp1(1):=strtofloat(edit1.text); xp3(1):=strtofloat(edit2.text);

xp1(2):=strtofloat(edit3.text); xp3(2):=strtofloat(edit4.text);

xp1(3):=strtofloat(edit5.text); xp3(3):=strtofloat(edit6.text);

xxx:=-1;

while xxx<=1 do

begin series1.AddXY(xxx,fy(xp1(1),xxx,xp3(1)));

series2.AddXY(xxx,fy(xp1(2),xxx,xp3(2)));

series3.AddXY(xxx,fy(xp1(3),xxx,xp3(3)));

xxx:=xxx+0.01;

end;

memo3.Clear;

memo3.Lines.Add('Ëèíèè ðåãðåññèè:');

memo3.Lines.Add('y= '+floattostrf(fy(xp1(1),0,xp3(1)),fffixed,4,2)+

' + '+floattostrf(b(2)+b(4)*xp1(1)+b(6)*xp3(1),fffixed,4,2)+

'*x2 + '+floattostrf(b(8),fffixed,4,2)+'*x2^2');

memo3.Lines.Add('y= '+floattostrf(fy(xp1(2),0,xp3(2)),fffixed,4,2)+

' + '+floattostrf(b(2)+b(4)*xp1(2)+b(6)*xp3(2),fffixed,4,2)+

'*x2 + '+floattostrf(b(8),fffixed,4,2)+'*x2^2');

memo3.Lines.Add('y= '+floattostrf(fy(xp1(3),0,xp3(3)),fffixed,4,2)+

' + '+floattostrf(b(2)+b(4)*xp1(3)+b(6)*xp3(3),fffixed,4,2)+

'*x2 + '+floattostrf(b(8),fffixed,4,2)+'*x2^2');

end;

2: begin groupbox7.Visible:=true;

label28.Caption:='x1='; label29.Caption:='x2=';

label30.Caption:='x1='; label31.Caption:='x2=';

label32.Caption:='x1='; label33.Caption:='x2=';

label34.Caption:='x3=';

xp1(1):=strtofloat(edit1.text); xp2(1):=strtofloat(edit2.text);

xp1(2):=strtofloat(edit3.text); xp2(2):=strtofloat(edit4.text);

xp1(3):=strtofloat(edit5.text); xp2(3):=strtofloat(edit6.text);

xxx:=-1;

while xxx<=1 do

begin series1.AddXY(xxx,fy(xp1(1),xp2(1),xxx));

series2.AddXY(xxx,fy(xp1(2),xp2(2),xxx));

series3.AddXY(xxx,fy(xp1(3),xp2(3),xxx));

xxx:=xxx+0.01; end;

memo3.Clear;

memo3.Lines.Add('Ëèíèè ðåãðåññèè:');

memo3.Lines.Add('y= '+floattostrf(fy(xp1(1),xp2(1),0),fffixed,4,2)+

'+'+floattostrf(b(3)+b(5)*xp1(1)+b(6)*xp2(1),fffixed,4,2)+

x3 + '+floattostrf(b(9),fffixed,4,2)+'*x3^2');

memo3.Lines.Add('y= '+floattostrf(fy(xp1(2),xp2(2),0),fffixed,4,2)+

+ '+floattostrf(b(3)+b(5)*xp1(2)+b(6)*xp2(2),fffixed,4,2)+

x3 + '+floattostrf(b(9),fffixed,4,2)+'*x3^2');

memo3.Lines.Add('y= '+floattostrf(fy(xp1(3),xp2(3),0),fffixed,4,2)+

' + '+floattostrf(b(3)+b(5)*xp1(3)+b(6)*xp2(3),fffixed,4,2)+

'*x3 + '+floattostrf(b(9),fffixed,4,2)+'*x3^2'); end;

else groupbox7.Visible:=false;

end;

end;

procedure TForm1.RadioGroup2Click(Sender: TObject);

var px,yy,ymax,ymin:real;

xxx,xmax,xmin:mas;

begin series4.Clear; series5.Clear; series6.Clear;

px:=strtofloat(edit13.Text);

case radiogroup2.ItemIndex of

0:begin yy:=10; ymax:=0; ymin:=48;

label40.Caption:='x3=';

label41.Caption:='x1min='; label42.Caption:='x2min=';

label44.Caption:='x1max='; label45.Caption:='x2max=';

while yy<=48 do

begin xxx(1):=-1;

while xxx(1)<=1 do

begin xxx(2):=-1;

while xxx(2)<=1 do

begin if abs(fy(xxx(1),xxx(2),px)-yy)<=0.02

then series4.AddXY(xxx(1),xxx(2));

if fy(xxx(1),xxx(2),px)<=ymin then

begin xmin(1):=xxx(1); xmin(2):=xxx(2);

ymin:=fy(xxx(1),xxx(2),px);end;

if fy(xxx(1),xxx(2),px)>=ymax then

begin xmax(1):=xxx(1); xmax(2):=xxx(2);

ymax:=fy(xxx(1),xxx(2),px);end;

xxx(2):=xxx(2)+0.005; end;

xxx(1):=xxx(1)+0.005; end;

yy:=yy+1.5; end;

series5.AddXY(xmax(1),xmax(2)); series6.AddXY(xmin(1),xmin(2));

edit14.Text:=floattostrf(xmin(1),fffixed,5,2);

edit15.Text:=floattostrf(xmin(2),fffixed,5,2);

edit16.Text:=floattostrf(ymin,fffixed,5,2);

edit17.Text:=floattostrf(xmax(1),fffixed,5,2);

edit18.Text:=floattostrf(xmax(2),fffixed,5,2);

edit19.Text:=floattostrf(ymax,fffixed,5,2); end;

1: begin yy:=10; ymax:=0; ymin:=48;

label40.Caption:='x2=';

label41.Caption:='x1min='; label42.Caption:='x3min=';

label44.Caption:='x1max='; label45.Caption:='x3max=';

while yy<=48 do

begin xxx(1):=-1;

while xxx(1)<=1 do

begin xxx(3):=-1;

while xxx(3)<=1 do

begin if abs(fy(xxx(1),px,xxx(3))-yy)<=0.02

then series4.AddXY(xxx(1),xxx(3));

if fy(xxx(1),px,xxx(3))<=ymin then

begin xmin(1):=xxx(1); xmin(3):=xxx(3);

ymin:=fy(xxx(1),px,xxx(3));end;

if fy(xxx(1),px,xxx(3))>=ymax then

begin xmax(1):=xxx(1); xmax(3):=xxx(3);

ymax:=fy(xxx(1),px,xxx(3));end;

xxx(3):=xxx(3)+0.005; end;

xxx(1):=xxx(1)+0.005; end;

yy:=yy+1.5; end;

series5.AddXY(xmax(1),xmax(3)); series6.AddXY(xmin(1),xmin(3));

edit14.Text:=floattostrf(xmin(1),fffixed,5,2);

edit15.Text:=floattostrf(xmin(3),fffixed,5,2);

edit16.Text:=floattostrf(ymin,fffixed,5,2);

edit17.Text:=floattostrf(xmax(1),fffixed,5,2);

edit18.Text:=floattostrf(xmax(3),fffixed,5,2);

edit19.Text:=floattostrf(ymax,fffixed,5,2); end;

2: begin yy:=10;

ymax:=0; ymin:=48;

label40.Caption:='x1=';

label41.Caption:='x2min='; label42.Caption:='x3min=';

label44.Caption:='x2max='; label45.Caption:='x3max=';

while yy<=48 do

begin xxx(2):=-1; while xxx(2)<=1 do begin xxx(3):=-1;

while xxx(3)<=1 do begin if abs(fy(px,xxx(2),xxx(3))-yy)<=0.02

then series4.AddXY(xxx(2),xxx(3));

if fy(px,xxx(2),xxx(3))<=ymin then

begin xmin(3):=xxx(3);xmin(2):=xxx(2);

ymin:=fy(px,xxx(2),xxx(3));end;

if fy(px,xxx(2),xxx(3))>=ymax then

begin xmax(3):=xxx(3); xmax(2):=xxx(2);

ymax:=fy(px,xxx(2),xxx(3));end;

xxx(3):=xxx(3)+0.005; end;

xxx(2):=xxx(2)+0.005; end;

yy:=yy+1.5; end;

series5.AddXY(xmax(2),xmax(3)); series6.AddXY(xmin(2),xmin(3));

edit14.Text:=floattostrf(xmin(2),fffixed,5,2);

edit15.Text:=floattostrf(xmin(3),fffixed,5,2);

edit16.Text:=floattostrf(ymin,fffixed,5,2);

edit17.Text:=floattostrf(xmax(2),fffixed,5,2);

edit18.Text:=floattostrf(xmax(3),fffixed,5,2);

edit19.Text:=floattostrf(ymax,fffixed,5,2);

end; end;end;

procedure TForm1.Button3Click(Sender: TObject);

var i:integer; max,min:mas;

maxy,miny:real;

begin series7.Clear;

for i:=1 to 3 do

xh(i):=xh(i)+0.02;

max(1):=series1.MaxYValue;max(2):=series2.MaxYValue;

max(3):=series3.MaxYValue; min(1):=series1.MinYValue;

min(2):=series2.MinYValue; min(3):=series3.MinYValue;

maxy:=max(1); miny:=min(1);

for i:=2 to 3 do begin

if max(i)>=maxy then maxy:=max(i);

if min(i)<=miny then miny:=min(i);

end;

case radiogroup1.ItemIndex of

0: begin

edit9.Text:=floattostr(xh(1));

edit10.Text:=floattostr(fy(xh(1),strtofloat(edit1.Text),strtofloat(edit2.Text)));

edit11.Text:=floattostr(fy(xh(1),strtofloat(edit3.Text),strtofloat(edit4.Text)));

edit12.Text:=floattostr(fy(xh(1),strtofloat(edit5.Text),strtofloat(edit6.Text)));

series7.AddXY(xh(1),maxy); series7.AddXY(xh(1),miny); end;

1: begin

series7.AddXY(xh(2),maxy); series7.AddXY(xh(2),miny);

edit9.Text:=floattostr(xh(2));

edit10.Text:=floattostr(fy(strtofloat(edit1.Text),xh(2),strtofloat(edit2.Text)));

edit11.Text:=floattostr(fy(strtofloat(edit3.Text),xh(2),strtofloat(edit4.Text)));

edit12.Text:=floattostr(fy(strtofloat(edit5.Text),xh(2),strtofloat(edit6.Text))) end;

2: begin series7.AddXY(xh(3),maxy); series7.AddXY(xh(3),miny);

edit9.Text:=floattostr(xh(3));

edit10.Text:=floattostr(fy(strtofloat(edit1.Text),strtofloat(edit2.Text),xh(3)));

edit11.Text:=floattostr(fy(strtofloat(edit3.Text),strtofloat(edit4.Text),xh(3)));

edit12.Text:=floattostr(fy(strtofloat(edit5.Text),strtofloat(edit6.Text),xh(3)))

end; end;end;

procedure TForm1.Button4Click(Sender: TObject);

var i:integer; max,min:mas;

maxy,miny:real;

begin series7.Clear;

for i:=1 to 3 do

xh(i):=xh(i)-0.02;

max(1):=series1.MaxYValue; max(2):=series2.MaxYValue;

max(3):=series3.MaxYValue; min(1):=series1.MinYValue;

min(2):=series2.MinYValue; min(3):=series3.MinYValue;

maxy:=max(1); miny:=min(1);

for i:=2 to 3 do begin

if max(i)>=maxy then maxy:=max(i);

if min(i)<=miny then miny:=min(i); end;

case radiogroup1.ItemIndex of

0: begin edit9.Text:=floattostr(xh(1));

edit10.Text:=floattostr(fy(xh(1),strtofloat(edit1.Text),strtofloat(edit2.Text)));

edit11.Text:=floattostr(fy(xh(1),strtofloat(edit3.Text),strtofloat(edit4.Text)));

edit12.Text:=floattostr(fy(xh(1),strtofloat(edit5.Text),strtofloat(edit6.Text)));

series7.AddXY(xh(1),maxy); series7.AddXY(xh(1),miny); end;

1: begin series7.AddXY(xh(2),maxy); series7.AddXY(xh(2),miny);

edit9.Text:=floattostr(xh(2));

edit10.Text:=floattostr(fy(strtofloat(edit1.Text),xh(2),strtofloat(edit2.Text)));

edit11.Text:=floattostr(fy(strtofloat(edit3.Text),xh(2),strtofloat(edit4.Text)));

edit12.Text:=floattostr(fy(strtofloat(edit5.Text),xh(2),strtofloat(edit6.Text))) end;

2: begin series7.AddXY(xh(3),maxy); series7.AddXY(xh(3),miny);

edit9.Text:=floattostr(xh(3));

edit10.Text:=floattostr(fy(strtofloat(edit1.Text),strtofloat(edit2.Text),xh(3)));

edit11.Text:=floattostr(fy(strtofloat(edit3.Text),strtofloat(edit4.Text),xh(3)));

edit12.Text:=floattostr(fy(strtofloat(edit5.Text),strtofloat(edit6.Text),xh(3))) end; end;end;

end.