Курсовая работа: Вероятностные процессы и математическая статистика в автоматизированных системах
Курсовая работа: Вероятностные процессы и математическая статистика в автоматизированных системах
Министерство
образования и науки Украины
Кафедра
КИТ
“ВЕРОЯТНОСТНЫЕ
ПРОЦЕССЫ И МАТЕМАТИЧЕСКАЯ СТАТИСТИКА В АВТОМАТИЗИРОВАННЫХ СИСТЕМАХ”
2008
РЕФЕРАТ
Пояснительная записка к расчетно-графической
работе: 29 стр., 9 рис., 1 прил., 5 источников.
Объект исследования – оптимальный
предел прочности алюминиевых деформируемых сплавов при испытании на растяжение.
Метод исследования – применение
математико-статистических методов в автоматизированных системах, реализация
программ статистической обработки эксперимента на ЭВМ.
Многие детали и конструкции
испытывают нагрузки на растяжение. При чем эти нагрузки часто являются основным
фактором, влияющим на выход из строя деталей и конструкций. Поэтому очень
важной и актуальной является задача нахождения оптимального состава материала,
в течение длительного времени испытующего нагрузки на растяжение.
ДЕФОРМИРУЕМЫЙ АЛЮМИНИЕВЫЙ СПЛАВ, ЛИТИЙ,
ТЕМПЕРАТУРА СТАРЕНИЯ, ВРЕМЯ СТАРЕНИЯ, МНОГОФАКТОРНЫЙ ЭКСПЕРИМЕНТ.
СОДЕРЖАНИЕ
Введение
1 Постановка задачи
2 Этапы планирования и статической обработки результатов
эксперимента для построения модели 2-го порядка
2.1 Построение модели плана II порядка
2.2
Кодирование факторов
2.3
Составление план – матрицы
2.4
Проверка воспроизводимости опытов
2.5
Расчет коэффициентов регрессии
2.6
Определение значимости коэффициентов
2.7
Проверка адекватности модели
3 Выбор и описание метода
условной оптимизации
3.1
Выбор метода условной оптимизации
3.2
Описание метода условной оптимизации
(Фиако-МакКормика)
4 Описание программы
4.1
Общие сведения
4.2
Функциональное назначение
4.3
Описание логической структуры программы
4.4
Используемые технические средства
4.5
Вызов и загрузка
4.6
Входные данные
4.7
Выходные данные
5 Результаты обработки данных
эксперимента
6 Графики зависимости отклика
7 Кривые равного выхода
Заключение
Список использованных источников
Приложение
Введение
Развитие современной техники
связано с созданием новых и постоянным совершенствованием существующих
технологических процессов. Основой их разработки и оптимизации является
эксперимент. Заметное повышение эффективности экспериментальных исследований и
инженерных разработок достигается использованием математических методов
планирования экспериментов. Использование математико-статистических методов при
постановке задач. В процессе экспериментирования и при обработке полученных
данных существенно сокращает сроки решения, снижает затраты на исследования и
повышает качество полученных результатов.
Встречающиеся на практике реальные
задачи весьма разнообразны. Достаточно грубо их можно разделить на три основных
задачи:
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.