From f0df27ef9bf69dca5bcaac18f1e47c29f66fa38e Mon Sep 17 00:00:00 2001 From: YiHui Liu Date: Mon, 4 Jul 2022 23:48:30 +0800 Subject: [PATCH] fix: range auto --- Figure_1.png | Bin 0 -> 42661 bytes MCA/MainFrm.cpp | 10 +++++--- MCA/Matrix.h | 64 ++++++++++++++++++++++++------------------------ 3 files changed, 38 insertions(+), 36 deletions(-) create mode 100644 Figure_1.png diff --git a/Figure_1.png b/Figure_1.png new file mode 100644 index 0000000000000000000000000000000000000000..5033b400be13b9be50173b13a26c5ca2d919a1ce GIT binary patch literal 42661 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 = "Auto"; + OnRangeAuto(); pView->m_sSmoothType = "Origin"; + UpdateValue(); pDoc->UpdateAllViews(NULL); } @@ -519,8 +520,8 @@ void CMainFrame::OnAxisLog() { if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView)); pView->m_sAxisMode = (CString)"Log"; - pView->m_sRangeMode = "Auto"; pView->m_ComboAxis.SetCurSel(1); + OnRangeAuto(); m_bAutoFlag = FALSE; m_bLinearFlag = TRUE; m_bLogFlag = FALSE; @@ -538,6 +539,7 @@ void CMainFrame::OnRangeAuto() { pView->m_sRangeMode = (CString)"Auto"; m_bAutoFlag = FALSE; pView->m_nLC = max(1, RoundupPowerof2(pView->m_nMaxCount)); + pView->UpdateData(FALSE); pDoc->UpdateAllViews(NULL); } @@ -550,7 +552,7 @@ void CMainFrame::OnRangeD4() { if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView)); pView->m_sRangeMode = (CString)"Manual"; - pView->m_nLC /= 4; + pView->m_nLC = pView->m_nLC > 1 ? pView->m_nLC / 4 : 1; m_bAutoFlag = TRUE; pView->UpdateData(FALSE); pDoc->UpdateAllViews(NULL); @@ -561,7 +563,7 @@ void CMainFrame::OnRangeD2() { if (pView == nullptr) pView = (CControlView*)pDoc->GetView(RUNTIME_CLASS(CControlView)); pView->m_sRangeMode = (CString)"Manual"; - pView->m_nLC /= 2; + pView->m_nLC = pView->m_nLC > 1 ? pView->m_nLC / 2: 1; m_bAutoFlag = TRUE; pView->UpdateData(FALSE); pDoc->UpdateAllViews(NULL); diff --git a/MCA/Matrix.h b/MCA/Matrix.h index d1b7c22..872847e 100644 --- a/MCA/Matrix.h +++ b/MCA/Matrix.h @@ -1,10 +1,10 @@ #pragma once -#ifndef DESCSS_Matrix_h -#define DESCSS_Matrix_h +#ifndef Matrix_h +#define Matrix_h #include -#define swap2(x, y) ((x)=(x)^(y),(y)=(x)^(y),(x)=(x)^(y)) +#define swap2(x, y) ((x) = (x) ^ (y), (y) = (x) ^ (y), (x) = (x) ^ (y)) class matrix { public: @@ -71,15 +71,9 @@ void matrix::Input(double* p) { for (int j = 0; j < m; j++) this->element[i][j] = *(p++); } -void matrix::Output() { - for (int i = 0; i < n; i++) { - for (int j = 0; j < m; j++) std::cout << element[i][j] << " "; - std::cout << std::endl; - } -} - double& matrix::operator()(int i, int j) const { - if (i < 0 || i > n - 1 || j < 0 || j > m - 1) std::cout << "Matrix Index Out Of Bounds " << std::endl; + if (i < 0 || i > n - 1 || j < 0 || j > m - 1) + std::cout << "Matrix Index Out Of Bounds " << std::endl; return element[i][j]; } @@ -123,15 +117,22 @@ matrix matrix::operator/(const double& C) const { return w; } -BOOL LUPDescomposition(matrix mA, matrix& mL, matrix& mU, int* P) -{ +std::ostream& operator<<(std::ostream& cout, matrix& mA) { + for (int i = 0; i < mA.rows(); i++) { + for (int j = 0; j < mA.cols(); j++) cout << mA(i, j) << " "; + if (i < mA.rows() - 1) cout << std::endl; + } + return cout; +} + +bool LUPDescomposition(matrix mA, matrix& mL, matrix& mU, int* P) { int n = mA.rows(); int row = 0, tmp; double L, U, tmp2; - for (int i = 0; i < n; i++) P[i] = i; + for (int i = 0; i < n; i++) P[i] = i; for (int i = 0; i < n - 1; i++) { tmp2 = 0.; - for(int j = i; j < n; j++) + for (int j = i; j < n; j++) if (std::abs(mA(j, i)) > tmp2) { tmp2 = std::abs(mA(j, i)); row = j; @@ -144,23 +145,21 @@ BOOL LUPDescomposition(matrix mA, matrix& mL, matrix& mU, int* P) tmp = P[i], P[i] = P[row], P[row] = tmp; - for (int j = 0; j < n; j++) - tmp2 = mA(i, j), mA(i, j) = mA(row, j), mA(row, j) = tmp2; + for (int j = 0; j < n; j++) tmp2 = mA(i, j), mA(i, j) = mA(row, j), mA(row, j) = tmp2; U = mA(i, i), L = 0; for (int j = i + 1; j < n; j++) { L = mA(j, i) / U; mA(j, i) = L; - for (int k = i + 1; k < n; k++) - mA(j, k) = mA(j, k) - mA(i, k) * L; + for (int k = i + 1; k < n; k++) mA(j, k) = mA(j, k) - mA(i, k) * L; } } for (int i = 0; i < n; i++) { mL(i, i) = 1; - for (int j = 0; j < i; j++) mL(i, j) = mA(i, j); - for (int j = i; j < n; j++) mU(i, j) = mA(i, j); + for (int j = 0; j < i; j++) mL(i, j) = mA(i, j); + for (int j = i; j < n; j++) mU(i, j) = mA(i, j); } - return TRUE; + return true; } matrix LUPSolve(matrix& mL, matrix& mU, int* P, double* b) { @@ -170,12 +169,12 @@ matrix LUPSolve(matrix& mL, matrix& mU, int* P, double* b) { for (int i = 0; i < n; i++) { y[i] = b[P[i]]; - for (int j = 0; j < i; j++) y[i] -= mL(i, j) * y[j]; + for (int j = 0; j < i; j++) y[i] -= mL(i, j) * y[j]; } for (int i = n - 1; i >= 0; i--) { mX(i, 0) = y[i]; - for (int j = n - 1; j > i; j--) mX(i, 0) -= mU(i, j) * mX(j, 0); + for (int j = n - 1; j > i; j--) mX(i, 0) -= mU(i, j) * mX(j, 0); mX(i, 0) /= mU(i, i); } @@ -198,15 +197,15 @@ matrix matrix::I() { } for (int i = 0; i < n; i++) - for (int j = 0; j < m; j++) mMir.element[i][j] = element[i][j]; + for (int j = 0; j < m; j++) mMir.element[i][j] = element[i][j]; LUPDescomposition(mMir, mL, mU, P); for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) b[j] = 0; + for (int j = 0; j < n; j++) b[j] = 0; b[i] = 1; mX = LUPSolve(mL, mU, P, b); - for (int j = 0; j < n; j++) mInv(j, i) = mX(j, 0); + for (int j = 0; j < n; j++) mInv(j, i) = mX(j, 0); } return mInv; } @@ -219,16 +218,17 @@ matrix matrix::T() { return w; } -double Gaussian(double x, double A, double mean, double sigma) { +double Gaussian_(double x, double A, double mean, double sigma) { return A * exp(-(x - mean) * (x - mean) / (2 * sigma * sigma)); } -matrix Jacobian(int n, double* X, double A, double mean, double sigma) { +matrix GaussianJacobian_(int n, double* X, double A, double mean, double sigma) { matrix J(n, 3); for (int i = 0; i < n; i++) { - J(i, 0) = -Gaussian(X[i], A, mean, sigma) / A; - J(i, 1) = -(X[i] - mean) * Gaussian(X[i], A, mean, sigma) / (sigma * sigma); - J(i, 2) = -(X[i] - mean) * (X[i] - mean) * Gaussian(X[i], A, mean, sigma) / (sigma * sigma * sigma); + J(i, 0) = -Gaussian_(X[i], A, mean, sigma) / A; + J(i, 1) = -(X[i] - mean) * Gaussian_(X[i], A, mean, sigma) / (sigma * sigma); + J(i, 2) = -(X[i] - mean) * (X[i] - mean) * Gaussian_(X[i], A, mean, sigma) / + (sigma * sigma * sigma); } return J; }