Нижегородский государственный технический университет
им Р.Е Алексеева
Курсовая работа
по информатике
«Численное моделирование и анализ переходных процессов в электрической цепи»
Вариант №27
г. Нижний Новгород
2020г
Содержание
1. Задание на курсовую работу
2. Практическая часть
А) Численная реализация решения систем дифференциальных уравнений
· Реализация решения в пакете MathCAD методом Рунге-Кутта
· Реализация решения в пакете MathCAD методом Эйлера с усреднением
· Реализация решения в пакете MathCAD методом Эйлера
· Реализация решения на языке программирования высокого уровня (C++) методом Эйлера
· Реализация решения на языке программирования высокого уровня (C++) методом Эйлера с усреднением
Б) Решение задачи аппроксимации зависимости I(t) на интервале
· Реализация решения в пакете Excel
· Реализация решения в пакете MathCAD, используя алгоритм метода наименьших квадратов
В) Численное интегрирование
· Реализация решения на языке программирования высокого уровня C++ методом Симпсона
· Реализация решения на языке программирования высокого уровня C++ методом правых прямоугольников прямоугольников
· Реализация решения в пакете MathCAD
Заключение
Приложение 1
Приложение 2
дифференциальные уравнения аппроксимация зависимость интервал программирование
1. Задание на курсовую работу
1. Численная реализация решения систем дифференциальных уравнений:
· В пакете MathCad, используя метод Рунге-Кутта;
· В пакете MathCad, используя метод Эйлера и метод Эйлера с усреднением;
· Алгоритмически, построив блок-схему и программу на языке высокого уровня, используя метод Эйлера и метод Эйлера с усреднением;
· Сравнить результаты.
2. Решение задачи аппроксимации зависимости I(t) на интервале T1?t?T2, где T1=0, T2=0.005:
· Используя пакет Excel и его возможности (поиск решения ,мастер диаграмм с выводом уравнения линии тренда)
· В пакете MathCad, используя алгоритм метода наименьших квадратов ;
3. Численное интегрирование. Необходимо определить количество теплоты, выделяемой на резисторе R4 за период времени T1?t?T2. Это можно сделать, взяв интеграл:
Q= R4
где зависимость I(t) , берется по результатам предыдущего этапа. Численное интегрирование проводят:
· Алгоритмически, построив блок-схему и программу на языке высокого уровня , используя метод Симпсона и методом правых прямоугольников;
· В пакете MathCad, используя все методы;
Сравнить результаты и оценить ошибки. Сделать конструктивные методы по результатам выполненной работы.
2. Практическая часть
a. Численная реализация решения систем дифференциальных уравнений
Результаты работы программы (см.Приложение 1)
Реализация решения на языке программирования высокого уровня (C++) методом Эйлера
Блок схема
Программный код
#include <iostream>
#include <math.h>
#include <iomanip>
#include <fstream>
double PI,E0,L,C,t0,t1,t2,f,fi,h,R1,R2,R3,R4,R5,R6,I1,I2,U1,U2,t,ta;
int n,p;
double E(double t)
{
double ResultE;
if (t < t1)
{
ResultE = E0 + E0 * sin(2 * PI * f* t + fi);
}
else
{
ResultE = 0;
}
return ResultE;
}
//Производная от тока I по времени t
double FI(double t, double I, double U)
{
double A, B, D, ResultFDI;
A = R2 / (R1 + R2);
B = (R1 * R2) / (R1 + R2);
D = (R5 + R6) / (R3 + R5 + R6);
ResultFDI = (1 / L) * ((A * E(t)) -I*( (R4 + (R3 * D) + B)) - (U * D));
return ResultFDI;
}
//Производная от напряжения U по времени t
double FU(double I, double U)
{
double A, B, ResultFDU;
A = (R5 + R6) / (R3 + R5 + R6);
B = 1 / (R3 + R5 + R6);
ResultFDU = (1 / C) * ((I * A) - (U * B));
return ResultFDU;
}
using namespace std;
int main()
{
PI=3.14159265;
E0=15;
L=5.57*0.001;
C=20*pow(10,-6);
t0=0;
t1=0.01;
t2=0.02;
n=200;
f=50;
fi=2*PI/5;
h=(t2-t0)/n;
R1=30;
R2=25;
R3=50;
R4=1.88;
R5=15;
R6=50;
I1=0;
U1=0;
t=0;
while(t<t2)
{
ta=t+h;
I2=I1+h*FI(t,I1,U1);
U2=U1+h*FU(I1,U1);
cout<<"t="<<t<<" U="<<U1<<" I="<<I1<<endl;
I1=I2;
U1=U2;
t=t+h;
}
return 0;
}
Результаты работы программы (см.Приложение 2)
Реализация решения на языке программирования высокого уровня (C++) методом Эйлера с усреднением
Блок схема
Программный код
#include <iostream>
#include <math.h>
#include <iomanip>
#include <fstream>
double PI,E0,L,C,t0,t1,t2,f,fi,h,R1,R2,R3,R4,R5,R6,I1,I2,U1,U2,t,prI,prU,ta;
int n,p;
double E(double t)
{
double ResultE;
if (t < t1)
{
ResultE = E0 + E0 * sin(2 * PI * f* t + fi);
}
else
{
ResultE = 0;
}
return ResultE;
}
//Производная от тока I по времени t
double FI(double t, double I, double U)
{
double A, B, D, ResultFDI;
A = R2 / (R1 + R2);
B = (R1 * R2) / (R1 + R2);
D = (R5 + R6) / (R3 + R5 + R6);
ResultFDI = (1 / L) * ((A * E(t)) - I*( (R4 + (R3 * D) + B)) - (U * D));
return ResultFDI;
}
//Производная от напряжения U по времени t
double FU(double I, double U)
{
double A, B, ResultFDU;
A = (R5 + R6) / (R3 + R5 + R6);
B = 1 / (R3 + R5 + R6);
ResultFDU = (1 / C) * ((I * A) - (U * B));
return ResultFDU;
}
using namespace std;
int main()
{
////переменные
PI=3.14159265;
E0=15;
L=5.57*0.001;
C=20*pow(10,-6);
t0=0;
t1=0.01;
t2=0.02;
n=200;
f=50;
fi=2*PI/5;
h=(t2-t0)/n;
R1=30;
R2=25;
R3=50;
R4=1.88;
R5=15;
R6=50;
I1=0;
U1=0;
t=0;
while(t<t2)
{
ta=t+h;
prI=I1+h*FI(t,I1,U1);
prU=U1+h*FU(I1,U1);
I2=I1+(h/2)*(FI(t,I1,U1)+FI(ta,prI,prU));
U2=U1+(h/2)*(FU(I1,U1)+FU(prI,prU));
cout<<"t="<<t<<" U="<<U1<<" I="<<I1<<endl;
I1=I2;
U1=U2;
t=t+h;
}
return 0;
}
б. Решение задачи аппроксимации зависимости I(t) на интервале
T1 ? t ? T2 , где T1= 0, T2= 0.005
Реализация решения в пакете Excel
В качестве исходной функции взяты дискретные значения тока, полученные из решения методом Эйлера системы дифференциальных уравнений с помощью программы, написанной на языке C++, и построен график этой зависимости:
Для выбранных участков были построены аппроксимирующие полиномы 3, 2, 1 степени:
Реализация решения в пакете MathCAD, используя алгоритм метода наименьших квадратов.
в. Численное интегрирование
Реализация решения на языке программирования высокого уровня C++ методом Симпсона
В качестве интегрируемой функции взята аналитическая функция, полученная в пакете Excel с помощью мастера диаграмм.
Блок схема
Программный код:
#include <iostream>
#include <math.h>
#include <iomanip>
double I(double t)
{
double I0;
if (t<=0.0002)
I0=-4*pow(10,6)*t*t+1819.9*t-2*pow(10,-16);
else
{
if(t<=0.0006)
I0=9*pow(10,8)*t*t*t-2*pow(10,6)*t*t+900.06*t+0.0962;
else
{
if(t<=0.0012)
I0=-58.349*t+0.3048;
else
I0=-859180*t*t*t+9846.8*t*t-69.673*t+0.3045;
}
}
return I0;
}
using namespace std;
int main()
{
double R4=1.88,t1=0,t2=0.005,h,t,In,S=0,Q,S1=0,S2=0,Ing;
int n=100;
h=(t2-t1)/n;
for(n=0;n<=99;n++)
{
t=t1+h*n;
In=pow(I(t),2);
if (n % 2 == 0)
S1=S1+In;
else
S2=S2+In;
}
Ing=(h/3)*(pow(I(t1),2)+pow(I(t2),2)+4*S1+2*S2);
Q=R4*Ing;
cout<<"Q="<<Q <<"\t"<<"Ing="<<Ing<<endl;
return 0;
}
Результаты работы программы:
Q=0.000323157 Ing=0.000171892
Реализация решения на языке программирования высокого уровня C++ методом правых прямоугольников
Блок схема
Программный код:
#include <iostream>
#include <math.h>
#include <iomanip>
double I(double t)
{
double I0;
if (t<=0.0002)
I0=-4*pow(10,6)*t*t+1819.9*t-2*pow(10,-16);
else
{
if(t<=0.0006)
I0=9*pow(10,8)*t*t*t-2*pow(10,6)*t*t+900.06*t+0.0962;
else
{
if(t<=0.0012)
I0=-58.349*t+0.3048;
else
I0=-859180*t*t*t+9846.8*t*t-69.673*t+0.3045;
}
}
return I0;
}
using namespace std;
int main()
{
double R4=1.88,t1=0,t2=0.005,h,t,In,S=0,Q,S1=0,S2=0,Ing=0;
int n=100;
h=(t2-t1)/n;
for(n=0;n<=99;n++)
{
t=t1+h*n;
In=pow(I(t),2);
Ing+=In;
}
Ing=Ing*h;
Q=R4*Ing;
cout<<"Q="<<Q <<"\t"<<"Ing="<<Ing<<endl;
return 0;
}
Результаты работы программы:
Q=0.000323169 Ing=0.000171898
Реализация решения в пакете MathCAD
Вывод: из результатов рассчитанных ошибок видно, что наибольшую точность имеют интегралы, вычисленные методом центральных прямоугольников.
Заключение
1. В данной курсовой работе я рассчитал дифференциальные уравнения, используя метода Эйлера(простой и модифицированный) и метод Рунге-Кутта, составила графики данных зависимостей. Сравнивая графики, полученные по точкам программы С++, MS Excel и графику, полученному в MathCAD, я пришел к выводу, что они идентичны друг другу.
2. Решил задачу аппроксимации. В пакете MathCAD, используя алгоритм метода наименьших квадратов, получила аналитическую формулу для величины I(t). Из сравнения результатов, полученных в Excel и MathCAD видно, что результат, полученный в пакете MathCAD методом наименьших квадратов, точнее результатов, полученных в пакете Excel.
3. Используя расчеты Excel, рассчитал количество теплоты, выделяемой на резисторе R4 в программе C++. Для аналитической формулы, полученной в пакете MathCAD, используя все методы численного интегрирования, определила количество теплоты на резисторе R4. Сравнивая результаты программы C++ и MathCAD, они отличаются не более чем на 0.00000075. Среднее значение Q=3,239·10-4
Приложение 1
Приложение 2
t=0 U=0 I=0
t=0.0001 U=0.337473 I=0.14554
t=0.0002 U=0.898084 I=0.218181
t=0.0003 U=1.5484 I=0.252352
t=0.0004 U=2.21952 I=0.266354
t=0.0005 U=2.87674 I=0.269903
t=0.0006 U=3.50338 I=0.268146
t=0.0007 U=4.09224 I=0.2638
t=0.0008 U=4.64102 I=0.258288
t=0.0009 U=5.1499 I=0.252349
t=0.001 U=5.62028 I=0.246355
t=0.0011 U=6.05407 I=0.24049
t=0.0012 U=6.4534 I=0.234833
t=0.0013 U=6.82041 I=0.229415
t=0.0014 U=7.15716 I=0.224236
t=0.0015 U=7.4656 I=0.219286
t=0.0016 U=7.74754 I=0.214548
t=0.0017 U=8.00467 I=0.210004
t=0.0018 U=8.23857 I=0.205633
t=0.0019 U=8.45066 I=0.201417
t=0.002 U=8.64228 I=0.19734
t=0.0021 U=8.81467 I=0.193384
t=0.0022 U=8.96894 I=0.189536
t=0.0023 U=9.10616 I=0.185781
t=0.0024 U=9.22728 I=0.182108
t=0.0025 U=9.3332 I=0.178505
t=0.0026 U=9.42475 I=0.174963
t=0.0027 U=9.50269 I=0.171473
t=0.0028 U=9.56774 I=0.168026
t=0.0029 U=9.62054 I=0.164616
t=0.003 U=9.66172 I=0.161237
t=0.0031 U=9.69184 I=0.157883
t=0.0032 U=9.71144 I=0.154549
t=0.0033 U=9.72101 I=0.151231
t=0.0034 U=9.72102 I=0.147925
t=0.0035 U=9.7119 I=0.144629
t=0.0036 U=9.69407 I=0.14134
t=0.0037 U=9.66791 I=0.138055
t=0.0038 U=9.63379 I=0.134773
t=0.0039 U=9.59204 I=0.131494
t=0.004 U=9.54301 I=0.128215
t=0.0041 U=9.48699 I=0.124936
t=0.0042 U=9.42429 I=0.121658
t=0.0043 U=9.3552 I=0.11838
t=0.0044 U=9.27998 I=0.115102
t=0.0045 U=9.19889 I=0.111825
t=0.0046 U=9.11219 I=0.108549
t=0.0047 U=9.02013 I=0.105277
t=0.0048 U=8.92294 I=0.102007
t=0.0049 U=8.82084 I=0.0987433
t=0.005 U=8.71407 I=0.0954856
t=0.0051 U=8.60285 I=0.0922358
t=0.0052 U=8.48738 I=0.0889957
t=0.0053 U=8.36787 I=0.0857672
t=0.0054 U=8.24454 I=0.082552
t=0.0055 U=8.11759 I=0.0793523
t=0.0056 U=7.9872 I=0.07617
t=0.0057 U=7.8536 I=0.0730074
t=0.0058 U=7.71695 I=0.0698667
t=0.0059 U=7.57747 I=0.0667501
t=0.006 U=7.43533 I=0.0636599
t=0.0061 U=7.29074 I=0.0605985
t=0.0062 U=7.14387 I=0.0575682
t=0.0063 U=6.99492 I=0.0545715
t=0.0064 U=6.84406 I=0.0516108
t=0.0065 U=6.69148 I=0.0486884
t=0.0066 U=6.53737 I=0.0458068
t=0.0067 U=6.3819 I=0.0429684
t=0.0068 U=6.22526 I=0.0401756
t=0.0069 U=6.06762 I=0.0374309
t=0.007 U=5.90917 I=0.0347365
t=0.0071 U=5.75008 I=0.0320949
t=0.0072 U=5.59053 I=0.0295083
t=0.0073 U=5.43069 I=0.0269792
t=0.0074 U=5.27073 I=0.0245096
t=0.0075 U=5.11084 I=0.0221019
t=0.0076 U=4.95118 I=0.0197583
t=0.0077 U=4.79192 I=0.0174808
t=0.0078 U=4.63323 I=0.0152715
t=0.0079 U=4.47527 I=0.0131325
t=0.008 U=4.31822 I=0.0110657
t=0.0081 U=4.16224 I=0.00907307
t=0.0082 U=4.00749 I=0.00715642
t=0.0083 U=3.85413 I=0.00531753
t=0.0084 U=3.70231 I=0.00355812
t=0.0085 U=3.5522 I=0.00187983
t=0.0086 U=3.40395 I=0.000284236
t=0.0087 U=3.25772 I=-0.00122717
t=0.0088 U=3.11364 I=-0.00265298
t=0.0089 U=2.97186 I=-0.00399183
t=0.009 U=2.83254 I=-0.00524248
t=0.0091 U=2.69581 I=-0.00640374
t=0.0092 U=2.56181 I=-0.00747453
t=0.0093 U=2.43068 I=-0.00845382
t=0.0094 U=2.30255 I=-0.00934071
t=0.0095 U=2.17754 I=-0.0101343
t=0.0096 U=2.05579 I=-0.010834
t=0.0097 U=1.93742 I=-0.011439
t=0.0098 U=1.82254 I=-0.0119488
t=0.0099 U=1.71127 I=-0.0123629
t=0.01 U=1.60372 I=-0.0126809
t=0.0101 U=1.5 I=-0.0153328
t=0.0102 U=1.38933 I=-0.0167067
t=0.0103 U=1.28269 I=-0.0167481
t=0.0104 U=1.18203 I=-0.0161357
t=0.0105 U=1.08812 I=-0.0152265
t=0.0106 U=1.00105 I=-0.0142064
t=0.0107 U=0.920621 I=-0.0131704
t=0.0108 U=0.846479 I=-0.0121658
t=0.0109 U=0.778214 I=-0.0112146
t=0.011 U=0.715406 I=-0.0103254
t=0.0111 U=0.65764 I=-0.00950015
t=0.0112 U=0.604525 I=-0.00873737
t=0.0113 U=0.555692 I=-0.00803398
t=0.0114 U=0.5108 I=-0.00738623
t=0.0115 U=0.469533 I=-0.00679017
t=0.0116 U=0.431598 I=-0.00624194
t=0.0117 U=0.396728 I=-0.00573782
t=0.0118 U=0.364674 I=-0.00527434
t=0.0119 U=0.33521 I=-0.00484825
t=0.012 U=0.308127 I=-0.00445657
t=0.0121 U=0.283232 I=-0.00409651
t=0.0122 U=0.260348 I=-0.00376554
t=0.0123 U=0.239313 I=-0.0034613
t=0.0124 U=0.219977 I=-0.00318165
t=0.0125 U=0.202204 I=-0.00292459
t=0.0126 U=0.185867 I=-0.00268829
t=0.0127 U=0.17085 I=-0.00247109
t=0.0128 U=0.157046 I=-0.00227144
t=0.0129 U=0.144357 I=-0.00208791
t=0.013 U=0.132694 I=-0.00191922
t=0.0131 U=0.121972 I=-0.00176416
t=0.0132 U=0.112118 I=-0.00162162
t=0.0133 U=0.103059 I=-0.0014906
t=0.0134 U=0.0947323 I=-0.00137017
t=0.0135 U=0.0870783 I=-0.00125946
t=0.0136 U=0.0800428 I=-0.0011577
t=0.0137 U=0.0735756 I=-0.00106416
t=0.0138 U=0.067631 I=-0.000978185
t=0.0139 U=0.0621667 I=-0.000899152
t=0.014 U=0.0571439 I=-0.000826504
t=0.0141 U=0.0525269 I=-0.000759726
t=0.0142 U=0.048283 I=-0.000698343
t=0.0143 U=0.0443819 I=-0.00064192
t=0.0144 U=0.0407961 I=-0.000590056
t=0.0145 U=0.0374999 I=-0.000542382
t=0.0146 U=0.0344701 I=-0.00049856
t=0.0147 U=0.031685 I=-0.000458278
t=0.0148 U=0.029125 I=-0.000421251
t=0.0149 U=0.0267718 I=-0.000387216
t=0.015 U=0.0246088 I=-0.000355931
t=0.0151 U=0.0226205 I=-0.000327173
t=0.0152 U=0.0207929 I=-0.000300739
t=0.0153 U=0.0191129 I=-0.00027644
t=0.0154 U=0.0175686 I=-0.000254105
t=0.0155 U=0.0161492 I=-0.000233574
t=0.0156 U=0.0148444 I=-0.000214703
t=0.0157 U=0.013645 I=-0.000197356