From 0ca6710a7e003952e1212c8e32ebb2e7c008d508 Mon Sep 17 00:00:00 2001 From: Thales Lima Oliveira Date: Wed, 24 Jul 2019 00:02:17 -0300 Subject: Newton bug fixed --- Project/ElectricCalculation.cpp | 45 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'Project/ElectricCalculation.cpp') 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 > ElectricCalculation::GaussianElimination( std::vector > > matrix, std::vector > array) { - //[Ref] http://pt.wikipedia.org/wiki/Elimina%C3%A7%C3%A3o_de_Gauss + //[Ref] https://en.wikipedia.org/wiki/Gaussian_elimination std::vector > solution; @@ -714,6 +714,49 @@ std::vector > ElectricCalculation::GaussianElimination( return solution; } +std::vector ElectricCalculation::GaussianElimination(std::vector > matrix, + std::vector array) +{ + //[Ref] https://en.wikipedia.org/wiki/Gaussian_elimination + + std::vector solution; + + std::vector > 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(matrix.size()) - 2; i >= 0; i--) { + for(int j = static_cast(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(); -- cgit