From 2951d247aceb6ca6892bdf5e15440d84cf8b7028 Mon Sep 17 00:00:00 2001 From: ParkSuMin Date: Tue, 28 Oct 2025 14:22:10 +0300 Subject: [PATCH] Change encoding to UTF-8 --- Solver.hpp | 2 +- main.cpp | 64 +++++++++++++++++++++++++++--------------------------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/Solver.hpp b/Solver.hpp index 3f59c93..079a383 100644 --- a/Solver.hpp +++ b/Solver.hpp @@ -1,2 +1,2 @@ -#pragma once +#pragma once diff --git a/main.cpp b/main.cpp index 39448b2..e8b0783 100644 --- a/main.cpp +++ b/main.cpp @@ -1,20 +1,20 @@ -#include +#include #include #define M_PI 3.14159265358979323846 // pi using namespace Eigen; -#define STATE_VARS 3*2 // -#define PHI 5 // -#define EDS 2 // -#define MATRIX_DIM STATE_VARS+PHI+EDS // +#define STATE_VARS 3*2 // Сами переменные и их проивзодные +#define PHI 5 // Количество узлов в схеме +#define EDS 2 // Количество источиков напряжения +#define MATRIX_DIM STATE_VARS+PHI+EDS // Размерность якобиана -const double TK = 1e-3; // -const double T_Start = 1e-10; // -const double SMN = 1e-15; // -const double ACR = 1e-2; // +const double TK = 1e-3; // время расчета +const double T_Start = 1e-10; // начальный шаг +const double SMN = 1e-15; // минимальный шаг +const double ACR = 1e-2; // точность -// +// Параметры модели double TAU = 5e-9; double MFt = 0.026; @@ -35,7 +35,7 @@ double UC1_prev = 0; double UCb_prev = 0; double E2 = 5.; -// +// Синусоидальный источник тока double E1(double t) { const double amplitude = 10.0; const double period = 1e-4; @@ -44,15 +44,15 @@ double E1(double t) { return amplitude * sin(frequency * t + phase); } -// +// Якобиан MatrixXd Y = MatrixXd::Zero(MATRIX_DIM, MATRIX_DIM); -// +// Вектор невязок VectorXd N = VectorXd::Zero(MATRIX_DIM); -// +// Вектор поправок VectorXd dX = VectorXd::Zero(MATRIX_DIM); -// +// Вектор фазовых переменных VectorXd X = VectorXd::Zero(MATRIX_DIM); -// ( ) +// Копия вектора фазовых переменных (для обработки случая неудачного шага) VectorXd X_backup = VectorXd::Zero(MATRIX_DIM); void Jacobian(double dt) { @@ -74,12 +74,12 @@ void Jacobian(double dt) { Y(12, 9) = -1.; } -// 0 - 2 -// 3 - 5 -// 6 - 10 -// 11 - 12 +// 0 - 2 производные +// 3 - 5 переменные состояния +// 6 - 10 узлы +// 11 - 12 токи на ЭДС -// +// Расчёт вектора невязки void nevyzka(double dt, double cur_time) { N(0) = X(0) - (X(3) - UC1_prev) / dt; N(1) = X(1) - (X(4) - UCb_prev) / dt; @@ -98,23 +98,23 @@ void nevyzka(double dt, double cur_time) { N(11) = E1(cur_time) - X(6); N(12) = E2 - X(9); - // + // Перед вектором невязок стоит минус N = -1 * N; } int main() { - double dt = T_Start; // - double dt_prev = dt; // - double eps_max = ACR; // - double eps_min = 1e-10; // - int counter = 0; // - double cur_time = 0; // + double dt = T_Start; // Шаг по времени + double dt_prev = dt; // Предыдущий шаг по времени + double eps_max = ACR; // Максимальное отклонение + double eps_min = 1e-10; // Минимальное отклонение + int counter = 0; // Счетчик шагов по времени + double cur_time = 0; // Текущее время double eps_cur; double eps; double step_c = 0; while (dt <= TK) { - // + // Счётчик итераций int iteration = 0; bool flag = true; while (flag) { @@ -146,11 +146,11 @@ int main() { X = X_backup; } } - // TODO: , , - // + // TODO: реализовать вычисление уточнённое решения, сравнить его с вычисленным, + // возможно изменить шаг моделирования } - // + // Для примера /*Jacobian(0.1); nevyzka(0.1, 0); std::cout << Y << std::endl << N;*/