Расчет и оптимизация электрической цепи
Программная реализация методов вычислительной математики и их применения к расчету и оптимизации электрической схемы. Сущность первого и второго законов Кирхгофа. Компоненты, использованные для реализации интерфейса программы. Листинг программного кода.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 14.01.2014 |
Размер файла | 1,3 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство науки и образования Российской федерации
Государственное образовательное учреждение
Высшего профессионального образования
«Сибирский государственный индустриальный университет»
Институт информационных технологий и автоматизированных систем
Кафедра Автоматизации и Информационных Систем
КУРСОВАЯ РАБОТА
по дисциплине: «Программирование и основы алгоритмизации»
на тему: «Расчет и оптимизация электрической цепи»
Вариант №5
Выполнил: ст.гр. АТП-09
Иволин И.Е.
Проверил:
Митьков В.В.
Новокузнецк 2011
Введение
электрический схема кирхгоф программа
Многим приходилось решать системы уравнений, этот процесс очень трудоемкий, при котором можно допустить ошибки. С помощью компьютера, применения математического моделирования и методов вычислительной математики, этот процесс можно существенно ускорить, и освободить человека от длительных расчётов и траты своего свободного времени.
Данная курсовая работа охватывает три дисциплины: вычислительная математика, электротехника и технология программирования. Программа разработана на основе принципов объектно-ориентированного модульного программирования.
Задание курсовой работы заключается в программной реализации методов вычислительной математики и их применения к расчёту и оптимизации электрической схемы.
В курсовой работе используются методы вычислительной математики, теории оптимизации, анализа электрических цепей и современные методы программирования.
1. Постановка задачи
1.1 Данные
Для заданной схемы электрической цепи (рисунок 1) необходимо:
1) Рассчитать электрическую цепь:
а) Найти значение токов во всех ветвях.
б) Найти напряжение на нагрузке Q элементов, где Q - L4,C3.
2) Оптимизировать схему, варьируя параметрами R3 и C2, чтобы напряжение на нагрузке U*H(t)=15*sin(w*t+2р/3). Время для произведения задачи оптимизации 1 секунда с начала функционирования электрической схемы, время дискретизации 0,002 с.
Метод решения системы уравнений - Метод Гаусса.
Метод многомерной оптимизации - Хука-Дживса.
Исходные данные:
Идеальный источник напряжения:
u(t)=100*sin(wt), f=50Гц; Um=100В.
1) Элементы с постоянными характеристиками:
R1=500 Ом, R2=1000 Ом, R4=100 Ом;
С1=100 мкФ, R3=200 мкФ;
L1=1 мГн, L2=5 мГн;
2) Элементы с переменными характеристиками:
а) R3=[100Омч1000Ом], R3ном=500Ом;
б) С2=[20мкФч100мкФ], С2ном=50мкФ;
Рисунок 1 - схема замещения
1.2 Критерии
Критериями правильности выполнения задачи являются:
1. Проверка токов с помощью баланса мощности.
2. Целевая функция .
1.3 Ограничения
1. Целевая функция Q должна быть расчитана с заданной точностью
2. Параметры R3 и С2 могут принимать строго определенные значения.
1.4 Требования
Для заданной схемы электрической цепи необходимо:
1. Рассчитать электрическую цепь:
1.1. Найти значение токов во всех ветвях.
1.2. Найти напряжение на нагрузке Q элементов, где Q - определяемые вариантом принципиальные элементы.
2. Оптимизировать схему, варьируя параметрами R3 и С2, чтобы напряжение на нагрузке). Время для произведения задачи оптимизации выбрать 1 мин с начала функционирования электрической схемы, время дискретизации 0,1 с.
2. Теоретические основы расчета и оптимизации электрической цепи
2.1 Законы Кирхгофа
Основными законами, используемыми для анализа и расчета электрических цепей, являются первый и второй законы Кирхгофа.
2.1.1 Первый закон Кирхгофа
Данный закон является следствием закона сохранения заряда, согласно которому в любом узле заряд одного знака не может ни накапливаться, ни убывать. Согласно первому закону Кирхгофа алгебраическая сумма токов ветвей, сходящихся в узле, равна нулю
(1.1)
При этом токи, направленные от узла, следует брать со знаком плюс, а токи, направленные к узлу, -- со знаком минус.
2.1.2 Второй закон Кирхгофа
Данный закон является следствием закона сохранения энергии, в силу которого изменение потенциала в замкнутом контуре равно нулю. Изменение потенциала между двумя точками участка цепи характеризуется разностью потенциалов, которую можно измерить вольтметром. В электротехнике разность потенциалов между двумя любыми точками цепи принято называть напряжением. Поэтому согласно второму закону Кирхгофа алгебраическая сумма напряжений всех участков замкнутого контура равна нулю:
(1.2)
Применительно к схемам замещения с источниками э.д.с. второй закон Кирхгофа можно формулировать таким образом: алгебраическая сумма напряжений на резистивных элементах замкнутого контура равна алгебраической сумме э.д.с, входящих в этот контур:
(1.3)
При составлении уравнений (1.2) и (1.3) слагаемые берут со знаком плюс в случае, когда направление обхода контура совпадает с направлением соответственно напряжения, тока или э.д.с, в противном случае слагаемые берут со знаком минус.
Анализ и расчет любой электрической цепи можно провести на основании применения первого и второго законов Кирхгофа.
Рекомендуется следующий порядок составления уравнений по законам Кирхгофа: определяют число ветвей, узлов и независимых контуров, устанавливают число независимых уравнений по первому закону Кирхгофа, остальные уравнения составляют по второму закону Кирхгофа.
Для определения неизвестных токов в ветвях необходимо составить уравнения по первому и второму законам Кирхгофа, количество которых должно быть равно количеству неизвестных токов. По первому закону Кирхгофа можно составить у-1 независимых уравнений, где у - количество узлов цепи. Использовать все у уравнений невозможно, так как одно из них обязательно будет зависимым. Это связано с тем, что токи ветвей войдут в уравнения, составленные для всех у узлов, дважды, причем с разными знаками, поскольку один и тот же ток направлен от одного узла (имеет знак плюс в уравнении) к другому узлу (имеет знак минус). При сложении всех уравнений левая и правая части будут равны нулю, а это означает, что одно из уравнений можно получить суммированием у-1 уравнений и заменой знаков всех токов на противоположные. Таким образом, у-е уравнение всегда будет зависимым и поэтому использовать его для определения токов нельзя.
Количество уравнений, составляемых по первому закону Кирхгофа, равно количеству ветвей любого дерева графа рассматриваемой цепи, так как количество ветвей дерева равно у-1.
Количество уравнений, составляемых по второму закону Кирхгофа, должно быть равно количеству независимых контуров. Независимым называют контур, в который входит хотя бы одна новая ветвь. Очевидно, что каждая связь графа образует новый (независимый) контур, поэтому количество независимых контуров равно количеству связей графа, т. е. , где n -- общее количество ветвей цепи.
Если в результате решения уравнений, составленных по законам Кирхгофа, получатся отрицательные значения токов, то это означает, что истинные направления токов в ветвях цепи противоположны тем направлениям, для которых составлялись уравнения.
Правильность расчета токов в ветвях электрической цепи может быть проверена с помощью уравнения баланса мощностей источников и приемников электрической энергии:
(1.4)
В котором правая часть характеризует мощность пассивных приемников электрической энергии, а левая -- мощность активных элементов цепи. При составлении уравнения баланса мощностей следует иметь в виду, что в левой его части со знаком плюс записываются те слагаемые, для которых направления э.д.с. и тока совпадают. Если же направления э.д.с. и тока противоположны, то соответствующие слагаемые записываются со знаком минус в левой части уравнения или со знаком плюс в правой его части, что соответствует мощности активного приемника электрической энергии.
3. Оптимизация электрической схемы
3.1 Нахождение токов.
Сопротивления элементов и ветвей находятся по формулам:
3.1.1 Метод Гаусса
Метод Гаусса, также называемый методом исключения неизвестных, является наиболее распространенным методом решения систем линейных уравнений. Рассмотрим общую схему метода Гаусса для систем, имеющих единственное решение.
(2.1)
Предположим, что а11 ? 0 в системе. В противном случае можно поменять местами первое уравнение с уравнением, в котором коэффициент при неизвестном х1отличен от нуля. Разделим первое уравнение системы на а11. Оно примет вид:
x1+a12(1)x2+a12(1)x3+ …+a1n(1)xn=b1(1) (2.2)
где aij(1)=aij/a11, bi(1)=bi /a11.
Уравнение, с помощью которого преобразуют остальные уравнения, называют разрешающим уравнением, а коэффициент этого уравнения при неизвестном, исключаемом из остальных уравнений, - разрешающим (или главным) элементом. Умножим разрешающее уравнение (2.1) на а21и вычтем полученное уравнение из второго уравнения системы (2.2). Аналогично преобразуем остальные уравнения. В результате этих операций получим систему:
(2.3)
Где
(j=2,3,…n).
Естественно, что если какой-либо из коэффициентов aij окажется равным нулю, то j-е уравнение системы (2.1) войдет в систему (2.3) без изменений.
Теперь, оставив без изменения первое уравнение системы (2.3), можно сделать второе уравнение разрешающим и применить описанную процедуру к системе из n-1 уравнений, исключив неизвестное х2из третьего и последующих уравнений. Получим систему:
(2.4)
где
Продолжая в дальнейшем аналогичные вычисления, приведем систему (2.1) к эквивалентной системе
(2.5)
в которой матрица коэффициентов имеет треугольный вид. На этом заканчивается прямой ход решения системы линейных уравнений методом Гаусса.
При обратном ходе происходит последовательное исключение неизвестного хn, начиная с (n-l)-oгo уравнения и заканчивая первым.
Получаем
(2.6)
Затем исключаем неизвестное хп-1из уравнений с номером j (j=n - 2,...1) и т.д. Вычисления заканчиваются решением системы, имеющим вид
3.1.2 Метод Хука-Дживса
На разработку методов прямого поиска для определения минимума функций и переменных было затрачено много усилий. Методы прямого поиска являются методами, в которых используются только значения функции. Мы рассмотрим подробно лишь один из них. Практика показала, что этот метод эффективен и применим для широкого числа приложений. Рассмотрим функцию двух переменных. Ее линии постоянного уровня на рисунке 2, а минимум лежит в точке (x1*,x2*). Простейшим методом поиска является метод покоординатного спуска. Из точки А мы производим поиск минимума вдоль направления оси и, таким образом, находим точку В, в которой касательная к линии постоянного уровня параллельна оси. Затем, производя поиск из точки В направлении оси, получаем точку С, производя поиск параллельно оси, получаем точку D, и т. д. Таким образом, мы приходим к оптимальной точке. Очевидным образом эту идею можно применить для функций n-переменных.
Рисунок 2
Теоретически данный метод эффективен в случае единственного минимума функции. Но на практике он оказывается слишком медленным. Поэтому были разработаны более сложные методы, использующие больше информации на основании уже полученных значений функции.
Метод Хука-Дживса был разработан в 1961 году, но до сих пор является весьма эффективным и оригинальным. Поиск состоит из последовательности шагов исследующего поиска вокруг базисной точки, за которой в случае успеха следует поиск по образцу. Он применяется для решения задачи минимизирования функции без учета ограничений.
Описание этой процедуры представлено ниже:
А. Выбрать начальную базисную точку b1 и шаг длиной h1 для каждой переменной xj, j = 1, 2,…, n. В приведенной ниже программе для каждой переменной используется шаг h, однако указанная выше модификация тоже может оказаться полезной.
Б. Вычислить f(х) в базисной точке b1 с целью получения сведений о локальном поведении функции f(x). Эти сведения будут использоваться для нахождения подходящего направления поиска по образцу, с помощью которого можно надеяться достичь большего убывания значения функции. Фунцияf(x) в базисной точке b1, находится следующим образом:
1. Вычисляется значение функции f(b1)в базисной точке b1.
2. Каждая переменная по очереди изменяется прибавлением длины шага. Таким образом, мы вычисляем значение функции f(b1+h1e1), где e1 - единичный вектор в направлении оси x1. Если это приводит к уменьшению значения функции, то b1 заменяется на b1+h1e1. В противном случае вычисляется значение функции f (b1-h1e1), и если ее значение уменьшилось, то b1 заменяем на b1-h1e1. Если ни один из проделанных шагов не приводит к уменьшению значения функции, то точка b1 остается неизменной и рассматриваются изменения в направлении оси х2, т. е. находится значение функции f(b1+h2e2) и т. д. Когда будут рассмотрены все n переменные, мы будем иметь новую базисную точку b2.
3. Если b2=b1, т. е. уменьшение функции не было достигнуто, то исследование повторяется вокруг той же базисной точки b1, но с уменьшенной длиной шага. На практике удовлетворительным является уменьшение шага (шагов) в десять раз от начальной длины.
4. Если b2b1, то производится поиск по образцу.
В. При поиске по образцу используется информация, полученная в процессе исследования, и минимизация функции завершается поиском в направлении, заданном образцом. Эта процедура производится следующим образом:
1. Разумно двигаться из базисной точки b2 в направлении b2-b1, поскольку поиск в этом направлении уже привел к уменьшению значения функции. Поэтому вычислим функцию в точке образца
P1=b1+2(b2-b1).
В общем случае
Pi=bi+2(bi+1-bi).
2. Затем исследование следует продолжать вокруг точки Р1 (Рi) .
3. Если наименьшее значение на шаге В, 2 меньше значения в базисной точке b2 (в общем случае bi+1), то получают новую базисную точку b3 (bi+2), после чего следует повторить шаг В, 1. В противном случае не производить поиск по образцу из точки b2 (bi+1), а продолжить исследования в точке b2 (bi+1).
Г. Завершить этот процесс, когда длина шага (длины шагов) будет уменьшена до заданного малого значения.
3.1.3 Модифицированный метод Хука-Дживса
Этот метод нетрудно модифицировать и для учета ограничений. Было выдвинуто предложение, что для этого будет вполне достаточно при решении задачи минимизации присвоить целевой функции очень большое значение там, где ограничения нарушаются. К тому же такую идею просто реализовать с помощью программирования.
Нужно проверить, каждая ли точка, полученная в процессе поиска, принадлежит области ограничений. Если каждая, то целевая функция вычисляется обычным путем. Если нет, то целевой функции присваивается очень большое значение. Таким образом, поиск будет осуществляться снова в допустимой области в направлении к минимальной точке внутри этой области.
Далее представлены две блок-схемы метода Хука-Дживса.
В блок-схеме №1, демонстрирующей непосредственный алгоритм метода, производится поиск такой базисной точки, значение функции в которой было бы меньше значения, полученного в результате исследования. Также осуществляется контроль над значением шага поиска.
В блок-схеме №2 приведен алгоритм единичного исследования, результатом которого пользуются в блок-схеме №1. Производится пошаговое уточнение значения функции с контролем попадания этого значения в область определения функции.
Блок-схемы представлены ниже.
Блок-схема №1 - Метод Хука-Дживса
Блок-схема №2 - Единичное исследование
4. Расчет электрической цепи
Для нахождения значения токов во всех ветвях электрической цепи воспользуемся законами Кирхгофа.
Для заданной электрической цепи, схема замещения которой представлена на Рисунке 1 можно выделить четыре узла, три независимых контура и шесть ветвей. Обозначим токи и их направления в ветвях цепи через . Для определения неизвестных токов в ветвях необходимо составить уравнения по первому и второму законам Кирхгофа, количество которых должно быть равно количеству неизвестных токов.
и По первому закону Кирхгофа можно составить три независимых уравнения:
1.
2.
3.
и Для схемы цепи рисунок 1 надо составить три уравнения по второму закону Кирхгофа для трех независимых контуров:
1.
2.
3.
При составлении уравнений по второму закону Кирхгофа со знаком плюс записаны те слагаемые, в которых ток и э.д.с. имеют направления, совпадающие с направлением обхода контура. В итоге получаем систему уравнений: Используя выражения для сопротивлений , , и их последовательного соединения, получаем: ,
Полное сопротивление последовательного соединения определяется по формуле:
(4.1)
(4.2)
Таким образом, полное сопротивление последовательного соединения элементов:
Ом
рад
Аналогично:
Ом
рад
Ом
рад
Ом
рад
Подставив эти данные в систему уравнений состоящих из уравнений Кирхгофа по первому и второму закону получим значения токов:
A;
A;
-0.091229A;
A;
A;
Правильность расчёта токов в ветвях электрической цепи проверим с помощью баланса мощностей источников и приёмников:
28.678=30.915,
Т.к. баланс мощностей сошелся СЛАУ решено правильно!
Далее рассчитаем значение напряжения на нагрузке ? при номинальных параметрах электрической цепи.
Как видно из полученной функции, расчётное напряжение не соответствует заданному. Требуется оптимизировать значение напряжения, изменяя значения переменных параметров и .
5. Компьютерная реализация
5.1 Пользовательский интерфейс
Рисунок 3 - Пользовательский интерфейс
На рисунке 3 представлены компоненты, использованные для реализации интерфейса программы.
5.2 Видеокадры
Рисунок 4. Вид формы при запуске программы
Рисунок 5. Вид формы после нажатия на кнопку «Расчет»
Рисунок 7. Вид формы после нажатия на кнопку «Оптимизация»
Заключение
Результат данной работы хорошо демонстрирует преимущество машинного расчета над ручным. Ручной расчет системы из шести уравнений требует больших временных затрат, а оптимизация по нескольким параметрам вручную практически невозможна. Машинный расчет в таких ситуациях просто необходим, так как он позволяет сократить продолжительность вычислений и повысить их точность.
Литература
1) Р.Хук, Т.А.Дживс. Прямой поиск решения для числовых и статических проблем, 212-219 с., 1961.
2) Б.Банди. Методы оптимизации. - М., 1998 г.
3) Расчет и оптимизация электрической цепи: Методические указания к выполнению курсовой работы. / Сост.: М.В.Ляховец, С.П.Огнев, Кораблина Т.В.; СибГИУ. - Новокузнецк, 2007.
Приложение 1
Листинг программного кода
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Matrix, StdCtrls, Elements, Math, Grids, jpeg, ExtCtrls, Buttons;
type
TVector2 = record
x1, x2 : Double;
end;
type
TMainForm = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
GroupBox1: TGroupBox;
sgOptParam: TStringGrid;
GroupBox2: TGroupBox;
sgParam: TStringGrid;
GroupBox3: TGroupBox;
Panel4: TPanel;
Image: TImage;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
Panel5: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
sgData: TStringGrid;
Panel6: TPanel;
Label5: TLabel;
Label6: TLabel;
Edit1: TEdit;
BitBtn4: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure CalculateParameters;
procedure Calculate;
procedure Optimize;
function Vector(x1, x2 : Double) : TVector2;
function Func(vec: TVector2) : Double;
procedure Output(b : TVector2; func : Double);
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm: TMainForm;
m : TMatrix;
x,b : TVector;
Scheme : TScheme;
I1, I2, I3, I4, I5 : Double;
I : array[0..4] of Double;
P1, P2 : Double;
U : Double;
phi : double;
Z_R1C1C2, Z_R1C2, Z_R1R2R3C2, Z_R3, Z_R3R4C3L2, Z_C3L2 : Double;
Phi_R1C1C2, Phi_R1C2,Phi_R1R2R3C2, Phi_R3, Phi_R3R4C3L2, Phi_C3L2 : Double;
Epsilon : Double = 0.0000001;
p,b1, b2, tmp : TVector2;
f1, f2, fp : Double;
h : TVector2;
count : Integer =1;
implementation
{$R *.dfm}
procedure TMainForm.FormCreate(Sender: TObject);
var
i : Byte;
begin
Edit1.Text:= FloatToStr(Epsilon);
Scheme:= TScheme.Create;
with Scheme do
begin
Resistors[0].Resistance:= 500;
Resistors[1].Resistance:= 1000;
Resistors[2].Resistance:= 500;
Resistors[3].Resistance:= 100;
Condensators[0].Capacity:= 0.0001;
Condensators[1].Capacity:= 0.00005;
Condensators[2].Capacity:= 0.0002;
Inductances[0].Inductance:= 0.001;
Inductances[1].Inductance:= 0.005;
end;
b[0]:=100;
b[1]:=0;
b[2]:=0;
sgOptParam.Cells[0,0]:= '№ итерации';
sgOptParam.Cells[1,0]:= 'Сопротивление R3';
sgOptParam.Cells[2,0]:= 'Емкость C2';
sgOptParam.Cells[3,0]:= 'Целевая функция';
sgData.Cells[0,0]:= '№';
sgData.Cells[1,0]:= 'Сопротивление R';
sgData.Cells[2,0]:= 'Емкость C';
sgData.Cells[3,0]:= 'Индуктивность L';
for i:=1 to sgData.RowCount-1 do
sgData.Cells[0,i]:= IntToStr(i);
for i:=0 to 3 do
sgData.Cells[1,i+1]:= FloatToStr(Scheme.Resistors[i].Resistance);
for i:=0 to 2 do
sgData.Cells[2,i+1]:= FloatToStr(Scheme.Condensators[i].Capacity);
for i:=0 to 1 do
sgData.Cells[3,i+1]:= FloatToStr(Scheme.Inductances[i].Inductance);
sgParam.Cells[0,0]:='№';
sgParam.Cells[1,0]:='Сила тока I';
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
CalculateParameters;
Caption:= FloatToStr(P1) + ' '+ FloatToStr(P2) + ' ' + FloatToStr(U)+ ' ' + FloatToStr(phi);
end;
procedure TMainForm.CalculateParameters;
begin
Calculate;
m[0,0]:= Z_R1C1C2;
m[0,1]:= -Z_R1C2;
m[0,2]:= 0;
m[1,0]:= -Z_R1C2;
m[1,1]:= Z_R1R2R3C2;
m[1,2]:= -Z_R3;
m[2,0]:= 0;
m[2,1]:= -Z_R3;
m[2,2]:= Z_R3R4C3L2;
Gauss(x,b,m);
I1:= x[0];
I2:= x[0] - x[1];
I3:= -x[1];
I4:= x[1] - x[2];
I5:= -x[2];
I[0]:= I1;
I[1]:= I2;
I[2]:= I3;
I[3]:= I4;
I[4]:= I5;
P1:= 100*I1;
with Scheme do
P2:= I1*I1*Condensators[0].Resistance +
I2*I2*GetGeneralResistance(Resistors[0].Resistance, Condensators[1].Resistance, 0)+
I3*I3*Resistors[1].Resistance+
I4*I4*Resistors[2].Resistance+
I5*I5*GetGeneralResistance(Resistors[3].Resistance, Condensators[2].Resistance, Inductances[1].Resistance);
U:=I5*Z_C3L2;
end;
procedure TMainForm.Calculate;
begin
with Scheme do
begin
Z_R1C1C2:= GetGeneralResistance(Resistors[0].Resistance, Condensators[0].Resistance + Condensators[1].Resistance,0);
Z_R1C2:= GetGeneralResistance(Resistors[0].Resistance, Condensators[1].Resistance, 0);
Z_R1R2R3C2:= GetGeneralResistance(Resistors[0].Resistance + Resistors[1].Resistance + Resistors[2].Resistance, Condensators[1].Resistance, 0);
Z_R3:= Resistors[2].Resistance;
Z_R3R4C3L2:= GetGeneralResistance(Resistors[2].Resistance+Resistors[3].Resistance, Condensators[2].Resistance , Inductances[1].Resistance);
Z_C3L2:= GetGeneralResistance(0, Condensators[2].Resistance, Inductances[1].Resistance);
Phi_R1C1C2:= GetPhi(Resistors[0].Resistance, Condensators[0].Resistance + Condensators[1].Resistance,0);
Phi_R1C2:= GetPhi(Resistors[0].Resistance, Condensators[1].Resistance, 0);
Phi_R1R2R3C2:= GetPhi(Resistors[0].Resistance + Resistors[1].Resistance+ Resistors[2].Resistance, Condensators[1].Resistance, 0);
Phi_R3:= GetPhi(Resistors[2].Resistance, 0, 0);
Phi_R3R4C3L2:= GetPhi(Resistors[2].Resistance+Resistors[3].Resistance, Condensators[2].Resistance , Inductances[1].Resistance);
Phi_C3L2:= GetPhi(0, Condensators[2].Resistance, Inductances[1].Resistance);
end;
end;
procedure TMainForm.Optimize;
begin
b1:= Vector(500, 0.00005);
b2:= b1;
h:= Vector(1, 0.000001);
f1:= Func(b1);
inc(count);
Output(b1, f1);
while (h.x1 >= epsilon) and (h.x2 >= epsilon) do
begin
b2.x1:= b1.x1 + h.x1;
f2:= Func(b2);
if not(f2 < f1) then
begin
b2.x1:=b1.x1 - h.x1;
f2:= Func(b2);
if not(f2 < f1) then b2:=b1;
end;
b2.x2:= b1.x2 + h.x2;
f2:=Func(b2);
if not(f2 < f1) then
begin
b2.x2:= b1.x2 - h.x2;
f2:= Func(b2);
if not(f2 < f1) then b2:= b1;
end;
if (b2.x1 = b1.x1) and (b2.x2 = b1.x2) then
begin
h.x1:= h.x1/2;
h.x2:= h.x2/2;
continue;
end;
repeat
tmp:= b1;
b1:= b2;
f1:= Func(b1);
inc(count);
Output(b1, f1);
p.x1:=2*b1.x1 - tmp.x1;
p.x2:=2*b1.x2 - tmp.x2;
b2:= p;
fp:= func(p);
while (h.x1 >= epsilon) and (h.x2 >= epsilon) do
begin
b2.x1:= p.x1 + h.x1;
f2:= func(b2);
if not(f2 < fp) then
begin
b2.x1:= p.x1 - h.x1;
f2:= func(b2);
if not(f2 < fp) then b2:= p;
end;
b2.x2:= p.x2 + h.x2;
f2:= func(b2);
if not(f2 < fp) then
begin
b2.x2:= p.x2- h.x2;
f2:= func(b2);
if not(f2 < fp) then b2:=p;
end ;
if (b2.x1 = p.x1) and (b2.x2 = p.x2) then
begin
h.x1:= h.x1/2;
h.x2:= h.x2/2;
continue
end
else break;
end;
until f2 > f1;
end;
end;
procedure TMainForm.BitBtn1Click(Sender: TObject);
var
j: Byte;
begin
CalculateParameters;
for j:= 1 to sgParam.RowCount -1 do
begin
sgParam.Cells[1,j]:= FloatToStr(RoundTo(I[j-1],-6));
sgParam.Cells[0,j]:= IntToStr(j);
end;
Label2.Caption:= FloatToStr(RoundTo(P1,-3))
+ ' ~ ' + FloatToStr(RoundTo(P2,-3));
Label4.Caption:= FloatToStr(RoundTo(U,-3))+ '*' + 'sin(wt + ' +
FloatToStr(RoundTo(Phi_C3L2,-3)) +')';
end;
procedure TMainForm.BitBtn2Click(Sender: TObject);
begin
sgOptParam.RowCount:= 2;
Count:= 1;
epsilon:= StrToFloat(Edit1.Text);
Optimize;
end;
procedure TMainForm.BitBtn3Click(Sender: TObject);
begin
Close
end;
function TMainForm.Func(vec: TVector2): Double;
var
Q : Double;
t : Double;
begin
Scheme.Resistors[2].Resistance:= vec.x1;
Scheme.Condensators[1].Capacity:= vec.x2;
Calculate;
Q:=0;
t:=0.1;
while t <= 60 do
begin
m[0,0]:= Z_R1C1C2*sin(314*t + Phi_R1C1C2);
m[0,1]:= -Z_R1C2*sin(314*t + Phi_R1C2);
m[0,2]:= 0;
m[1,0]:= -Z_R1C2*sin(314*t + Phi_R1C2);
m[1,1]:= Z_R1R2R3C2*sin(314*t + Phi_R1R2R3C2);
m[1,2]:= -Z_R3*sin(314*t + Phi_R3);
m[2,0]:= 0;
m[2,1]:= -Z_R3*sin(314*t + Phi_R3);;
m[2,2]:= Z_R3R4C3L2*sin(314*t + Phi_R3R4C3L2);
b[0]:=100*sin(314*t);
Gauss(x,b,m);
I1:= x[0];
I2:= x[0] - x[1];
I3:= -x[1];
I4:= x[1] - x[2];
I5:= -x[2];
Q:=Q+Sqr(15*Sin(314*t+RoundTo(2*pi/3,-1))-I5*Z_C3L2*sin(314*t+Phi_C3L2));
t:=t+0.1;
end;
Result:= Q;
end;
function TMainForm.Vector(x1, x2: Double): TVector2;
begin
Result.x1:= x1;
Result.x2:= x2;
end;
procedure TMainForm.Output(b : TVector2; func : Double);
begin
sgOptParam.RowCount:= count;
sgOptParam.Cells[0, count-1]:= IntToStr(count-1);
sgOptParam.Cells[1, count-1]:= FloatToStr(b.x1);
sgOptParam.Cells[2, count-1]:= FloatToStr(b.x2);
sgOptParam.Cells[3, count-1]:= FloatToStr(func);
end;
procedure TMainForm.BitBtn4Click(Sender: TObject);
begin
with Scheme do
begin
Resistors[0].Resistance:= StrToFloat(sgData.Cells[1,1]);
Resistors[1].Resistance:= StrToFloat(sgData.Cells[1,2]);
Resistors[2].Resistance:= StrToFloat(sgData.Cells[1,3]);
Resistors[3].Resistance:= StrToFloat(sgData.Cells[1,4]);
Condensators[0].Capacity:= StrToFloat(sgData.Cells[2,1]);
Condensators[1].Capacity:= StrToFloat(sgData.Cells[2,2]);
Condensators[2].Capacity:= StrToFloat(sgData.Cells[2,3]);
Inductances[0].Inductance:= StrToFloat(sgData.Cells[3,1]);
Inductances[1].Inductance:= StrToFloat(sgData.Cells[3,2]);
end; end;
end.
Размещено на Allbest.ru
Подобные документы
Применения моделирования, методов вычислительной математики, теории оптимизации и средств вычислительной техники при анализе и проектировании электрических цепей. Параметрическая оптимизация электрической цепи. Листинг программы и результаты ее работы.
курсовая работа [223,8 K], добавлен 21.02.2012Математическое моделирование электрической схемы, ее расчет и оптимизация. Расчет сопротивления элементов и ветвей. Решение системы уравнений методом Халецкого. Метод многомерной оптимизации – метод покоординатного спуска. Система линейных уравнений.
курсовая работа [626,2 K], добавлен 17.12.2011Общее описание и особенности использования программы, предназначенной для определения нечетных чисел, находящихся в массиве чисел. Листинг и методы оптимизации данной компьютерной программы. Источники оптимизации кода, описание выполненных команд.
лабораторная работа [17,4 K], добавлен 25.03.2011Изучение законов изменения электрических величин во времени, подбор двигателей в зависимости от входных параметров. Разработка программы, рассчитывающей параметры заданной схемы четырехполюсника методом интеграла Дюамеля. Код и листинг программы.
курсовая работа [744,6 K], добавлен 25.12.2012Вывод системы дифференциальных уравнений. Описание методов численного решения задачи Коши. Моделирование переходных процессов в электрической цепи. Решение задачи аппроксимации. Расчет количества теплоты, выделившейся на резисторе, реализация в MathCAD.
курсовая работа [202,5 K], добавлен 11.11.2013Анализ проектирования интерфейса программы. Выбор и назначение визуальных компонентов. Изучение экранных форм приложения. Модули, процедуры, функции проекта и их назначение. Листинг программного кода. Результаты работы автоматизированного продукта.
курсовая работа [1,9 M], добавлен 11.12.2017Графическая иллюстрация работы методов оптимизации. Работа с запрограммированными методами первого, второго и нулевого порядков. Анализ свободно распространяемого программного обеспечения. Применяемая архитектура практикума, пользовательский интерфейс.
дипломная работа [3,9 M], добавлен 14.10.2010Защита электрооборудования и сетей от тока короткого замыкания и перегрузок. Разработка программного обеспечения для расчета номинала предохранителя в электрической цепи. Выбор языка программирования. Требования к составу и параметрам технических средств.
курсовая работа [233,2 K], добавлен 31.03.2018Описание алгоритма и исходного кода программы формирования графовой модели заданного фрагмента принципиальной электрической схемы. Разработка схемы алгоритмов решения задачи. Результаты решения контрольных примеров, выполненные с помощью программы.
контрольная работа [47,8 K], добавлен 14.10.2012Задача оптимизации с точки зрения математики как задача нахождения экстремума вещественной функции в некоторой области. Классификация и типы методов оптимизации, условия их практического использования. Создание программы, ее листинг, описание алгоритмов.
курсовая работа [181,7 K], добавлен 22.06.2012