diff options
author | Thales Lima Oliveira <thaleslima.ufu@gmail.com> | 2019-07-24 00:02:17 -0300 |
---|---|---|
committer | Thales Lima Oliveira <thaleslima.ufu@gmail.com> | 2019-07-24 00:02:17 -0300 |
commit | 0ca6710a7e003952e1212c8e32ebb2e7c008d508 (patch) | |
tree | 54886abf6d62d9341377d535e52b36016b602107 /Project/ElectricCalculation.cpp | |
parent | 7f46d390b8cc1d5f37560f52b222198dbc5e1225 (diff) | |
download | PSP.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.cpp | 45 |
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(); |