Учебная работа. Курсовая работа: Линейные электрические цепи 2
«Линейные электронные цепи»
Введение
Для решения поставленной задач употребляется язык С++. На нынешний денек он является одним из самых всераспространенных языков программирования. Его преимуществами являются упругость, переносимость, универсальность. На этом языке написаны самые всераспространенные на нынешний денек операционные системы, такие как Windows и Linux.
1. Постановка задачки
В схеме электронной цепи, приведенной на рисунке 1, найти токи, в ветвях пользуясь законами Кирхгофа. характеристики частей цепи: R1
=50 Ом, R2
=20 Ом, R3
=50 Ом, R4
=80 Ом, E1
=50 В, E2
=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. Выбрав направление обходов контуров, составляем уравнения по второму закону Кирхгофа. Получаем систему из 3-х уравнений:
I1
+ I2
– I3
= 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
=b0
;
a11
х1
+а12
х2
+ … +а1
n
-1
xn
-1
=b1
;
a22
x2
+ … +a2n-1
xn-1
=b2
;
…
an-1
xn-1
=bn-1.
И эту систему решим оборотным ходом способа Гаусса.
3. Блок-схема метода
Рис. 3.1. Блок-сема программки
4. Описание метода
На рис. 3.1 представлена блок-схема программки: блок 1 – считываем из файла данные – R1, R2, R3, R4, E1, E2; блок 2 – формируем матрицу А и вектор вольных членов В; блок 3 – вызов функции SLAU (способ Гаусса); блок 3 – вывод решений – массива х, т.е.
На рис. 3.2 представлена блок-схема способа Гаусса: блоки 1–6 – ввод данных, n – размерность системы уравнений, система задается в виде матрицы А и вектора вольных коэффициентов b; блоки 6–17 – прямой ход способа Гаусса; блоки 22–26 – оборотный ход способа Гаусса;
блоки 18–19 – если итог проверки этих критерий положительный, то выводится сообщение, что система имеет нескончаемое огромное количество решений (блок 21); если условие 19 производится, а 20 – нет, то выводится сообщение – нет решений (блок 21); блоки 22–25 – решения системы уравнений, представлены вектором х; блок 26 – вывод на печать, в случае невыполнения условия.
5. Черта данных и их условные обозначения
№ пп
Наименование данных
Обозначение
в блок-схеме
Обозначение
в программке
Тип переменных
1
Сопротивление
цепи R
R
Ri
double *R
2
Матрица А
Aij
Aij
double **A
3
Вектор вольных членов b
Bi
Bi
double *B
4
Э.Д.С. Е
Е
Ei
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 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:Kursabc.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:Kursrezult.txt», ios:out);
ff<< «Massiv Xn»;
// Вывод массива решения.
cout<< «Massiv Xn»;
// Запись результатов решения в текстового файла 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. За вектор Х мы приняли значения токов в ветвях, т.е. I1
= – 1, I2
= 3, I3
= 2. ток I1
имеет отрицательное значение т. к. ориентирован обратно токам I2
, I3
.
работу программки мы проверили в электрических таблицах Excel, используя способ оборотной матрицы. Потому что результаты решения задачки при помощи Excel и С++ совпадают, делаем вывод о том, что сделанная нами программка работает с довольно малыми погрешностями исчислений. Некорректности фактически на сто процентов отсутствуют благодаря применению четких способов решения.
Заключение
В данной курсовой работе для решения электротехнической задачки были использованы и закреплены теоретические познания и практические способности, приобретенные при исследовании курса «Введение в информатику».
Главным способом решении задачки был способ Гаусса. Проверка работы программки была произведена в электрических таблицах Excel. Результаты приобретенные при программировании задачки на языке С++ совпадают с плодами приобретенными при решении задачки в электрических таблицах, означает задачка выполнена на сто процентов.
Перечень применяемой литературы
1. Алексеев Е.Р. MS Visual C++ и Turbo C++ Explorer (под общей редакцией Чесноковой О.В.) / Алексеев Е.Р. – М.: НТ Пресс, 2007. – 352 с.: ил. – (Полная версия).
2. Бронштейн И.Н., Семендяев К.А. Справочник по арифметике для инженеров и учащихся втузов. – 13-е изд., исправленное. – М.: Наука, Гл. ред. физ.-мат. лит., 1986. – 544 с.
3. Пасечник Н.Д. Простая электротехника. Киев – 1963. – 234 с.
]]>