-
Notifications
You must be signed in to change notification settings - Fork 0
/
Algoritam
116 lines (97 loc) · 3.46 KB
/
Algoritam
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <iostream>
#include <Eigen/dense>
#include <complex>
#include <cmath>
const double PI = 4 * std::atan(1);
using namespace std::complex_literals;
std::complex<double> a = std::exp(2i * PI/3.);
// Unos EMS, Impedansi generatora, Impedansi linija, Impedansi Potrosaca
// Unos jednog EMS-a, pa se ostali pomjere za 120 stepeni (Eg)
Eigen::Vector3cd unesi_ems(std::complex<double> Eg) {
Eigen::Vector3cd Eg_V;
// direktno
Eg_V << Eg,
a * Eg,
a * a * Eg;
//inverzno
/*Eg_V << Eg,
a * a Eg,
a * Eg */
return Eg_V;
}
// Unos svakog EMS-a pojedinačno ( Eg1, Eg2, Eg3 )
Eigen::Vector3cd unesi_ems(std::complex<double> Eg1, std::complex<double> Eg2, std::complex<double> Eg3) {
Eigen::Vector3cd Eg_V;
Eg_V << Eg1,
Eg2,
Eg3;
return Eg_V;
}
// Pojedinačni unos impedansi generatora ( Zg1, Zg2, Zg3 )
Eigen::Matrix3cd unesi_Z_gen(std::complex<double> Zg1, std::complex<double> Zg2, std::complex<double> Zg3) {
Eigen::Matrix3cd m;
m << Zg1, 0, 0,
0, Zg2, 0,
0, 0, Zg3;
return m;
}
// Unos impedansi generatora ( Zg = Zg1 = Zg2 = Zg3 )
Eigen::Matrix3cd unesi_Z_gen(std::complex<double> Zg) {
return unesi_Z_gen(Zg, Zg, Zg);
}
// Pojedinačni unos impedansi linija ( Zl1, Zl2, Zl3)
Eigen::Matrix3cd unesi_Z_lin(std::complex<double> Zl1, std::complex<double> Zl2, std::complex<double> Zl3) {
Eigen::Matrix3cd m;
m << Zl1, 0, 0,
0, Zl2, 0,
0, 0, Zl3;
return m;
}
// Unos impedansi linija ( Zl= Zl1 = Zl2 = Zl3)
Eigen::Matrix3cd unesi_Z_lin(std::complex<double> Zl) {
return unesi_Z_lin(Zl, Zl, Zl);
}
// Pojedinačni unos impedansi potrosaca za zvijezdu sa uzemljenjem preko impedanse i bez impedanse ( Zp1, Zp2, Zp3, Zn )
Eigen::Matrix3cd unesi_Z_zvijezde_sa_uzemljenjem(std::complex<double> Zp1, std::complex<double> Zp2, std::complex<double> Zp3, std::complex<double> Zn = 0) {
Eigen::Matrix3cd m;
m << Zp1 + Zn, Zn, Zn,
Zn, Zp2 + Zn, Zn,
Zn, Zn, Zp3 + Zn;
return m;
}
// Unos impedansi potrosaca za zvijezdu sa uzemljenjem preko impedanse i bez impedanse ( Zp, Zn )
Eigen::Matrix3cd unesi_Z_zvijezde_sa_uzemljenjem(std::complex<double> Zp, std::complex<double> Zn = 0) {
return unesi_Z_zvijezde_sa_uzemljenjem(Zp, Zp, Zp, Zn);
}
// Pojedinacni unos impedansi potrosaca za zvijezdu sa izolovanim cvorom (Zp1, Zp2, Zp3)
Eigen::Matrix3cd unesi_Z_zvijezde_izolovane(std::complex<double> Zp1, std::complex<double> Zp2, std::complex<double> Zp3) {
std::complex<double> Yp1 = 1. / Zp1;
std::complex<double> Yp2 = 1. / Zp2;
std::complex<double> Yp3 = 1. / Zp3;
Eigen::Matrix3cd m;
m << Yp1 * Yp2 + Yp1 * Yp3, -Yp1 * Yp2, -Yp1 * Yp3,
-Yp2 * Yp1, Yp2* Yp1 + Yp2 * Yp3, -Yp2 * Yp3,
-Yp3 * Yp1, -Yp3 * Yp2, Yp3* Yp1 + Yp3 * Yp2;
m = 1. / (Yp1 + Yp2 + Yp3) * m;
return m.inverse();
}
// Unos impedansi potrosaca za zvijezdu sa izolovanim cvorom (Zp)
Eigen::Matrix3cd unesi_Z_zvijezde_izolovane(std::complex<double> Zp) {
return unesi_Z_zvijezde_izolovane(Zp, Zp, Zp);
}
// Pojedinacni unos impedansi potrosaca za trokut
Eigen::Matrix3cd unesi_Z_trokut(std::complex<double> Zp1, std::complex<double> Zp2, std::complex<double> Zp3) {
Eigen::Matrix3cd m = 3 * unesi_Z_zvijezde_izolovane(Zp1, Zp2, Zp3);
return m;
}
// Unos impedansi potrosaca za trokut
Eigen::Matrix3cd unesi_Z_trokut(std::complex<double> Zp) {
Eigen::Matrix3cd m = unesi_Z_trokut(Zp, Zp, Zp);
return m;
}
Eigen::Vector3cd DajStruje(Eigen::Vector3cd Eg, Eigen::Matrix3cd Zg, Eigen::Matrix3cd Zl, Eigen::Matrix3cd Zp) {
return (Zg + Zl + Zp).inverse() * Eg;
}
int main(){
return 0;
}