Графическое решение задач линейного программирования. Курсовая работа (т). Информационное обеспечение, программирование. 2014-05-08

Графическое решение задач линейного программирования. Курсовая работа (т). Информационное обеспечение, программирование. 2014-05-08 Реферат

Графическое решение задач линейного программирования. курсовая работа (т). информационное обеспечение, программирование. 2021-05-08

Содержание

Введение

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

.1 Требования к функциям,
выполняемым системой

.2 Требования к
программно-аппаратному обеспечению

.3 Требования к техническому
обеспечению

.4 Требования к эргономике и
технической эстетике

.5 Требования к надежности и
хранению информации

. Основная часть

.1 Математическая модель

.2 Метод решения задачи

.3 Структурная схема программы

.4 Схема взаимодействия модулей

. Руководство программисту

. Руководство пользователю

.1 Общие сведения

.2 Работа с помощью

.3 Наиболее вероятные ошибки

Заключение

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

Приложение А – Текст программы

Приложение Б – Формы программы

Аннотация

Курсовой проект на тему «Графическое решение
задач линейного программирования» содержит введение, четыре главы, заключение и
приложения, которые состоят из текста, формы программы и диска с программой.

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

Имеется удобный и понятный интерфейс для работы
с программой.

Введение

Линейное программирование – это раздел
математики ориентируемый на нахождении экстремума в задачах, которые
описываются линейными уравнениями.

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

Задачи курсового проекта:

изучить теоретический материал по теме работы;

описать создание программного продукта по теме
работы.

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

Составить математическую модель графического
решения задач линейного программирования. Описать предъявляемые требования к
эргономике и технической эстетики для разработанного интерфейса программы.
Разработать программный продукт для графического решения задач линейного
программирования.

К основным параметрам функциональных задач в
постановке задачи относятся:

)цель и назначение данной задачи состоит в том,
чтобы разработать программный продукт для графического решения задач линейного
программирования;

)условия решения задачи с использованием средств
вычислительной техники:

– процессор:
Pentium/Celeron/AMD K5- 2400 MHz;

– монитор SVGA, поддерживающий графический режим
1024*768;

размер ОЗУ 1024Мб;

свободное пространство на жестком диске не менее
20 Мб;

видео карта 512 Мб;

клавиатура;

мышь;

)содержание функций обработки входной информации
при решения задачи: по введенным данным будет производиться расчет задачи;

)требование к периодичности решения задачи:
данный программный продукт будет использоваться по требованию оператора;

)ограничение по срокам и точностям выходной
информации: информация предоставляется сразу после завершения процесса обработки
входной информации;

)состав и форма представления выходной
информации: выходные данные выводятся на экран;

)источники входной информации для решения
задачи: данные о технических характеристиках компьютеров;

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

.1 Требования к функциям, выполняемым системой

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

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

В программном продукте реализованы следующие
функции:

–   решение задачи;

–          справка.

1.2 Требования к программно-аппаратному
обеспечению

Программное обеспечение должно удовлетворять
следующим требованиям:

–          возможность
экономично и целесообразно использовать предоставляемую память;

–          включать в себя
проверку целостности данных;

–          при возникновении
ошибок выдавать сообщения, отражающие суть ошибок, облегчающее их исправление.

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

–          операционная
система Windows XP, Windows
7 Ultimate;

–          Delphi 7;

–          Microsoft
Office 2003, 2007.

.3 Требования к техническому обеспечению

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

–   процессор
Intel Atom N570 CPU 3.2 GHz;

–          RAM
– 1Gb;

–          HDD
– 120Gb;

–          мышь;

–          монитор
LG G2225HQ.

1.4 Требования к эргономике и технической
эстетике

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

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

Интерфейс должен быть рассчитан на
преимущественное использование манипулятора типа «мышь», то есть управление
системой должно осуществляться с помощью набора экранных меню, кнопок, значков
и т. п. элементов. Клавиатурный режим ввода должен используется главным образом
при заполнении и/или редактировании текстовых и числовых полей экранных форм.
Все надписи экранных форм, а также сообщения, выдаваемые пользователю (кроме
системных сообщений) должны быть на русском языке.

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

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

Экранные формы должны проектироваться с учетом
требований унификации:

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

–   для обозначения сходных
операций должны использоваться сходные графические значки, кнопки и другие
управляющие (навигационные) элементы. Термины, используемые для обозначения
типовых операций (добавление информационной сущности, редактирование поля
данных), а также последовательности действий пользователя при их выполнении,
должны быть унифицированы;

–        внешнее поведение сходных элементов
интерфейса (реакция на наведение указателя «мыши», переключение фокуса, нажатие
кнопки) должны реализовываться одинаково для однотипных элементов.

.5 Требования к надежности и хранению информации

Надежность – это одно из важнейших свойств
программного продукта, обеспечение которого даёт возможность предусмотреть
различные ситуации, когда операционная система или пользователь не могут
корректно работать с программой. Например, неправильный ввод (текст вместо
цифр), не поддерживаемая операционная система и т.д.

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

Данный программный продукт характеризуется
высокой степенью_ надежности хранения информации. При некорректных действиях

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

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

Хранение программного продукта может
осуществляться на любом магнитном или оптическом носителе информации. В нашем
случае применены компакт диски CD-R/DWD-R
и Flash – носители.

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

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

Регистрация означает
протоколирование выявляемых в процессе оценивания событий или проявлений ошибок
(недостатков, нарушений требований).

Программная документация, в
общем виде, должна удовлетворять следующим требованиям:

–   соответствие
требованиям стандартов единой системы программной документации;

–          понятность
документации;

–          полнота
документации;

–          возможность
освоения программного обеспечения по документации;

–          возможность
освоения программного обеспечения на контрольном примере;

–          легкость
установки и запуска программного обеспечения;

–          понятность
входных и выходных данных;

–          наличие
описания структуры функций программного обеспечения;

–          соответствие
функций программного обеспечения требованиям
техническому заданию;

–          наличие
описания функций программного обеспечения;

–          отсутствие
противоречий в реализации интерфейса с пользователем;

–          отсутствие
противоречий в диагностике системы;

–   обеспечение
помощи пользователю при затруднениях средствами
функции подсказки;

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

–          правильность
документации;

–          приемлемость
уровня технического исполнения документации;

–          наличие
краткой аннотации программного обеспечения;

–          наличие
описания решаемых задач;

–          наличие
описания ограничении по применению;

–          наличие
описания алгоритмов.

2. Основная часть

.1 Математическая модель

Математическая модель – это математическое
представление реальности.

Математическое моделирование – это процесс
построения и изучения математических моделей.

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

Графический способ решения ЗЛП целесообразно
использовать для решения задач с двумя переменными, когда ограничения выражены
системой неравенств 1:

Графическое решение задач линейного программирования. Курсовая работа (т). Информационное обеспечение, программирование. 2014-05-08 (1)

x1 ≥ 0,
x2 ≥ 0

.2 Метод решения задачи

Алгоритм графического способа решения задач
линейного программирования заключается:

) Построить прямые уравнения, которые получаются
в результате замены в ограничения знаков неравенств на знаки равенств;

) Найти полуплоскости, определяемые каждым из
ограничений задачи;

) Определить многоугольник решений;

4) Построить вектор Графическое решение задач линейного программирования. Курсовая работа (т). Информационное обеспечение, программирование. 2014-05-08 = (c1;c2) – вектор
градиент;

) Построить прямую F = c1x1 c2x2 = 0,
проходящую через начало координат и перпендикулярную вектору Графическое решение задач линейного программирования. Курсовая работа (т). Информационное обеспечение, программирование. 2014-05-08;

) Передвигать прямую F в
направлении вектора Графическое решение задач линейного программирования. Курсовая работа (т). Информационное обеспечение, программирование. 2014-05-08, в
результате чего либо находят точку, в которой целевая функция принимает
экстремум (максимум или минимум), либо устанавливают неограниченность функции
на множестве планов;

) Определить координаты точки
экстремума функции и вычислить значение целевой функции в этой точки.

Пример. Предприятие изготавливает два вида
продукции – П1 и П2, которая поступает в оптовую продажу. Для производства
продукции используются два вида сырья – А и В. Максимально возможные запасы
сырья в сутки составляют 9 и 13 единиц соответственно. Расход сырья на единицу
продукции вида П1 и вида П2 дан в таблице 1.

Таблица 1 – Расход сырья продукции

Сырье

Расход
сырья на 1 ед. продукции

Запас
сырья, ед.

П1

П2

А
В

2
3

3
2

Опыт работы показал, что суточный спрос на
продукцию П1 никогда не превышает спроса на продукцию П2 более чем на 1 ед.
кроме того, известно, что спрос на продукцию П2 никогда не превышает 2 ед. в
сутки.

Оптовые цены единицы продукции равны: 3д.е. –
для П1 4 д.е. для П2.

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

Решение: Для построения математической модели
остается только идентифицировать переменные и представить цель и ограничения в
виде математических функций этих переменных.

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

х1 3х2 £ 9;

х1 2х2 £ 13;

х1 – х2 £ 1;                                                                                             (2)

х2 £ 2;

х1 £ 0; х2 £
0.

Доход от реализации х1 единиц продукции П1 и х2
продукции П2 составит F
= 3×1 4×2.

Таким образом, мы приходим к следующей
математической задаче: среди всех неотрицательных решений данной системы
линейных неравенств требуется найти такое, при котором функция F
принимает максимальное значение Fmax
.

Найдем решение данной задачи графическим
способом.

Построим многоугольник решений. Для этого в
системе координат Х10Х2 на плоскости изобразим граничные прямые L1,
L2, L3,
L4:

х1 3х2 = 9 (L1);

х1 2х2 = 13 (L2);

х1 – х2 = 1 (L3);

х2 = 2 (L4).

Для построения прямой Z
= 3х1 4х2 = 0 строим вектор-градиент С = (3;4) и через точку 0 проводим
прямую, перпендикулярную ему. Построенную прямую Z
= 0 перемещаем параллельно самой себе в направление вектора С. Из рисунка 9
следует, что по отношению к многоугольнику решений опорной эта прямая
становится в точке С, где функция принимает максимальное значение. Точка С
лежит на пересечении прямых L1
и L3. для определения
ее координат решим систему уравнений 1:

х1 3х2 = 9;

х1 – х2 = 1.                                                                                             (1)

Оптимальный план задачи х1 = 2,4; х2 = 1,4.
подставляя значения х1 и х2 в линейную функцию, получим равенство 1:

Zmax = 3 * 2,4
4 * 1,4 = 12,8.     (1)

Полученное решение означает, что объем
производства продукции П1 должен быть равен 2,4 ед., а продукции П2 – 1,4 ед.
доход, получаемый в этом случае, составит: Z
= 12,8 д.е. Ответ показан на рисунке 1:

Графическое решение задач линейного программирования. Курсовая работа (т). Информационное обеспечение, программирование. 2014-05-08

Рисунок 1 – Геометрическая интерпретация решения
задач линейного программирования

.3 Структурная схема программы

Программный продукт имеет конструкцию построения
– состав и взаимосвязь программный модулей. Пример структурной схемы программы
представлен на рисунке 2.

Рисунок 2 – Структурная схема программы

.4 Схема взаимодействия модулей

Программа содержит 4 модуля. Схема
взаимодействия модулей программы изображена на рисунке 3.

Рефераты:  Красота чисел. Как быстро вычислять в уме

Рисунок 3 – Схема взаимодействия модулей

3. Руководство программисту

Данный программный продукт написан в среде
визуального программирования Borland
Delphi 7 и был основан на
модульном программировании. В программе используются стандартные компоненты Delphi,
с помощью которых осуществляется её реализация. Программа включает в себя
следующие файлы:

–   graph_simplex.dpr
– содержит общее описание проекта;

–          graph_simplex.cfg
– содержит параметры и настройки компилятора;

–          graph_simplex.dof
– содержит параметры и настройки проекта;

–          graph_simplex.res
– файл
ресурсов;

–          graph_simplex.exe
– исполнимый
файл;

–          файлы с расширением
*.pas – файлы модулей
которые содержат код программы;

–          файлы с расширением
*.dfm – файлы в которых
находится описание окон;

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

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

Программы включает в себя 4 модуля каждый из
которых выполняют определенные функции:

MainForm
– рабочая среда программы;

NewTaskForm
– новая задача ;- новая симплекс – таблица ;

AboutForm
– вызов справки

Для начала работы с программой нужно запустить
файл graph_simplex.exe.

Текст программы представлен в приложении А.

4. Руководство пользователю

.1 Общие сведения

Данная программа предназначена для графического
решения задач линейного программирования.

Для начала работы с программой необходимо
запустить файл graph_simplex.exe.

Для запуска программы выбрать вкладку «Задача».
В появившемся окне ввести информацию из задачи в новую симплекс-таблицу, после
чего нажать «ОК». Далее следует выбрать выбрать критерий минимизации и
максимизации, после чего на главном окне появятся графическое решение и
уравнения решения данной задачи

Для получения справочной информации по программе
следует после запуска программы щелкнуть по вкладке «Справка».

Работу программы можно посмотреть в приложении
Б.

.2 Работа с помощью

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

Для вызова справки нужно выбрать на панели
инструментов пункт «Справка».

1)   Справка «О программе»
(рисунок
4).

Графическое решение задач линейного программирования. Курсовая работа (т). Информационное обеспечение, программирование. 2014-05-08

Рисунок 4 – Справка «О программе»

.3 Наиболее вероятные ошибки

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

Окно ошибки при не правильном выборе количества
ограничений показано на рисунке 5:

Графическое решение задач линейного программирования. Курсовая работа (т). Информационное обеспечение, программирование. 2014-05-08

Рисунок 5 – Окно ошибки при не
правильном выборе количества ограничений

Заключение

В курсовом проекте изложен теоретический
материал по теме «Графическое решение задач линейного программирования»,
приведен пример решения задач данным методом.

Результатом курсового проекта является
программный продукт, выполненный в среде программирования Borland Delphi 7, с
использованием дополнительных компонентов, и разработан по всем правилам
разработки программного продукта.

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

Приложение A

Текст программы

program
graph_simplex;

{$IFDEF
VER240}

{$R ‘theory.res’
‘..docstheory.rc’}

{$ELSE}

{$R ‘..bintheory.res’}

{$ENDIF},in
‘formsNewTaskFormNewTaskFormUnit.pas’ {NewTaskForm},in ‘formsMainFormMainFormUnit.pas’
{MainForm},in ‘formsTaskSizeFormTaskSizeFormUnit.pas’ {TaskSizeForm},in
‘formsAboutFormAboutFormUnit.pas’ {AboutForm};

{$R *.res}.Initialize;

{$IF CompilerVersion >
18.5}.MainFormOnTaskbar := True;

{$IFEND}.CreateForm(TMainForm, MainForm);.Run;.MainFormUnit;,
Messages, SysUtils, Variants, Classes,, Controls, Forms, Dialogs, Menus,
ExtCtrls,, StdCtrls, MSimplexMath, ComCtrls,, ToolWin, ImgList, Buttons,
OleCtrls, ActiveX,, SHDocVw;= record: Double;: Double;;= class(TForm):
TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TPanel;:
TPaintBox;: TMenuItem;: TMenuItem;: TActionList;: TAction;: TPanel;:
TTrackBar;: TLabel;: TRichEdit;: TPanel;: TCheckBox;: TCheckBox;: TBevel;:
TBevel;: TToolBar;: TToolButton;: TToolButton;: TToolButton;: TCheckBox;:
TImageList;: TMenuItem;: TAction;: TSaveDialog;: TSpeedButton;: TSpeedButton;:
TPanel;: TWebBrowser;: TCheckBox;: TComboBox;miExitClick(Sender:
TObject);FormCreate(Sender: TObject);FormDestroy(Sender:
TObject);FormResize(Sender: TObject);PaintBoxPaint(Sender:
TObject);acNewTaskExecute(Sender: TObject);miAboutClick(Sender:
TObject);tbScaleChange(Sender: TObject);cbDrawDirectFunctionDomainClick(Sender:
TObject);cbDrawGridClick(Sender: TObject);cbDrawFunctionDomainClick(Sender:
TObject);acSaveBmpExecute(Sender: TObject);cbDrawDirectVectorClick(Sender:
TObject);TaskSpeedButtonClick(Sender: TObject);TheorySpeedButtonClick(Sender:
TObject);TaskTypeComboBoxChange(Sender: TObject);: Integer;: Integer;:
TMatrix;: TVector;: TVector;: array of Integer;

что
x1 >= 0; x2 >= 0;X2Positive: boolean;, sy: Double;: Boolean;: Boolean;:
Integer;: Integer;: Double;: TBitMap;:
Boolean;DrawGraph;SolveTask;DrawFunctionDomain;DrawGrid;TestForInfinite(ALine1,
ALine2: TVector; AMinMaxValue: Double): Boolean;DrawDirectVector;LineToPoint(a1,
b1, c1: Double; a2, b2, c2: Double; var x,y: Double):Boolean;GetSignStr(Index:
Integer): string;PointBelongsRest(x, y: Double; ARestIndex: Integer;
x1x2positive: boolean): boolean;PointBelongsRestDomain(x, y: Double;
x1x2positive: boolean): boolean;WMErasebkgnd(var Msg: TWMErasebkgnd); message
WM_ERASEBKGND;GetGraphScale: Double;GraphScale: Double read GetGraphScale;;:
TMainForm;

{$R *.dfm}, NewTaskFormUnit,
AboutFormUnit;GetTempDirPath: string;: string;: integer;(EnvStr, 256);:=GetEnvironmentVariable(‘temp’,
PChar(EnvStr), 256);(EnvStr, returnsize);returnsize > 0 then
begin:=EnvStr;else begin:=”;;;CheckForSlash(AString: string): string;:
string;AString <> ” then begin:=Trim(AString);LString[Length(LString)]
<> PathDelim then begin:=LString PathDelim;;:=LString;else
begin:=”;;;WriteInRichEd(RichEd: TRichEdit; S: string; Color: TColor; ASize:
Integer; Style: TFontStyles);.SelStart :=
Length(RichEd.Text);.SelAttributes.Color := Color;.SelAttributes.Style :=
Style;.SelAttributes.Size := ASize;.SelText := S;;PointInRect(APoint: TPoint;
ARect: TRect): Boolean;:= (APoint.X > ARect.Left) and (APoint.Y >
ARect.Top) and (APoint.X < ARect.Right) and (APoint.Y <
ARect.Bottom);;CheckForNil(AValue: Double): Double;AValue = 0 then:= 1;else:=
AValue;;;CheckOne(AValue: Double): string;AValue = 1 then:= ”;elseAValue = – 1
then:= ‘-‘;else:= FloatToStr(AValue);;;;CheckMinusPlus(AValue: Double):
string;AValue < 0 then:= CheckOne(AValue);else:= ‘ ‘
CheckOne(AValue);;;TMainForm.GetSignStr(Index: Integer): string;S[Index] of

: Result := ‘=’;

: Result := ‘>=’;

: Result :=
‘<=’;;;,TMainForm.LineToPoint(a1, b1, c1: Double; a2, b2, c2: Double; var
x,y: Double):Boolean;: Double;: Double;: Double;:= a1 * b2 – b1 * a2;d <>
0 then:= true;:= -c1 * b2 b1 * c2;:= -a1 * c2 c1 * a2;:= – dx / d;:= – dy /
d;else:= false;;;TMainForm.acNewTaskExecute(Sender: TObject);: Integer;:
TNewTaskForm;: TTaskSizeForm;:=
TTaskSizeForm.Create(nil);LTaskSizeForm.ShowModal = mrOk then:=
TNewTaskForm.Create(nil);.N := 2;:= LTaskSizeForm.M;.M :=
LTaskSizeForm.M;LNewTaskForm.ShowModal = mrOk then.Enabled := true;:=
LNewTaskForm.cbTaskType.ItemIndex;.ItemIndex :=
LNewTaskForm.cbTaskType.ItemIndex;(S, FM);i := 0 to FM – 1 do[i] :=
LNewTaskForm.Sign[i];;:= LNewTaskForm.NMatrix;:= LNewTaskForm.Vectorb;:=
LNewTaskForm.Vectorc;;:=
true;;;.Free;;;.Free;;;TMainForm.acSaveBmpExecute(Sender:
TObject);SaveDialog.Execute
then.SaveToFile(SaveDialog.FileName);;;TMainForm.cbDrawDirectFunctionDomainClick(Sender:
TObject);;;TMainForm.cbDrawDirectVectorClick(Sender:
TObject);;;TMainForm.cbDrawFunctionDomainClick(Sender:
TObject);;;TMainForm.cbDrawGridClick(Sender: TObject);;;

// Процедура
рисования направляющего вектораTMainForm.DrawDirectVector;,
y: Double;, y1: Double;, y2: Double;, y3: Double;, yp: Double;: Double;, yp1:
Double;(C[0] = 0) and (C[1] = 0) then;;:= C[0];:= C[1];x <> 0 then x1 :=
x / sqrt(sqr(x) sqr(y));y <> 0 then y1 := y / sqrt(sqr(x) sqr(y));:=
x1;:= y1;FWidthdiv2 < FHeightdiv2 then:= FWidthdiv2 (x * FWidthdiv2);:=
FHeightdiv2 ( – y * FWidthdiv2);else:= FWidthdiv2 (x * FHeightdiv2);:=
FHeightdiv2 ( – y * FHeightdiv2);;

// Рисуем линию.Canvas.Pen.Width
:= 2;.Canvas.Pen.Color := clRed;.Canvas.Font.Color := clRed;.Canvas.MoveTo(FWidthdiv2,
FHeightdiv2);.Canvas.LineTo(Round(xp), Round(yp));

// Рисуем стрелки:=
– 1 * x * 20;:= y * 20;:= 15 * pi / 180;:= xp1 * Cos(LAlpha) – yp1 *
Sin(LAlpha);:= xp1 * Sin(LAlpha) yp1 * Cos(LAlpha);:= xp x;:= yp y;.Canvas.MoveTo(Round(xp),
Round(yp));.Canvas.LineTo(Round(x2), Round(y2));:= x2;:= y2;:= – 15 * pi /
180;:= xp1 * Cos(LAlpha) – yp1 * Sin(LAlpha);:= xp1 * Sin(LAlpha) yp1 *
Cos(LAlpha);:= xp x;:= yp y;.Canvas.MoveTo(Round(xp), Round(yp));.Canvas.LineTo(Round(x2),
Round(y2));.Canvas.MoveTo(Round(x2), Round(y2));.Canvas.LineTo(Round(x3),
Round(y3));;TMainForm.DrawFunctionDomain;: Integer;, y: Double;: Double;, y1:
Double;, y2: Double;, y3: Double;, p2: TPoint;: Double;, OfsY: Double;:
Integer;: Double;: Integer;: array[1..4] of TPointd;(x1; y1) Рё
P2(x2; y2)= (x1 x2) / 2; y = (y1 y2) / 2;

{P1P2}.

(l,m): l(x-x0) m(y-y0)=0.j := 0 to
FM – 1 do(A[j, 0] = 0) and (A[j, 1] = 0) then;;

// 0 – ‘=’;

// 1 – ‘>=’;

// 2 – ‘<=’;S[j] <> 0
then:= 1;A[j, 1] <> 0 then:= FWidthdiv2 / GraphScale;:= (B[j] – (A[j, 0]
* x)) / A[j, 1];Abs(y) <= (FHeightdiv2 / GraphScale) then[LPointIndex].x :=
x;[LPointIndex].y := y;:= LPointIndex 1;;;A[j, 1] <> 0 then:= –
FWidthdiv2 / GraphScale;:= (B[j] – (A[j, 0] * x)) / A[j, 1];Abs(y) <=
(FHeightdiv2 / GraphScale) then[LPointIndex].x := x;[LPointIndex].y := y;:=
LPointIndex 1;;;A[j, 0] <> 0 then:= FHeightdiv2 / GraphScale;:= (B[j] –
(A[j, 1] * y)) / A[j, 0];Abs(x) <= (FWidthdiv2 / GraphScale)
then[LPointIndex].x := x;[LPointIndex].y := y;:= LPointIndex 1;;;A[j, 0]
<> 0 then:= – FHeightdiv2 / GraphScale;:= (B[j] – (A[j, 1] * y)) / A[j,
0];Abs(x) <= (FWidthdiv2 / GraphScale) then[LPointIndex].x :=
x;[LPointIndex].y := y;;;:= LPoints[1].x;:= LPoints[1].y;:= LPoints[2].x;:= LPoints[2].y;A[j,
0] <> 0 then:= x1 0.25;:= ((x – x1) / A[j, 0]) * A[j, 1] y1;else:= y1
0.25;:= ((y – y1) / A[j, 1]) * A[j, 0] x1;;S[j] of

: begin // 1 – ‘>=’;((A[j, 0] *
x) (A[j, 1] * y)) >= B[j] then:= 1;else:= – 1;;;

: begin // 2 – ‘<=’;((A[j, 0] *
x) (A[j, 1] * y)) <= B[j] then:= 1;else:= – 1;;;;.Canvas.Pen.Width :=
1;.Canvas.Pen.Color := clBlue;.Canvas.Pen.Style := psSolid;x1 > x2 then:=
x2;:= y2;:= x1;:= y1;:= x3;:= y3;;:= x1 * GraphScale;:= y1 * GraphScale;:=
Sqrt(Sqr(y2 – y1) Sqr(x2 – x1));cbDrawFunctionDomain.Checked then:= 0;True
do:= OfsX (x2 – x1) * LAlpha;:= OfsY (y2 – y1) * LAlpha;:= LAlpha 7 /
LSegmentLength;A[j, 0] <> 0 then:= x3 2 * LDomainDirection;:= ((x – x3)
/ A[j, 0]) * A[j, 1] y3;else:= y3 2 * LDomainDirection;:= ((y – y3) / A[j,
1]) * A[j, 0] x3;;.X := FWidthdiv2 Round(x3);.Y := FHeightdiv2 Round(-
y3);.X := FWidthdiv2 Round(x);.Y := FHeightdiv2 Round(-
y);(PointBelongsRestDomain(x / GraphScale, y / GraphScale, FX1X2Positive)) or

(PointBelongsRest(x / GraphScale, y
/ GraphScale, j, FX1X2Positive) and (not FTaskSolved) and (not FTaskInfinite))
thenFPaintBuffer.Canvas.Pixels[p2.X, p2.Y] <> clMoneyGreen
then.Canvas.Brush.Color := clMoneyGreen;.Canvas.Brush.Style :=
bsSolid;.Canvas.FloodFill(p2.X, p2.Y, clWhite, fsSurface);;;y2 < y1
then(p2.X > FPaintBuffer.Width) or (p2.Y > FPaintBuffer.Height)
then;;else(p2.X > FPaintBuffer.Width) or (p2.Y < 0)
then;;;;;cbDrawDirectFunctionDomain.Checked then:= 0;True do:= OfsX (x2 – x1)
* LAlpha;:= OfsY (y2 – y1) * LAlpha;:= LAlpha 7 / LSegmentLength;A[j, 0]
<> 0 then:= ArcTan(A[j, 1] / A[j, 0]) * 180 / pi;Abs(LAngle) <= 45
thenLAngle < 0 then x := x3 10 * – LDomainDirection else x := x3 10 *
LDomainDirection;:= ((x – x3) / A[j, 0]) * A[j, 1] y3;elseLAngle < 0 then
y := y3 10 * – LDomainDirection else y := y3 10 * LDomainDirection;:= ((y –
y3) / A[j, 1]) * A[j, 0] x3;;else:= y3 10 * LDomainDirection;:= ((y – y3) /
A[j, 1]) * A[j, 0] x3;;.X := FWidthdiv2 Round(x3);.Y := FHeightdiv2
Round(- y3);.X := FWidthdiv2 Round(x);.Y := FHeightdiv2 Round(-
y);.Canvas.MoveTo(p1.X, p1.Y);.Canvas.LineTo(p2.X, p2.Y);y2 < y1 then(p2.X
> FPaintBuffer.Width) or (p2.Y > FPaintBuffer.Height) then;;else(p2.X
> FPaintBuffer.Width) or (p2.Y < 0) then;;;;;;;;TMainForm.DrawGraph;: Double;:
Double;, y: Double;, y1: Double;, y2: Double;, j: Integer;: Double;: Double;:
Integer;: array[1..4] of TPointd;FDrawTaskGraph then

// Вычисляем масштаб
графика:=
0;:= 0;i := 0 to FM – 1 do(A[i, 0] = 0) and (A[i, 1] = 0) then;;A[i, 0]
<> 0 then:= B[i] / A[i, 0];else:= 0;;A[i, 1] <> 0 then:= B[i] /
A[i, 1];else:= 0;;Abs(x) > MaxX then:= Abs(x);;Abs(y) > MaxY then:=
Abs(y);;;MaxX <> 0 then:= (FWidthdiv2 div 2) / MaxX;else:= 1.7e308;;MaxY
<> 0 then:= (FHeightdiv2 div 2) / MaxY;else:= 1.7e308;;MaxValue1 <
MaxValue2 then:= MaxValue1;else:= MaxValue2;;FGraphScale >= 1000 then:=
(FWidthdiv2 div 2) / 3;;else:= 50;;

// Рисуем сетку;

// Рисуем ось координат.Canvas.Pen.Width
:= 3;.Canvas.Pen.Color := clBlack;.Canvas.Font.Color :=
clBlack;.Canvas.Font.Style := [fsBold];.Canvas.MoveTo(FWidthdiv2,
FPaintBuffer.Height);.Canvas.LineTo(FWidthdiv2, 0);.Canvas.LineTo(FWidthdiv2 –
5, 10);.Canvas.LineTo(FWidthdiv2 5, 10);.Canvas.LineTo(FWidthdiv2,
0);.Canvas.TextOut(FWidthdiv2 15, 2, ‘x2’);.Canvas.MoveTo(0,
FHeightdiv2);.Canvas.LineTo(FPaintBuffer.Width,
FHeightdiv2);.Canvas.LineTo(FPaintBuffer.Width – 10, FHeightdiv2 –
5);.Canvas.LineTo(FPaintBuffer.Width – 10, FHeightdiv2
5);.Canvas.LineTo(FPaintBuffer.Width, FHeightdiv2);.Canvas.TextOut(FPaintBuffer.Width
– 20, FHeightdiv2 – 25, ‘x1’);.Canvas.Font.Style := [];FDrawTaskGraph then

// Рисуем прямые
ограниченийj
:= 0 to FM – 1 do(A[j, 0] = 0) and (A[j, 1] = 0) then;;:= 1;A[j, 1] <> 0
then:= FWidthdiv2 / GraphScale;:= (B[j] – (A[j, 0] * x)) / A[j, 1];Abs(y) <=
(FHeightdiv2 / GraphScale) then[LPointIndex].x := x;[LPointIndex].y := y;:=
LPointIndex 1;;;A[j, 1] <> 0 then:= – FWidthdiv2 / GraphScale;:= (B[j]
– (A[j, 0] * x)) / A[j, 1];Abs(y) <= (FHeightdiv2 / GraphScale)
then[LPointIndex].x := x;[LPointIndex].y := y;:= LPointIndex 1;;;A[j, 0]
<> 0 then:= FHeightdiv2 / GraphScale;:= (B[j] – (A[j, 1] * y)) / A[j,
0];Abs(x) <= (FWidthdiv2 / GraphScale) then[LPointIndex].x :=
x;[LPointIndex].y := y;:= LPointIndex 1;;;A[j, 0] <> 0 then:= –
FHeightdiv2 / GraphScale;:= (B[j] – (A[j, 1] * y)) / A[j, 0];Abs(x) <=
(FWidthdiv2 / GraphScale) then[LPointIndex].x := x;[LPointIndex].y := y;;;:=
LPoints[1].x;:= LPoints[1].y;:= LPoints[2].x;:= LPoints[2].y;.Canvas.Pen.Width
:= 2;.Canvas.MoveTo(FWidthdiv2 Round(x1 * GraphScale), FHeightdiv2 Round(-
y1 * GraphScale));.Canvas.LineTo(FWidthdiv2 Round(x2 * GraphScale),
FHeightdiv2 Round(- y2 * GraphScale));.Canvas.Font.Color :=
clRed;.Canvas.Font.Style := [fsBold];.Canvas.Brush.Style := bsClear;A[j, 1]
<> 0 then:= 0;:= (B[j] – (A[j, 0] * x1)) / A[j,
1];.Canvas.Ellipse((FWidthdiv2 Round(x1 * GraphScale)) – 3, FHeightdiv2
Round(- y1 * GraphScale) – 3, (FWidthdiv2 Round(x1 * GraphScale)) 3,
FHeightdiv2 Round(- y1 * GraphScale) 3);.Canvas.TextOut((FWidthdiv2
Round(x1 * GraphScale)) – 20, FHeightdiv2 Round(- y1 * GraphScale),
Chr(Ord(‘A’) j) ‘1’);;A[j, 0] <> 0 then:= 0;:= (B[j] – (A[j, 1] *
y2)) / A[j, 0];.Canvas.Ellipse((FWidthdiv2 Round(x2 * GraphScale)) – 3,
FHeightdiv2 Round(- y2 * GraphScale) – 3, (FWidthdiv2 Round(x2 *
GraphScale)) 3, FHeightdiv2 Round(- y2 * GraphScale)
3);.Canvas.TextOut((FWidthdiv2 Round(x2 * GraphScale)) – 3, FHeightdiv2
Round(- y2 * GraphScale) – 20, Chr(Ord(‘A’) j)
‘2’);;;;cbDrawDirectVector.Checked then;;(FTaskSolved) and
(cbDrawDirectVector.Checked) and ((C[0] <> 0) or (C[1] <> 0))
thenC[1] <> 0 then:= – Round(FWidthdiv2 / GraphScale);C[1] <> 0
then y1 := (- C[0] * (x1 – sx)) / C[1] sy;:= Round(FWidthdiv2 /
GraphScale);C[1] <> 0 then y2 := (- C[0] * (x2 – sx)) / C[1] sy;else:=
– Round(FHeightdiv2 / GraphScale);C[0] <> 0 then x1 := (- C[1] * (y1 –
sy)) / C[0] sx;:= Round(FHeightdiv2 / GraphScale);C[0] <> 0 then x2 :=
(- C[1] * (y2 – sy)) / C[0] sx;;.Canvas.Pen.Width := 2;.Canvas.Pen.Color :=
clRed;.Canvas.MoveTo(FWidthdiv2 Round(x1 * GraphScale), FHeightdiv2 Round(-
y1 * GraphScale));.Canvas.LineTo(FWidthdiv2 Round(x2 * GraphScale),
FHeightdiv2 Round(- y2 * GraphScale));;.Canvas.Pen.Color :=
clGreen;.Canvas.Brush.Color := clGreen;.Canvas.Ellipse((FWidthdiv2 Round(sx *
GraphScale)) – 3, FHeightdiv2 Round(- sy * GraphScale) – 3, (FWidthdiv2
Round(sx * GraphScale)) 3, FHeightdiv2 Round(- sy * GraphScale)
3);;;TMainForm.DrawGrid;: Integer;: Double;: Integer;: Double;i := 1 to 30 do:=
GraphScale * i;((LGridStep >= 25) and (LGridStep <= 30)) or (LGridStep
> 30) then;;;:= LGridStep / GraphScale;FHeightdiv2 > FWidthdiv2 then:=
Round(FHeightdiv2 / LGridStep);else:= Round(FWidthdiv2 / LGridStep);;.Canvas.Font.Color
:= clBlack;.Canvas.Pen.Color := clBlue;.Canvas.Pen.Style :=
psDot;.Canvas.Pen.Width := 1;cbDrawGrid.Checked theni := 1 to LGridCount do

// Горизонтальные
линии.Canvas.MoveTo(0,
FHeightdiv2 – Round(LGridStep) * i);.Canvas.LineTo(FPaintBuffer.Width,
FHeightdiv2 – Round(LGridStep) * i);.Canvas.MoveTo(0, FHeightdiv2
Round(LGridStep) * i);.Canvas.LineTo(FPaintBuffer.Width, FHeightdiv2
Round(LGridStep) * i);

// Вертикальные
линии.Canvas.MoveTo(FWidthdiv2
– Round(LGridStep) * i, 0);.Canvas.LineTo(FWidthdiv2 – Round(LGridStep) * i,
FPaintBuffer.Height);.Canvas.MoveTo(FWidthdiv2 Round(LGridStep) * i,
0);.Canvas.LineTo(FWidthdiv2 Round(LGridStep) * i, FPaintBuffer.Height);;;i
:= 1 to LGridCount do.Canvas.TextOut(FWidthdiv2 – Round(LGridStep) * i,
FHeightdiv2, IntToStr(Round(- i * LScaleFactor)));.Canvas.TextOut(FWidthdiv2
Round(LGridStep) * i, FHeightdiv2, IntToStr(Round(i * LScaleFactor)));.Canvas.TextOut(FWidthdiv2
5, FHeightdiv2 – Round(LGridStep) * i, IntToStr(Round(i *
LScaleFactor)));.Canvas.TextOut(FWidthdiv2 5, FHeightdiv2 Round(LGridStep)
* i, IntToStr(Round(- i * LScaleFactor)));;;TMainForm.FormCreate(Sender:
TObject);:= TBitMap.Create;:= false;:= false;X2Positive :=
true;;TMainForm.WMErasebkgnd(var Msg:
TWMErasebkgnd);;TMainForm.miAboutClick(Sender: TObject);: TAboutForm;:=
TAboutForm.Create(nil);.ShowModal;.Free;;;TMainForm.miExitClick(Sender:
TObject);;;TMainForm.PaintBoxPaint(Sender: TObject);.Canvas.Pen.Color :=
clWhite;.Canvas.Brush.Color := clWhite;.Canvas.Rectangle(0, 0,
FPaintBuffer.Width, FPaintBuffer.Height);;.Canvas.Draw(0, 0,
FPaintBuffer);;TMainForm.PointBelongsRest(x, y: Double; ARestIndex: Integer;
x1x2positive: boolean): boolean;(x1x2positive) and ((x < 0) or (y < 0))
then:= False;;;:= True;S[ARestIndex] of

Рефераты:  Блокада Ленинграда. Реферат. История. 2013-01-25

: begin // 1 – ‘=’;not
(((A[ARestIndex, 0] * x) (A[ARestIndex, 1] * y)) = B[ARestIndex]) then:=
False;;;

: begin // 1 – ‘>=’;not
(((A[ARestIndex, 0] * x) (A[ARestIndex, 1] * y)) >= B[ARestIndex]) then:=
False;;;

: begin // 2 – ‘<=’;not
(((A[ARestIndex, 0] * x) (A[ARestIndex, 1] * y)) <= B[ARestIndex]) then:=
False;;;;;TMainForm.PointBelongsRestDomain(x, y: Double; x1x2positive:
boolean): boolean;: Integer;(x1x2positive) and ((x < 0) or (y < 0))
then:= False;;;:= True;i := 0 to FM – 1 doS[i] of

: begin // 1 – ‘=’;not (((A[i, 0] *
x) (A[i, 1] * y)) = B[i]) then:= False;;;

: begin // 1 – ‘>=’;not (((A[i,
0] * x) (A[i, 1] * y)) >= B[i]) then:= False;;;

: begin // 2 – ‘<=’;not (((A[i,
0] * x) (A[i, 1] * y)) <= B[i]) then:= False;;;;;;

// Процедура
решения задачиTMainForm.SolveTask;,
y: Double;, j: Integer;: TVector;: TVector;: Double;GetLine(ALine1: TVector;
Andex: Integer);[0] := A[Andex, 0];[1] := A[Andex, 1];[2] :=
B[Andex];;.Clear;(TaskRichEdit, ‘Уравнения ограничений:
‘, clNavy, 12, [fsBold]);.Lines.Add(”);.Lines.Add(”);i := 0 to FM – 1 doA[i,
0] <> 0 then(TaskRichEdit, CheckOne(A[i, 0]), clNavy, 12, []);(TaskRichEdit,
‘x1’, clBlack, 12, []);A[i, 1] <> 0 then(TaskRichEdit,
CheckMinusPlus(A[i, 1]), clNavy, 12, []);(TaskRichEdit, ‘x2’, clBlack, 12,
[]);;elseA[i, 1] <> 0 then(TaskRichEdit, CheckOne(A[i, 1]), clNavy, 12,
[]);(TaskRichEdit, ‘x2’, clBlack, 12, []);;;(TaskRichEdit, GetSignStr(i),
clNavy, 12, []);(TaskRichEdit, FloatToStr(B[i]), clNavy, 12, []);(A[i, 0]
<> 0) and (A[i, 1] <> 0) then(TaskRichEdit, ‘ (‘ Chr(Ord(‘A’)
i) ‘1’, clRed, 8, [fsBold]);(TaskRichEdit, Chr(Ord(‘A’) i) ‘2)’, clRed,
8, [fsBold]);else(A[i, 0] <> 0) then(TaskRichEdit, ‘ (‘ Chr(Ord(‘A’)
i) ‘2)’, clRed, 8, [fsBold]);;(A[i, 1] <> 0) then(TaskRichEdit, ‘ (‘
Chr(Ord(‘A’) i) ‘1)’, clRed, 8,
[fsBold]);;;.Lines.Add(”);;.Lines.Add(”);(TaskRichEdit, ‘x1>=’, clBlack,
12, []);(TaskRichEdit, ‘0’, clNavy, 12, []);(TaskRichEdit, ‘; x2>=’,
clBlack, 12, []);(TaskRichEdit, ‘0’, clNavy, 12, []);(TaskRichEdit, ‘;’,
clBlack, 12, []);.Lines.Add(”);.Lines.Add(”);(TaskRichEdit, ‘Целевая функция:
‘, clNavy, 12, [fsBold]);.Lines.Add(”);.Lines.Add(”);C[0] <> 0
then(TaskRichEdit, CheckOne(C[0]), clNavy, 12, []);(TaskRichEdit, ‘x1’,
clBlack, 12, []);C[1] <> 0 then(TaskRichEdit, CheckMinusPlus(C[1]),
clNavy, 12, []);(TaskRichEdit, ‘x2’, clBlack, 12, []);;elseC[1] <> 0
then(TaskRichEdit, CheckOne(C[1]), clNavy, 12, []);(TaskRichEdit, ‘x2’,
clBlack, 12, []);;;FTaskType = 0 then(TaskRichEdit, ‘->Max’, clBlack, 12,
[]);else(TaskRichEdit, ‘->Min’, clBlack, 12, []);;

// Находим решение
задачи:=
false;

:= 1.7e308;FTaskType of

: LMinMaxValue := -1.7e308;

: LMinMaxValue := 1.7e308;;(LLine1,
3);(LLine2, 3);i := 0 to FM – 1 doj := 0 to FM – 1 doi <> j
thenLineToPoint(A[i, 0], A[i, 1], B[i], A[j, 0], A[j, 1], B[j], x, y)
thenPointBelongsRestDomain(x, y, FX1X2Positive) then

//
ShowMessage(FloatToStr(LMinMaxValue) ‘ : ‘ FloatToStr(x * C[0] y *
C[1]));((LMinMaxValue < (x * C[0] y * C[1])) and (FTaskType = 0)) or

((LMinMaxValue > (x * C[0] y *
C[1])) and (FTaskType = 1)) then:= x;:= y;:= true;:= x * C[0] y * C[1];(LLine1,
i);(LLine2, j);;;;;;j := 0 to FM – 1 do:= 0;A[j, 1] <> 0 then:= B[j] /
CheckForNil(A[j, 1]);PointBelongsRestDomain(x, y, FX1X2Positive)
then((LMinMaxValue < (x * C[0] y * C[1])) and (FTaskType = 0)) or

((LMinMaxValue > (x * C[0] y *
C[1])) and (FTaskType = 1)) then:= x;:= y;:= true;:= x * C[0] y *
C[1];(LLine1, j);[0] := 1;[1] := 0;[2] := 0;;;;:= B[j] / CheckForNil(A[j,
0]);:= 0;A[j, 0] <> 0 thenPointBelongsRestDomain(x, y, FX1X2Positive)
then((LMinMaxValue < (x * C[0] y * C[1])) and (FTaskType = 0)) or

((LMinMaxValue > (x * C[0] y *
C[1])) and (FTaskType = 1)) then:= x;:= y;:= true;:= x * C[0] y *
C[1];(LLine1, j);[0] := 0;[1] := 1;[2] := 0;;;;;;:= 0;:=
0;PointBelongsRestDomain(x, y, FX1X2Positive) then((LMinMaxValue < (x * C[0]
y * C[1])) and (FTaskType = 0)) or

((LMinMaxValue > (x * C[0] y *
C[1])) and (FTaskType = 1)) then:= x;:= y;:= true;:= x * C[0] y * C[1];[0] :=
1;[1] := 0;[2] := 0;[0] := 0;[1] := 1;[2] := 0;;;:= TestForInfinite(LLine1,
LLine2, LMinMaxValue);(LLine2);(LLine1);(C[0] = 0) and (C[1] = 0)
then.Lines.Add(”);.Lines.Add(‘————————-‘);(TaskRichEdit, ‘Целевая функция РЅРµ
задана!’,
clMaroon, 12, [fsBold]);elseFTaskSolved thenFTaskInfinite then:=
false;.Lines.Add(”);.Lines.Add(‘————————-‘);(TaskRichEdit, .’,
clMaroon, 12,
[fsBold]);else.Lines.Add(”);.Lines.Add(‘————————-‘);(TaskRichEdit’,
clNavy, 12, [fsBold]);.Lines.Add(”);.Lines.Add(”);FTaskType = 0
then(TaskRichEdit, ‘Целевая функция достигает
своего максимального значения РІ точке:’,
clNavy, 10, [fsBold]);else(TaskRichEdit, ‘Целевая функция достигает
своего минимального значения РІ точке:’,
clNavy, 10, [fsBold]);;.Lines.Add(”);.Lines.Add(”);(TaskRichEdit, ‘x1’,
clBlack, 12, []);(TaskRichEdit, ‘=’ FloatToStr(sx), clNavy, 12,
[]);.Lines.Add(”);(TaskRichEdit, ‘x2’, clBlack, 12, []);(TaskRichEdit, ‘=’
FloatToStr(sy), clNavy, 12, []);.Lines.Add(”);.Lines.Add(”);(TaskRichEdit, ‘Р-начение
целевой
функции:’,
clNavy, 10, [fsBold]);.Lines.Add(”);.Lines.Add(”);(TaskRichEdit, ‘f(x1, x2) =
‘, clBlack, 12, []);(TaskRichEdit, FloatToStr(LMinMaxValue), clNavy, 12,
[]);;else.Lines.Add(”);.Lines.Add(‘————————-‘);(TaskRichEdit,
‘Р-адача
РЅРµ
имеет
допустимого решения!
Рў.Рє.
ее
ограничения несовместны.’,
clMaroon, 12, [fsBold]);;;;TMainForm.TaskSpeedButtonClick(Sender:
TObject);.Visible := False;.Visible := True;.Width := PaintBox.Width;.Height :=
PaintBox.Height;:= FPaintBuffer.Width div 2;:= FPaintBuffer.Height div
2;;;TMainForm.TaskTypeComboBoxChange(Sender: TObject);FTaskType <>
TaskTypeComboBox.ItemIndex then:=
TaskTypeComboBox.ItemIndex;;;;;TMainForm.TestForInfinite(ALine1, ALine2:
TVector; AMinMaxValue: Double): Boolean;, y: Double;, j: Integer;, y1: Double;,
y2: Double;: Double;: Double;: array[0..1] of TVector;:= False;[0] :=
ALine1;[1] := ALine2;j := 0 to 1 do(LLines[j][0] <> 0) or (LLines[j][1]
<> 0) then

// ALine1[0]*x ALine1[1]*y =
ALine1[2]LLines[j][1] <> 0 then:= – 1;:= (LLines[j][2] – LLines[j][0] *
x1) / LLines[j][1];:= 1;:= (LLines[j][2] – LLines[j][0] * x2) / LLines[j][1];else:=
– 1;:= (LLines[j][2] – LLines[j][1] * y1) / LLines[j][0];:= 1;:= (LLines[j][2]
– LLines[j][1] * y2) / LLines[j][0];;;:= 0;:= 0;i := 0 to 1000 do:= x1 (x2 –
x1) * LAlpha1;:= y1 (y2 – y1) * LAlpha1;:= LAlpha1
10;PointBelongsRestDomain(x, y, FX1X2Positive) thenFTaskType = 0 then:= (x *
C[0] y * C[1]) >= AMinMaxValue;else begin:= (x * C[0] y * C[1]) <=
AMinMaxValue;;Result then;;;:= x1 (x2 – x1) * LAlpha2;:= y1 (y2 – y1) *
LAlpha2;:= LAlpha2 – 10;PointBelongsRestDomain(x, y, FX1X2Positive)
thenFTaskType = 0 then:= (x * C[0] y * C[1]) >= AMinMaxValue;else begin:=
(x * C[0] y * C[1]) <= AMinMaxValue;;Result
then;;;;;;TMainForm.TheorySpeedButtonClick(Sender: TObject);: string;:
TResourceStream;.Visible := False;.Visible := True;:= TResourceStream.Create(HInstance,
‘THEORY’, RT_RCDATA);:= CheckForSlash(GetTempDirPath);.SaveToFile(LTempDirPath
‘theory.mht’);.Navigate(LTempDirPath
‘theory.mht’);.Free;;;TMainForm.tbScaleChange(Sender:
TObject);;;TMainForm.FormResize(Sender: TObject);.Width :=
PaintBox.Width;.Height := PaintBox.Height;:= FPaintBuffer.Width div 2;:=
FPaintBuffer.Height div 2;;TMainForm.GetGraphScale: Double;:= FGraphScale
(tbScale.Position – 25) / (25 / FGraphScale);;TMainForm.FormDestroy(Sender:
TObject);.Free;;.AboutFormUnit;, SysUtils, Classes, Graphics, Forms, Controls,
StdCtrls,, ExtCtrls, ShellApi;= class(TForm): TPanel;: TImage;: TLabel;:
TButton;: TLabel;: TBevel;: TLabel;: TMemo;AuthorEmailLabelClick(Sender:
TObject);ProgramHomepageLabelClick(Sender: TObject);Label4Click(Sender:
TObject);

{ Private declarations }

{ Public declarations };

{$R
*.dfm}TAboutForm.AuthorEmailLabelClick(Sender: TObject);(0, ‘open’,
PChar(‘mailto: ‘ AuthorEmailLabel.Caption), nil, nil,
SW_SHOW);;TAboutForm.Label4Click(Sender: TObject);(0, ‘open’,
PChar(Label4.Caption), nil, nil,
SW_SHOW);;TAboutForm.ProgramHomepageLabelClick(Sender: TObject);(0, ‘open’,
PChar(ProgramHomepageLabel.Caption), nil, nil, SW_SHOW);;.NewTaskFormUnit;,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls,
Grids, Contnrs, MSimplexMath, ExtCtrls;= class(TForm): TStringGrid;:
TStringGrid;: TButton;: TButton;: TStringGrid;: TLabel;: TLabel;: TLabel;:
TBevel;: TComboBox;: TLabel;FormShow(Sender:
TObject);VectorbGridDrawCell(Sender: TObject; ACol, ARow: Integer;: TRect;
State: TGridDrawState);MatrixNGridDrawCell(Sender: TObject; ACol, ARow:
Integer;: TRect; State: TGridDrawState);VectorCGridDrawCell(Sender: TObject;
ACol, ARow: Integer;: TRect; State: TGridDrawState);OKButtonClick(Sender: TObject);FormCreate(Sender:
TObject);FormDestroy(Sender: TObject);: Integer;: Integer;

//
Матрица коэффициентов ограничений: TMatrix;

//
Вектор коэффициентов свободных членов: TVector;

//
Вектор коэффициентов целевой функции: TVector;

FSigns: TObjectList;GetSign(Index:
Integer): Integer;GetSignStr(Index: Integer): string;N: Integer read FN write
FN;M: Integer read FM write FM;Sign[Index: Integer]: Integer read
GetSign;SignStr[Index: Integer]: string read GetSignStr;Vectorb: TVector read
FVectorb write FVectorb;Vectorc: TVector read FVectorc write FVectorc;NMatrix:
TMatrix read FNMatrix write FNMatrix;;

{$R
*.dfm}ValidateDecimalSeparator(AFloatStr: string): string;: Integer;:=
AFloatStr;:= Pos(‘.’, Result);LDotPos > 0 do[LDotPos] := ‘,’;:= Pos(‘.’,
Result);;;InitStringGrid(AStringGrid: TStringGrid);, j: Integer;i := 0 to
AStringGrid.ColCount – 1 doj := 0 to AStringGrid.RowCount – 1 do.Cells[i, j] :=
‘0’;;;GetMatrix(AStringGrid: TStringGrid): TMatrix;, j: Integer;(Result,
AStringGrid.RowCount, AStringGrid.ColCount);i := 0 to AStringGrid.RowCount – 1
doj := 0 to AStringGrid.ColCount – 1 do[i, j] :=
StrToFloat(ValidateDecimalSeparator(AStringGrid.Cells[j,
i]));;;;GetVector(AStringGrid: TStringGrid): TVector;:
Integer;AStringGrid.RowCount = 1 then(Result, AStringGrid.ColCount);i := 0 to
AStringGrid.ColCount – 1 do[i] :=
StrToFloat(ValidateDecimalSeparator(AStringGrid.Cells[i, 0]));;(Result,
AStringGrid.RowCount);i := 0 to AStringGrid.RowCount – 1 do[i] :=
StrToFloat(ValidateDecimalSeparator((AStringGrid.Cells[0, i])));;;;AdjustStringGrid(AStringGrid:
TStringGrid);: Integer;: Integer;: Integer;:= 0;i := 0 to AStringGrid.ColCount
– 1 do:= LWidth AStringGrid.ColWidths[i];;:= 0;i := 0 to AStringGrid.RowCount
– 1 do:= LHeight AStringGrid.RowHeights[i];;.Width := LWidth AStringGrid.ColCount
1;.Height := LHeight AStringGrid.RowCount
1;;TNewTaskForm.FormCreate(Sender: TObject);:=
TObjectList.Create;;TNewTaskForm.FormDestroy(Sender:
TObject);.Free;;TNewTaskForm.FormShow(Sender: TObject);: Integer;: Integer;:
TComboBox;.RowCount := FM;.ColCount := FN;(MatrixNGrid);(MatrixNGrid);.RowCount
:= FM;(VectorbGrid);(VectorbGrid);.ColCount := FN;(VectorCGrid);(VectorCGrid);i
:= 0 to FM – 1 do:= TComboBox.Create(Self);.Parent := Self;.Style :=
csDropDownList;.AddItem(‘=’, nil);.AddItem(‘>=’, nil);.AddItem(‘<=’,
nil);.ItemIndex := 0;.Width := 50;:= MatrixNGrid.Left MatrixNGrid.Width
25;.Left := LLeft;.Top := MatrixNGrid.Top (i *
LComboBox.Height);.Add(LComboBox);;i := 0 to MatrixNGrid.RowCount – 1
do.RowHeights[i] := TComboBox(FSigns.Items[i]).Height – 1;;(MatrixNGrid);i := 0
to VectorbGrid.RowCount – 1 do.RowHeights[i] :=
TComboBox(FSigns.Items[i]).Height – 1;;(VectorbGrid);i := 0 to
VectorCGrid.RowCount – 1 do.RowHeights[i] := TComboBox(FSigns.Items[i]).Height
– 1;;(VectorCGrid);.Left := LLeft 70;.Top := MatrixNGrid.Top
MatrixNGrid.Height 15;.Top := Label3.Top Label3.Height 5;.Left :=
VectorbGrid.Left;.Top := VectorCGrid.Top VectorCGrid.Height 10;.Top :=
VectorCGrid.Top VectorCGrid.Height 30;.Width := CancelButton.Left
CancelButton.Width – Bevel1.Left;:= VectorbGrid.Left VectorbGrid.Width
100;:= Bevel1.Top Bevel1.Height OKButton.Height
20;;TNewTaskForm.GetSign(Index: Integer): Integer;:=
TComboBox(FSigns.Items[Index]).ItemIndex;;TNewTaskForm.GetSignStr(Index:
Integer): string;Sign[Index] of

: Result := ‘=’;

: Result := ‘>=’;

: Result :=
‘<=’;;;TNewTaskForm.MatrixNGridDrawCell(Sender: TObject; ACol, ARow:
Integer; Rect: TRect; State: TGridDrawState);Sender = ActiveControl then;not
(gdSelected in State) then;Sender as TStringGrid do.Brush.Color :=
Color;.Font.Color := Font.Color;.TextRect(Rect, Rect.Left 2, Rect.Top
2,[ACol, ARow]);;;TNewTaskForm.OKButtonClick(Sender: TObject);: Integer;:
Boolean;:= True;i:= 0 to FM – 1 doTComboBox(FSigns.Items[i]).ItemIndex > 0
then:= False;;;:= GetMatrix(MatrixNGrid);:= GetVector(VectorbGrid);:=
GetVector(VectorcGrid);not LCanonicalForm theni := 0 to FM – 1
doTComboBox(FSigns.Items[i]).ItemIndex of

: begin(FN);(FVectorc, FN);[FN – 1]
:= 0;(FNMatrix, FM, FN);[i, FN – 1] := – 1;;;;;:=
mrOk;;TNewTaskForm.VectorbGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);Sender = ActiveControl then;not (gdSelected
in State) then;Sender as TStringGrid do.Brush.Color := Color;.Font.Color :=
Font.Color;.TextRect(Rect, Rect.Left 2, Rect.Top 2,[ACol,
ARow]);;;TNewTaskForm.VectorCGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);Sender = ActiveControl then;not (gdSelected
in State) then;Sender as TStringGrid do.Brush.Color := Color;.Font.Color :=
Font.Color;.TextRect(Rect, Rect.Left 2, Rect.Top 2,[ACol,
ARow]);;;.TaskSizeFormUnit;, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,, StdCtrls, Spin, Buttons;_WRONG_NUMBER_RANGE = ‘Число должно быть в диапазоне:
1..10’;_WRONG_NUMBER_FORMAT = ‘Неправильный формат числа!’;=
class(TForm): TLabel;: TLabel;: TBitBtn;: TGroupBox;: TBitBtn;:
TSpinEdit;FormShow(Sender: TObject);OkBitBtnClick(Sender: TObject);

private:
Integer; // Кол-во ограничений

function GetM: Integer;M: Integer
read GetM;;

{$R
*.dfm}TTaskSizeForm.FormShow(Sender: TObject);OkBitBtn.CanFocus
then.SetFocus;;;TTaskSizeForm.GetM: Integer;:=
FM;;TTaskSizeForm.OkBitBtnClick(Sender: TObject);: Integer;:= StrToInt(seM.Text);(LValue
< 1) or (LValue > 10) then(STR_WRONG_NUMBER_RANGE, mtError, [mbOK],
0);else:= LValue;:= mrOk;;(STR_WRONG_NUMBER_FORMAT, mtError, [mbOK], 0);

end;;.

информация безопасность программа модуль

Приложение
Б

Формы
программы

Графическое решение задач линейного программирования. Курсовая работа (т). Информационное обеспечение, программирование. 2014-05-08

Рисунок
6 – Главная форма

)
Окно задания размера новой таблицы (рисунок 7).

Графическое решение задач линейного программирования. Курсовая работа (т). Информационное обеспечение, программирование. 2014-05-08

Рисунок
7 – Окно задания размера новой таблицы

3) Окно заполнения таблицы данными (рисунок 8).

Графическое решение задач линейного программирования. Курсовая работа (т). Информационное обеспечение, программирование. 2014-05-08

Рисунок 8 – Окно заполнения таблицы данными

Реферат – линейное программирование: постановка задач и графическое решение.

 
 
 
 
 
 
 
 
             
Реферат на тему :
 

«Линейное программирование:
постановка задач и графическое 
решение»
 

 ПЛАН 

 Введение. 

1. Общая задача 
линейного программирования.
 

1.1. Формулировка 
задачи.
 

1.2. Геометрическая 
интерпретация задачи линейного программирования.
 

2. Графический 
метод решения задачи линейного 
программирования.
 

2.1. Область применения. 

2.2. Примеры задач, 
решаемых графическим методом.
 

2.3. Обобщение 
графического метода решения 
задач линейного программирования.
 

 Литература. 

 Введение. 

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

 Действительно, 
путь необходимо исследовать 
на экстремум линейную функцию 
Z = С1х1 С2х2 … СNxN
 

 при линейных 
ограничениях
 

a11x1 a22x2 … a1NХN
= b1
 

 a21x1 a22x2 …
a2NХN = b2
 

. . . . . . . . . . . . .
. .
 

aМ1×1 aМ2×2 … aМNХN
= bМ
 

 Так как 
Z – линейная функция, то = Сj (j = 1, 2,
…, n), то все коэффициенты линейной 
функции не могут быть равны 
нулю, следовательно, внутри области, 
образованной системой ограничений,
экстремальные точки не существуют. Они
могут быть на границе области, но исследовать
точки границы невозможно, поскольку частные
производные являются константами.
 

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

1. Общая задача 
линейного программирования
 

1.1. Формулировка 
задачи.
 

 Даны линейная 
функция
 

(1.1) Z = С1х1 С2х2 …
СNxN
 

 и система 
линейных ограничений
 

a11x1 a22x2 … a1NХN
= b1
 

a21x1 a22x2 … a2NХN
= b2
 

. . . . . . . . . . . . .
. .
 

ai1x1 ai2x2 … aiNХN
= bi (1.2)
 

. . . . . . . . . . . . .
. .
 

aM1x1 aM2x2 … aMNХN
= bM
 

(1.3) xj 0 (j = 1, 2, …
,n)
 

 где аij, Ьj и Сj
– заданные постоянные величины.
 

 Найти такие 
неотрицательные значения х1, х2, …,
хn, которые удовлетворяют системе ограничений
(1.2) и доставляют линейной функции (1.1)минимальное
значение.
 

 Общая задача 
имеет несколько форм записи.
 

 Векторная 
форма записи. Минимизировать линейную 
функцию Z = СХ при ограничениях
 

(1.4) А1х1 А2×2 …
АNxN = Ао, X 0
 

 где С =
(с1, с2, …, сN); Х = (х1, х2, …, хN); СХ – скалярное 
произведение; векторы
 

A1, A2,…, AN, A0 

 состоят соответственно 
из коэффициентов при неизвестных 
и свободных членах.
 

 Матричная 
форма записи. Минимизировать линейную
функцию, Z = СХ при ограничениях АХ = А0,
Х 0, где С = (с1, с2, …, сN) – матрица-cтрока;
А = (аij) – матрица системы;
 

 Х – матрица-столбец, 
А0 – матрица-столбец
 

 Запись с 
помощью знаков суммирования. Минимизировать 
линейную функцию Z = Сjхj при ограничениях
 

0пределение 1. Планом 
или допустимым решением задачи 
линейного программирования называется 
Х = (х1, х2, …, хN), удовлетворяющий 
условиям (1.2) и (1.3).
 

0пределение 2. План 
Х = (х1, х2, …, хN) называется опорным, 
если векторы А (i = 1, 2, …, N), входящие в разложение
(1.4) с положительными коэффициентами х
, являются линейно независимыми.
 

Так как векторы 
А являются N-мерными, то из определения 
опорного плана следует, что число 
его положительных компонент 
не может превышать М.
 

0пределение 3. Опорный 
план называется невырожденным, 
если он содержит М положительных 
компонент, в противном случае 
опорный план называется вырожденным.
 

0пределение 4. Оптимальным 
планом или оптимальным решением 
задачи линейного программирования
называется план, доставляющий наименьшее
(наибольшее) значение линейной функции.
 

Рефераты:  Реферат: Системы управления базами данных -

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

1.2 Геометрическая 
интерпретация задачи линейного 
программирования.
 

 Рассмотрим 
задачу линейного программирования,
система ограничений которой 
задана в виде неравенств.
 

 Найти минимальное 
значение линейной функции
 

(1.5) Z = С1х1 С2х2 …
СNxN
 

 при ограничениях 

a11x1 a22x2 … a1NХN
b1
 

a21x1 a22x2 … a2NХN
b2
 

(1.6) . . . . . . . . . .
. . . . .
 

aM1x1 aM2x2 … aMNХN
bM
 

(1.7) xj 0 (j = 1, 2, …
,n)
 

 Совокупность
чисел х1, х2, …, хN, удовлетворяющих ограничениям
(1.6) и (1.7), называется решением. Если система
неравенств (1.6) при условии (1.7) имеет хотя
бы одно решение, она называется совместной,
в противном случае – несовместной.
 

 Рассмотрим 
на плоскости х1Ох2 совместную 
систему линейных неравенств
 

 a11x1 a22x2 b1 

a21x1 a22x2 b2 

. . . . . . . . 

aM1x1 aM2x2 bM 

x1 0, x2 0 

 Это все равно,
что в системе (1.6) – (1.7) положить N=2. Каждое
неравенство этой системы геометрически
определяет полуплоскость с граничной
прямой
 

 ai1x1 ai2x2 = bi ,(i
= 1, 2, …, m). Условия неотрицательности определяют
полуплоскости соответственно с граничными
прямыми х = 0, х = 0. Система совместна, поэтому
полуплоскости, как выпуклые множества,
пересекаясь, образуют общую часть, которая
является выпуклым множеством и представляет
собой совокупность точек, координаты
каждой из которых являются решением данной
системы (рис. 1.1).
 

 Совокупность 
этих точек (решений) назовем 
многоугольником решений. Он может 
быть точкой, отрезком, лучом, много-угольником,
неограничен-ной многоугольной облас-тью.
 

 Если в 
системе ограничений (1.6) – (1.7) n = 3,
то каждое нера-венство геометрически 
представляет полупространство 
трехмерного пространства, граничная 
плоскость которого ai1x1 ai2x2 ai3x3 = bi
,(i = 1, 2, …, n), а условия неотрицательности
– полупрост-ранства с граничными плоскостями
соответственно хj = 0 (j = 1, 2, 3). Если система
ограничений совместна, то эти полупространства,
как выпуклые множества, пересекаясь,
образуют в трехмерном пространстве общую
часть, которая называется многогранником
решений. Многогранник решений может быть
точкой, отрезком, лучом, многоугольником,
многогранником, многогранной неограниченной
областью. Пусть в системе ограничений
(1.6) – (1.7) n 3; тогда каждое неравенство определяет
полупространство n-мерного пространства
с граничной гиперплоскостью ai1x1 ai2x2
aiNxN = bi (i = 1, 2, …, m), а условия неотрицательности
– полупространства с граничными гиперплоскостями
хj 0 (j = 1, 2, …, n).
 

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

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

2. Графический 
метод решения задачи линейного 
программирования.
 

2.1. Область применения. 

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

 Пусть задача 
линейного программирования задана 
в двумерном пространстве, т. е. ограничения
содержат две переменные.
 

 Найти минимальное 
значение функции
 

(2.1) Z = С1х1 С2х2 

 при 

a11x1 a22x2 b1 

(2.2) a21x1 a22x2 b2 

. . . . . . . . 

aM1x1 aM2x2 bM 

(2.3) х1 0, х2 0 

 Допустим, что
система (2.2) при условии (2.3) совместна
и ее многоугольник решений ограничен.
Каждое из неравенств (2.2) и (2.3), как отмечалось
выше, определяет полуплоскость с граничными
прямыми: ai1x1 ai2x2 ai3x3 = bi,(i = 1, 2, …, n), х1=0,
х2=0. Линейная функция (2.1) при фиксированных
значениях Z является уравнением прямой
линии: С1х1 С2х2 = const. Построим многоугольник
решений системы ограничений (2.2) и график
линейной функции (2.1) при Z = 0 (рис. 2.1). Тогда
поставленной задаче линейного прграммирования
можно дать следующую интерпретацию. Найти
точку многоугольника решений, в которой
прямая С1х1 С2х2 = const опорная и функция
Z при этом достигает минимума.
 

 Значения Z =
С1х1 С2х2 возрастают в направлении 
вектора N =(С1, С2), поэтому прямую
Z = 0 передвигаем параллельно самой
себе в направлении вектора Х. Из рис. 2.1
следует, что прямая дважды становится
опорной по отношению к многоугольнику
решений (в точках А и С), причем минимальное
значение принимает в точке А. Координаты
точки А (х1, х2) находим, решая систему уравнений
прямых АВ и АЕ.
 

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

 Случай 1. Прямая 
С1х1 С2х2 = const, передвигаясь в направлении 
вектора N или противоположно 
ему, постоянно пересекает многоугольник
решений и ни в какой точке не является
опорной к нему. В этом случае линейная
функция не ограничена на многоугольнике
решений как сверху, так и снизу (рис. 2.2).
 

 Случай 2. Прямая,
пере-двигаясь, все же становится 
опорной относительно многоу-гольника
решений (рис. 2.2, а – 2.2, в). Тогда в зави-симости
от вида области ли-нейная функция может
быть ограниченной сверху и неограниченной
снизу (рис. 2.2, а), ограниченной снизу и
неограниченной сверху (рис. 2.2, б), либо
ограниченной как снизу, так и сверху (рис.
2.2, в).
 

2.1. Примеры задач, 
решаемых графическим методом.
 

 Решим графическим 
методом задачи использования 
сырья и составления рациона.
 

 Задача использования 
сырья. Для изготовления двух 
видов продукции Р1 и Р2 используют три
вида сырья: S1, S2, S3. Запасы сырья, количес…
 

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

 Таблица 2.1. 

 Вид сырьяЗапас 
сырьяКоличество единиц сырья, 
идущих на изготовление единицы 
продукцииР1Р2S12025S24085S33056Прибыль от 
единицы продукции, руб.5040
 

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

 Решение. 

 Обозначим 
через х1 количество единиц 
продукции Р1, а через х2 – 
количество единиц продукции 
Р2. Тогда, учитывая количество 
единиц сырья, расходуемое на 
изготовление продукции, а так 
же запасы сырья, получим систему 
ограничений:
 

2х1 5х2 20 

8х1 5х2 40 

5х1 6х2 30 

 которая показывает,
что количество сырья, расходуемое 
на изготовление продукции, не 
может превысит имеющихся запасов. 
Если продукция Р1 не выпускается, 
то х1=0; в противном случае x1 0.
То же самое получаем и для продукции
Р2. Таким образом, на неизвестные х1 и х2
должно быть наложено ограничение неотрицательности:
х1 0, х2 0.
 

 Конечную 
цель решаемой задачи – получение 
максимальной прибылипри реализации 
продукции – выразим как функцию 
двух переменных х1 и х2. Реализация
х1 единиц продукции Р1 и х2 единиц продукции
Р2 дает соответственно 50х1 и 40х2 руб. прибыли,
суммарная прибыль Z = 50х1 40х2 (руб.)
 

 Условиями 
не оговорена неделимость единица 
продукции, поэтому х1 и х2 (план 
выпуска продукции) могут быть
и дробными числами.
 

 Требуется 
найти такие х1 и х2, при которых 
функция Z достинает максимум, т.е. 
найти максимальное значение 
линейной функции Z = 50х1 40х2 при 
ограничениях
 

2х1 5х2 20 

8х1 5х2 40 

5х1 6х2 30 

 х1 0, х2 0. 

 Построим многоугольник
решений (рис. 2.3).
 

 Для этого 
в системе координат х1Ох2 на 
плоскости на плоскости изобразим 
граничные прямые
 

2х1 5х2 = 20 (L1) 

8х1 5х2 = 40 (L2) 

5х1 6х2 = 30 (L3) 

 х1 = 0, х2 = 0. 

 Взяв какую-нибудь 
точку, например, начало координат,
установим, какую полуплоскость определяет
соответствующее неравенство (эти полуплоскости
на рис. 2.3 показаны стрелками). Многоугольником
решений данной задачи является ограниченный
пятиугольник ОАВСD.
 

 Для построения 
прямой 50х1 40х2 = 0 строим радиус-вектор
N = (50;40) = 10(5;4) и через точку O проводим прямую,
перпендикулярную ему. Построенную прямую
Z = 0 перемещаем параллельно самой себе
в направлении вектора N. Из риc. 2.3 следует,
что опорной по отношению к многоугольнику
решений эта прямая становится в точке
С, где функция Z принимает максимальное
значение. Точка С лежит на пересечении
прямых L1 и L2. Для определения ее координат
решим систему уравнений
 

8×1 5х2 = 40 

5х1 6х2 = 30 

 Оптимальный 
план задачи: х1 = 90/23 = 3,9; х2 = 40/23 = 1,7. Подставляя
значения х1 и х2 в линейную функцию, получаем
Zmax = 50 3,9 40 1,7 = 260,3
 

 Таким образом, 
для того чтобы получить максимальную 
прибыль в размере 260,3 руб., необходимо 
запланировать производство 3,9 ед. продукции 
Р1 и 1,7 ед. продукции Р2.
 

 Задача составления 
рациона. При откорме каждое 
животное ежедневно должно получать 
не менее 9 ед. питательного вещества
S1, не менее 8 ед. вещества S2 и не 
менее 12 ед. вещества S3. Для составления 
рациона используют два вида 
корма. Содержание количества елиниц питательных
веществ в 1 кг каждого вида корма и стоимость
1 кг корма приведены в таблице 2.2.
 

 Таблица 2.2. 

 Питательные 
веществаКоличество единиц питательных 
веществ
 

 в 1 кг корма. 
Корм 1Корм 2S131S212S316Стоимость 1 кг 
корма, коп.46

Необходимо составить
дневной рацион нужной питательности,
причем затраты на него должны быть минимальными.
 

Решение. 

 Для составления 
математической модели обозначим 
через х1 и х2 соответственно 
количество килограммов корма 
1 и 2 в дневном рационе. Принимая
во внимание значения, приведенные в таблице
2.2, и условие, что дневной рацион удовлетворяет
требуемой питательности только в случае,
если количество единиц питательных веществ
не меньше предусмотренного, получаем
систему ограничений
 

3х1 х2 9 

 х1 2х2 8 

 х1 6х2 12 

 х1 0, х2 0. 

 Если корм
1 не используется в рационе, 
то х1=0; в противном случае x1 0.
Аналогично имеем х2 0. То есть 
должно выполняться условие неотрицательности 
переменных: х1 0, х2 0.
 

 Цель данной 
задачи – добиться минимальных затрат
на дневной рацион, поэтому общую стоимость
рациона можно выразить в виде линейной
функции Z = 4х1 6х2 (коп.)
 

 Требуется 
найти такие х1 и х2, при которых 
функция Z принимает минимальное. 
Таким образом, необходимо найти 
минимальное значение линейной функции
Z = 4х1 6х2 при ограничениях
 

3х1 х2 9 

 х1 2х2 8 

 х1 6х2 12 

 х1 0, х2 0. 

 Построим 
многоугольник решений (рис. 2.4). Для 
этого в системе координат 
х1Ох2 на плоскости изобразим граничные 
прямые
 

3х1 х2 = 9 (L1) 

 х1 2х2 = 8 (L2) 

 х1 6х2 = 12 (L3) 

 х1 = 0, х2 = 0. 

 Взяв какую-нибудь 
точку, например, начало координат, 
установим, какую полуплоскость 
определяет соответствующее неравенство 
(эти полуплоскости на рис. 2.4 показаны 
стрелками). В результате получим
неограниченную многоугольную область
с угловыми точками А, В, С, D.
 

 Для построения 
прямой 4х1 6х2 = 0 строим радиус-вектор
N = (4;6) и через точку O проводим 
прямую, перпендикулярную ему. Построенную 
прямую Z = 0 перемещаем параллельно 
самой себе в направлении вектора N.
Из риc. 2.4 следует, она впервые коснется
многогранника решений и станет опорной
по отношению к нему в угловой точе В. Если
прямую перемещать дальше в направлении
вектора N, то значения линейной функции
на многограннике решений возрастут, значит,
в точке В линейная функция Z принимает
минимальное значение.
 

 Точка В 
лежит на пересечении прямых L1
и L2. Для определения ее координат 
решим систему уравнений
 

3×1 х2 = 9 

 х1 2х2 = 8 

 Имеем: х1
= 2; х2 = 3. Подставляя значения х1 и
х2 в линейную функцию, получаем Zmin = 4 2
6 3 = 26.
 

 Таким образом, 
для того, чтобы обеспечить минимум 
затрат (26 коп. в день), необходимо 
дневной рацион составить из 2
кг корма 1 и 3 кг корма 2.
 

2.2. Обобщение 
графического метода решения 
задач линейного программирования.
 

 Вообще, с 
помощью графического метода 
может быть ре-шена задача линейного 
программирования, система ограниче-ний 
которой содержит n неизвестных и 
m линейно независи-мых уравнений, 
если N и M связаны соотношением N
– M = 2.
 

 Действительно,
пусть поставлена задача линейного программирования.
 

 Найти минимальное 
значение линейной функции Z =
С1х1 С2х2 … СNxN при ограничениях
 

a11x1 a22x2 … a1NХN
= b1
 

(2.3) a21x1 a22x2 …
a2NХN = b2
 

. . . . . . . . . . . . .
. .
 

aМ1×1 aМ2×2 … aМNХN
= bМ
 

xj 0 (j = 1, 2, …, N) 

 где все уравнения
линейно независимы и выполняется cоотношение
N – M = 2.
 

 Используя 
метод Жордана-Гаусса, производим M
исключений, в результате которых 
базисными неизвестными оказались,
например, M первых неизвестных х1, х2, …,
хM, а свободными – два последних: хМ 1, и
хN, т. е. система ограничений приняла вид
 

 x1 a1,М 1xМ 1 a1NХN
= b1

(2.4) x2 a. 2,М 1xМ 1
a2NХN = b2
 

. . . . . . . . . . . . 

xМ aМ, М 1×2 aМNХN
= bМ
 

 xj 0 (j = 1, 2, …,
N)
 

С помощью уравнений 
преобразованной системы выражаем
линейную функцию только через свободные 
неизвестные и, учитывая, что все 
базисные неизвестные – неотрицательные:
хj 0 (j = 1, 2, …, M), отбрасываем их, переходя
к системе ограничений, выраженных
в виде неравенств. Таким образом, окончательно
получаем следующую задачу.
 

 Найти минимальное 
значение линейной функции Z =
СМ 1хМ 1 СNxN при ограничениях
 

 a1,М 1xМ 1 a1NХN
b1
 

a2,М 1xМ 1 a2NХN b2 

. . . . . . . . . . 

aМ,М 1xМ 1 aМNХN bМ 

xМ 1 0, хN 0 

 Преобразованная
задача содержит два неизвестных; решая
ее графическим методом, находим оптимальные
значения xМ 1 и хN, а затем, подставляя их
в (2.4), находим оптимальные значения х1,
х2, …, хM.
 

 Пример. 

 Графическим
методом найти оптимальный план задачи
ли-нейного программирования, при котором
линейная функция Z = 2х1 – х2 х3 – 3х4 4х5 достигает
максимального значения при ограничениях
 

 х1 – х2 3х3 – 18х4
2х5 = -4
 

2х1 – х2 4х3 – 21х4
4х5 = 2
 

3х1 – 2х2 8х3 – 43х4
11х5 = 38
 

xj 0 (j = 1, 2, …, 5) 

 Решение. 

 Используя 
метод Жордана-Гаусса, произведем 
три полных исключения неизвестных 
х1, х2, х3. В результате приходим 
к системе
 

 х1 х4 – 3х5 = 6 

 х2 7х4 10х5 =
70
 

 х3 – 4х4 5х5 = 20 

 Откуда x1 = 6 – 
х4 3×5, х2 = 70 – 7х4-10х5, х3 = 20 4х4 -5х5.
 

 Подставляя 
эти значения в функцию и 
отбрасывая в системе базисные 
переменные, получаем задачу, выраженную 
только через свободные переменные 
х4 и х5: найти максимальное 
значение линейной функции Z = 6х4 15х5 –
38 при ограничениях
 

 х4 – х5 6 

7х4 10х5 70 

– 4х4 5х5 20 

 х4 0, х5 0. 

 Построим 
многогранник решений и линейную 
функцию в системе координат 
х4Ох5 (рис. 2.5). Из рис. 2.5 заключаем, 
что линейная функция принимает
максимальное значение в угловой точке
В, которая лежит на пересечении прямых
2 и 3. В результате решения системы
 

7х4 10х5 = 70 

4х4 5х5 = 20 

 находим: 
х4 = 2, х5 = 28/5. Максимальное значение 
функции Zmax = -38 12 84 = 58.
 

 Для отыскания
оптимального плана исходной задачи подставляем
найденные значения х4 и х5. Окончательно
получаем: х1 = 104/5, х2 = 0, х3 = 0, х4 = 2, х5 = 28/5.
 

 ЛИТЕРАТУРА 

1. Математические 
методы анализа экономики /под 
ред. А.Я.Боярского. М.,Изд-во Моск.
Ун-та, 1983
 

2. А.И.Ларионов,
Т.И.Юрченко “Экономико-математические 
методы в планировании: Учебник 
– М.: Высш.школа, 1984
 
3. Ашманов С.А. 
“Линейное программирование”,- М.:
1961

и т.д……………..

Оцените статью
Реферат Зона
Добавить комментарий