Лінійні електричні кола 2

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Курсова робота

"Лінійні електричні кола"

Введення

Для вирішення поставленої завдань використовується мова С + +. На сьогоднішній день він є одним з найпоширеніших мов програмування. Його перевагами є гнучкість, переносимість, універсальність. На цій мові написані найпоширеніші на сьогоднішній день операційні системи, такі як Windows і Linux.

1. Постановка завдання

У схемі електричного кола, наведеною на рисунку 1, визначити струми, в гілках користуючись законами Кірхгофа. Параметри елементів ланцюга: R 1 = 50 Ом, R 2 = 20 Ом, R 3 = 50 Ом, R 4 = 80 Ом, E 1 = 50 В, E 2 = 400 В.

У програмі не обходимо передбачити, звідки будуть зчитуватися вихідні дані - з діалогового вікна або з текстового файлу. Результати обчислень зберегти в текстовому файлі result. Txt.

Засобами математичного пакета чи електронних таблиць перевірити результати роботи програми, для вирішення системи рівнянь використовувати метод Крамера або метод оберненої матриці, також можна використовувати функції математичного пакету.

Написати програму вирішення задачі, для вирішення системи лінійних алгебраїчних рівнянь скористатися методом Гаусса.

I 1 I 2

R 1 1 R 2

I 3

E 1 E 2

R 3


2 R 4

2. Математична модель поставленої задачі

Вибираємо довільно позитивні напрямки шуканих струмів гілок і позначаємо їх на схемі. Складаємо рівняння за першим законом Кірхгофа для вузла 1. Вибравши напрямок обходів контурів, складаємо рівняння за другим законом Кірхгофа. Отримуємо систему з трьох рівнянь:

I 1 + I 2 - I 3 = 0

I 1 R 1 + I 3 R 3 = E 1

- I 2 (R 2 + R 4) - I 3 R 3 = - E 2

Перетворимо систему рівнянь в матрицю коефіцієнтів системи - А, стовпець її вільних членів у вектор - b, стовпець з невідомих (шуканий вектор) у вектор - х. Тоді система коротко може бути записана у вигляді матричного рівняння Ах = b. Вирішимо цю систему лінійних рівнянь за допомогою алгоритму послідовного виключення невідомих - метод Гаусса. Використовуючи цей метод ми перетворюємо не систему рівнянь, а розширену матрицю системи, яку отримуємо при додаванні до основної матриці А стовпця вільних членів b. Прямим ходом методу Гауса ми наведемо розширену матрицю до трикутного виду, тобто всі елементи матриці нижче головної діагоналі будуть дорівнюють нулю. Якщо на головній діагоналі зустрічається елемент рівний нулю, замінюємо його максимальним за модулем елементом у цьому стовпці, змінюючи рядка. В результаті виконання прямого ходу методу Гаусса система рівнянь буде мати вигляд:

а 00 х 0 + а 01 х 1 + а 02 х 2 + ... + а 0 n -1 х n -1 = b 0;

a 11 х 1 + а 12 х 2 + ... + а 1 n -1 x n -1 = b 1;

a 22 x 2 +   ... + A 2n-1 x n-1 = b 2;

...

a n-1 x n-1 = b n-1.

І цю систему вирішимо зворотним ходом методу Гауса.

3. Блок-схема алгоритму

Рис. 3.1. Блок-сема програми

4. Опис алгоритму

На рис. 3.1 представлена ​​блок-схема програми: блок 1 - зчитуємо з файлу дані - R 1, R 2, R 3, R 4, E 1, E 2; блок 2 - формуємо матрицю А і вектор вільних членів В; блок 3 - виклик функції SLAU (метод Гаусса); блок 3 - виведення рішень - масиву х, тобто значення шуканих струмів - I.

На рис. 3.2 представлена ​​блок-схема методу Гауса: блоки 1-6 - введення даних, n - розмірність системи рівнянь, система задається у вигляді матриці А і вектора вільних коефіцієнтів b; блоки 6-17 - прямий хід методу Гауса; блоки 22-26 - зворотний хід методу Гауса;

блоки 18-19 - якщо результат перевірки цих умов позитивний, то виводиться повідомлення, що система має нескінченну безліч рішень (блок 21); якщо умова 19 виконується, а 20 - ні, то виводиться повідомлення - немає рішень (блок 21); блоки 22 -25 - рішення системи рівнянь, представлені вектором х; блок 26 - висновок на друк, у разі невиконання умови.

5. Характеристика даних та їх умовні позначення

п \ п

Найменування даних

Позначення

в блок-схемі

Позначення

у програмі

Тип змінних

1

Опір

ланцюга R

R

R i

double * R

2

Матриця А

A ij

A ij

double ** A

3

Вектор вільних членів b

B i

B i

double * B

4

Е.р.с. Е

Е

E i

double * E

5

Сила струму I

x

x

double * X

6. Текст програми

# Include «stdafx.h»

# Include <iostream.h>

# Include <fstream.h>

# Include <math.h>

# Include <iomanip.h>

# Include <stdlib.h>

# Include <malloc.h>

int SLAU (double ** matrica_a, int n, double * massiv_b, double * x)

/ / Функція SLAU повертає значення типу int: 0, якщо рішення знайдено, / / -1 якщо система має нескінченну безліч рішень, -2 якщо / / система не має рішень. Параметри ф-ії: n-розмірність матриці, / / matrica _ a - матриця коефіцієнтів СЛАР, massiv _ b - вектор правих / / частин, х - рішення СЛАР.

{

int i, j, k, r;

double c, M, max, s, ** a, * b;

/ / Виділення пам'яті для а і b.

a = new double * [n];

for (i = 0; i <n; i + +)

a [i] = new double [n];

b = new double [n];

/ / В а записуємо копію матриці, в b копію вектора правих частин.

for (i = 0; i <n; i + +)

for (j = 0; j <n; j + +)

a [i] [j] = matrica_a [i] [j];

for (i = 0; i <n; i + +)

b [i] = massiv_b [i];

/ / Прямий хід методу Гауса: наводимо матрицю до діагонального вигляду.

for (k = 0; k <n; k + +)

{

/ / Пошук максимального по модулю елементів у k-му стовпці.

max = fabs (a [k] [k]);

r = k;

for (i = k +1; i <n; i + +)

if (fabs (a [i] [k])> max)

{

max = fabs (a [i] [k]);

r = i;

}

/ / Міняємо рядки місцями k-ю і r-ю.

for (j = 0; j <n; j + +)

{

c = a [k] [j];

a [k] [j] = a [r] [j];

a [r] [j] = c;

}

c = b [k];

b [k] = b [r];

b [r] = c;

/ / Приведення матриці до діагонального вигляду.

for (i = k +1; i <n; i + +)

{

for (M = a [i] [k] / a [k] [k], j = k; j <n; j + +)

a [i] [j] - = M * a [k] [j];

b [i] - = M * b [k];

}

}

/ / Зворотний хід методу Гаусса.

if (a [n -1] [n -1] == 0)

if (b [n-1] == 0)

return -1;

else return -2;

else

{

for (i = n-1; i> = 0; i-)

{

for (s = 0, j = i +1; j <n; j + +)

s + = a [i] [j] * x [j];

x [i] = (b [i] - s) / a [i] [i];

}

return 0;

}

/ / Звільнення пам'яті, виділеної під копії матриці / / коефіцієнтів, вектора правих частин.

for (i = 0; i <n; i + +)

delete [] a [i];

delete [] a;

delete [] b;

}

int main ()

{

int result, i, N, K, L;

double ** A, * B, * x, * R, * E;

ifstream f;

/ / Відкриття текстового файлу abc. Txt в режимі читання

f.open («A: \ \ Kurs \ \ abc.txt», ios: in);

N = 3;

K = 4;

L = 2;

/ / Виділення пам'яті для матриці правих частин і вектора вільних / / членів.

A = new double * [N];

for (i = 0; i <N; i + +)

A [i] = new double [N];

B = new double [N];

x = new double [N];

R = new double [K];

E = new double [L];

for (i = 1; i <= K; i + +)

/ / Читання значенні R.

f>> R [i];

/ / Формування матриці правих частин.

A [0] [0] = 1;

A [0] [1] = 1;

A [0] [2] =- 1;

A [1] [0] = R [1];

A [1] [1] = 0;

A [1] [2] = R [3];

A [2] [0] = 0;

A [2] [1] =- R [2] - R [4];

A [2] [2] =- R [3];

for (i = 1; i <= L; i + +)

/ / Читання значень Е.

f>> E [i];

/ / Формування вектора вільних членів.

B [0] = 0;

B [1] = E [1];

B [2] =- E [2];

/ / Виклик функції рішення СЛАР методом Гауса. Якщо result = 0, то / / система має єдине рішення, result = -1, то система має / / нескінченну безліч рішень, result = -2, то система не має / / рішень.

result = SLAU (A, N, B, x);

if (result == 0)

{

ofstream ff;

/ / Відкриття текстового файлу rezult. Txt в режимі запису.

ff.open («A: \ \ Kurs \ \ rezult.txt», ios: out);

ff <<«Massiv X \ n»;

/ / Виведення масиву рішення.

cout <<«Massiv X \ n»;

/ / Запис результатів рішення в текстового файлу rezult. Txt.

for (i = 0; i <N; i + +)

{

cout <<x [i] <<»\ t»;

ff <<x [i] <<»\ t»;

}

/ / Закриття файлу.

ff.close ();

}

else if (result ==- 1)

cout <<«Great number of Solution»;

else if (result ==- 2)

cout <<«No solution»;

/ / Звільнення пам'яті, виділеної під матриці коефіцієнтів, / / вектора правих частин.

for (i = 0; i <N; i + +)

delete [] A [i];

delete [] A;

delete [] B;

delete [] x;

return 0;

}

7. Контрольний приклад

Проведемо контрольний розрахунок за допомогою електронних таблиць Excel.

А

1

1

-1


B

0


50

0

50



50


0

-100

-50



-400








Aобр

0,4

0,012

0,004


Х

-1


0,2

-0,004

-0,008



3


-0,4

0,008

-0,004



2

8. Аналіз результатів

Поставлена ​​задача визначення величин і напрямків струмів в вітках електричної ланцюга вирішена з використанням методу Гаусса. У результаті роботи розробленої програми ми отримали значення шуканого вектора Х: -1, 3, 2. За вектор Х ми ​​прийняли значення струмів в гілках, тобто I 1 = - 1, I 2 = 3, I 3 = 2. Струм I 1 має негативне значення тому що спрямований протилежно струмам I 2, I 3.

Роботу програми ми перевірили в електронних таблицях Excel, використовуючи метод оберненої матриці. Так як результати виконання завдання з допомогою Excel і С + + збігаються, робимо висновок про те, що створена нами програма працює з досить малими похибками обчислень. Неточності практично повністю відсутні завдяки застосуванню точних методів рішення.

Висновок

У цій роботі для вирішення електротехнічної завдання були застосовані і закріплені теоретичні знання та практичні навички, отримані при вивченні курсу «Введення в інформатику».

Основним методом вирішенні задачі був метод Гаусса. Перевірка роботи програми була проведена в електронних таблицях Excel. Результати отримані при програмуванні завдання на мові С + + збігаються з результатами отриманими під час вирішення завдання в електронних таблицях, значить завдання виконано повністю.

Список використаної літератури

1. Алексєєв Є. Р. MS Visual C + + і Turbo C + + Explorer (під загальною редакцією Чесноковой О.В.) / Алексєєв Є.Р. - М.: НТ Пресс, 2007. - 352 с.: Іл. - (Повна версія).

2. Бронштейн І.М., Семендяев К.А. Довідник з математики для інженерів і учнів втузів. - 13-е вид., Виправлене. - М.: Наука, Гл. ред. фіз.-мат. лит., 1986. - 544 с.

3. Пасічник М.Д. Елементарна електротехніка. Київ - 1963. - 234 с.

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
56.3кб. | скачати


Схожі роботи:
Лінійні електричні кола
Аналіз передачі періодичних сигналів через лінійні електричні кола
Електричні кола постійного струму
Електричні кола з бінарними потенціалами
Нелінійні електричні кола в режимі постійного струму
Електричні кола з нелінійними перетворювачами і оперативна корекція режиму енергосистеми
Формування комунікаційної політики на прикладі продуктів Пепсі-кола і Кока-кола
Лінійні вимірювання
Лінійні функції
© Усі права захищені
написати до нас