Сравнение результатов счета с использованием пакета MathCad 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Сравнение результатов счета с использованием пакета MathCad



Для расчета заданной электрической цепи были использованы стандартные средства пакета MathCad. Для этого была составлена программа на входном языке пакета MathCad, с помощью которой были получены значения токов ветвей для заданной электрической цепи. Эти значения совпадают со значениями токов, полученных с помощью разработанной программы для контрольного примера. Текст программы для пакта MathCad приведен ниже.


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

 

Заключение и выводы

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

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

Время выполнения 1 расчета электрической цепи составило десятые доли сек. Объем файла Usel1 с кодом головной программы на языке Turbo Pascal составляет 2 килобайт, файла с модулем Uselfun, в котором находятся описания всех используемых процедур на языке Turbo Pascal составляет 4 килобайт.


 

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1. Советов Б.Я., Яковлев С.А. Моделирование систем. Курсовое проектирование (учебное пособие для ВУЗов). - М.:Высшая школа. - 1988. -135 с.

2. Каранчук В.П., Сваровский И.Н., Суздальницкий И.Д. Основы применения ЭВМ: Учебное пособие для ВУЗов. - М.:Радио и связь. - 1988. - 288 с.

3. Милехин Л.Н., Потапов А.А. Руководство по составлению программного документа к курсовому или дипломному проекту. - Казань:КАИ. - 1989. - 20 с.

4. Толстов Ю.Г. Теория линейных электрических цепей. - М.:Высшая школа. - 1978.


 

Приложение 1

Текст программы на языке Turbo-Pascal для расчета электрической цепи методом узловых напряжений

{Программа для расчета электрической цепи методом

узловых напряжений}

Program uzel;

uses uselun;

const nv=5;nu=3;

var a,at,g,gu,v,jv,ev,uv,iv,r,x,y,z:mas;i,j,k,n:integer;

begin

{Ввод исходных данных}

inpm (nu,nv,a,' a '); {матрица соединений}

inpm (nv,1,r,' r '); {вектор сопротивлений ветвей}

inpm (nv,1,ev,' ev '); {вектор эдс источников}

inpm (nv,1,jv,' jv '); {вектор источников токов}

{Расчет матрицы проводимостей ветвей}

for i:=1 to nv do begin

for j:=1 to nv do

g[i,j]:=0.0;

g[i,i]:=1/r[i,1]; end;

writeln (' Результаты расчета электрической цепи ');

umn(nv,nv,1,g,ev,x); {G*Ev->x}

subm(nv,1,jv,x,y); {Jv-G*Ev->y}

umn(nu,nv,1,a,y,z); {a*(Jv-G*Ev)->z}

outm (nu,1,z,' Вектор узловых токов Iu ');

transp(nv,nu,a,at); {транспонирование матрицы ->at}

umn(nu,nv,nv,a,g,x); {a*g->x}

umn(nu,nv,nu,x,at,gu); {a*g*at->gu}

outm (nu,nu,gu,' матрица Gu узловых проводимостей ');

obmatr(nu,gu,x); {вычисление обратной матрицы (a*g*at)^-1->x}

umn(nu,nv,1,x,z,v); {Расчет узловых напряжений v=(a*g*at)^-1*a*(Jv-G*Ev)}

outm (nu,1,v,' Вектор узловых напряжений v ');

umn(nv,nu,1,at,v,uv); {Вектор падения напряжения ветвей Uv=at*v}

summ(nv,1,uv,ev,x); {Uv+Ev->x}

umn(nv,nv,1,g,x,iv); {Расчет токов ветвей Iv=g*(Uv+Ev)}

outm (nv,1,iv,'Вектор токов ветвей iv '); {вывод вектора токов ветвей}

end.

unit uselun;

{модуль с используемыми процедурами}

interface

const nn=5;

type mas=array [1..nn,1..nn] of real;

procedure subm (n,m:integer; var a,b,c:mas);

procedure inpm (n,m:integer; var a:mas; st:string);

procedure transp (n,m:integer; var a, at:mas);

procedure summ (n,m:integer; var a,b,c:mas);

procedure outm (n,m:integer; var a:mas; st:string);

procedure umn (n,k,m:integer; var a,b,c:mas);

procedure obmatr(n:integer;var a,b:mas);

implementation

procedure transp (n,m:integer; var a,at:mas);

var i,j:integer;

begin

for i:=1 to n do

for j:=1 to m do

at[i,j]:= a[j,i];

end;

function norm (n,m:integer; r1,r2:mas):real;

var t:mas; s:real;i,j:integer;

begin

subm (n,m,r1,r2,t);

s:=0;

for i:=1 to n do

for j:=1 to n do

s:=s+t[i,j];

norm:=s;

end;

procedure inpm (n,m:integer; var a:mas; st:string);

var i,j:integer;

begin

writeln ('введите матрицу',st,'по строкам');

for i:=1 to n do

for j:=1 to m do

read(a[i,j]);

end;

procedure outm (n,m:integer; var a:mas; st:string);

var i,j:integer;

begin

writeln (st);

for i:=1 to n do

begin

for j:=1 to m do

write(a[i,j]:8:2);

writeln;

end;

end;

procedure subm (n,m:integer; var a,b,c:mas);

var i,j:integer;

begin

for i:=1 to n do

for j:=1 to m do

c[i,j]:=a[i,j]-b[i,j];

end;

procedure summ (n,m:integer; var a,b,c:mas);

var i,j:integer;

begin

for i:=1 to n do

for j:=1 to m do

c[i,j]:=a[i,j]+b[i,j];

end;

 

procedure umn (n,k,m:integer; var a,b,c:mas);

var i,j,L:integer;s:real;

begin

for i:=1 to n do

for j:=1 to m do

begin

s:= 0;

for L:=1 to k do

begin

s:= s + a[i, L]*b[L,j];

end;

c[i,j]:= s;

end;

end;

procedure obmatr(n:integer;var a,b:mas);

{* Вычисление обратной матрицы a^-1->b*}

{ - входные параметры}

{n - размерность матриц }

{a - исходная матрица размера n*n}

{ выходной параметр }

{b - обратная n*n-матрица для a}

var i,j,k,ij,fl:integer;

index: array[1..50] of integer;

d,r,w,w1,eps:real;

begin

eps:=1.e-15;

r:=1.0;d:=1.0;

for j:=1 to n do

for i:=1 to n do

b[i,j]:=a[i,j];

for i:=1 to n do

begin

fl:=0;

j:=i;

while j<=n do

begin

if (abs(b[j,i])>eps) then

begin

fl:=1;

for k:=1 to n do

begin

w1:=b[i,k];

b[i,k]:=b[j,k];

b[j,k]:=w1

end;

index[i]:=j;

j:=n;

end;

j:=j+1;

end;

if(b[i,i]=0) then

exit;

b[i,i]:=1./b[i,i];

for k:=1 to n do

if(k<>i) then

b[i,k]:=b[i,k]*b[i,i];

for ij:=1 to n do

if(ij<>i) then

begin

w:=-b[ij,i];

b[ij,i]:=0.;

for k:=1 to n do

b[ij,k]:=b[ij,k]+w*b[i,k];

end;

if(fl=0) then

exit;

d:=d/b[i,i];

end; { i}

for i:=n downto 1 do

begin

if(index[i]<>i) then

begin

r:=-r;

for k:=1 to n do

begin

w1:=b[k,i];

b[k,i]:=b[k,index[i]];

b[k,index[i]]:=w1;

end;

end;

end; end;

end.



Поделиться:


Последнее изменение этой страницы: 2016-12-13; просмотров: 118; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.56.45 (0.016 с.)