Линейные электрические цепи
Разработка программы на языке С++ по определению величин и направлений токов в ветвях электрической цепи с использованием метода Гаусса. Блок-схема алгоритма. Контрольный расчет с помощью электронных таблиц Excel, используя метод обратной матрицы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 10.11.2010 |
Размер файла | 30,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
2
Курсовая работа
"Линейные электрические цепи"
Введение
Для решения поставленной задач используется язык С++. На сегодняшний день он является одним из самых распространенных языков программирования. Его преимуществами являются гибкость, переносимость, универсальность. На этом языке написаны самые распространенные на сегодняшний день операционные системы, такие как Windows и Linux.
1. Постановка задачи
В схеме электрической цепи, приведенной на рисунке 1, определить токи, в ветвях пользуясь законами Кирхгофа. Параметры элементов цепи: R1=50 Ом, R2=20 Ом, R3=50 Ом, R4=80 Ом, E1=50 В, E2=400 В.
В программе не обходимо предусмотреть, откуда будут считываться исходные данные - с диалогового окна или из текстового файла. Результаты вычислений сохранить в текстовом файле result.txt.
Средствами математического пакета или электронных таблиц проверить результаты работы программы, для решения системы уравнений использовать метод Крамера или метод обратной матрицы, также можно использовать функции математического пакета.
Написать программу решения задачи, для решения системы линейных алгебраических уравнений воспользоваться методом Гаусса.
I1 I2
R1 1 R2
I3
E1 E2
R3
2 R4
2. Математическая модель поставленной задачи
Выбираем произвольно положительные направления искомых токов ветвей и обозначаем их на схеме. Составляем уравнения по первому закону Кирхгофа для узла 1. Выбрав направление обходов контуров, составляем уравнения по второму закону Кирхгофа. Получаем систему из трех уравнений:
I1 + I2 - I3 = 0
I1R1 + I3R3 = E1
- I2 (R2 + R4) - I3R3 = - E2
Преобразуем систему уравнений в матрицу коэффициентов системы - А, столбец ее свободных членов в вектор - b, столбец из неизвестных (искомый вектор) в вектор - х. Тогда система кратко может быть записана в виде матричного уравнения Ах=b. Решим эту систему линейных уравнений с помощью алгоритма последовательного исключения неизвестных - метод Гаусса. Используя этот метод мы преобразовываем не систему уравнений, а расширенную матрицу системы, которую получаем при добавлении к основной матрице А столбца свободных членов b. Прямым ходом метода Гаусса мы приведем расширенную матрицу к треугольному виду, т.е. все элементы матрицы ниже главной диагонали будут равны нулю. Если на главной диагонали встречается элемент равный нулю, заменяем его максимальным по модулю элементом в этом столбце, меняя строки. В результате выполнения прямого хода метода Гаусса система уравнений будет иметь вид:
а00х0+а01х1 +а02х2+ … +а0n-1хn-1=b0;
a11х1+а12х2+ … +а1n-1xn-1=b1;
a22x2+ … +a2n-1xn-1=b2;
…
an-1xn-1=bn-1.
И эту систему решим обратным ходом метода Гаусса.
3. Блок-схема алгоритма
2
Рис. 3.1. Блок-сема программы
4. Описание алгоритма
На рис. 3.1 представлена блок-схема программы: блок 1 - считываем из файла данные - R1, R2, R3, R4, E1, E2; блок 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 |
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: 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. За вектор Х мы приняли значения токов в ветвях, т.е. 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 с.
Подобные документы
Описание математической модели определения тока в электрической цепи с помощью решения системы алгебраических уравнений методом Гаусса. Описание и разработка блок-схемы программы. Ввод данных задачи, составление программы и анализ результатов решения.
контрольная работа [231,8 K], добавлен 15.08.2012Применение численного метода решения систем линейных алгебраических уравнений, используемых в прикладных задачах. Составление на базе метода матрицы Гаусса вычислительной схемы алгоритма и разработка интерфейса программы на алгоритмическом языке.
курсовая работа [823,9 K], добавлен 19.06.2023Сущность и описание симплекс-метода и улучшенного симплекс-метода (метода обратной матрицы), преимущества и недостатки их применения в линейном прогаммировании. Листинг и блок-схема программы на языке Turbo Pascal для решения математической задачи.
курсовая работа [45,0 K], добавлен 30.03.2009Решение системы дифференциальных уравнений переходных процессов в RLC-цепи численным методом. Анализ графиков в Excel. Расчет переходного процесса в математическом пакете MathCad по точным формулам. Разработка программы на языке программирования Pascal.
курсовая работа [777,3 K], добавлен 22.10.2012Решение систем алгебраических линейных уравнений методом Гаусса. Вычисление обратной матрицы и определителя. Декомпозиция задачи. Схема взаимодействия интерфейсных форм. Описание процедур и функций. Тестирование разработанного программного продукта.
курсовая работа [1,1 M], добавлен 05.06.2012Схема и основные параметры элементов цепи. Вывод системы дифференциальных уравнений. Реализация алгоритма на языке программирования высокого уровня Pascal. Решение дифференциальных уравнений в пакете MathCAD. Решение интерполяции в пакете Excel.
курсовая работа [375,4 K], добавлен 06.01.2011Разработка алгоритма и написание программы на языке Object Pascal, предназначенной для расчета траверса крюка мостового крана на изгиб. Определение расчетных размеров крана с помощью табличного процессора Microsoft Excel. Блок-схема и алгоритм расчета.
курсовая работа [519,3 K], добавлен 03.06.2010Описание методов вычисления определителя матрицы. Математическое решение задачи с применением метода исключения Гаусса с выбором главного элемента. Схема алгоритма программы, описание переменных и структур данных, текст программы на языке Pascal.
курсовая работа [438,8 K], добавлен 16.02.2011Вычисление физических параметров реальной электрической цепи посредством преобразования её к эквивалентной. Схема алгоритма программы и ее разработка на языках программирования СИ и С++, результаты расчета зависимостей эквивалентных сопротивлений.
курсовая работа [19,9 K], добавлен 15.10.2010Понятие и назначение электронных таблиц. Сравнительная характеристика редакторов электронных таблиц Microsoft Excel, OpenOffice.org Calc, Gnumeric. Требования к оформлению электронных таблиц. Методика создания электронных таблиц в MS Word и MS Excel.
контрольная работа [1,5 M], добавлен 07.01.2015