summaryrefslogtreecommitdiffstats
path: root/Project/ElectricCalculation.cpp
diff options
context:
space:
mode:
authorThales Lima Oliveira <thaleslima.ufu@gmail.com>2019-07-24 00:02:17 -0300
committerThales Lima Oliveira <thaleslima.ufu@gmail.com>2019-07-24 00:02:17 -0300
commit0ca6710a7e003952e1212c8e32ebb2e7c008d508 (patch)
tree54886abf6d62d9341377d535e52b36016b602107 /Project/ElectricCalculation.cpp
parent7f46d390b8cc1d5f37560f52b222198dbc5e1225 (diff)
downloadPSP.git-0ca6710a7e003952e1212c8e32ebb2e7c008d508.tar.gz
PSP.git-0ca6710a7e003952e1212c8e32ebb2e7c008d508.tar.xz
PSP.git-0ca6710a7e003952e1212c8e32ebb2e7c008d508.zip
Newton bug fixed
Diffstat (limited to 'Project/ElectricCalculation.cpp')
-rw-r--r--Project/ElectricCalculation.cpp45
1 files changed, 44 insertions, 1 deletions
diff --git a/Project/ElectricCalculation.cpp b/Project/ElectricCalculation.cpp
index c680ef1..7b03eeb 100644
--- a/Project/ElectricCalculation.cpp
+++ b/Project/ElectricCalculation.cpp
@@ -674,7 +674,7 @@ std::vector<std::complex<double> > ElectricCalculation::GaussianElimination(
std::vector<std::vector<std::complex<double> > > matrix,
std::vector<std::complex<double> > array)
{
- //[Ref] http://pt.wikipedia.org/wiki/Elimina%C3%A7%C3%A3o_de_Gauss
+ //[Ref] https://en.wikipedia.org/wiki/Gaussian_elimination
std::vector<std::complex<double> > solution;
@@ -714,6 +714,49 @@ std::vector<std::complex<double> > ElectricCalculation::GaussianElimination(
return solution;
}
+std::vector<double> ElectricCalculation::GaussianElimination(std::vector<std::vector<double> > matrix,
+ std::vector<double> array)
+{
+ //[Ref] https://en.wikipedia.org/wiki/Gaussian_elimination
+
+ std::vector<double> solution;
+
+ std::vector<std::vector<double> > triangMatrix;
+ triangMatrix.resize(matrix.size());
+ for(unsigned int i = 0; i < matrix.size(); i++) { triangMatrix[i].resize(matrix.size()); }
+
+ for(unsigned int i = 0; i < matrix.size(); i++) { solution.push_back(array[i]); }
+
+ for(unsigned int i = 0; i < matrix.size(); i++) {
+ for(unsigned int j = 0; j < matrix.size(); j++) { triangMatrix[i][j] = matrix[i][j]; }
+ }
+
+ for(unsigned int k = 0; k < matrix.size(); k++) {
+ unsigned int k1 = k + 1;
+ for(unsigned int i = k; i < matrix.size(); i++) {
+ if(triangMatrix[i][k] != 0.0) {
+ for(unsigned int j = k1; j < matrix.size(); j++) {
+ triangMatrix[i][j] = triangMatrix[i][j] / triangMatrix[i][k];
+ }
+ solution[i] = solution[i] / triangMatrix[i][k];
+ }
+ }
+ for(unsigned int i = k1; i < matrix.size(); i++) {
+ if(triangMatrix[i][k] != 0.0) {
+ for(unsigned int j = k1; j < matrix.size(); j++) { triangMatrix[i][j] -= triangMatrix[k][j]; }
+ solution[i] -= solution[k];
+ }
+ }
+ }
+ for(int i = static_cast<int>(matrix.size()) - 2; i >= 0; i--) {
+ for(int j = static_cast<int>(matrix.size()) - 1; j >= i + 1; j--) {
+ solution[i] -= triangMatrix[i][j] * solution[j];
+ }
+ }
+
+ return solution;
+}
+
Machines::SyncMachineModel ElectricCalculation::GetMachineModel(SyncGenerator* generator)
{
auto data = generator->GetElectricalData();