Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Розробка програми в С++ для розрахунку струму в усіх гілках схеми методом незалежних струмів

КонтрольнаДопомога в написанніДізнатися вартістьмоєї роботи

За базисний приймемо вузол В. Незалежних струмів 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 с.

Показати весь текст
Заповнити форму поточною роботою