Устройство управления асинхронными двигателями станка с числовым программным управлением
Выбор и обоснование выбора среды разработки. Разработка алгоритма работы программы, проектирование системы меню. Общее описание программы: назначение и область применения, интерфейс, требования к аппаратным и программным ресурсам, тестирование и листинг.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 20.05.2013 |
Размер файла | 543,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Пояснительная записка
к курсовой работе
Устройство управления асинхронными двигателями станка с числовым программным управлением
Введение
Решение систем линейных алгебраических уравнений - одна из основных задач вычислительной линейной алгебры. От умения эффективно решать такие системы часто зависит сама возможность математического моделирования самых разнообразных процессов с применением ЭВМ. Значительная часть численных методов решения различных (в особенности - нелинейных) задач включает в себя решение систем линейных уравнений как элементарный шаг соответствующего алгоритма.
В данной курсовой работе был разработан программный продукт, предназначенный для решения систем линейных алгебраических уравнений методом Гаусса и Крамера.
Решение систем уравнений, содержит четко сформулированный алгоритм для проведения вычислений.
Весьма существенным преимуществом такого программного продукта является способность предотвращать ошибки человеческого фактора, которые могут возникнуть при вводе информации. Это обусловливается тем, что программа осуществляет проверку на наличие таких ошибок. Если же такие ошибки возникли, то на экран будет выведено предупреждение о неправильном вводе, и пользователю будет предоставлена возможность повторить ввод.
Кроме того, метод в электронном виде достаточно компактен, не имеет больших системных требований, а также рассчитан на широкую аудиторию пользователей.
1. Анализ задачи
1.1 Описание предметной области
Система уравнений - это условие, состоящее в одновременном выполнении нескольких уравнений относительно нескольких (или одной) переменных.
Решением системы уравнений называется упорядоченный набор чисел - значений неизвестных, при подстановке которых каждое уравнение системы обращается в верное равенство.
Системой линейных алгебраических уравнений (СЛАУ) называется система вида:
Упорядоченный набор значений называется решением системы, если при подстановке в уравнения все уравнения превращаются в тождество.
Задачи, соответствующие современным задачам на составление и решение систем уравнений с несколькими неизвестными, встречаются еще в вавилонских и египетских рукописях II века до н.э., а также в трудах древнегреческих, индийских и китайских мудрецов. В китайском трактате «Математика в девяти книгах» словесно изложены правила решения систем уравнений, были замечены некоторые закономерности при решении.
Методы решения системы уравнений зависят от типа системы. Например, решения систем линейных алгебраических уравнений хорошо известны (метод Крамера, метод Гаусса, матричный метод, метод итераций и т.д.). Для нелинейных же систем общего аналитического решения не найдено, они решаются разного рода численными методами. Аналогично дело обстоит и с системами дифференциальных уравнений.
Системы линейных уравнений широко используются в задачах экономики, физики, химии и других науках.
Решение систем линейных алгебраических уравнений - одна из основных задач вычислительной линейной алгебры. Хотя задача решения именно системы линейных уравнений сравнительно редко представляет самостоятельный интерес для прикладных задач, но от умения эффективно решать данные системы часто зависит сама возможность математического моделирования самых разнообразных процессов с применением ЭВМ. Значительная часть численных методов решения различных (в особенности - нелинейных) задач включает в себя решение систем линейных уравнений как элементарный шаг соответствующего алгоритма.
1.2 Информационная база задачи
Рассмотрим методы, которые будут использоваться в программе.
Метод Гаусса - классический метод решения системы линейных алгебраических уравнений (СЛАУ). Это метод последовательного исключения переменных, когда с помощью элементарных преобразований система уравнений приводится к равносильной системе треугольного вида, из которой последовательно, начиная с последних (по номеру) переменных, находятся все остальные переменные[2].
Пусть исходная система выглядит следующим образом
Матрица называется основной матрицей системы, - столбцом свободных членов.
Тогда согласно свойству элементарных преобразований над строками основную матрицу этой системы можно привести к ступенчатому виду (эти же преобразования нужно применять к столбцу свободных членов):
При этом будем считать, что базисный минор (ненулевой минор максимального порядка) основной матрицы находится в верхнем левом углу, то есть в него входят только коэффициенты при переменных [3].
Тогда переменные называются главными переменными. Все остальные называются свободными.
Если хотя бы одно число, где, то рассматриваемая система несовместна, т.е. у неё нет ни одного решения.
Пусть для любых.
Перенесём свободные переменные за знаки равенств и поделим каждое из уравнений системы на свой коэффициент при самом левом (, где - номер строки):
,
где
Если свободным переменным системы (2) придавать все возможные значения и решать новую систему относительно главных неизвестных снизу вверх (то есть от нижнего уравнения к верхнему), то мы получим все решения этой СЛАУ. Так как эта система получена путём элементарных преобразований над исходной системой (1), то по теореме об эквивалентности при элементарных преобразованиях системы (1) и (2) эквивалентны, то есть множества их решений совпадают.
Метод Крамера - способ решения квадратных систем линейных алгебраических уравнений с ненулевым определителем основной матрицы (причём для таких уравнений решение существует и единственно). Назван по имени Габриэля Крамера (1704-1752), придумавшего метод.
Для системы линейных уравнений с неизвестными (над произвольным полем)
с определителем матрицы системы, отличным от нуля, решение записывается в виде
(i-ый столбец матрицы системы заменяется столбцом свободных членов).
В другой форме правило Крамера формулируется так: для любых коэффициентов c1, c2, …, cn справедливо равенство:
В этой форме формула Крамера справедлива без предположения, что отлично от нуля, не нужно даже, чтобы коэффициенты системы были бы элементами целостного кольца (определитель системы может быть даже делителем нуля в кольце коэффициентов). Можно также считать, что либо наборы и, либо набор состоят не из элементов кольца коэффициентов системы, а какого-нибудь модуля над этим кольцом. В этом виде формула Крамера используется, например, при доказательстве формулы для определителя Грама и Леммы Накаямы.
1.3 Постановка задачи
Целью создания программного продукта является автоматизация процесса решения систем уравнений.
К задачам линейной алгебры относятся задачи: решения систем линейных алгебраических уравнений (СЛАУ), нахождения обратных матриц, вычисления определителей матриц, нахождения собственных векторов и собственных чисел матриц. Как показывают исследования, 75% всех расчетных математических задач приходится на решение СЛАУ. Это объясняется тем, что большинство моделей физических систем сами по себе являются линейными. К системам линейных алгебраических уравнений сводятся после дискретизации системы дифференциальных и интегральных уравнений. Линейные алгебраические уравнения являются также результатом локальной линеаризации систем нелинейных уравнений.
Несмотря на большие теоретические достижения в области решения СЛАУ и бурный рост вычислительных мощностей современных ЭВМ, проблема конструирования и исследования быстрых алгоритмов решения СЛАУ продолжает оставаться актуальной. Возникающие практические задачи требуют от вычислительных методов все большей точности и надежности. Поэтому можно говорить о постоянном дефиците машинных ресурсов, который стимулирует как постоянное наращивание вычислительных мощностей, так и разработку новых вычислительных алгоритмов. Причем, наибольший эффект дают алгоритмы, учитывающие особенности структуры матриц коэффициентов решаемых задач: ленточность, блочность, разреженность.
Численные методы решения СЛАУ делятся на две большие группы: конечные (точные) и приближенные (итерационные).
Конечными (точными) методами называются такие методы, в которых решение получается за конечное число элементарных арифметических операций, зависящее только от порядка системы n. Если элементы исходной матрицы A и вектора правой части B являются целыми или рациональными числами, представленными в виде обыкновенных дробей, и все действия выполняются точно по правилам действий над обыкновенными дробями, то результат будет абсолютно точным. Отсюда и второе название этих методов точные. Однако при произвольном задании элементов матрицы A и вектора правой части B решение, полученное за конечное число шагов, уже не будет абсолютно точным. Его точность будет определяться точностью выполнения арифметических операций на данной ЭВМ.
В приближенных, или итерационных, методах решение получается в результате последовательного приближения, начиная от некоторого начального заданного значения. Количество шагов, приводящее к решению, заранее неизвестно и зависит как от типа решаемой системы, так и от выбора вектора начального приближения.
Метод Гаусса и Крамера, которые рассматриваются в работе, относится к точным методам.
2. Проектирование задачи
2.1 Выбор и обоснование выбора среды разработки
В данной курсовой работе использовался язык программирования Delphi.
Delphi - императивный, структурированный, объектно-ориентированный язык программирования, диалект Object Pascal. Начиная со среды разработки Delphi 7.0, в официальных документах Borland стала использовать название Delphi для обозначения языка Object Pascal. Начиная с 2007 года уже язык Delphi (производный от Object Pascal) начал жить своей самостоятельной жизнью и претерпевал различные изменения, связанные с современными тенденциями (например, с развитием платформы.NET) развития языков программирования: появились class helpers, перегрузки операторов и другое.
Изначально среда разработки Delphi была предназначена исключительно для разработки приложений Microsoft Windows, затем был реализован вариант для платформ Linux (как Kylix), однако после выпуска в 2002 году Kylix 3 его разработка была прекращена, и вскоре было объявлено о поддержке Microsoft.NET.
Реализация среды разработки проектом Lazarus (Free Pascal, компиляция в режиме совместимости с Delphi) позволяет использовать его для создания приложений на Delphi для таких платформ, как Linux, Mac OS X и Windows CE.
Также предпринимались попытки использования языка в проектах GNU (например, Notepad GNU) и написания компилятора.
2.2 Средство разработки
Object Pascal - результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль, начиная с версии 5.5, добавил в Паскаль объектно-ориентированные свойства, а в Object Pascal - динамическую идентификацию типа данных с возможностью доступа к метаданным классов (то есть к описанию классов и их членов) в компилируемом коде, также называемом интроспекцией - данная технология получила обозначение RTTI. Так как все классы наследуют функции базового класса TObject, то любой указатель на объект можно преобразовать к нему, после чего воспользоваться методом ClassType и функцией TypeInfo, которые и обеспечат интроспекцию.
Также отличительным свойством Object Pascal от С++ является то, что объекты по умолчанию располагаются в динамической памяти. Однако можно переопределить виртуальные методы NewInstance и FreeInstance класса TObject. Таким образом, абсолютно любой класс может осуществить «желание» «где хочу - там и буду лежать». Соответственно организуется и «многокучность».
Object Pascal (Delphi) является результатом функционального расширения Turbo Pascal.
Delphi оказал огромное влияние на создание концепции языка C# для платформы.NET. [источник не указан 361 день] Многие его элементы и концептуальные решения вошли в состав С#. Одной из причин называют переход Андерса Хейлсберга, одного из ведущих разработчиков Дельфи, из компании Borland Ltd. в Microsoft Corp.
Версия 8 способна генерировать байт-код исключительно для платформы.NET. Это первая среда, ориентированная на разработку мультиязычных приложений (лишь для платформы.NET);
Последующие версии (обозначаемые годами выхода, а не порядковыми номерами, как это было ранее) могут создавать как приложения Win32, так и байт-код для платформы.NET.
Delphi for.NET - среда разработки Delphi, а также язык Delphi (Object Pascal), ориентированные на разработку приложений для.NET.
Первая версия полноценной среды разработки Delphi для.NET - Delphi 8. Она позволяла писать приложения только для.NET. Delphi 2006 поддерживает технологию MDA с помощью ECO (Enterprise Core Objects) версии 3.0.
В марте 2006 года компания Borland приняла решение о прекращении дальнейшего совершенствования интегрированных сред разработки JBuilder, Delphi и C++ Builder по причине убыточности этого направления. Планировалась продажа IDE-сектора компании. Группа сторонников свободного программного обеспечения организовала сбор средств для покупки у Borland прав на среду разработки и компилятор.
Однако в ноябре того же года было принято решение отказаться от продажи IDE бизнеса. Тем не менее, разработкой IDE продуктов теперь будет заниматься новая компания - CodeGear, которая будет финансово полностью подконтрольна Borland.
В августе 2006 года Borland выпустил облегченную версию RAD Studio под именем Turbo: Turbo Delphi (для Win32 и.NET), Turbo C#, Turbo C++.
В марте 2008 года было объявлено о прекращении развития этой линейки продуктов.
В марте 2007 года CodeGear порадовала пользователей обновленной линейкой продуктов Delphi 2007 for Win32 и выходом совершенно нового продукта Delphi 2007 for PHP.
В июне 2007 года CodeGear представила свои планы на будущее, то есть опубликовала так называемый roadmap[6].
Embarcadero RAD Studio 2010
25 августа 2008 года компания Embarcadero, новый хозяин CodeGear, опубликовала пресс-релиз на Delphi for Win32 2009 [7]. Версия привнесла множество нововведений в язык, как то:
По умолчанию полная поддержка Юникода во всех частях языка, VCL и RTL; замена обращений ко всем функциям Windows API на юникодные аналоги (то есть MessageBox вызывает MessageBoxW, а не MessageBoxA).
Обобщённые типы, они же generics.
Анонимные методы.
Новая директива компилятора $POINTERMATH [ON|OFF].
Функция Exit теперь может принимать параметры в соответствии с типом функции.
Вышедшая в 2011 году версия Delphi XE2 добавила компилятор Win64 и кросс-компиляцию для операционных систем фирмы Apple.
2.3 Разработка алгоритма работы программы
алгоритм программа интерфейс аппаратный
Для решения поставленной задачи необходимо, чтобы функционал программы мог поддерживать следующие функции:
· Сохранение матриц
· Открытие сохраненных матриц
· Очистка рабочего поля
· Автоматическое заполнение полей матрицы для теста программы
· Окно выбора способа решения (Метод Крамера / Метод Гаусса)
· Выбор размерности матрицы
· Информация о программе
В программе будут использоваться следующие процедуры и функции:
· Процедура Getmatr_k для получения обработанной матрицы для метода Крамера
procedure Getmatr_k (wout: Integer; Var m: matr_k); // Процедура получения
var i, j: Integer; // матрицы для метода Крамера
begin
for i:= 1 to nk do
for j:= 1 to nk do
if j <> wout then m [i, j]:= ak [i, j]
else m [i, j]:= ak [i, Succ(nk)]
end;
· Функция Det для решения по методу Крамера
function Det (ak: matr_k; nk: integer): Double; // Функция решения метода Крамера
var i, j, k: Integer; d: Double;
const
Eps = 10E-6;
begin
for i:= 1 to Pred(nk) do
begin
if Abs (ak[i, i]) < Eps then
begin
Det:= 0.0; Exit
end;
for j:= Succ(i) to nk do
begin
d:= ak [j, i] / ak [i, i];
for k:= i to nk do
ak [j, k]:= ak [j, k] - d * ak [i, k];
end;
end;
d:= 1.0;
for i:= 1 to nk do
d:= d * ak [i, i];
Det:= d
end;
· Необходимый код для решения методом Гаусса
Begin
for I:= 0 to n - 1 do b [i + 1]:= StrToFloatDef (StringGrid2. Cells [0, i], 0);
// Прямой ход - исключение переменных
for i:=1 to n-1 do
for j:=i+1 to n do
begin
a [j, i]:=-a [j, i]/a [i, i];
for k:=i+1 to n do
a [j, k]:=a [j, k]+a [j, i]*a [i, k];
b[j]:=b[j]+a [j, i]*b[i]
end;
x[n]:=b[n]/a [n, n];
// Обратный ход - нахождение корней
for i:=n-1 downto 1 do
begin
h:=b[i];
for j:=i+1 to n do h:=h-x[j]*a [i, j];
x[i]:=h/a [i, i]
end;
// Вывод результата
for i:=1 to n do ListBox1. Items. Append ('x(' + IntToStr(i) + ') = ' + FloatToStr (x[i]));
End
2.4 Проектирование системы меню
Система меню должна быть проста и интуитивно понятна. Она будет содержать следующие пункты:
· Файл
· Открыть - Открытие сохранённой матрицы;
· Сохранить - Сохранение введённой матрицы;
· Выход - Выход из программы;
· Правка
§ Заполнить - Произвольное заполнение матриц для теста;
§ Очистить - Очитка всех полей;
§ Справка
§ О программе - информация о программе
3. Описание программы
3.1 Назначение и область
Использование данного программного продукта возможно в сфере образования в виде вспомогательной программы для школьников и студентов при изучении метода Гаусса и Крамера, для автоматизации в решении СЛАУ, а также для самоконтроля.
Человек все чаще прибегает к использованию компьютера для того, чтобы в короткие сроки, и с максимальной эффективностью решать поставленные задачи. Эта программа может выявлять ошибки, к тому же, она в своих расчетах не содержит долю человеческого фактора, что тем самым приводит к более точным расчетам. В работе такие системы способны функционировать без вмешательства человека, осуществлять расчеты самостоятельно, только нуждаясь во вводе информации пользователем.
3.2 Описание интерфейса
Интерфейс программы содержит меню для открытия и сохранения матриц, кнопку выхода из программы, кнопку заполнения и очистки областей окон, меню выбора способа решения матриц и кнопка для произведения решений.
Рисунок 1 - Интерфейс программы
3.3 Требование к аппаратным и программным ресурсам
Программ обладает простейшими функциями для решения поставленной задачи, следовательно требования к программным ресурсам будут минимальны.
4. Тестирование
Для тестирования программного продукта будем использовать систему:
Рисунок 2 - Тестирование - Метод Гаусса
Рисунок 3 - Тестирование - Метод Крамера
Как видим, в двух методах программа показывает одинаковые результаты.
Для проверки результата вопрользуемся интернет-ресурсом www.math.semestr.ru
Рисунок 4 - Интернет-ресурс www.math.semestr.ru
В результате получилось следующее:
Решение СЛАУ методом Жордано-Гаусса.
Запишем систему в виде:
Последовательно будем выбирать разрешающий элемент РЭ, который лежит на главной диагонали матрицы.
Разрешающий элемент равен (41).
На месте разрешающего элемента получаем 1, а в самом столбце записываем нули.
Все остальные элементы матрицы, включая элементы столбца B, определяются по правилу прямоугольника.
Для этого выбираем четыре числа, которые расположены в вершинах прямоугольника и всегда включают разрешающий элемент РЭ.
НЭ = СЭ - (А*В)/РЭ
РЭ - разрешающий элемент (41), А и В-элементы матрицы, образующие прямоугольник с элементами СТЭ и РЭ.
Представим расчет каждого элемента в виде таблицы:
x1 |
x2 |
x3 |
x4 |
B |
|
41 / 41 = 1 |
2 / 41 = 0.0488 |
38 / 41 = 0.93 |
32 / 41 = 0.78 |
13 / 41 = 0.32 |
|
Разрешающий элемент равен (10.07).
На месте разрешающего элемента получаем 1, а в самом столбце записываем нули.
Все остальные элементы матрицы, включая элементы столбца B, определяются по правилу прямоугольника.
Для этого выбираем четыре числа, которые расположены в вершинах прямоугольника и всегда включают разрешающий элемент РЭ.
Разрешающий элемент равен (-66.44).
На месте разрешающего элемента получаем 1, а в самом столбце записываем нули.
Все остальные элементы матрицы, включая элементы столбца B, определяются по правилу прямоугольника.
Для этого выбираем четыре числа, которые расположены в вершинах прямоугольника и всегда включают разрешающий элемент РЭ.
Разрешающий элемент равен (-22.71).
На месте разрешающего элемента получаем 1, а в самом столбце записываем нули.
Все остальные элементы матрицы, включая элементы столбца B, определяются по правилу прямоугольника.
Для этого выбираем четыре числа, которые расположены в вершинах прямоугольника и всегда включают разрешающий элемент РЭ.
x1 = -0.46
x2 = -0.5
x3 = 2.21
x4 = -1.6
Как видим, значения, полученные в нашей программе такие, только высчитаны с большей точностью.
5. Применение
5.1 Установка и условия использования
На данный момент программа предоставляется в виде исполняемого exe файла и не требует установки. Также она является совершенно бесплатной и может использоваться любым пользователем.
5.2 Демонстрационный пример работы
Рисунок 5 - Демонстрация программы
Заключение
В процессе написания курсовой работы был создан программный продукт для реализации алгоритма решения систем линейных уравнений с помощью персонального компьютера.
Достоинства используемых методов, а также программы состоят в том, что с их помощью можно решать систем линейных уравнений быстро и с большой точностью.
Интерфейс программы лёгок, интуитивно понятен и доступен штатному пользователю.
Список использованной литературы
1. Ильин В.А., Позняк Э.Г. Линейная алгебра: Учебник для вузов. - 6-е изд., стер. - М.: ФИЗМАТЛИТ, 2004. - 280 с.
2. Амосов А.А., Дубинский Ю.А., Копченова Н.П. Вычислительные методы для инженеров. - М.: Мир, 1998.
3. Бахвалов Н.С., Жидков Н.П., Кобельков Г.Г. Численные методы. - 8-е изд. - М.: Лаборатория Базовых Знаний, 2000.
4. Волков Е.А. Численные методы. - М.: Физматлит, 2003.
5. Корн Г., Корн Т. Справочник по математике для научных работников и инженеров. - М.: Наука, 1970. - С. 575-576.
6. Кремер Н.Ш., Путко Б.А., Тришин И.М., Фридман М.Н. Высшая математика для экономистов / Под ред. Н.Ш. Кремера. - 3-е изд. - М.: ЮНИТИ-ДАНА, 2007. - 479 с. - ISBN 5-238-00991-7
7. Нил Дж. Рубенкинг. Язык программирования Delphi для «чайников». Введение в Borland Delphi 2006 = Delphi for Dummies. - М.: Диалектика, 2007. - 336 с. - ISBN 0-7645-0179-8
8. Хавьер Пашеку. Программирование в Borland Delphi 2006 для профессионалов = Delphi for.NET Developer's Guide. - М.: Вильямс, 2006. - 944 с. - ISBN 0-672-32443-X
9. А.Н. Вальвачев, К.А. Сурков, Д.А. Сурков, Ю.М. Четырько. Программирование на языке Delphi. Учебное пособие. - 2005.
Приложение
Листинг программы
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, Menus;
const MaxDimension = 10;
type
Vector = array [1..MaxDimension] of Double;
Matrix = array [1..MaxDimension] of Vector;
Equation = Array [1. MaxDimension, 1. Succ(MaxDimension)] Of Double;
matr_k = Array [1. MaxDimension, 1. MaxDimension] Of Double;
TForm3 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
Button1: TButton;
Label2: TLabel;
Label3: TLabel;
ListBox1: TListBox;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
ComboBox1: TComboBox;
Label4: TLabel;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedure Edit1Change (Sender: TObject);
procedure Button1Click (Sender: TObject);
procedure FormCreate (Sender: TObject);
procedure N9Click (Sender: TObject);
procedure N3Click (Sender: TObject);
procedure ComboBox1Change (Sender: TObject);
procedure N5Click (Sender: TObject);
procedure N6Click (Sender: TObject);
procedure N7Click (Sender: TObject);
procedure N8Click (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form3: TForm3;
ak: Equation;
nk: integer;
implementation
{$R *.dfm}
procedure Getmatr_k (wout: Integer; Var m: matr_k); // Процедура получения
var i, j: Integer; // матрицы для метода Крамера
begin
for i:= 1 to nk do
for j:= 1 to nk do
if j <> wout then m [i, j]:= ak [i, j]
else m [i, j]:= ak [i, Succ(nk)]
end;
function Det (ak: matr_k; nk: integer): Double; // Функция решения метода Крамера
var i, j, k: Integer; d: Double;
const
Eps = 10E-6;
begin
for i:= 1 to Pred(nk) do
begin
if Abs (ak[i, i]) < Eps then
begin
Det:= 0.0; Exit
end;
for j:= Succ(i) to nk do
begin
d:= ak [j, i] / ak [i, i];
for k:= i to nk do
ak [j, k]:= ak [j, k] - d * ak [i, k];
end;
end;
d:= 1.0;
for i:= 1 to nk do
d:= d * ak [i, i];
Det:= d
end;
procedure TForm3. Button1Click (Sender: TObject); // Кнопка Решить
var a: Matrix; // Метод Гаусса
b, x: Vector;
h, d, Determ: Double;
i, j, k, n:integer;
mx: matr_k;
const
Eps = 10E-6;
begin
ListBox1. Clear;
// Ввод данных
// Размерность системы
n:= StrToIntDef (Text, StringGrid1. ColCount);
// Коэффициенты
for j:= 0 to n - 1 do
for i:= 0 to n - 1 do
a [i + 1, j + 1]:= StrToFloatDef (StringGrid1. Cells [j, i], 0);
// Правая часть уравнения
If ComboBox1. ItemIndex=0 then
Begin
for I:= 0 to n - 1 do b [i + 1]:= StrToFloatDef (StringGrid2. Cells [0, i], 0);
// Прямой ход - исключение переменных
for i:=1 to n-1 do
for j:=i+1 to n do
begin
a [j, i]:=-a [j, i]/a [i, i];
for k:=i+1 to n do
a [j, k]:=a [j, k]+a [j, i]*a [i, k];
b[j]:=b[j]+a [j, i]*b[i]
end;
x[n]:=b[n]/a [n, n];
// Обратный ход - нахождение корней
for i:=n-1 downto 1 do
begin
h:=b[i];
for j:=i+1 to n do h:=h-x[j]*a [i, j];
x[i]:=h/a [i, i]
end;
// Вывод результата
for i:=1 to n do ListBox1. Items. Append ('x(' + IntToStr(i) + ') = ' + FloatToStr (x[i]));
End Else
Begin
nk:=n;
for j:= 0 to nk - 1 do
for i:= 0 to nk - 1 do
ak [i + 1, j + 1]:= StrToFloatDef (StringGrid1. Cells [j, i], 0);
for i:=0 to nk-1 do
ak [i + 1, nk+1]:= StrToFloatDef (StringGrid2. Cells [0, i], 0);
Getmatr_k (Succ(nk), mx);
Determ:= Det (mx, nk);
If Abs(Determ) < 1E-6 Then
Writeln ('matr_k determinant = 0')
Else
For i:= 1 To nk Do
Begin
Getmatr_k (i, mx);
ListBox1. Items. Append ('x(' + IntToStr(i) + ') = ' + FloatToStr (Det(mx, nk) / Determ))
End;
End;
end;
procedure TForm3. Edit1Change (Sender: TObject); // Размерность матрицы
begin
with StringGrid1, Edit1 do
begin
ColCount:= StrToIntDef (Text, 3);
RowCount:= StrToIntDef (Text, 3);
end;
with StringGrid2, Edit1 do
RowCount:= StrToIntDef (Text, 3)
end;
procedure TForm3. FormCreate (Sender: TObject); // Начальные параметры программы
var i, j: integer;
begin
// Заполнить коэф уравнения
Form3. Width:=486;
Form3. Height:=426;
Randomize;
for I:= 0 to StrToIntDef (Text, StringGrid1. ColCount) - 1 do
for J:= 0 to StrToIntDef (Text, StringGrid1. RowCount) - 1 do
StringGrid1. Cells [I, J]:= IntToStr (Random(100));
for I:= 0 to StrToIntDef (Text, StringGrid2. RowCount) - 1 do
StringGrid2. Cells [0, I]:= IntToStr (Random(100))
end;
procedure TForm3.N9Click (Sender: TObject); // Кнопка Очистка
var
i:byte;
begin
with StringGrid1 do
for i:=0 to ColCount-1 do
Cols[i].Clear;
with StringGrid2 do
for i:=0 to ColCount-1 do
Cols[i].Clear;
ListBox1. Clear;
end;
procedure TForm3.N3Click (Sender: TObject); // Кнопка Заполнить
var i, j: integer;
begin
// Заполнить коэф уравнения
Randomize;
for I:= 0 to StrToIntDef (Text, StringGrid1. ColCount) - 1 do
for J:= 0 to StrToIntDef (Text, StringGrid1. RowCount) - 1 do
StringGrid1. Cells [I, J]:= IntToStr (Random(50));
for I:= 0 to StrToIntDef (Text, StringGrid2. RowCount) - 1 do
StringGrid2. Cells [0, I]:= IntToStr (Random(50))
end;
procedure TForm3. ComboBox1Change (Sender: TObject); // Выбор методов решения
begin
If ComboBox1. ItemIndex=0 then
ListBox1. Clear
Else
ListBox1. Clear;
end;
procedure TForm3.N5Click (Sender: TObject); // Кнопка «О программе»
begin
MessageBox (Handle, PChar ('Решение СЛАУ 1.0'+#13#10+#13+'Автор: Илья Струневский')
PChar ('О программе'), MB_ICONINFORMATION+MB_OK);
end;
procedure TForm3.N6Click (Sender: TObject); // Кнопка Открыть
var
f: textfile;
temp, x, y: integer;
tempstr: string;
begin
if not OpenDialog1. Execute then
Exit;
assignfile (f, OpenDialog1. FileName);
reset(f);
readln (f, temp);
stringgrid1.colcount:= temp;
Edit1. Text:=inttostr(temp);
readln (f, temp);
stringgrid1.rowcount:= temp;
for X:= 0 to stringgrid1.colcount - 1 do
for y:= 0 to stringgrid1.rowcount - 1 do
begin
readln (F, tempstr);
stringgrid1.cells [x, y]:= tempstr;
end;
readln (f, temp);
stringgrid2.rowcount:= temp;
for y:= 0 to stringgrid2.rowcount - 1 do
begin
readln (F, tempstr);
stringgrid2.cells [0, y]:= tempstr;
end;
closefile(f);
end;
procedure TForm3.N7Click (Sender: TObject); // Кнопка Сохранить
var
f: textfile;
x, y: integer;
begin
if not SaveDialog1. Execute then
Exit;
assignfile (f, SaveDialog1. FileName);
rewrite(f);
writeln (f, stringgrid1.colcount);
writeln (f, stringgrid1.rowcount);
for X:= 0 to stringgrid1.colcount - 1 do
for y:= 0 to stringgrid1.rowcount - 1 do
writeln (F, stringgrid1.cells [x, y]);
writeln (f, stringgrid2.rowcount);
for y:= 0 to stringgrid2.rowcount - 1 do
writeln (F, stringgrid2.cells [0, y]);
closefile(f);
end;
procedure TForm3.N8Click (Sender: TObject); // Кнопка Выход
begin
Form3. Close;
end;
End.
Размещено на Allbest.ru
Подобные документы
Метод последовательных приближений. Требования к аппаратным ресурсам и программным средствам разработки. Руководство пользователя, тестовые примеры. Тестирование приложения: ввод вычислений, рисование графика функции. Особенности применения программы.
курсовая работа [773,7 K], добавлен 27.08.2012Выбор и обоснование архитектуры приложения, требования к его функциональности, описание возможностей и сфера практического применения. Технологические средства разработки и отладки. Проектирование и разработка программы, ее тестирование и листинг.
дипломная работа [2,2 M], добавлен 13.07.2015Конструктивная компоновка универсальных токарно-винторезных станков и токарных станков с числовым программным управлением (ЧПУ), их особенности и отличия. Наименование основных узлов и механизмов станка модели CC-D6000E, их назначение; управление.
практическая работа [328,1 K], добавлен 05.03.2011Функциональные возможности программного продукта. Требования к программным и аппаратным средствам. Обоснование выбора наилучшей модели для прогнозирования стоимостных показателей объектов. Разработка пользовательского интерфейса и модулей программы.
дипломная работа [2,3 M], добавлен 24.06.2013Требования к техническим, программным средствам разработки и функционированию программы. Обоснование выбранного языка программирования. Описание алгоритма решения задачи, тестирование ее основных функций. Понятие дружелюбного пользовательского интерфейса.
курсовая работа [85,9 K], добавлен 31.10.2014Сущность понятия "код блюда". Алгоритмы обучения и использования программы. Логика работы программы. Общий интерфейс программы. Последовательность обучения программе Lota+. Интерфейс программы в момент выбора параметров и получения общего результата.
курсовая работа [563,6 K], добавлен 01.12.2009Переменные типа integer, real, их функции. Общее понятие о массиве, файлы для Pascal. Информационный и информанизационный набор списка. Реализация и тестирование программы. Выбор базы данных, внесение имени, меню. Блок-схема алгоритма, листинг программы.
курсовая работа [306,0 K], добавлен 04.02.2013Обоснование необходимости разработки виртуального магазина. Описание форм программы. Требования к аппаратному и программному обеспечению. Тестирование и выявление ошибок. Область применения программы. Расчет экономического эффекта проекта. Охрана труда.
дипломная работа [1,7 M], добавлен 20.12.2012Разработка управляющей программы для обработки детали на станке с числовым программным управлением 16К20ФЗТ02, оснащенном устройством "Электроника НЦ-31". Эскиз заготовки, обоснование метода ее получения. Технологический маршрут обработки детали.
курсовая работа [723,0 K], добавлен 19.10.2014Разработка функциональной и принципиальной схемы. Выбор управляющего контроллера. Описание МК PIC16F626, МК AVR, МК 51. Выбор элементной базы. Разработка управляющей программы. Описание алгоритма работы программы. Схема устройства, листинг программы.
курсовая работа [492,9 K], добавлен 28.12.2012