Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Сформувати вузлову модель електричної системи.



:

Сформувати вузлову модель електричної системи.

приклад:

Для заданої електричної системи (рис. 1-1), використовуючи схеми заміщення елементів ланцюга і пред ставлю джерела електро енерго гии як джерела напруги, а пот ребітелей заданими струмами навантаження, скласти розрахункову схему.

Для даного прикладу - це схема, представлена ​​на рис.1-2. Балансуючого вузла привласнимо номер 0, решта нумеруються довільно, але при нумерації спочатку враховують гілки дерева 1-9, а потім хорди 10-16.

Перший контур з'являється при замиканні хорди 10, другий контур - утворюється хордою 11і гілками 9,3,7. Позитивні напрямки контурів приймаємо за годинниковою стрілкою. Позитивні напрямки хорд повинні відповідати напрямам контурів, позитивні напрямки гілок дерева вибираємо довільно.

Складаємо матриці інціденцій:

Матриця з'єднання гілок у вузлах

Матриця з'єднань гілок в контури:

Матриця коефіцієнтів розподілу струмів для гілок дерева:

Системи рівнянь 1 закону Кірхгофа:

 

 

Узагальнена система рівнянь електричного кола в матричному вигляді:

Контурна модель електричної системи формулюється так:

:

Тут - власні і взаємні опору контурів, які обчислюють за формулами:

Знаючи контурні струми можемо визначити струми гілок і напруги вузлів:

;

 

Вузлову модель будуємо використовуючи рівняння:

Власні провідності вузлів визначаються таким чином:

В вузловий моделі гілку 17 не враховується, так як напруга балансуючого вузла задається в явному вигляді, тому матриця М використовується тут без останнього стовпця, відповідного умовної гілки 17.:

 

//HOWTO solve system of linear equations//ax=b//where a[N][N] is square matrix,//b[N] and x[N] are columns //data are stored in input text file: //input file format://a_11 a_12 a_13... a_1N b_1//a_21 a_22 a_23... a_2N b_2//...//a_N1 a_N2 a_N3... a_NN b_N #include <stdio.h>#include <process.h>float **a, *b, *x;int N;char filename[256];FILE* InFile=NULL;void count_num_lines(){ //count number of lines in input file - number of equations int nelf=0; //non empty line flag do{ nelf = 0; while(fgetc(InFile)!='\n' &&!feof(InFile)) nelf=1; if(nelf) N++; }while(!feof(InFile));} void freematrix(){ //free memory for matrixes int i; for(i=0; i<N; i++){ delete [] a[i]; } delete [] a; delete [] b; delete [] x;} void allocmatrix(){ //allocate memory for matrixes int i,j; x = new float[N]; b = new float[N]; a = new float*[N]; if(x==NULL || b==NULL || a==NULL){ printf("\nNot enough memory to allocate for %d equations.\n", N); exit(-1); } for(i=0; i<N; i++){ a[i] = new float[N]; if(a[i]==NULL){ printf("\nNot enough memory to allocate for %d equations.\n", N); } } for(i=0; i<N; i++){ for(j=0; j<N; j++){ a[i][j]=0; } b[i]=0; x[i]=0; }} void readmatrix(){ int i=0,j=0; //read matrixes a and b from input file for(i=0; i<N; i++){ for(j=0; j<N; j++){ fscanf(InFile, "%f", &a[i][j]); } fscanf(InFile, "%f", &b[i]); }} void printmatrix(){ //print matrix "a" int i=0,j=0; printf("\n"); for(i=0; i<N; i++){ for(j=0; j<N; j++){ printf(" %+f*X%d", a[i][j], j); } printf(" =%f\n", b[i]); }} void testsolve(){ //test that ax=b int i=0,j=0; printf("\n"); for(i=0; i<N; i++){ float s = 0; for(j=0; j<N; j++){ s += a[i][j]*x[j]; } printf("%f\t%f\n", s, b[i]); }}void printresult(){ int i=0; printf("\n"); printf("Result\n"); for(i=0; i<N; i++){ printf("X%d = %f\n", i, x[i]); }}void diagonal(){ int i, j, k; float temp=0; for(i=0; i<N; i++){ if(a[i][i]==0){ for(j=0; j<N; j++){ if(j==i) continue; if(a[j][i]!=0 && a[i][j]!=0){ for(k=0; k<N; k++){ temp = a[j][k]; a[j][k] = a[i][k]; a[i][k] = temp; } temp = b[j]; b[j] = b[i]; b[i] = temp; break; } } } }}void cls(){ for(int i=0; i<25; i++) printf("\n");}void main(){ int i=0,j=0, k=0; cls(); do{ printf("\nInput filename: "); scanf("%s", filename); InFile = fopen(filename, "rt"); }while(InFile==NULL); count_num_lines(); allocmatrix(); rewind(InFile); //read data from file readmatrix(); //check if there are 0 on main diagonal and exchange rows in that case diagonal(); fclose(InFile); printmatrix(); //process rows for(k=0; k<N; k++){ for(i=k+1; i<N; i++){ if(a[k][k]==0){ printf("\nSolution is not exist.\n"); return; } float M = a[i][k] / a[k][k]; for(j=k; j<N; j++){ a[i][j] -= M * a[k][j]; } b[i] -= M*b[k]; } } printmatrix(); for(i=N-1; i>=0; i--){ float s = 0; for(j = i; j<N; j++){ s = s+a[i][j]*x[j]; } x[i] = (b[i] - s) / a[i][i]; } InFile = fopen(filename, "rt"); readmatrix(); fclose(InFile); printmatrix(); testsolve(); printresult(); freematrix();}

Створіть у будь-якому текстовому редакторі (наприклад в notepad-е) файл, де напишіть коефіцієнти рівнянь порядково через пробіл, приблизно так:



a11

a12

a13

...

a1N

b1

a21

a22

a23

...

a2N

b2

a31

a32

a33

...

a3N

b3

aN1

aN2

aN3

...

aNN

bN

Наприклад:

 

-3

   

-1

-1

   
   

-1

 

Цей файл необхідно створити в тій директорії, де лежить програма, Результат:

X0 = 3.000000
X1 = 1.000000
X2 = 2.000000

Це і є рішення системи рівнянь, тобто набір невідомих Х.

Призначення підпрограм в даній програмі:

• void count_num_lines () - підраховує кількість рівнянь в системі

• void allocmatrix () - виділяє пам'ять для масивів для зберігання коефіцієнтів рівнянь, вільних членів і рішення

• void readmatrix () - прочитує з файлу коефіцієнти і вільні члени в масиви

• void printmatrix () - роздруковує систему рівнянь

• void diagonal () - робить так, щоб на головній діагоналі не було нулів, щоб не довелося одного разу ділити на нуль в процесі приведення матриці до трикутного виду

• void testsolve () - підставляє рішення в систему і роздруковує поруч те, що виходить у лівій частині рівняння і для порівняння друкує поруч вільні члени, ті, що в правій частині рівняння; вийшли два стовпці повинні збігатися, якщо рівняння вирішені правильно

• void printresult () - роздруковує вийшов стовпець рішень

• void freematrix () - звільняє пам'ять, яка була виділена раніше

• void cls () - стирає екран на початку роботи програми

• void main () - основна функція з якої послідовно викликаються всі вищеперелічені функції, і проходить процес приведення системи рівнянь до трикутного вигляду і зворотна прогонка.


Дата добавления: 2015-08-27; просмотров: 71 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
1. Тема: Расчет на прочность при колебаниях | http://ficbook.net/readfic/3097962 1 страница

mybiblioteka.su - 2015-2024 год. (0.011 сек.)