Реализация глобального поиска для задачи оптимального размещения многоугольников

Предикатное представление условий непересечения многоугольников. Алгоритм непересечения многоугольника и полосы. Определение направления обхода вершин многоугольника. Решение систем линейных алгебраических уравнений. Построение интерактивной оболочки.

Рубрика Математика
Вид дипломная работа
Язык украинский
Дата добавления 10.11.2012
Размер файла 800,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Для решения поставленной задачи была разработана диаграмма классов, представленная на рисунке 4.6:

Рисунок 4.6 - Диаграмма классов

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

Рассмотрим каждый класс в отдельности [10], [11].

Form - класс-главное окно.

Поля:

· ParametrsOfWindow - параметры окна, такие как размер, оформление.

Методы:

· LoadDataFromFile - загрузка данных из файла;

· SaveDataToFile - сохранение результатов работы;

· DrawPolygons - прорисовка многоугольников;

· WorkWithMouse - обработка событий мыши;

· DeletePolygon - удаление многоугольника из коллекции;

· AddPolygon - добавление многоугольника в коллекцию;

· EditPolygon - редактирование многоугольника;

· WorkWithFocus - отслеживание активного геометрического объекта;

· ChangeParametersOfWindow - изменение внешнего вида приложения;

· Control - обработка действий пользователя.

Intersect - класс-алгоритм.

Атрибутов не имеет, т.к. все необходимые данные получает в виде параметров.

Методы:

· IntersectWithPolygon - обработка пересечения пары многоугольников;

· IntersectWithStrip - обработка попадания многоугольника в полосу.

Strip - класс-полоса.

Атрибуты:

· top - координата верхней границы полосы;

· left - координата левой границы полосы;

· bottom - координата нижней границы полосы;

Методы:

· ChangeParametres - изменение параметров полосы.

Equation - класс-уравнение, предназначен для хранения коэффициентов уравнения.

Поля:

· Data - массив коэффициентов.

Методы:

· Equation(int n) - конструктор, передается параметр n - количество переменных в уравнении;

· double [int i] - индексатор - метод получения доступа к коэффициентам, возвращает число;

· int Dimension() - возвращает количество переменных в уравнении.

· bool Equal(Equation eq) - проверка на равенство;

· Equation Copy() - возвращает копию объекта.

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

Поля:

· Data - массив объектов;

Методы:

· SystemEquations(int n) - конструктор, передается параметр n - количество уравнений в системе;

· Equation [int i] - индексатор - метод получения доступа к уравнениям, возвращает выбранное уравнение;

· Array Solve() - решает уравнение, возвращает массив чисел;

· int Dimension() - возвращает количество уравнений в системе.

· bool Equal(SystemEquations seq) - проверка на равенство;

· SystemEquations Copy() - возвращает копию объекта.

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

Поля:

· arrayOfNumbers - массив списков уравнений, здесь хранятся только номера уравнений, например первый элемент массива - это список содержащий номера уравнений, где коэффициент при первой переменной не равен нулю и т.д.;

· data - массив уравнений.

Методы:

· void Add(Equation eq) - добавление уравнение eq, автоматически происходит сортировка посредством добавления уравнения в нужный список поля data и arrayOfNumbers;

· AddSOF(SystemOfEquations) - добавление множества уравнений;

· SystemOfEquations GetSof(int ind) - возвращает множество уравнений, где коэффициент при i-ой переменной ненулевой;

· Equation GetIJ(int i, int j) - возвращает j-ое уравнение, где коэффициент при i-ой переменной ненулевой;

· Equation GetI(int i) - возвращает первое уравнение, где коэффициент при i-ой переменной ненулевой;

· void DeleteI(int i) - удаляет первое уравнение, где коэффициент при i-ой переменной ненулевой;

· void DeleteEquations(int i) - удаляет все уравнения, где коэффициент при i-ой переменной ненулевой;

· void DeleteIJ(int i, int j) - удаляет j-ое уравнение, где коэффициент при i-ой переменной ненулевой;

· int Size() - возвращает общее число уравнений;

· int Dimension() - возвращает количество типов уравнений.

TreeOfSolutions - класс-дерево решений, предназначен для формирования дерева решения и хранения систем уравнений, которые могут привести к решению.

Поля:

· parent - родитель;

· children - список потомков;

· layer - номер слоя;

· numberEq - номер уравнения;

· childrenEq - список номеров уравнений доступных потомкам на нижестоящем слое дерева;

Свойства:

· NumberEq - доступ к номеру уравнения, запись и чтение;

Методы:

· int GetLayer() - возвращает номер слоя;

· Add(TreeOfSolutions child) - добавление потомка;

· GetPath() - возвращает массив номеров уравнений, встретившихся по пути к корню;

· GetNumberChildren() - возвращает количество потомков;

· GetChild(int num) - возвращает i-ого потомка.

· GetParent() - возвращает родителя, возвращаемый тип - TreeOfSolutions.

Интерфейсы

IChange - предназначен для изменения внутренних данных геометрических объектов.

Методы:

· Add(GeomObj value) - добавляет элемент value в состав объекта;

· SetI(GeomObj value, int ind) - устанавливает новое значение value на i-ом месте;

· DeleteI(int ind) - удаление i-ого элемента;

· InsertAfter(GeomObj value, int ind) - вставка нового элемента value на i+1-ую позицию.

IOperations - операции над геометрическими объектами.

· Shift(Point to) - сдвиг в направлении вектора, определяемого точкой to;

· Rotate(Point center, real angel) - поворот вокруг точки center на угол angel, выраженный в радианах.

IFile - работа с файлами.

· LoadFromFile(string fileName) - загрузка данных из файла с именем fileName;

· SaveToFile(string fileName) - сохранение данных файл с именем fileName.

IDraw - графическое представление геометрических объектов.

· Draw() - прорисовка;

· SetFocus() - установка фокуса;

· HideFocus() - скрытие фокуса.

Классы геометрические объекты.

GeomObj - обобщенный геометрический объект, поддерживает интерфейс IDraw.

Поля:

· bool focus - флаг установки фокуса.

Методы:

· методы интерфейса IDraw;

· bool IsFocus() - проверка установки фокуса.

· Copy(GeomObj obj) - создание копии объекта obj;

· Equals(Object obj) - проверка на равенство с объектом obj.

Point - точка на плоскости, поддержка интерфейсов IDraw, IOperations, потомок класса GeomObj.

Поля:

· x - абсцисса точки;

· y - ордината точки.

Свойства:

· X - доступ к абсциссе, чтение и запись;

· Y - доступ к ординате, чтение и запись.

Методы:

· методы интерфейса IDraw;

· методы интерфейса IOperations;

· Copy(GeomObj obj) - создание копии объекта obj;

· Equals(Object obj) - проверка на равенство с объектом obj.

Polygon - многоугольник, поддержка интерфейсов IChange, IDraw, IOperations, потомок класса GeomObj.

Поля:

· points - список точек;

· Point pole - полюс.

Свойства:

· NumPoints - возвращает количество точек, образующих многоугольник, доступ только по чтению.

Методы:

· методы интерфейса IDraw;

· методы интерфейса IOperations;

· методы интерфейса IChange;

· Point GetI(int ind) - возвращает точку, стоящую на ind-ом месте.

· SetOfEquations FormingEquations(Polygon pol) - формирует множество уравнений по непересечению с другим многоугольником pol, возвращает множество уравнений;

· SetOfEquations FormingEquations(Strip s) - формирует множество уравнений по непересечению с полосой s, возвращает множество уравнений;

· Point GetPole() - возвращает полюс;

· Copy(GeomObj obj) - создание копии объекта obj;

· Equals(Object obj) - проверка на равенство с объектом obj.

CollectPolygons - набор многоугольников, поддержка интерфейсов IChange, IDraw, IOperations, IFile, потомок класса GeomObj.

Поля:

· polygons - список многоугольников.

Свойства:

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

Методы:

· методы интерфейса IDraw;

· методы интерфейса IOperations;

· методы интерфейса IChange;

· методы интерфейса IFile;

· Polygon GetI(int ind) - возвращает многоугольник, стоящий на ind-ом месте;

· Copy(GeomObj obj) - создание копии объекта obj;

· Equals(Object obj) - проверка на равенство с объектом obj.

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

4.5 Диаграмма состояния

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

На диаграмме имеются два специальных состояния -- начальное (start) и конечное (stop). Начальное состояние выделено черной точкой, оно соответствует состоянию объекта, когда он только что был создан. Конечное состояние обозначается черной точкой в белом кружке, оно соответствует состоянию объекта непосредственно перед его уничтожением. На диаграмме состояний может быть одно и только одно начальное состояние. В то же время, может быть столько конечных состояний, сколько вам нужно, или их может не быть вообще.

Наиболее сложное поведение наблюдается у класса-алгоритма (рис. 4.6), построение множества уравнений (рис. 4.7) и формирование дерева решений (рис. 4.8-4.9). Ниже представлены соответствующие диаграммы. По ним легко понять алгоритмы решения поставленной задачи.

Рисунок 4.6 - Алгоритм непересечения многоугольников

Рисунок 4.7 - Получение множества уравнений

Рисунок 4.8 - Формирование дерева решений

Рисунок 4.9 - Формирование дерева решения

Конечной целью данной работы было создание программного продукта, который бы решал поставленную задачу. В результате была спроектирована и реализована в среде программирования Builder C++ 5.0 интерактивная оболочка для размещения неориентированных многоугольников geometric. Вычислительная часть написана в среде Visual Studio 2010 на языке C#.

4.6 Системные требования

Требования к ЭВМ приведены в таблице 4.1.

Таблица 4.1 - Требования к ЭВМ

Тип ЭВМ

IBM PC /совместимый

Операционная система

ОС Windows 2000 и выше

Процессор

1ГГц и выше

ОЗУ

64 Мб

Место на HDD

2 Мб

4.7 Руководство пользователя

Рассмотрим рисунок 4.10.

Рисунок 4.10 - Главное окно программного продукта

Сверху видим меню, состоящее из трех пунктов:

· Файл;

· Задачи;

· Настройки.

Подменю «Файл» предназначено для сохранения и открытия файлов, содержащих информация о геометрических объектах.

Подменю «Задачи» предназначено для выбора контроля корректности введенных данных (непересечение многоугольников) и обновления экрана.

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

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

· Shift - режим движения (основной режим);

· Rotate - режим поворота;

· EditPolygon - редактирование многоугольника (движение вершин многоугольника);

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

· AddPoint - добавление точки;

· DelPolygon - удаление многоугольника;

· DelPoint - удаление вершины.

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

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

4.8 Пример работы

На рисунке 4.11 виден один из вариантов размещения шести многоугольников в полосе длиной - 10 единиц и шириной - 10 единиц.

Рисунок 4.11 - Начальное расположение

Причем выбрана задача слежения за корректностью введенных данных. Любое изменение положения многоугольников осуществляется согласно пункту 4.7. «Руководство пользователя»

На рисунке 4.12 многоугольники размещены с учетом минимально занимаемой полосы.

Рисунок 4.12 - Результат оптимизации

На рисунке 4.13 можно увидеть главное окно расчетной части программного продукта.

Рисунок 4.13 - Расчетная часть

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

Выводы по разделу 4

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

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

5. ОХРАНА ТРУДА

5.1 Характеристика производственного помещения

В нашем случае производственным помещением является вычислительный центр (ВЦ). Размеры помещения составляют: длина 6м, ширина 4м, высота 3м. Общая площадь равна 24 .Численность персонала не установлена. В течение всего года в помещении поддерживаются нормальные значения температуры, влажности воздуха и скорости движения воздуха благодаря установленному кондиционеру.

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

В помещении центра находится персональный компьютер, струйный принтер, сканер.

5.2 Выявление опасных и вредных факторов, действующих на пользователей ПК

Производственные факторы в зависимости от последствий, к которым может привести их действие, принято делить на опасные и вредные.

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

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

Согласно ГОСТ 12.0.003 -74 по природе действия на организм человека опасные и вредные производственные факторы подразделяются на четыре группы: физические, химические, биологические и психофизиологические.

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

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

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

Психофизиологические опасные и вредные производственные факторы по характеру действия подразделяются на: физические перегрузки, нервно-психические перегрузки.

Операторы ЭВМ, программисты и другие работники ВЦ подвержены воздействию следующих опасных и вредных производственных факторов:

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

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

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

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

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

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

7. Психофизиологические опасные и вредные производственные факторы. Многие сотрудники ВЦ связаны с воздействием таких психофизических факторов, как умственное перенапряжение, перенапряжение зрительных и слуховых анализаторов, монотонность труда, эмоциональные перегрузки. Воздействие указанных неблагоприятных факторов приводит к снижению работоспособности, вызванное развивающимся утомлением. Появление и развитие утомления связано с изменениями, возникающими во время работы в центральной нервной системе, с тормозными процессами в коре головного мозга. Например, сильный шум вызывает трудности с распознанием цветовых сигналов, снижает быстроту восприятия цвета, остроту зрения, зрительную адаптацию, нарушает восприятие визуальной информации, уменьшает на 5 - 12 % производительность труда. Длительное воздействие шума с уровнем звукового давления 90 дБ снижает производительность труда на 30 - 60 %.

8. Серьезного внимания заслуживают вопросы гигиенической оценки уровней электромагнитных излучений (ЭМИ). ЭМИ, возникающие при работе электронных компонентов системного блока, имеют незначительные уровни. Дисплеи, сконструированные на основе электронно-лучевой трубки (ЭЛТ), излучают:

- рентгеновские лучи, источником которых является люминофорное покрытие экрана;

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

- ЭМИ и электромагнитные поля (ЭМП) радиочастотного диапазона, источником которых является электронный луч.

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

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

5.3 Мероприятия по снижению влияния опасных и вредных факторов действующих на пользователей ПК

Рассмотрим опасные и вредные производственные факторы, действующие на пользователей ПК и мероприятия по снижению их влияния.

1. Несоответствие расположения рабочего места санитарным нормам. Помещения ВЦ, их размеры (площадь, объем) должны в первую очередь соответствовать количеству работающих и размещаемому в них комплекту технических средств. Для обеспечения нормальных условий труда санитарные нормы СН 245-71 устанавливают на одного работающего объем производственного помещения не менее 15 м3, площадь помещения, выгороженного стенами или глухими перегородками, не менее 4,5 м3 .Рабочее место представляет собой современный вычислительный комплекс, состоящий из: ПЭВМ, которая комплектуется в общем случае: системным блоком, монитором, периферийной техникой; рабочий стол; стул (кресло). Рекомендуемые размеры стола: высота - 725 мм, ширина - 600 - 1400 мм, глубина - 800 - 1000мм. Рабочий стул должен иметь такие основные элементы: сидение, спинку и стационарные или съемные подлокотники, он должен быть подвижным и удобным. Монитор и клавиатура должны располагаться на оптимальном расстоянии от глаз пользователя (но не ближе 60 см) с учетом размера алфавитно-цифровых знаков и символов.

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

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

2. Повышенная или пониженная влажность воздуха.

Метрологические условия в помещении определяются температурой, влажностью и скоростью движения воздуха. Нормы метеорологических условий на производстве регламентируются ГОСТ 12.1.005-76 “Воздух рабочей зоны”.

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

Таблица 5.1 - Нормы температуры, относительной влажности, скорости

Период года

Температура, 0С

Относительная влажность, %

Скорость движения, м/с

Холодные и переходные периоды (температура наружного воздуха ниже +100С)

19

4060

0.1

Теплый период (температура наружного воздуха выше +100С)

20

4060

0.2

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

3. Повышенная или пониженная ионизация воздуха.

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

4. Повышенный уровень шума на рабочем месте.

Требования к уровню шума и вибрации. В помещении ВЦ возможны следующие виды шумов:

Аэродинамический, создаваемый работой кондиционеров.

Механический, создаваемый устройствами печати.

Электромагнитный, создаваемый преобразователями напряжения.

Допустимые уровни звукового давления в октавных полосах частот, уровни звука и эквивалентные уровни звука в дБ на рабочих местах (ГОСТ 112.1.003-76) приведены в таблице 5.2.

Таблица 5.2 - Допустимые уровни звукового давления

Рабочие места

Уровни звукового давления со среднегеометрическими частотами, Гц

Уровни звука и эквивалентные уровни, дБ

Помещение программистов

40

45

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

5. Недостаточная освещенность рабочей зоны.

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

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

Его величина узаконена строительными нормами и правилами СНиП П.4-79 в зависимости от типа помещения, системы освещения и характером работ, выполняемых в помещении - КЕО1.5%.

Согласно строительным нормам и правилам СНиП П.4-79 в качестве источников искусственного освещения применяются люминесцентные лампы.

6. Повышенный риск возникновения пожара.

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

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

7. Психофизиологические опасные и вредные производственные факторы.

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

8. Статическое электричество и ЭМИ.

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

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

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

Оптимальным уровнем ионизации воздуха в зоне дыхания работающего считается количество ионов обоих знаков от 1,5х102 до 5х104 в 1 см3 воздуха.

Требования к защитному заземлению.

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

Сопротивление заземления для данного случая RЗ<40 м.

Выводы к разделу 5

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

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

6. ЭКОНОМИЧЕСКАЯ ЧАСТЬ

6.1 Описание программного продукта

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

Для функционирования системы требуются следующие средства:

1. Компьютер IBM PC совместимый,

2. Процессор Pentium 1ГГц и выше,

3. Не менее 64 Мб оперативной памяти,

4. Размер свободного места на жёстком диске 2 Мб,

5. Наличие устройств мышь и клавиатура,

6. Операционная система Windows 2000 и выше.

6.2 Оценка рынка сбыта

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

6.3 Расчет себестоимости и цены программного продукта

Для ведения всего проекта в целом и руководства ходом работ необходима должность руководителя. Для проектирования подсистемы и ее последующей наладки и введения в эксплуатацию необходимо участие программиста. Продолжительность рабочего месяца в среднем считается 21 день. Состав исполнителей приведен в таблице 6.1. Рассчитаем продолжительность разработки по видам работ. Результаты расчетов содержатся в таблице 6.2.

Таблица 6.1 - Состав исполнителей работы

Должности

Должностные оклады, грн.

Месячные

Дневные

Руководитель

2700

128

Программист

2500

119

Таблица 6.2 - Расчет трудоемкости работ

Вид работ

Продолжит.дни

Трудоемкость, чел/днях

Исполнитель

Руково-

дитель

Програм-мист

Техническое задание (ТЗ)

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

1

1

1

Выбор методов решения задач

1

2

1

1

Разработка графика хода работ

1

1

1

Определение требований к программе и техническим средствам

1

2

1

1

Разработка ТЗ

3

9

3

Согласование и утверждение ТЗ

3

9

3

Проектирование программы

Разработка интерфейса

2

8

2

2

Разработка связей между элементами интерфейса

1

2

1

1

Разработка программы

20

24

4

20

Отладка программы

8

8

8

Разработка программной документации

5

6

1

5

Внедрение

Наладка и испытание продукта

3

4

1

3

Дополнительная отладка, корректировка

2

2

2

Испытание и сдача продукта в эксплуатацию

1

2

1

1

Итого

52

64

20

44

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

ОЗП = 20*128+44*119 = 7796 грн. (6.1)

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

Таблица 6.3 - Материалы и комплектующие

Материалы

Кол-во

Цена, грн.

Сумма, грн.

Назначение

Диски DVD-R

5 шт.

4

20

Хранение резервных копий, перенос программы

Бумага (пачка, 500 л.)

1 шт.

30.00

30

Документация, распечатки

Печать

документации

500 л.

0,10

50

Различная печать

Итого

100

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

ТМВ = 3*20+44*5 = 280 ч. (6.2)

Стоимость часа машинного времени будем считать равной 2.5 грн.

ЗМВ = 2.5*280 = 700 грн. (6.3)

Накладные расходы примем в размере 20% от фонда заработной платы. Расчет себестоимости и договорной цены приводим в таблице 6.4.

Таблица 6.4 - Расчет себестоимости и цены ПП

п/п

Статьи

Затраты,

грн.

1

Основная заработная плата

7796

2

Дополнительная заработная плата (15 % от ОЗП)

1169.4

3

Начисления на заработную плату

Пенсионный фонд (33.2 % от ФЗП)

2976.5

Фонд страхования по временной нетрудоспоcобности (1.5 % от ФЗП)

134,5

Фонд безработицы (1.3 % от ФЗП)

116.6

Фонд соц. страхования от несчастных случаев (0.2 % от ФЗП)

17,9

5

Накладные расходы (20 % от ФЗП)

1793

6

Материалы и комплектующие

100

7

Стоимость машинного времени

700

8

Амортизация оборудования (10% от ОЗП)

779.6

Итого себестоимость ПП

15583.5

Прибыль (30%)

4675.1

Цена без НДС

20258,6

НДС (20%)

4051,7

Цена ПП

44568,9

6.4 Расчет обобщенных показателей качества

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

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

Перечень основных показателей качества:

количество функций;

2) интерфейс;

3) наглядность результатов;

4) объём памяти.

Расчет обобщенных показателей качества проводим по формуле:

, (6.5)

где - коэффициент веса.

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

, (6.6)

где - значение показателя собственного ПП,

- значение показателя гипотетического ПП.

Уровень качества нашего продукта составляет 0.89 по отношению к гипотетическому, т.е. наш продукт обладает 89% от возможностей гипотетического программного продукта.

Выводы к разделу 6

В данном разделе была рассчитана себестоимость и цена программного продукта, они равны 15583.5 грн. и 44568.9 грн. соответственно, рассчитаны обобщённые показатели качества разработки. Программный продукт имеет хорошие показатели качества. Он обладает высокой надёжностью, долговечностью, уменьшает временные затраты пользователей при проведении исследований в данной предметной области.

ЗАКЛЮЧЕНИЕ

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

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

Для разработки программного продукта использован объектно-ориентированный подход с использованием Case средства UML - Rational Rose.

Интерфейсная часть программного продукта написана в среде Builder C++ 5.0, а расчетная - в Visual Studio 2010. Разработанный программный продукт может быть использован как составная часть программного комплекса по раскрою материала в различных отраслях промышленности.

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Канторович, Л. В. Математические методы в организации и планировании производства [Текст] / Л. В. Канторович. - Л.: Изд-во при ЛГУ, 1939. - 250 с.

2. Рвачев, В. Л. Геометрические приложения алгебры логики [Текст] / В. Л. Рвачев. - Киев: Техника, 1967. - 212с.

3. Стоян, Ю. Г. Размещение геометрических объектов [Текст] / Ю. Г. Стоян. - Киев: Наук. думка, 1975. - 237 с.

4. Стоян, Ю. Г. Методы и алгоритмы размещения плоских геометрических объектов [Текст] / Ю. Г. Стоян, Н. И. Гиль; Киев: Наук.думка, 1976. - 248 с.

5. Стоян, Ю. Г. Математические модели и оптимизационные методы геометрического проектирования [Текст] / Ю. Г. Стоян, С. В. Яковлев; Киев: Наук. думка, 1986. - 268 с.

6. Пандорин, А. К. Методы и алгоритмы построения раскладок в системах управления раскроем изотопных материалов: Автореф. дис. канд. техн. Наук [Текст] / А. К. Пандорин.- Харьков, 1988. -17 с.

7. Магас, С.Л. Методы решения экстремальных задач размещения многоугольных геометрических объектов в полосе: Автореф. дис. канд. физ.-мат. наук [Текст] / С. Л. Магас. - М., 1984. - 20 с.

8. Буч, Г. Язык UML. Руководство пользователя: Пер. с англ. [Текст] / Г. Буч, Дж. Рамбо, А. Джекобсон. - М.: ДМК Пресс, 2001. - 432 с.

9. Кватрани, Т. Rational Rose 2000 и UML. Визуальное моделирование [Текст]: Пер. с англ. / Т. Кватрани. - М.: ДМК Пресс, 2001. - 176 с.

10. Павловская, Т. А. С.С++. Программирование на языке высокого уровня [Текст] / Т. А. Павловская. - СпБ.: Питер, 2002. - 464 с.

11. Шамис, В. А. C++ Builder 4. Техника визуального программирования [Текст] / В. А. Шамис. - М.: ” Нолидж”, 2000. - 656 с.

Приложение А

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

ЛИСТИНГ ПРОГРАММЫ

Interfaces.cs

using System;

namespace Diplom

{

/// <summary>

/// Summary description for Interfaces.

/// </summary>

//operations with data

interface IChange

{

void Add(GeomObj data);

void SetI(GeomObj data, int ind);

void DeleteI(int ind);

void Insert(GeomObj data,int ind);

}

//geometric operations

interface IOperations

{

void Shift(Point to);

void Rotate(Point center,double angel);

}

//work with files

interface IFile

{

void LoadFromFile(string fileName,ref Strip st);

void SaveToFile(string fileName,Strip st);

}

//drawing

interface IDraw

{

void Draw();

void SetFocus();

void HideFocus();

bool IsFocus();

}

}

GeomObj.cs

using System;

namespace Diplom

{

/// <summary>

/// Summary description for GeomObj.

/// </summary>

public class GeomObj: IDraw

{

public GeomObj()

{

focus = false;

}

/// <summary>

/// set focus flag

/// </summary>

protected bool focus;

//methods IDraw interface

void IDraw.Draw()

{

Console.WriteLine("Drawing geometric object");

}

void IDraw.SetFocus()

{

focus = true;

}

void IDraw.HideFocus()

{

focus = false;

}

bool IDraw.IsFocus()

{

return focus;

}

}

}

TreeNode.cs

using System;

using System.Collections;

namespace Diplom

{

/// <summary>

/// узел дерева

/// </summary>

public class TreeNode

{

public TreeNode()

{

layer = 0;

parent = null;

children = new ArrayList();

childrenEq = new ArrayList();

node_eq = 0;

}

/// <summary>

/// родительский узел

/// </summary>

private TreeNode parent;

/// <summary>

/// список потомков

/// </summary>

private ArrayList children;

/// <summary>

/// номер слоя дерева

/// </summary>

private int layer;

/// <summary>

/// список номеров уравнений доступных потомкам на нижестоящем слое дерева

/// </summary>

private ArrayList childrenEq;

/// <summary>

/// номер уравнения связанного с данным узлом

/// </summary>

private int node_eq;

/// <summary>

/// доступ к номеру узлового уравнения

/// </summary>

public int Node_eq

{

get

{

return node_eq;

}

set

{

node_eq = value;

}

}

/// <summary>

/// номер слоя

/// </summary>

public int Layer

{

get

{

return layer;

}

set

{

layer = value;

}

}

/// <summary>

/// доступ к свойству предка

/// </summary>

public TreeNode Parent

{

get

{

return parent;

}

set

{

parent = value;

}

}

/// <summary>

/// - возвращает количество потомков

/// </summary>

public int GetNumberChildren()

{

return children.Count;

}

/// <summary>

/// список номеров уравнений доступных потомкам на нижестоящем слое дерева

/// </summary>

public ArrayList ChildrenEq

{

get

{

return childrenEq;

}

set

{

childrenEq = value;

}

}

/// <summary>

/// добавление потомка

/// </summary>

public void AddChild(TreeNode child)

{

children.Add(child);

}

/// <summary>

/// возвращает i-ого потомка

/// </summary>

public TreeNode GetChild(int i)

{

if ( (i>-1) && (i<children.Count) )

return (TreeNode)children[i];

else return null;

}

/// <summary>

/// установка i-ого потомка

/// </summary>

public void SetChild(int i,TreeNode node)

{

if ( (i>-1) && (i<children.Count) )

children[i] = node;

}

/// <summary>

/// удаляет i-ого потомка

/// </summary>

public void DeleteChild(int i)

{

if ( (i>-1) && (i<children.Count) )

children.RemoveAt(i);

}

/// <summary>

/// тестовый метод - вывод в консоль

/// </summary>

public void Output()

{

Console.WriteLine("Узел дерева");

Console.WriteLine("Номер слоя - {0}",layer);

Console.WriteLine("Номер уравнения - {0}",node_eq);

foreach(TreeNode node in children)

{

node.Output();

}

}

}

}

SystemEquations

using System;

using System.Collections;

namespace Diplom

{

/// <summary>

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

/// </summary>

public class SystemEquations

{

public SystemEquations(int n)

{

data = new ArrayList(n);

for(int i = 0;i<n;i++)

data.Add(new Equation(n));

}

private ArrayList data;

/// <summary>

/// доступ к уравнениям по индексу, начиная с 0

/// </summary>

public Equation this[int ind]

{

get

{

if ((ind > -1) && (ind < data.Count))

return ((Equation)data[ind]);

else return new Equation(data.Count);

}

set

{

if ((ind > -1) && (ind < data.Count))

data[ind] = value;

}

}

/// <summary>

/// тестовый метод для вывода уравнений

/// </summary>

public void Output()

{

Console.WriteLine("Вывод уравнений системы");

foreach(Equation eq in data)

eq.Output();

Console.WriteLine("");

}

/// <summary>

/// решает систему уравнений

/// </summary>

public ArrayList Solve()

{

ArrayList result = new ArrayList(data.Count);

return result;

}

/// <summary>

/// размерность системы уравнений

/// </summary>

public int Dimension()

{

return data.Count;

}

/// <summary>

/// проверка на равенство систем

/// </summary>

new public bool Equals(Object soeq)

{

bool flag = true;

SystemEquations soeq_tmp = new SystemEquations(data.Count);

soeq_tmp.Copy((SystemEquations)soeq);

for(int i = 0;i<data.Count;i++)

{

if ( !((Equation)data[i]).Equals(soeq_tmp[i]) ) flag = false;

}

return flag;

}

/// <summary>

/// копирование объекта

/// </summary>

public void Copy(SystemEquations soeq)

{

for(int i = 0;i<data.Count;i++)

((Equation)data[i]).Copy(soeq[i]);

}

}

}

Strip.cs

using System;

namespace Diplom

{

/// <summary>

/// полоса

/// </summary>

public class Strip

{

public Strip()

{

width = 0;

length = 0;

}

/// <summary>

/// длина полосы

/// </summary>

private double length;

/// <summary>

/// ширина полосы

/// </summary>

private double width;

public double Width

{

get

{

return width;

}

set

{

width = value;

}

}

public double Length

{

get

{

return length;

}

set

{

length = value;

}

}

/// <summary>

/// копирование полосы

/// </summary>

public void Copy(Strip strip)

{

width = strip.Width;

length = strip.Length;

}

}

}

solveSLAU.cs

using System;

namespace solveSLAU_SVD

{

public class solveSLAU

{

public solveSLAU(){}

private const int maxsvditerations = 30;

private double machineepsilon = 5E-16;

/*************************************************************

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

Система имеет вид:

Ax = b

где A - матрица MxN, x - вектор Nx1, b - вектор Mx1

Входные параметры:

A - массив с нумерацией элементов [1..M, 1..N+1].

В столбцах от 1 до N содержится матрица системы,

В столбце N+1 содержится правая часть b.

M - число уравнений (строк в матрице).

N - число неизвестных (столбцов в матрице)

Выходные параметры:

Dimension - размерность пространства решений

Solutions - массив с нумерацией элементов [1..N, 0..Dimension].

Фундаментальная система решений.

Столбец с номером 0 содержит частное решение системы уравнений (или решение с минимальной невязкой, если система несовместна).

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

Результат:

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

*************************************************************/

public void svdsolvefundamental(ref double[,] a,int m,int n,ref double[,] solutions,out int dimension)

{

int nm = 0;

int minmn = 0;

int l = 0;

int k = 0;

int j = 0;

int jj = 0;

int its = 0;

int i = 0;

double z = 0.0;

double y = 0.0;

double x = 0.0;

double vscale = 0.0;

double s = 0.0;

double h = 0.0;

double g = 0.0;

double f = 0.0;

double c = 0.0;

double anorm = 0.0;

double[] rv1;

double[] w;

double[,] v;

bool flag;

double epsilon = 0.0;

rv1 = new double[n+1];

w = new double[n+1];

v = new double[n+1,n+1];

for(i = 0;i<=n;i++)

{

rv1[i] = 0.0;

w[i] = 0.0;

for(j = 0;j<=n;j++)

v[i,j] = 0.0;

}

if( m<n )

{

minmn = m;

}

else

{

minmn = n;

}

g = 0.0;

vscale = 0.0;

anorm = 0.0;

for(i = 1; i <= n; i++)

{

l = i+1;

rv1[i] = vscale*g;

g = 0;

s = 0;

vscale = 0;

if( i<=m )

{

for(k = i; k <= m; k++)

{

vscale = vscale+Math.Abs(a[k,i]);

}

if( vscale!=0.0 )

{

for(k = i; k <= m; k++)

{

a[k,i] = a[k,i]/vscale;

s = s+a[k,i]*a[k,i];

}

f = a[i,i];

g = -extsign(Math.Sqrt(s), f);

h = f*g-s;

a[i,i] = f-g;

if( i!=n )

{

for(j = l; j <= n; j++)

{

s = 0.0;

for(k = i; k <= m; k++)

{

s = s+a[k,i]*a[k,j];

}

f = s/h;

for(k = i; k <= m; k++)

{

a[k,j] = a[k,j]+f*a[k,i];

}

}

}

for(k = i; k <= m; k++)

{

a[k,i] = vscale*a[k,i];

}

}

}

w[i] = vscale*g;

g = 0.0;

s = 0.0;

vscale = 0.0;

if( i<=m&&i!=n )

{

for(k = l; k <= n; k++)

{

vscale = vscale+Math.Abs(a[i,k]);

}

if( vscale!=0.0 )

{

for(k = l; k <= n; k++)

{

a[i,k] = a[i,k]/vscale;

s = s+a[i,k]*a[i,k];

}

f = a[i,l];

g = -extsign(Math.Sqrt(s), f);

h = f*g-s;

a[i,l] = f-g;

for(k = l; k <= n; k++)

{

rv1[k] = a[i,k]/h;

}

if( i!=m )

{

for(j = l; j <= m; j++)

{

s = 0.0;

for(k = l; k <= n; k++)

{

s = s+a[j,k]*a[i,k];

}

for(k = l; k <= n; k++)

{

a[j,k] = a[j,k]+s*rv1[k];

}

}

}

for(k = l; k <= n; k++)

{

a[i,k] = vscale*a[i,k];

}

}

}

anorm = mymax(anorm, Math.Abs(w[i])+Math.Abs(rv1[i]));

}

for(i = n; i >= 1; i--)

{

if( i<n )

{

if( g!=0.0 )

{

for(j = l; j <= n; j++)

{

v[j,i] = a[i,j]/a[i,l]/g;

}

for(j = l; j <= n; j++)

{

s = 0.0;

for(k = l; k <= n; k++)

{

s = s+a[i,k]*v[k,j];

}

for(k = l; k <= n; k++)

{

v[k,j] = v[k,j]+s*v[k,i];

}

}

}

for(j = l; j <= n; j++)

{

v[i,j] = 0.0;

v[j,i] = 0.0;

}

}

v[i,i] = 1.0;

g = rv1[i];

l = i;

}

for(i = minmn; i >= 1; i--)

{

l = i+1;

g = w[i];

if( i<n )

{

for(j = l; j <= n; j++)

{

a[i,j] = 0.0;

}

}

if( g!=0.0 )

{

g = 1.0/g;

if( i!=n )

{

for(j = l; j <= n; j++)

{

s = 0.0;

for(k = l; k <= m; k++)

{

s = s+a[k,i]*a[k,j];

}

f = s/a[i,i]*g;

for(k = i; k <= m; k++)

{

a[k,j] = a[k,j]+f*a[k,i];

}

}

}

for(j = i; j <= m; j++)

{

a[j,i] = a[j,i]*g;

}

}

else

{

for(j = i; j <= m; j++)

{

a[j,i] = 0.0;

}

}

a[i,i] = a[i,i]+1.0;

}

for(k = n; k >= 1; k--)

{

for(its = 1; its <= maxsvditerations; its++)

{

flag = true;

for(l = k; l >= 1; l--)

{

nm = l-1;

if( Math.Abs(rv1[l])+anorm==anorm )

{

flag = false;

break;

}

if( Math.Abs(w[nm])+anorm==anorm )

{

break;

}

}

if( flag )

{

c = 0.0;

s = 1.0;

for(i = l; i <= k; i++)

{

f = s*rv1[i];

if( Math.Abs(f)+anorm!=anorm )

{

g = w[i];

h = pythag(f, g);

w[i] = h;

h = 1.0/h;

c = g*h;

s = -f*h;

for(j = 1; j <= m; j++)

{

y = a[j,nm];

z = a[j,i];

a[j,nm] = y*c+z*s;

a[j,i] = -y*s+z*c;

}

}

}

}

z = w[k];

if( l==k )

{

if( z<0.0 )

{

w[k] = -z;

for(j = 1; j <= n; j++)

{

v[j,k] = -v[j,k];

}

}

break;

}

x = w[l];

nm = k-1;

y = w[nm];

g = rv1[nm];

h = rv1[k];

f = ((y-z)*(y+z)+(g-h)*(g+h))/(2.0*h*y);

g = pythag(f, 1);

f = ((x-z)*(x+z)+h*(y/(f+extsign(g, f))-h))/x;

c = 1.0;

s = 1.0;

for(j = l; j <= nm; j++)

{

i = j+1;

g = rv1[i];

y = w[i];

h = s*g;

g = c*g;

z = pythag(f, h);

rv1[j] = z;

c = f/z;

s = h/z;

f = x*c+g*s;

g = -x*s+g*c;

h = y*s;

y = y*c;

for(jj = 1; jj <= n; jj++)

{

x = v[jj,j];

z = v[jj,i];

v[jj,j] = x*c+z*s;

v[jj,i] = -x*s+z*c;

}

z = pythag(f, h);

w[j] = z;

if( z!=0.0 )

{

z = 1.0/z;

c = f*z;

s = h*z;

}

f = c*g+s*y;

x = -s*g+c*y;

for(jj = 1; jj <= m; jj++)

{

y = a[jj,j];

z = a[jj,i];

a[jj,j] = y*c+z*s;

a[jj,i] = -y*s+z*c;

}

}

rv1[l] = 0.0;

rv1[k] = f;

w[k] = x;

}

}

epsilon = Math.Abs(w[1]);

for(i = 2; i <= n; i++)

{

if( Math.Abs(w[i])>epsilon )

{

epsilon = Math.Abs(w[i]);

}

}

epsilon = epsilon*n*machineepsilon;

dimension = 0;

for(i = 1; i <= n; i++)

{

if( Math.Abs(w[i])<=epsilon )

{

dimension = dimension+1;

}

}

//solutions = new double[n+1,dimension+1];

for(i = 1; i <= n; i++)

{

solutions[i,0] = 0;

for(j = 1; j <= m; j++)

{

solutions[i,0] = solutions[i,0]+a[j,i]*a[j,n+1];

}

}

k = 1;

for(j = 1; j <= n; j++)

{

if( Math.Abs(w[j])>epsilon )

{

for(i = 1; i <= n; i++)

{

v[i,j] = v[i,j]/w[j];

}

}

else

{

for(i = 1; i <= n; i++)

{

solutions[i,k] = v[i,j];

}

k = k+1;

}

}

for(i = 1; i <= n; i++)

{

a[1,i] = 0;

for(j = 1; j <= n; j++)

{

if( Math.Abs(w[j])>epsilon )

{

a[1,i] = a[1,i]+v[i,j]*solutions[j,0];

}

}

}

for(i = 1; i <= n; i++)

{

solutions[i,0] = a[1,i];

}

}

/*****************************************************

Служебная подпрограмма

*******************************************************/

private double extsign(double a, double b)

{

double result;

if( b>=0 )

{

result = Math.Abs(a);

}

else

{

result = -Math.Abs(a);

}

return result;

}

/*************************************************************

Служебная подпрограмма: вычисление максимума

***********************************************************/

private double mymax(double a, double b)

{

double result;

if( a>b )

{

result = a;

}

else

{

result = b;

}

return result;

}

/*************************************************************

Служебная подпрограмма:

вычисление Sqrt(A*A+B*B) безопасным методом, не приводящим к переполнению или потере точности.

*************************************************************/

private double pythag(double a, double b)

{

double result;

if( Math.Abs(a)<Math.Abs(b) )

{

result = Math.Abs(b)*Math.Sqrt(1+sqr(a/b));

}

else

{

result = Math.Abs(a)*Math.Sqrt(1+sqr(b/a));

}

return result;

}

/*************************************************************

Служебная подпрограмма:

*************************************************************/

private double sqr(double x)

{ return x*x; }

}

}

SetOfEquations.cs

using System;

using System.Collections;

namespace Diplom

{

/// <summary>

/// класс- множество уравнений

/// </summary>

public class SetOfEquations

{

//параметр конструктора n - размерность уравнений

public SetOfEquations(int n)

{

data = new ArrayList();

arrayOfNumbers = new ArrayList();

for(int i = 0;i<n+1;i++)

arrayOfNumbers.Add(new ArrayList());

num_eq = 0;

}

/// <summary>

/// массив уравнений

/// </summary>

private ArrayList data;

/// <summary>

/// массив списков уравнений, здесь хранятся только номера уравнений,

/// например первый элемент массива - это список содержащий номера уравнений,

/// где коэффициент при первой переменной не равен нулю и т.д.

/// </summary>

private ArrayList arrayOfNumbers;

/// <summary>


Подобные документы

  • Теоретические основы изучения площадей многоугольников. Вычисление площадей в древности. Различные подходы к изучению понятий "площадь", "многоугольник", "площадь многоугольника". Вычисление площади многоугольника по координатам его вершин. Формула Пика.

    дипломная работа [1,1 M], добавлен 24.02.2010

  • Задачи вычислительной линейной алгебры. Математическое моделирование разнообразных процессов. Решение систем линейных алгебраических уравнений большой размерности. Метод обратной матрицы и метод Гаусса. Критерии совместности и определенности системы.

    курсовая работа [220,0 K], добавлен 21.10.2011

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

    реферат [66,4 K], добавлен 14.08.2009

  • Задачи на элементы теории вероятности и математической статистики. Решение систем линейных уравнений методом Крамера; методом Гаусса. Закон распределения дискретной случайной величены. Построение выпуклого многоугольника, заданного системой неравенств.

    контрольная работа [96,1 K], добавлен 12.09.2008

  • Решение задач систем линейных алгебраических уравнений, матричных уравнений, методы Гаусса и Кремера. Нахождение длины и координат вектора и исчисление его скалярного произведения. Уравнение прямой и определение координат точек неравенства; пределы.

    контрольная работа [220,9 K], добавлен 06.01.2011

  • Метод Зейделя как модификация метода простой итерации. Особенности решения систем линейных алгебраических уравнений. Анализ способов построения графика функций. Основное назначение формул Симпсона. Характеристика модифицированного метода Эйлера.

    контрольная работа [191,3 K], добавлен 30.01.2014

  • Сущность итерационного метода решения задачи, оценка его главных преимуществ и недостатков. Разновидности итерационных методов решения систем линейных алгебраических уравнений: Якоби, Хорецкого и верхней релаксации, их отличия и возможности применения.

    курсовая работа [39,2 K], добавлен 01.12.2009

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

    курсовая работа [497,8 K], добавлен 27.03.2011

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

    презентация [987,7 K], добавлен 22.11.2014

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

    лабораторная работа [489,3 K], добавлен 28.10.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.