Определение токов в ветвях электрической цепи c помощью ЭВМ и системы линейных уравнений

Тип работы:
Контрольная
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Контрольная работа

Определение токов в ветвях электрической цепи c помощью ЭВМ и системы линейных уравнений

Аннотация

Введение

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

2. Описание математической модели решения задачи

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

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

5. Характеристика данных и их условие обозначения

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

7. Анализ результатов

Заключение

Аннотация

Цель — определение токов в ветвях электрической цепи. Ток в цепи не везде одинаковый, и что бы рассчитать его на всех участках, основываясь законами тока и составными цепи.

Решение построено на основе линейных электрических уравнений. Пользуемся методом моделирования. Это удобный метод.

У нас есть система линейных алгебраических уравнений, которую нам надо решить, точнее найти её корни. Воспользуемся методом Гаусса для решения СЛАУ. Ещё есть методы Крамера и обратной матрицы, но нам более приемлем метод Гаусса. Наши корни — это потенциалы узлов в цепи, с помощью которых мы можем рассчитать ток в цепи во всех ветвях.

уравнение программа ток электрическая цепь

Введение

Надо найти силу тока на всех ветвях в электрической цепи методом узловых напряжений. В практических задачах встречаются цепи, имеющие всего две узловые точки. Между узловыми точками может быть включено произвольное количество ветвей. Расчет таких цепей значительно упрощается, если пользоваться методом узлового напряжения.

Задача сводится к математической модели, которая решается системой линейных алгебраических уравнений и которая решается методом Гаусса.

Метод Гаусса — классический метод решения системы линейных алгебраических уравнений (СЛАУ). Это метод последовательного исключения переменных, когда с помощью элементарных преобразований система уравнений приводится к равносильной системе ступенчатого (или треугольного) вида, из которого последовательно, начиная с последних (по номеру) переменных, находятся все остальные переменные.

Система m линейных уравнений с n неизвестными в линейной алгебре -- это система уравнений вида:

Где, , …, -- неизвестные, которые надо определить., , …, -- коэффициенты системы -- и, , … -- свободные члены -- предполагаются известными. Индексы коэффициентов () системы обозначают номера уравнения i и неизвестного.

Задача решается с применением ПЭВМ, потому что результаты обработки информации на бумаге, куда менее удобны для пользователя, чем

отображение обработанной информации на экране дисплея.

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

Определить токи во всех ветвях электрической цепи (рис. 1. 1) методом узловых напряжений.

R1=75Ом, R2=76Ом, R3=77Ом, R4=78Ом, R5=79Ом, R6=80Ом, E2=95 В, E4=40 В, Ik1=0. 47A.

Рис. 1. 1

В программе необходимо предусмотреть, откуда будет считываться исходные данный — с диалогового окна или из текстового файла. Результаты вычислений сохранить в текстовом файле result. txt. Средствами математического пакета или электронных таблиц проверить результаты работы программы. Найти значения токов во всех ветвях электрической цепи (см. рис. 1. 1), проверить баланс мощностей. Для решения системы линейных уравнений воспользоваться методом Гаусса.

2. Описание математической модели решения задачи

Приравниваем потенциал узла d нулю и составим уравнения для потенциалов остальных узлов.

Решив систему одним из известных методов получим значения потенциалов узлов. После чего найдём значения токов в ветвях цепи:

Проверим баланс мощностей

.

Мощность источников

Мощность нагрузок

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

Рис. 3.1. Блок-схема алгоритма функции, решения методом Гаусса

Рис. 3.2. Блок-схема алгоритма решения задания

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

Описание алгоритма функции, решающей методом Гаусса:

1−19 — функция метода Гаусса.

3−14 — прямой ход метода Гаусса.

4−10 — перестановка строк расширенной матрицы, в результате которого избавляемся нулевых элементов на главной диагонали.

11−14 — приведения расширенной матрицы к треугольному виду.

15−19 — вывод случаев, при которых система имеет бесконечное количество решений и когда система решений не имеет.

Описание алгоритма основной функции:

1−36 — весь алгоритм решения задания.

2−9 — последовательный ввод данных.

10 — вызов функции метода Гаусса.

11−16 — проверка на случаи, когда система имеет бесконечное количество решений и когда система решений не имеет.

17−21 — обратный ход матрицы, которым вычисляются сами решения системы линейных алгебраических уравнений.

22−23 — ввод массива токов в ветвях цепи.

24−27 — определение мощностей источников и нагрузки из полученных данных.

28−30 — вывод значений токов в ветвях цепи на экран и в файл.

31−32 — вывод значений мощностей на экран и в файл.

33−35 — проверка на баланс мощностей и вывод ответа.

5. Характеристика данных и их условие обозначения

№ пп

Наименование данных

Обозначение в блок-схеме

Обозначение в программе

Тип переменных

01

Коэффициенты системы

a

a

double**

02

Свободные члены

b

b

double*

03

Потенциалы

x

x

double*

04

Первое сопротивление

R1

R

double*

05

Второе сопротивление

R2

double*

06

Третье сопротивление

R3

double*

07

Четвёртое сопротивление

R4

double*

08

Пятое сопротивление

R5

double*

09

Шестое сопротивление

R6

double*

10

Первый ток

I1

I

double*

11

Второй ток

I2

double*

12

Третий ток

I3

double*

13

Четвёртый ток

I4

double*

14

Пятый ток

I5

double*

15

Шестой ток

I6

double*

16

Напряжение

E2

E2

double

17

напряжение

E4

E4

double

18

Ток

Ik1

Ik1

double

19

Мощность источников

Pnagr

Pnagr

double

20

Мощность нагрузок

Pist

Pist

double

21

Сумма

s

S

double

22

Переменная

c

c

double

23

Коэффициент

M

M

double

24

Максимальный элемент

max

max

double

25

Количество элементов

n

N

int

26

Количество элементов

m

M

int

27

Входной поток

F

F

Поток

28

Выходной поток

f

f

Поток

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

Текст программы на Microsoft Visual C++ 6. 0:

#include «stdafx. h»

#include < iostream. h>

#include < math. h>

#include < fstream. h>

#include < iomanip. h>

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

{

int i, j, k, r;

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

a=new double *[n];

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

a[i]=new double[n];

b=new double [n];

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++)

{

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;

}

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 ()

{

ifstream F;

ofstream f;

int result, i, N=3,M=5,p;

double **a,*b,*x,*R, E2, E4,Ik1,*I, S, Pist, Pnagr;

a=new double *[N];

I=new double [M];

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

a[i]=new double[N];

b=new double [N];

x=new double [N];

R=new double [M];

cout< <"VbIbirite metod vvoda: «<<endl;

cout< <"Vvod c ekrana — 1"< <endl;

cout< <"Vvod c faula — 2"< <endl;

cout< <"Metod — «;

cin> >p;

if (p==1)

{

cout< <"R1="; cin> >R[0];

cout< <"R2="; cin> >R[1];

cout< <"R3="; cin> >R[2];

cout< <"R4="; cin> >R[3];

cout< <"R5="; cin> >R[4];

cout< <"R6="; cin> >R[5];

cout< <"E2="; cin> >E2;

cout< <"E4="; cin> >E4;

cout< <"Ik1="; cin> >Ik1;

}

else

{

F. open («D:\111\123. txt»);

F> >R[0]>>R[1]>>R[2]>>R[3]>>R[4]>>R[5]>>E2>>E4>>Ik1;

F. close ();

}

a[0][0]=1/R[0]+1/R[1]+1/R[3];

a[0][1]=-1/R[1];

a[0][2]=-1/R[3];

a[1][0]=-1/R[1];

a[1][1]=1/R[1]+1/R[2]+1/R[5];

a[1][2]=-1/R[2];

a[2][0]=-1/R[3];

a[2][1]=-1/R[2];

a[2][2]=1/R[2]+1/R[3]+1/R[4];

b[0]=-E2/R[1]+E4/R[3]+Ik1;

b[1]=E2/R[1];

b[2]=-E4/R[3];

result=SLAU (a, N, b, x);

f. open («D:\111\rezult. txt»);

if (result==0)

{

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

x[i]=-x[i];

cout< <"Massiv X"< <endl;

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

cout< <x[i]<<"t";

cout< <endl;

f< <"x[i]=";

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

if (i< N-1) f< <x[i]<<"t";

else f< <x[i];

I[0]=0-x[0]/R[0];

I[1]=x[0]-x[1]+E2/R[1];

I[2]=x[2]-x[1]/R[2];

I[3]=x[2]-x[0]+E4/R[3];

I[4]=0-x[2]/R[4];

I[5]=x[1]-0/R[5];

Pist=E2*I[1]+E4*I[3]-Ik1*I[0]*R[0];

f< <endl;

for (i=0,S=0; i<=M;i++)

S+=I[i]*I[i]*R[i];

Pnagr=S;

cout< <"I[i]=";

f< <"I[i]=";

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

{

cout< <I[i]<<"t";

if (i< M-1) f< <I[i]<<"t";

else f< <I[i];

}

cout< <endl;

cout< <"Pist="<<Pist<<endl;

cout< <"Pnagr="<<Pnagr<<endl;

f< <endl;

f< <"Pist="<<Pist<<endl;

f< <"Pnagr="<<Pnagr<<endl;

if (Pist==Pnagr)

cout< <"Balance mojnocteu covnadatt"< <endl;

else cout< <"Balance mojnocteu ne covnadatt"< <endl;

f. close ();

}

else if (result==-1)

{

cout< <"beckone4noe mnojectvo rewenii";

f< <"beckone4noe mnojectvo rewenii";

}

else if (result==-2)

{

cout< <"net rewenii";

f< <"net rewenii";

}

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

delete [] a[i];

delete [] a;

delete [] b;

delete [] x;

return 0;

}

7. Анализ результатов

По условию нам были даны: значения сопротивлений элементов цепи, напряжение в двух ветвях цепи и силу тока в данной точке; схематическая и математическая модель цепи.

Находим корни уравнения системы линейных уравнений, которые является потенциалами во всех ветвях цепи. С помощью которых находим значения токов в ветвях цепи. Проверяем баланс мощностей в цепи по найденным значениям мощностей источников и нагрузок.

Значения токов на ветвях везде разные, это говорит нам о том, что-либо напряжения разные, либо сопротивления, по закону Ома.

Подтвердилось, что работать с файлами удобно и просто. А так же, что использование различных математических пакетов и языков программирования для решения различных задач очень удобно и компактно, быстрая переработка информации и максимально точные результаты.

Результаты в MS VC++ 6. 0:

X[0]=-4. 27 091; X[1]=-33. 6117; X[2]=0. 560 234; - корни системы линейных алгебраических уравнений, значения потенциалов в ветвях цепи.

I[0]=0. 569 455; I[1]=30. 5908; I[2]=0. 996 749; I[3]=5. 34 397; I[4]=-0. 709 157; I[5]=-33. 6117; - значения токов в ветвях цепи.

Pist=3117. 87; - значение мощности источников.

Pnagr=163 804. 51; - значение мощности нагрузок.

Результаты проверки в Scilab:

X[0]=-4. 27 091; X[1]=-33. 6117; X[2]=0. 560 234;

I[0]=0. 569 455; I[1]=30. 5908; I[2]=0. 996 749; I[3]=5. 34 397;

I[4]=-0. 709 157; I[5]=-33. 6117;

Pist=3117. 87;

Pnagr=163 804. 51;

Все результаты совпадают и в MS VC++ и в Scalab.

Заключение

Результаты помогли убедится, что пользоваться методом Гаусса для решения СЛАУ очень удобно, а также даёт правильный результат.

Полученные значения токов показало, что не везде ток в цепи одинаковый, он зависит от составных электрической цепи.

Эта работа помогла освоить тему «Линейные электрические цепи» и научится применять теоретические сведения на практике.

А Также закрепить знания курса «Введение в информатику» и применить их при программировании реальной задачи на основе электрической цепи.

Использование ЭВМ очень помогает точно рассчитать информацию любого уровня, используя при этом малый период времени, что сильно облегчает работу людей.

ПоказатьСвернуть
Заполнить форму текущей работой