Розробка програми в С++ для розрахунку струму в усіх гілках схеми методом незалежних струмів
За базисний приймемо вузол В. Незалежних струмів n=2. Систему незалежних струмів не можуть утворювати струми і, тому що вони заповнюють вузол А. Незалежним може бути, наприклад, система струмів Тоді Тому. ТЕКСТ ПРОГРАМИ В цьому розділи наведено текст програми написаний на мові програмування С++. К тексту програми приведено коментарі, які дозволяють зрозуміти як працює ця програма. Ці знання… Читати ще >
Розробка програми в С++ для розрахунку струму в усіх гілках схеми методом незалежних струмів (реферат, курсова, диплом, контрольна)
ВСТУП Математичне моделювання процесів та явищ в різних областях науки і техніки є одним з основних способів отримання нових знань і технологічних рішень.
Для здійснення математичного моделювання дослідник незалежно від його спеціальності повинен знати певний мінімальний набір методів обчислювальної математики, а також володіти способами і програмною реалізацією на ЕОМ.
Ці знання та навички необхідні також при використанні готових пакетів програм, інакше буде утруднено планування обчислювального експерименту та інтерпретація його результатів.
Мета моделювання — отримання і обробка, представлення та використання інформації про об'єкти, які взаємодіють між собою і зовнішнім середовищем, а Модель виступає як засіб свідчення властивостей і закономірностей поведінки об'єкта.
Модель являє собою проекцію об'єктивної реальності під певним кутом зору. Іноді в залежності від цілей можна отримати ряд проекцій об'єктивної реальності, що вступають у протиріччя. Це характерно, як правило, для складних систем, у яких кожна проекція виділяє суттєве для певної мети з безлічі несуттєвого.
Особливість математичного моделювання полягає в тому, що абстрактним відображенням існуючого або створюваного об'єкта є його математична модель, кількісний аналіз якої дозволяє отримати нові знання про цей об'єкт.
Зручності, що надаються сучасними ППП для ЕОМ їх користувачам часто призводять до прагнення звернутися при кількісному аналізі моделі до існуючих і постійно вдосконалюється універсальним пакетам типу MathCAD, MathLAB та ін Більш того, універсальність ММ дозволяють створювати програмні комплекси типу Nastran або Ansys, в які вихідна інформація вводиться навіть не у вигляді ММ, а у вигляді розрахункової схеми технічного об'єкта. Однак метод, який годиться для вирішення багатьох стандартних задач, часто не є найкращим при вирішенні конкретної задачі, особливо нестандартною, а нерідко і взагалі не застосуємо. Але в інженерній практиці вирішувати доводиться в основному нестандартні завдання, тому що стандартні все вирішені або можуть бути вирішені без особливих творчих зусиль. При вирішенні нових і складних завдань, які не мають близьких аналогів, шлях формального звернення до універсальних пакетах і програмним комплексам може привести до отримання результатів, які не вдається інтерпретувати стосовно до розглянутого технічному об'єкту. У таких випадках аналіз ММ потрібно будувати на вмілому поєднанні якісних оцінок, аналітичних методів і застосування ЕОМ, пам’ятаючи, що мета розрахунків — не числа, а розуміння. Все це говорить про те, що ЕОМ, звільняючи нас від багатьох турбот і обов’язків, не звільняє принаймні від двох з них — від необхідності володіти математикою і творчо мислити.
ЗМІСТ
1. Теоретичні відомості
2. Блок схема
3. Характеристика даних та їх умовні позначення
4. Текст програми
5. Результати роботи програми Висновки Література
1. ТЕОРЕТИЧНІ ВІДОМОСТІ
Рівняння методу незалежних струмів у матрично-векторній формі записується в наступному виді:
(1.1)
де — квадратична матриця опорів порядку (p — кількість віток кола; q — число вузлів кола);
— мірний вектор незалежних струмів;
— мірний вектор контурних ЕРС кола;
— мірний вектор контурних ЕРС кола, еквівалентних джерелам струму вузлів кола З рівняння (1.1) визначається вектор незалежних струмів.
(1.2)
а потім із залежності
(1.3)
знаходиться вектор струмів віток кола.
За базисний приймемо вузол В. Незалежних струмів n=2. Систему незалежних струмів не можуть утворювати струми і, тому що вони заповнюють вузол А. Незалежним може бути, наприклад, система струмів Тоді Тому
2. БЛОК-СХЕМА В цьому розділі наведено блок-схему алгоритму програми.
Рисунок 1-Блок-схема головної функції
Рисунок 2-Блок-схема головної функції
Рисунок 3-Блок-схема головної функції
Рисунок 4—Блок-схема головної функції
Рисунок 5—Блок-схема головної функції
математичний моделювання програма алгоритм
3. ХАРАКТЕРИСТИКА ДАНИХ ТА ЇХ УМОВНІ ПОЗНАЧЕННЯ В цьому розділи наведено характеристика даних та їх умовні позначення в програмі. Це зроблено у вигляді таблиці, яка містить головну інформацію про дані програми.
Таблиця 1. Характеристика даних та їх умовні позначення
№ пп | Найменування даних | Позначення в блок — схемі | Позначення в програмі | Тип змінних | |
Змінна для циклу | i | i | int | ||
Змінна для циклу | j | j | int | ||
Змінна для циклу | k | k | int | ||
Параметр для циклу | N | N | int | ||
Матриця ланцюга | P1 | **P1 | complex | ||
Матриця ланцюга | P2 | **P2 | complex | ||
Матриця ланцюга | Ft | **Ft | complex | ||
Матриця опорів | Z | **Z | complex | ||
Вектор джерел ЕРС | E | *E | complex | ||
Матриця джерел струму | Ik | *Ik | complex | ||
Матриця перетворення незалежних струмів | B1 | **B1 | complex | ||
Матриця опорів незалежних струмів | Z1 | **Z1 | complex | ||
Вектор контурних ЕРС | Ekk | *Ekk | complex | ||
Матриця перетворення джерел струму | K1 | **K1 | complex | ||
вектору еквівалентних контурних ЕРС | Ek | *Ek | complex | ||
Визначник матриці Z1 | Deter | Deter | complex | ||
Обернена матриця Z1 | Z1INV | **Z1INV | complex | ||
Вектор незалежних струмів | I1 | I1 | complex | ||
Змінна для перевірки першим законом Кірхгофа | W | W | complex | ||
Вектор напруг в усіх гілках схеми | U | *U | complex | ||
4. ТЕКСТ ПРОГРАМИ В цьому розділи наведено текст програми написаний на мові програмування С++. К тексту програми приведено коментарі, які дозволяють зрозуміти як працює ця програма.
#include
#include
#include
using namespace std;
//Створення класу комплексних чисел.
class complex
{
public:
void vvod ();
complex operator+(complex M);
complex operator-(complex M);
complex operator*(complex M);
complex operator/(complex M);
void show_complex ();
double x;
double y;
};
//Створення елементів класу, таких як введення і вивід на екран комплексних чисел.
void complex: vvod ()
{
cout<<" Vvedite xt" ;
cin>>x;
cout<<" Vvedite yt" ;
cin>>y;
show_complex ();
}
void complex: show_complex ()
{
if (y>=0)
cout<<" +" <<" i" ;
else cout<<" i" ;
}
//Перевантаження простих алгебраїчних дій.
complex complex: operator+(complex M)
{
complex temp;
temp.x=x+M.x;
temp.y=y+M.y;
return temp;
}
complex complex: operator-(complex M)
{complex temp;
temp.x=x-M.x;
temp.y=y-M.y;
return temp;}
complex complex: operator*(complex M)
{
complex temp;
temp.x=x*M.x-y*M.y;
temp.y=x*M.y+y*M.x;
return temp;
}
complex complex: operator/(complex M)
{
complex temp;
temp.x=(x*M.x+y*M.y)/(M.x*M.x+M.y*M.y);
temp.y=(y*M.x-x*M.y)/(M.x*M.x+M.y*M.y);
return temp;
}
int main (int argc, char *argv[])
{
int N=2,i, j, k;
complex **P1,**P2,**Ft,**Z,*E,*Ik,**P,**B1,**O,**Z1,*Ekk,**K1,*Ek, Deter,**Z1INV,*I1,*R1,*R2,W,*U;
//Виділення пам’яті на масиви і матриці.
P1=new complex *[N];
for (i=0;i
P1[i]=new complex[N];
P2[i]=new complex[N];
for (i=0;i
P2[i]=new complex[N];
Ft=new complex *[2];
for (i=0;i
Ft[i]=new complex[4];
Z=new complex *[4];
for (i=0;i<4;i++)
Z[i]=new complex[4];
E=new complex [4];
Ik=new complex [2];
P=new complex *[N];
for (i=0;i
P[i]=new complex[N];
B1=new complex *[4];
for (i=0;i<4;i++)
B1[i]=new complex[2];
O=new complex *[2];
for (i=0;i
O[i]=new complex[4];
Z1=new complex *[N];
for (i=0;i
Z1[i]=new complex[N];
Ekk=new complex [2];
K1=new complex *[N];
for (i=0;i
K1[i]=new complex[N];
Ek=new complex [2];
I1=new complex [4];
Z1INV=new complex *[N];
for (i=0;i
Z1INV[i]=new complex[N];
R1=new complex [4];
R2=new complex [4];
U=new complex [4];
//Данні матриці ланцюга.
P1[0][0]. x=-1;P1[0][0].y=0; P1[0][1]. x=0;P1[0][1].y=0;
P1[1][0].x=1;P1[1][0].y=0; P1[1][1]. x=1;P1[1][1].y=0;
cout<<" Matrix P1″ <
for (i=0;i
{
for (j=0;j
{cout<<" t" ;P1[i][j]. show_complex ();cout<<" t" ;}
cout<
}
P2[0][0]. x=-1;P2[0][0].y=0; P2[0][1]. x=0;P2[0][1].y=0;
P2[1][0]. x=0; P2[1][0]. y=0; P2[1][1]. x=1; P2[1][1]. y=0;
cout<<" Matrix P2″ <
for (i=0;i
for (j=0;j
{cout<<" t" ;P2[i][j]. show_complex ();cout<<" t" ;}
cout<
Ft[0][0]. x=-1;Ft[0][0].y=0; Ft[0][1]. x=1;Ft[0][1].y=0; Ft[0][2]. x=1;Ft[0][2].y=0; Ft[0][3]. x=0;Ft[0][3].y=0;
Ft[1][0]. x=0; Ft[1][0]. y=0; Ft[1][1]. x=-1;Ft[1][1].y=0; Ft[1][2]. x=0;Ft[1][2].y=0; Ft[1][3]. x=1;Ft[1][3].y=0;
cout<<" Matrix Ft" <
for (i=0;i<2;i++)
{
for (j=0;j<4;j++)
{cout<<" t" ;Ft[i][j]. show_complex ();cout<<" t" ;}
cout<
}
//Матриця опорів.
Z[0][0]. x=39;Z[0][0].y=32; Z[0][1]. x=0;Z[0][1].y=0; Z[0][2]. x=0;Z[0][2].y=0; Z[0][3]. x=0;Z[0][3].y=0;
Z[1][0]. x=0; Z[1][0]. y=0; Z[1][1]. x=38.5; Z[1][1]. y=66; Z[1][2]. x=0;Z[1][2].y=0; Z[1][3]. x=0;Z[1][3].y=-20;
Z[2][0].x=0;Z[2][0].y=0; Z[2][1]. x=0;Z[2][1].y=0; Z[2][2]. x=54.5;Z[2][2].y=31; Z[2][3]. x=0;Z[2][3].y=0;
Z[3][0].x=0;Z[3][0].y=0; Z[3][1]. x=0;Z[3][1].y=-20; Z[3][2]. x=0;Z[3][2].y=0; Z[3][3]. x=45.8;Z[3][3].y=26;
cout<<" Matrix Z" <
for (i=0;i<4;i++)
{
for (j=0;j<4;j++)
{cout<<" t" ;Z[i][j]. show_complex ();cout<<" t" ;}
cout<
}
//Матриці джерел ЕРС.
E[0]. x=-119;E[0].y=-43; E[1]. x=0;E[1].y=0; E[2]. x=55;E[2].y=-95; E[3]. x=469;E[3].y=-171;
cout<<" Massiv E" ;
cout<
for (i=0;i<4;i++)
{E[i]. show_complex ();cout<<" t" ;}
cout<
//Матриця джерел струму.
Ik[0]. x=8.5;Ik[0].y=-14; Ik[1]. x=-8.5;Ik[1].y=14;
cout<<" Massiv Ik" ;
cout<
for (i=0;i<2;i++)
{Ik[i]. show_complex ();cout<<" t" ;cout<<" t" ;}
for (i=0;i
for (j=0;j
{P[i][j].x=0;P[i][j].y=0;}
for (i=0;i
for (j=0;j
for (k=0;k
P[i][j]=P2[i][k]*P1[k][j]+P[i][j];
for (i=0;i
for (j=0;j
P[i][j]=P[i][j]*Ft[0][0];
cout<<" Matrix P" <
for (i=0;i
for (j=0;j
{cout<<" t" ;P[i][j]. show_complex ();cout<<" t" ;}
cout<
}
// Матриця перетворення незалежних струмів
B1[0][0]. x=1; B1[0][0]. y=0; B1[0][1]. x=0; B1[0][1]. y=0;
B1[1][0].x=0; B1[1][0]. y=0; B1[1][1]. x=1; B1[1][1]. y=0;
B1[2][0]=P[0][0]; B1[2][1]=P[0][1];
B1[3][0]=P[1][0]; B1[3][1]=P[1][1];
cout<<" Matrix B1″ <
for (i=0;i<4;i++)
{for (j=0;j<2;j++)
{cout<<" t" ;B1[i][j]. show_complex ();cout<<" t" ;}
cout<
for (i=0;i<2;i++)
for (j=0;j<4;j++)
{O[i][j]. x=0;O[i][j].y=0;}
for (i=0;i<2;i++)
for (j=0;j<4;j++)
for (k=0;k<4;k++)
O[i][j]=Ft[i][k]*Z[k][j]+O[i][j];
for (i=0;i
for (j=0;j
{Z1[i][j].x=0;Z1[i][j].y=0;}
for (i=0;i<2;i++)
for (j=0;j<2;j++)
for (k=0;k<4;k++)
//Знаходження матриці опорів незалежних струмів
Z1[i][j]=O[i][k]*B1[k][j]+Z1[i][j];
cout<<" Matrix Z1″ <
for (i=0;i<2;i++){
for (j=0;j<2;j++)
{cout<<" t" ;Z1[i][j]. show_complex ();cout<<" t" ;}
cout<
}
for (i=0;i<2;i++)
{Ekk[i]. x=0;Ekk[i].y=0;}
//Знаходження вектору контурних ЕРС.
for (i=0;i<2;i++)
for (j=0;j<1;j++)
for (k=0;k<4;k++)
Ekk[i]=Ft[i][k]*E[k]+Ekk[i];
cout<
cout<<" Massiv Ekk" ;
cout<
for (i=0;i<2;i++)
{Ekk[i]. show_complex ();cout<<" t" ;cout<<" t" ;}
B1[0][0].x=0; B1[0][0]. y=0; B1[0][1]. x=0; B1[0][1]. y=0;
B1[1][0].x=0; B1[1][0]. y=0; B1[1][1]. x=0; B1[1][1]. y=0;
B1[2][0]=P2[0][0]; B1[2][1]=P2[0][1];
B1[3][0]=P2[1][0]; B1[3][1]=P2[1][1];
//Знаходження матриці перетворення джерел струму.
for (i=0;i
for (j=0;j
{K1[i][j]. x=0;K1[i][j].y=0;}
for (i=0;i<2;i++)
for (j=0;j<2;j++)
for (k=0;k<4;k++)
K1[i][j]=O[i][k]*B1[k][j]+K1[i][j];
cout<<" Matrix K1″ <
for (i=0;i<2;i++)
{ for (j=0;j<2;j++)
{cout<<" t" ;K1[i][j]. show_complex ();cout<<" t" ;}
cout<
for (i=0;i<2;i++)
{Ek[i]. x=0;Ek[i].y=0;}
//Знаходження вектору еквівалентних контурних ЕРС.
for (i=0;i<2;i++)
for (k=0;k<2;k++)
Ek[i]=K1[i][k]*Ik[k]+Ek[i];
cout<
cout<<" Massiv Ek" ;
cout<
for (i=0;i<2;i++)
{Ek[i]. show_complex ();cout<<" t" ;cout<<" t" ;}
//Знаходження визначнику матриці Z1.
Deter=(Z1[0][0]*Z1[1][1])-(Z1[0][1]*Z1[1][0]);
cout<
cout<<" Determinant Z1=";
Deter.show_complex ();
cout<
//Знаходження оберненої матриці Z1.
Z1INV[0][0]=Z1[1][1]/Deter; Z1INV[0][1]=Z1[0][1]/(Deter*Ft[1][1]);
Z1INV[1][0]=Z1[1][0]/(Deter*Ft[1][1]); Z1INV[1][1]=Z1[0][0]/Deter;
cout<
cout<<" Inverse Z1″ ;
cout<
for (i=0;i<2;i++){
for (j=0;j<2;j++)
{cout<<" t" ;Z1INV[i][j]. show_complex ();cout<<" t" ;}
cout<
//Знаходження результуючого вектору контурних ЕРС.
for (i=0;i<2;i++)
Ekk[i]=Ek[i]+Ekk[i];
cout<
cout<<" Massiv Ek+Ekk" ;
cout<
for (i=0;i<2;i++)
{Ekk[i]. show_complex ();cout<<" t" ;cout<<" t" ;}
for (i=0;i<4;i++)
{I1[i].x=0;I1[i].y=0;}
for (i=0;i<2;i++)
for (k=0;k<2;k++)
// Обчислення незалежних струмів.
I1[i]=Z1INV[i][k]*Ekk[k]+I1[i];
cout<<<
cout<<" Massiv I, Vector Nezavisimih Tokod" ;
cout<
for (i=0;i<2;i++)
{I1[i]. show_complex ();cout<<" t" ;cout<<" t" ;}
B1[0][0].x=1; B1[0][0]. y=0; B1[0][1]. x=0; B1[0][1]. y=0;
B1[1][0].x=0; B1[1][0]. y=0; B1[1][1]. x=1; B1[1][1]. y=0;
B1[2][0]=P[0][0]; B1[2][1]=P[0][1];
B1[3][0]=P[1][0]; B1[3][1]=P[1][1];
for (i=0;i<4;i++)
{R1[i].x=0;R1[i].y=0;}
for (i=0;i<4;i++)
for (k=0;k<2;k++)
R1[i]=B1[i][k]*I1[k]+R1[i];
cout<
for (i=0;i<4;i++)
{R2[i].x=0;R2[i].y=0;}
for (i=0;i<4;i++)
B1[0][0].x=0; B1[0][0]. y=0; B1[0][1]. x=0; B1[0][1]. y=0;
B1[1][0].x=0; B1[1][0]. y=0; B1[1][1]. x=0; B1[1][1]. y=0;
B1[2][0]=P2[0][0]; B1[2][1]=P2[0][1];
B1[3][0]=P2[1][0]; B1[3][1]=P2[1][1];
for (i=0;i<4;i++)
for (k=0;k<2;k++)
R2[i]=B1[i][k]*Ik[k]+R2[i];
cout<
cout<
for (i=0;i<4;i++)
R1[i]=R1[i]-R2[i];
cout<
cout<<" Vector tokov vetvei cepi" ;
cout<
for (i=0;i<4;i++)
{R1[i]. show_complex ();cout<
cout<
//Перевірка результату першим законом Кірхгофа.
cout<<" Proverka pervim zakonom Kirhgofa dlya uzla A" ;
W=Ik[0]-R1[0]-R1[2];
cout<
W.show_complex ();
cout<
cout<<" Proverka pervim zakonom Kirhgofa dlya uzla B" ;
W=R1[2]-R1[1]-R1[3];
cout<
W.show_complex ();
cout<
cout<<" Proverka pervim zakonom Kirhgofa dlya uzla C" ;
W=R1[0]+R1[1]+R1[3]-Ik[0];
cout<
W.show_complex ();
cout<
for (i=0;i<4;i++)
{R2[i].x=0;R2[i].y=0;
for (i=0;i<4;i++)
for (k=0;k<4;k++)
R2[i]=Z[i][k]*R1[k]+R2[i];
for (i=0;i<4;i++)
U[i]=E[i]-R2[i];
// Обчислення напруги віток ланцюга за законом Ома.
cout<<" Po zakonu Oma napryazheniya vo vseh vetvyah cepi" ;
cout<
for (i=0;i<4;i++)
{U[i]. show_complex ();cout<
system («PAUSE»);
return EXIT_SUCCESS;
}
5. РЕЗУЛЬТАТИ РОБОТИ ПРОГРАМИ Результати роботи програми представлені у вигляді скриншоту зробленого на Visual С++ 6.
Рисунок 6 Результати програми
ВИСНОВКИ Було розроблено програму в С++, яка обирає розраховує струм в усіх гілках схеми методом незалежних струмів. Програма працює вірно, це було перевірено при ручному розрахунку і за допомогою першого закону Кірхгофа і закону Ома.
ЛІТЕРАТУРА
1. Алексеев Е. Р. Программирование на Microsoft Visual C++ и Turbo C++ Explorer. М.: НТ Пресс, 2007. — 352 с.
2. Кириленко О. В. Математичне моделювання в електроенергетиці. — Львів, Видавництво національного університету «Львівська політехніка», 2010. — 608 с
3. Джура С. Г. Конспект лекций по курсу «Математические методы в решении электротехнических задач на ЭВМ». - Донецк, 2007. — 55 с.
4. Перхач В. С. Математичні задачі електроенергетики.-Львів, 1989.-464 с.
5. Джура С.Г. методичні вказіки та контрольні завдання до курсової роботи з курсу «Математичні задачі електроенергетики». — Донецьк, ДонНТУ, 2002.-62 с.