Расчет и оптимизация электрической цепи
Математическое моделирование электрической схемы, ее расчет и оптимизация. Расчет сопротивления элементов и ветвей. Решение системы уравнений методом Халецкого. Метод многомерной оптимизации – метод покоординатного спуска. Система линейных уравнений.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.12.2011 |
Размер файла | 626,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Курсовая работа
«Расчет и оптимизация электрической цепи»
Новокузнецк, 2010
Введение
Целью данной работы является математическое моделирование электрической схемы, расчет этой схемы и оптимизация. Оптимизация заключается в нахождении таких значений заданных элементов оптимизации, чтобы функция изменения напряжения во времени стала близка к идеальной.
Для простоты оптимизации вводится целевая функция, которая по сути является суммой квадратов разностей идеальной и оптимизируемой функций в моменты времени, определяемые частотой дискретизации и временем окончания дискретизации.
Задачи
Для заданной схемы электрической цепи (рис. 1) необходимо:
1) Рассчитать электрическую цепь:
a) Найти значение токов во всех ветвях.
b) Найти напряжение на нагрузке Q элементов, где Q - L2, C3.
2) Оптимизировать схему, варьируя параметрами R3 и C2, чтобы напряжение на нагрузке u*H(t)=15*sin (w*t+2р/3). Время для произведения задачи оптимизации выбрать 1 мин с начала функционирования электрической схемы, время дискретизации 0,1 с.
Метод многомерной оптимизации: метод покоординатного спуска.
Метод одномерной оптимизации: метод простого перебора.
Исходные данные:
1. Идеальный источник напряжения:
u(t)=100*sin(wt), f=50Гц;
2. Элементы с постоянными характеристиками:
а) Резисторы:
R1=500 Ом, R2=1000 Ом, R4=100 Ом;
б) Конденсаторы:
С1=100 мкФ, С 3=200 мкФ;
в) Катушки индуктивности:
L1=1 мГн, L2=5 мГн;
3. Элементы с переменными характеристиками:
а) R3=[100 Омч1000 Ом], R3ном=500 Ом;
б) С2=[20 мкФч100 мкФ], С2ном=50 мкФ;
1. Расчет электрической цепи
1.1 Ручной расчет
Найдем сопротивления элементов и ветвей:
По первому и второму закону Кирхгофа получаем систему:
Приведем подобные и подставим известные значения:
Упростим систему, используя метод контурных токов. Для этого выразим
Тогда она примет вид:
Найдем решение системы по методу Халецкого.
Результат решения методом Халецкого:
Подставив в замену метода контурных токов, получим:
Проверим правильность найденного решения с помощью уравнения баланса мощностей источника и приемников электрической энергии.
Значит, найденное решение правильно.
Далее, рассчитаем значение напряжения на заданной нагрузке при номинальных параметрах. Для этого рассчитаем сопротивление на участке L2, C3.
.
Таким образом, изменение напряжения на нагрузке описывается уравнением uH(t)=23,995*sin (w*t+1.571). Очевидно, что оно не соответствует заданному u*H(t)=15*sin (w*t+2р/3).
1.2 Оптимизация схемы
Метод покоординатного спуска.
Пусть нужно найти наименьшее значение целевой функции u=f(M)=f (x1, x2,…, xn). Здесь через М обозначена точка n-мерного пространства с координатами x1, x2,…, xn: M=(x1, x2,…, xn). Выберем какую-нибудь начальную точку М0=(x10, x20,…, xn0) и рассмотрим функцию f при фиксированных значениях всех переменных, кроме первой: f (x1, x20, x30,…, xn0). Тогда она превратится в функцию одной переменной x1. Изменяя эту переменную, будем двигаться от начальной точки x1=x10 в сторону убывания функции, пока не дойдем до ее минимума при x1=x11, после которого она начинает возрастать. Точку с координатами (x11, x20, x30,…, xn0) обозначим через М1, при этом f(M0) >= f(M1).
Фиксируем теперь переменные: x1=x11, x3= x30,…, xn=xn0 и рассмотрим функцию f как функцию одной переменной x2: f (x11, x22, x30…, xn0). Изменяя x2, будем опять двигаться от начального значения x2=x20 в сторону убывания функции, пока не дойдем до минимума при x2=x21. Точку с координатами {x11, x21, x30… xn0} обозначим через М2, при этом f(M1) >=f(M2).
Проведем такую же минимизацию целевой функции по переменным x3, x4,…, xn. Дойдя до переменной xn, снова вернемся к x1 и продолжим процесс. Эта процедура вполне оправдывает название метода. С ее помощью мы построим последовательность точек М0, М1, М2,…, которой соответствует монотонная последовательность значений функции f(M0) >= f (M1)>= f(M2) >=… Обрывая ее на некотором шаге k можно приближенно принять значение функции f(Mk) за ее наименьшее значение в рассматриваемой области.
Отметим, что данный метод сводит задачу поиска наименьшего значения функции нескольких переменных к многократному решению одномерных задач оптимизации. Если целевая функция f (x1, x2,…, xn) задана явной формулой и является дифференцируемой, то мы можем вычисллить ее частные производные и использовать их для определения направления убывания функции по каждой переменной и поиска соответствующих одномерных минимумов. В противном случае, когда явной формулы для целевой функции нет, одномерные задачи следует решать с помощью одномерных методов.
На рис. 1 изображены линии уровня некоторой функции двух переменных u= f (х, у). Вдоль этих линий функция сохраняет постоянные значения, равные 1, 3, 5, 7, 9. Показана траектория поиска ее наименьшего значения, которое достигается в точке О, с помощью метода покоординатного спуска. При этом нужно ясно понимать, что рисунок служит только для иллюстрации метода. Когда мы приступаем к решению реальной задачи оптимизации, такого рисунка, содержащего в себе готовый ответ, у нас, конечно, нет.
Пусть требуется решить задачу (2):
f(x) ->min, х ОRn. (2)
В двумерном пространтсве R2. Решение задачи (2) методом покоординатного спуска, иначе называемого методом Гаусса - Зейделя, производят по следующей общей схеме.
Выбирают произвольно начальную точку х(0) из области определения функции f(х). Приближения х(k) определяются соотношениями (3):
x (k+1)=x(k)+t(k) S(k) (k=0,1,2,…),
где вектор направления спуска s(k) - это единичный вектор, совпадающий с каким-либо координатным направлением (например, если S(k) параллелен х1, то S(k)= {1,0,0,…, 0}, если он параллелен x2, то S(k)={0, 1, 0,…, 0} и т.д.); величина t(k) является решением задачи одномерной минимизации:
f (x(k)+ts(k)) -> min, t ОR1, (k=0,1,2,…),
и может определяться, в частности, методом сканирования.
Детальная реализация общей схемы в двумерном случае R2 дает траекторий приближения к точке х* методом покоординатного спуска, состоящую из звеньев ломаной, соединяющих точки х(k), х~(k), x (k+1) (k=0, 1, 2,) (рис. 2). При k=0, исходя из начальной точки х(0)=(x1 (0), x2 (0)), находят точку х~(0)= (x1~(0), x2 (0)), минимума функции одной переменной f (x1, x2 (0)); при этом f (x~(0))<=f (x(0)).Затем находят точку минимума x(1) функции f (x1~(0), x2) по второй координате. Далее делают следующий шаг вычислений при k=1. Полагают, что исходной точкой расчета является х(1). Фиксируя вторую координату точки х(1), находят точку минимума х~(1)= (x1~(1), x2 (1)), функции f (x1, x2 (1)) одной переменной x(1); при этом f (x~(1))<=f (x(1))<=f (x(0)). Точку х(2) получают, минимизируя целевую функцию f (x1~(1), x2), вновь по коорданате х2, фиксируя координату x1~(1), точки x(1), и т.д.
Условием прекращения вычислительной процедуры при достижении заданной точности e может служить неравенство
||x (k+1) - x(k) ||<e (4)
Блок-схема поиска минимума функции двух переменных методом покоординатного спуска.
Метод простого перебора
Будем предполагать, что искомый минимум является строгим, то есть при всех , и других точек локального минимума на отрезке нет. Предположим также, что точка минимума - внутренняя точка отрезка. Зададимся точностью , с которой будем приближённо отыскивать. Приближённое значение точки минимума обозначим , то есть - это такое число, что
Простейший способ обнаружить точку с точностью - это перебирать точки отрезка с шагом , начиная с , до тех пор, пока не будет выполнено условие , то есть пока функция не начнёт возрастать после точки минимума. При этом точка может оказаться либо на отрезке, либо на отрезке (cм. следующий чертёж):
Рис. 9.15. Два случая расположения точки минимума при
Если теперь положить , то в любом из двух случаев будет выполнено неравенство, то есть точка минимума будет найдена с нужной нам точностью. За приближённое значение нужно теперь взять. Дополнительного вычисления функции при этом не потребуется, поскольку значение уже было найдено ранее.
Если не предполагать, что локальный минимум на отрезке только один и что точка минимума - внутренняя точка отрезка, то придётся изменить метод так: вычислять значения до тех пор, пока точка не достигнет правого конца отрезка - точки ; на каждом шаге сравнивать текущее значение с минимальным из предыдущих значений , заменяя это минимальное значение на при . Наконец, вычислить (если точка не совпадает с последней из точек ) и также сравнить с минимальным из предыдущих значений. После этой процедуры будет приближённо равно , а та точка, в которой получено значение функции, равное - приближённым значением точки минимума.
Заметим, что метод простого перебора при поиске точки экстремума аналогичен методу простого перебора при поиске корня уравнения .
Расчет оптимизации схемы
Многомерная оптимизация производится методом покоординатного спуска, который заключается в пошаговом переходе от начальных значений аргументов функции к значениям, при которых значения функции удовлетворяют заданным условиям. В процессе каждого шага метода покоординатного спуска в задаче выполняется метод одномерной оптимизации - метод простого перебора, заключающийся в переборе всех заданных значений аргумента, при котором значение оптимизируемой функции минимально.
Оптимизируемая функция имеет вид , где t-время проведения задачи оптимизации, равное 1 мин.
Для нахождения значения тока на заданной нагрузке преобразуем систему уравнений с учетом фазового сдвига между током и напряжением:
Критерием завершения итерационного процесса является выполнение одного из следующих условий:
,
где е - заданная точность поиска, k - номер итерации.
Например, для времени проведения задачи оптимизации 60 с, шага дискретизации 0,1 с и е=1 получим значение целевой функции равное 2190326 при первой итерации. Такое значение не удовлетворяет заданным условиям, поэтому мы продолжаем поиск оптимального значения целевой функции в рамках значений наших аргументов.
2. Программная реализация
2.1 Информационное обеспечение
В процессе написания программы были созданы следующие классы:
1) TVetv - класс ветвей схемы. Обладает полями:
а) FSopr:double - хранит общее сопротивление ветви
б) XC, XL:double - хранит емкостное и индуктивное сопротивления ветви.
в) FUgol: double - хранит фазовый сдвиг между током и напряжением.
г) FSToka: double - хранит значение силы тока ветви.
Содержит процедуру constructor create (Rv, Lv, Cv:double) - процедура создания ветви при начальных значениях сопротивления, индуктивности, емкости.
2) TUchastok - класс участков оптимизации. Потомок класса TBrunch, обладает теми же полями и полем FTension: Double, которое служит для хранения значения напряжения на участке оптимизации. Содержит процедуры:
а) constructor create (Ru, Cu, t:double) создает участок оптимизации при задании начальных индуктивности, емкости и момента времени оптимизации.
б) procedure Raschet вычисляет разницу dU между Uopt и Uisk за время проведения задачи оптимизации.
Переменные созданных классов:
1) Vetv: array [1..5] of TBrunch - массив ветвей электрической схемы.
2) Uchastok:TUchastok - участок оптимизации.
Массивы:
1) R, L, C: array [1..5] of Double - исходные данные ветви (сопротивление, индуктивность, емкость).
2) FOpt: array [1…50] of Double - массив значений целевой функции, хранящий значение каждой итерации.
Действительные переменные:
1) Rv, Lv, Cv: Double - эти переменные используются при создании новой ветви.
2) Lu, Cu: double - эти переменные используются при создании участка оптимизации.
3) Ik1, Ik2, Ik3: Double - контурные токи схемы.
4) U, Uopt, Uisk: Double - напряжения (источника, заданное, на участке оптимизации, разница между Uopt и Uisk) схемы.
5) t:double - время проведения задачи оптимизации.
6) minR, minC, minRv, minCv, min: double - используются в процессе оптимизации; minR - запоминает оптимальное значение R3 во время итерационного процесса, minC - запоминает оптимальное значение С2 во время итерационного процесса.
7) z - золотое сечение, определяется по формуле
8) S:array [1..6] of double; - массив для расчёта сопротивлений ветвей; используется для решения системы уравнений методом Гаусса.
Целые переменные:
1) Time. Value: integer - максимальное время проведения задачи оптимизации; не более 60 с.
2) StepAngle. Value: integer - шаг дискретизации; не более 0,01 с.
3) Pogr. Value: integer - погрешность е.
Логические переменные:
1) Nominal: Boolean - логическая переменная; при истинном значение производится расчет при номинальных значениях C2 и R3, при ложном - с учетом фазового сдвига между током и напряжением.
2.2 Математический аппарат
моделирование электрический сопротивление халецкий
Одним из прямых (точных) методов решения систем линейных уравнений является метод основанный на схеме Халецкого.
Пусть система линейных уравнений дана в матричном виде.
Ax=b (1)
где А - квадратная матрица порядка n, а x, b - векторы столбцы.
Представим матрицу А в виде произведения нижней треугольной матрицы С и верхней треугольной матрицы В с единичной диагональю, т.е.
А=СВ,
где
Причем элементы сij и bij определяются по формулам:
(2)
Уравнение (1) можно записать в следующем виде:
CBx=b. (3)
Произведение Bx матрицы B на вектор-столбец x является вектором-столбцом, который обозначим через y:
Bx=y. (4)
Тогда уравнение (2) перепишем в виде:
Cy=b. (5)
Здесь элементы cij известны, так как матрица А системы (1) считается уже разложенной на произведение двух треугольных матриц С и В.
Перемножив матрицы в левой части равенства (5), получаем систему уравнений из которой получаем следующие формулы для определения неизвестных:
(6)
неизвестные yi удобно вычислять вместе с элементами bij.
После того как все yi определены по формулам (6), подставляем их в уравнение (4).
Так как коэффициенты bij определены (2), то значения неизвестных, начиная с последнего, вычисляем по следующим формулам:
2.3 Алгоритмическое обеспечение
Алгоритм оптимизации:
2.4 Программное обеспечение
Написанная программа представляет собой несколько файлов. Среди них самыми важными являются Project1.dpr, Unit1.dfm и Unit1.pas.
Файл Project1.dpr, проект программ, связывает между собой все файлы, входящие в состав программы.
Файл Unit1.dfm - внешний вид, интерфейс программы. Подробнее о нем рассказано в п. 3.2.
Файл Unit1.pas содержит весь программный код и представляет собой используемые функции, процедуры, переменные и компоненты. Подробнее его можно рассмотреть в приложении.
Файл Shema.jpg необходим для отображения электрической схемы, для которой производились расчёты и оптимизация
3. Скриншот
Рис. 5 - Скриншот «Ввод данных»
Рис. 6 - Скриншот «Расчёт схемы»
Рис. 7- Скриншот «Оптимизация схемы»
Заключение
В процессе разработки программы было выяснено, что решение системы уравнений методом Халецкого легко программируется. Выяснено, что матричным методом можно решать системы из любого количества уравнений.
Также был рассмотрен метод многомерной оптимизации - метод покоординатного спуска. Этот метод легок в программировании, так как не требует знания функции в явном виде. Но у этого метода есть недостаток: в случае, если функция быстрее всего убывает в сторону какого-то одного предела, то достигнув этого предела, оптимизация завершается, хотя, возможно, что это только точка локального минимума.
Приложения
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ComCtrls, Spin, ExtCtrls, jpeg;
type
TVetv = class
FSopr: double;
XC, XL:double;
FUgol: double;
FSToka: double;
constructor create (Rv, Lv, Cv:double);
end;
TUchastok = class(TVetv)
FNapr: Double;
constructor create (Lu, Cu, t: Double);
procedure Raschet;
end;
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Memo1: TMemo;
StringGrid1: TStringGrid;
Button1: TButton;
Label1: TLabel;
Label3: TLabel;
Time: TSpinEdit;
StepAngle: TSpinEdit;
Pogr: TSpinEdit;
Label2: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label8: TLabel;
Label9: TLabel;
Button3: TButton;
TabSheet3: TTabSheet;
Label7: TLabel;
StringGrid2: TStringGrid;
Button2: TButton;
Shema: TImage;
RadioGroup1: TRadioGroup;
procedure Vvod (Sender: TObject);
procedure Button1Click (Sender: TObject);
procedure Haletsky (t:double);
procedure Button2Click (Sender: TObject);
procedure Face (Sender: TObject);
procedure Button3Click (Sender: TObject);
procedure RadioGroup1Click (Sender: TObject);
private
{Private declarations}
public
{Public declarations}
end;
var
Form1: TForm1;
Vetv:array [1..6] of TVetv;
Uchastok:TUchastok;
r, c, l, s:array [1..6] of double;
Rv, Lv, Cv: Double;
Nominal: Boolean;
FOpt:array [1..20000] of double;
Lu, Cu: double;
t, U, Uopt, Uisk, dU, C2, Q, Q1, Q2:double;
Qopt:array [1..50] of double;
g:integer;
implementation
{$R *.dfm}
constructor TVetv.create (Rv, Lv, Cv:double);
begin
inherited create;
if Cv=0 then else XC:=1/(100*Pi*Cv);
If Lv=0 then else XL:=100*Pi*Lv;
FSopr:=sqrt (sqr(Rv)+sqr (XL-XC));
if (Rv=0) and ((XL-XC)<0) then FUgol:=-Pi/2 else
if (Rv=0) and((XL-XC)>0) then FUgol:=Pi/2 else
FUgol:=arctan((XL-XC)/Rv);
end;
constructor TUchastok.create (Lu, Cu, t: Double);
begin
inherited create (1,1,1);
FSopr:=sqrt (sqr(XL-XC));
if ((XL-XC)<0) then FUgol:=-Pi/2 else
if ((XL-XC)>0) then FUgol:=Pi/2;
FSToka:=Vetv[5].FSToka;
if Nominal then FNapr:=FSopr*FSToka
else FNapr:=FSopr*FSToka*sin (100*Pi*t+FUgol);
end;
procedure TUchastok. Raschet;
begin
t:=0; Uisk:=0; Uopt:=0; Q:=0;
while t<=Form1. Time. Value do
begin
Form1. Haletsky(t);
Lu:=L[3] - 0.001; Cu:=C[3];
Uchastok:=TUchastok.create (Lu, Cu, t);
Uopt:=15*sin((100*Pi*t)*Pi/180+2*Pi/3);
Uisk:=Uchastok.FNapr*sin((100*Pi*t)*Pi/180+Uchastok.FUgol);
Q:=Q+sqr (Uopt-Uisk);
t:=t+Form1. StepAngle. Value/10;
end;
end;
procedure TForm1. Vvod (Sender: TObject);
var i:integer;
begin
R[1]:=500; R[2]:=1000; R[3]:=0; R[4]:=0; R[6]:=100;
L[1]:=0; L[2]:=0; L[3]:=0.001+0.005; L[4]:=0; L[5]:=0; L[6]:=0;
C[1]:=0; C[2]:=0.0001; C[3]:=0.0002; C[5]:=0; C[6]:=0;
if nominal then begin
R[5]:=500;
C[4]:=0.00005;
end;
For i:=1 to 6 do
begin
Rv:=R[i]; Lv:=L[i]; Cv:=C[i];
Vetv[i]:=TVetv.create (Rv, Lv, Cv);
end;
end;
procedure TForm1. Button1Click (Sender: TObject);
var i:integer;
begin
Nominal:=True;
// Ввод данных
StringGrid1. Cells [0,0]:='№ ветви';
StringGrid1. Cells [1,0]:='Сопротивление, Ом';
StringGrid1. Cells [2,0]:='Угол сдвига, рад';
StringGrid1. Cells [3,0]:='Сила тока, А';
Vvod(sender);
For i:=1 to 6 do
begin
StringGrid1.cells [0, i]:=inttostr(i);
StringGrid1.cells [1, i]:=floattostr (Vetv[i].FSopr);
StringGrid1.cells [2, i]:=floattostr (Vetv[i].FUgol);
end;
Haletsky(t);
for i:=1 to 6 do StringGrid1.cells [3, i]:=floattostr (Vetv[i].FSToka);
Lu:=L[3] - 0.001; Cu:=C[3];
Uchastok:=TUchastok.create (Lu, Cu, t);
label3. Caption:=floattostr (abs(Vetv[1].FSToka*U))+' = '+floattostr (sqr(Vetv[1].FSToka)*S[1]+sqr (Vetv[2].FSToka)*S[2]+sqr (Vetv[3].FSToka)*S[3]+sqr (Vetv[4].FSToka)*S[4]+sqr (Vetv[5].FSToka)*S[5]+sqr (Vetv[6].FSToka)*S[6]);
Label1. Caption:=floattostr (Uchastok.FNapr)+'*sin (wt+('+floattostr (Uchastok.FUgol)+'))';
end;
procedure TForm1. Haletsky (t:double);
var a, d, c:array [1.. 3,1..3] of double;
b, x, y:array [1..3] of double;
j, i, n: Integer;
Ik1, Ik2, Ik3: Double;
begin
n:=3;
if Nominal then
begin
for i:=1 to 6 do
S[i]:=Vetv[i].FSopr;
U:=100;
end
else
begin
for i:=1 to 6 do
S[i]:=abs (Vetv[i].FSopr*sin((100*Pi*t)*Pi/180+Vetv[i].FUgol));
U:=abs (100*sin((100*Pi*t)*Pi/180));
end;
a [1,1]:=S[1]+S[4]+S[5]; a [1,2]:=-S[5]; a [1,3]:=-S[4];
a [2,1]:=-S[5]; a [2,2]:=S[2]+S[5]+S[6]; a [2,3]:=-S[6];
a [3,1]:=-S[4]; a [3,2]:=-S[6]; a [3,3]:=S[3]+S[6]+S[4];
b[1]:=U; b[2]:=0; b[3]:=0;
for i:=1 to 3 do
begin
j:=1;
d [i, j]:=a [i, j];
end;
for j:=1 to 3 do
c [1, j]:=a [1, j]/d [1,1];
d [2,2]:=a [2,2] - d [2,1]*c [1,2];
c [2,3]:=1/d [2,2]*(a [2,3] - d [2,1]*c [1,3]);
d [3,2]:=a [3,2] - d [3,1]*c [1,2];
d [3,3]:=a [3,3] - d [3,1]*c [1,3] - d [3,2]*c [2,3];
y[1]:=b[1]/d [1,1];
y[2]:=1/d [2,2]*(b[2] - d [2,1]*y[1]);
y[3]:=1/d [3,3]*(b[3] - d [3,1]*y[1] - d [3,2]*y[2]);
x[3]:=y[3];
x[2]:=y[2] - c [2,3]*x[3];
x[1]:=y[1] - c [1,2]*x[2] - c [1,3]*x[3];
ik1:=x[1];
ik2:=x[2];
ik3:=x[3];
Vetv[1].FSToka:=Ik1;
Vetv[2].FSToka:=Ik2;
Vetv[3].FSToka:=Ik3;
Vetv[4].FSToka:=Ik1-Ik3;
Vetv[5].FSToka:=Ik1-Ik2;
Vetv[6].FSToka:=Ik3-ik2;
end;
procedure TForm1. Button2Click (Sender: TObject);
var minR, minC, MaxR, MaxC, C1, C2, R1, R2, z, min:double;
label 1;
begin
for g:=1 to 100 do
begin
stringGrid2. Cells [0, g]:='';
stringGrid2. Cells [1, g]:='';
stringGrid2. Cells [2, g]:='';
stringGrid2. Cells [3, g]:='';
end;
Nominal:=False;
StringGrid2. Cells [0,0]:='№ итер.';
StringGrid2. Cells [1,0]:='Емкость, Ф';
StringGrid2. Cells [2,0]:='Сопротивление, Ом';
StringGrid2. Cells [3,0]:='Целевая функция';
g:=1;
C[4]:=0.00005; R[5]:=500;
Vvod(Sender);
Uchastok. Raschet;
min:=Q;
stringGrid2. Cells [0, g]:=inttostr(g);
stringGrid2. Cells [1, g]:=floattostr (C[4]);
stringGrid2. Cells [2, g]:=floattostr (R[5]);
stringGrid2. Cells [3, g]:=floattostr(min);
if min<pogr. Value then goto 1;
z:=(sqrt(5) - 1)/2; C1:=0; C2:=0; R1:=0; R2:=0;
Nominal:=False;
minC:=0.00002; MinR:=100;
MaxC:=0.0001; MaxR:=1000;
while not Nominal do
begin
g:=g+1;
Repeat
begin
C[4]:=minC; R[5]:=minR+100;
Vvod(Sender);
Uchastok. Raschet;
Q1:=Q;
C[4]:=maxC; R[5]:=maxR+100;
Vvod(Sender);
Uchastok. Raschet;
Q2:=Q;
if Q1=Q2 then
begin
C1:=minC+z*(MaxC-MinC);
C2:=maxC-z*(MaxC-MinC);
Qopt[g]:=Q1;
end;
if Q1<Q2 then
begin
C1:=minC;
C2:=maxC-z*(MaxC-MinC);
Qopt[g]:=Q1;
end;
if Q1>Q2 then
begin
C1:=minC+z*(MaxC-MinC);
C2:=maxC;
Qopt[g]:=Q2;
end;
minC:=C1;
MaxC:=C2;
if ((abs (QOpt[g])<1) or ((g>1) and (abs (Qopt[g] - Qopt [g-1])<1))) then Nominal:=True;
stringGrid2. Cells [0, g]:=inttostr(g);
stringGrid2. Cells [1, g]:=floattostr(minc);
stringGrid2. Cells [2, g]:=floattostr(minr);
stringGrid2. Cells [3, g]:=floattostr (Qopt[g]);
end;
until C2-C1<0.001;
repeat
begin
g:=g+1;
C[4]:=minC; R[5]:=minR+100;
Vvod(Sender);
Uchastok. Raschet;
Q1:=Q;
C[4]:=maxC; R[5]:=maxR+100;
Vvod(Sender);
Uchastok. Raschet;
Q2:=Q;
if Q1=Q2 then
begin
R1:=minR+z*(MaxR-MinR);
R2:=maxR-z*(MaxR-MinR);
Qopt[g]:=Q1;
end;
if Q1<Q2 then
begin
R1:=minR;
R2:=maxR-z*(MaxR-MinR);
Qopt[g]:=Q1;
end;
if Q1>Q2 then
begin
R1:=minR+z*(MaxR-MinR);
R2:=maxR;
Qopt[g]:=Q2;
end;
minR:=R1;
MaxR:=R2;
if ((abs (QOpt[g])<1) or ((g>1) and (abs (Qopt[g] - Qopt [g-1])<1))) then Nominal:=True;
stringGrid2. Cells [0, g]:=inttostr(g);
stringGrid2. Cells [1, g]:=floattostr(minc);
stringGrid2. Cells [2, g]:=floattostr(minr);
stringGrid2. Cells [3, g]:=floattostr (Qopt[g]);
end;
until R2-R1<0.001;
// Вывод данных
end;
1:end;
procedure TForm1. Face (Sender: TObject);
begin
Form1. Caption:='Расчёт и оптимизация электрической цепи';
label2. Caption:='Время проведения задачи'+#13#10+'оптимизации, с';
label5. Caption:='Время' +#13#10+'дискретизации, с/100';
label8. Caption:='Погрешность';
label9. Caption:='Характеристики ветвей';
Label6. Caption:='Баланс мощностей';
Label4. Caption:='Напряжение на оптимизируемом участке';
Label7. Caption:='Значения изменяемых величин и целевой функции';
Shema. Picture. LoadFromFile ('Shema.jpg');
Shema. Proportional:=True;
Shema. Visible:=true;
label2. Visible:=false;
label8. Visible:=false;
label5. Visible:=false;
StepAngle. Visible:=false;
Pogr. Visible:=false;
Time. Visible:=false;
end;
procedure TForm1. Button3Click (Sender: TObject);
begin
Close;
end;
procedure TForm1. RadioGroup1Click (Sender: TObject);
begin
if RadioGroup1. ItemIndex=0 then
begin
label2. Visible:=false;
label8. Visible:=false;
label5. Visible:=false;
StepAngle. Visible:=false;
Pogr. Visible:=false;
Time. Visible:=false;
StepAngle. Value:=1;
Pogr. Value:=1;
Time. Value:=1;
end;
if RadioGroup1. ItemIndex=1 then
begin
label2. Visible:=true;
label8. Visible:=true;
label5. Visible:=true;
StepAngle. Visible:=true;
Pogr. Visible:=true;
Time. Visible:=true; end; end; end.
Размещено на Allbest.ru
Подобные документы
Системы линейных алгебраических уравнений. Матричный метод решения систем линейных уравнений. Решение задачи математическим методом. Блок-схема алгоритма и листинг программы. Расчет трудоемкости разработки программы. Расчет себестоимости и цены программы.
дипломная работа [144,8 K], добавлен 25.04.2012Описание математической модели определения тока в электрической цепи с помощью решения системы алгебраических уравнений методом Гаусса. Описание и разработка блок-схемы программы. Ввод данных задачи, составление программы и анализ результатов решения.
контрольная работа [231,8 K], добавлен 15.08.2012Вывод системы дифференциальных уравнений. Описание методов численного решения задачи Коши. Моделирование переходных процессов в электрической цепи. Решение задачи аппроксимации. Расчет количества теплоты, выделившейся на резисторе, реализация в MathCAD.
курсовая работа [202,5 K], добавлен 11.11.2013Отделение корней методом простых интеграций. Дифференцирование и аппроксимация зависимостей методом наименьших квадратов. Решение нелинейного уравнения вида f(x)=0 методом Ньютона. Решение системы линейных уравнений методом Зейделя и методом итераций.
курсовая работа [990,8 K], добавлен 23.10.2011Схема и основные параметры элементов цепи. Вывод системы дифференциальных уравнений. Реализация алгоритма на языке программирования высокого уровня Pascal. Решение дифференциальных уравнений в пакете MathCAD. Решение интерполяции в пакете Excel.
курсовая работа [375,4 K], добавлен 06.01.2011Системы линейных алгебраических уравнений. Решение систем уравнений графическим способом. Разработка программного кода модуля, реализующего приближенное решение систем линейных уравнений графическим способом. Отладка программного модуля "Метод Гаусса".
курсовая работа [858,5 K], добавлен 01.12.2013Программная реализация методов вычислительной математики и их применения к расчету и оптимизации электрической схемы. Сущность первого и второго законов Кирхгофа. Компоненты, использованные для реализации интерфейса программы. Листинг программного кода.
курсовая работа [1,3 M], добавлен 14.01.2014Метод Гаусса как прямой метод нахождения решений для систем системы линейных уравнений маленькой и средней размерности с помощью компьютерной техники. Редактор кода и исходный код основной программы в Delphi, блок-схема и графическое решение задачи.
контрольная работа [460,8 K], добавлен 15.06.2015Проектирование приложения, позволяющего находить решение системы алгебраических линейных уравнений матричным методом. Выбор количества уравнений, заполнение значений коэффициентов системы уравнений и свободных членов, алгоритм решения линейных уравнений.
курсовая работа [939,4 K], добавлен 16.01.2014Разработка программного продукта для решения систем линейных алгебраических уравнений методом Гаусса с помощью ЭВМ. Математическое описание объекта моделирования, начальные и граничные условия. Алгоритм реализации задачи. Использование модуля CRT.
курсовая работа [269,6 K], добавлен 07.01.2016