Change encoding to UTF-8

This commit is contained in:
2025-10-28 14:22:10 +03:00
parent 8269990c3e
commit 2951d247ac
2 changed files with 33 additions and 33 deletions

View File

@@ -1,2 +1,2 @@
#pragma once #pragma once

View File

@@ -1,20 +1,20 @@
#include <iostream> #include <iostream>
#include <Eigen/Dense> #include <Eigen/Dense>
#define M_PI 3.14159265358979323846 // pi #define M_PI 3.14159265358979323846 // pi
using namespace Eigen; using namespace Eigen;
#define STATE_VARS 3*2 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #define STATE_VARS 3*2 // Сами переменные и их проивзодные
#define PHI 5 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> #define PHI 5 // Количество узлов в схеме
#define EDS 2 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #define EDS 2 // Количество источиков напряжения
#define MATRIX_DIM STATE_VARS+PHI+EDS // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #define MATRIX_DIM STATE_VARS+PHI+EDS // Размерность якобиана
const double TK = 1e-3; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> const double TK = 1e-3; // время расчета
const double T_Start = 1e-10; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> const double T_Start = 1e-10; // начальный шаг
const double SMN = 1e-15; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> const double SMN = 1e-15; // минимальный шаг
const double ACR = 1e-2; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> const double ACR = 1e-2; // точность
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // Параметры модели
double TAU = 5e-9; double TAU = 5e-9;
double MFt = 0.026; double MFt = 0.026;
@@ -35,7 +35,7 @@ double UC1_prev = 0;
double UCb_prev = 0; double UCb_prev = 0;
double E2 = 5.; double E2 = 5.;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> // Синусоидальный источник тока
double E1(double t) { double E1(double t) {
const double amplitude = 10.0; const double amplitude = 10.0;
const double period = 1e-4; const double period = 1e-4;
@@ -44,15 +44,15 @@ double E1(double t) {
return amplitude * sin(frequency * t + phase); return amplitude * sin(frequency * t + phase);
} }
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // Якобиан
MatrixXd Y = MatrixXd::Zero(MATRIX_DIM, MATRIX_DIM); MatrixXd Y = MatrixXd::Zero(MATRIX_DIM, MATRIX_DIM);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // Вектор невязок
VectorXd N = VectorXd::Zero(MATRIX_DIM); VectorXd N = VectorXd::Zero(MATRIX_DIM);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // Вектор поправок
VectorXd dX = VectorXd::Zero(MATRIX_DIM); VectorXd dX = VectorXd::Zero(MATRIX_DIM);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // Вектор фазовых переменных
VectorXd X = VectorXd::Zero(MATRIX_DIM); VectorXd X = VectorXd::Zero(MATRIX_DIM);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) // Копия вектора фазовых переменных (для обработки случая неудачного шага)
VectorXd X_backup = VectorXd::Zero(MATRIX_DIM); VectorXd X_backup = VectorXd::Zero(MATRIX_DIM);
void Jacobian(double dt) { void Jacobian(double dt) {
@@ -74,12 +74,12 @@ void Jacobian(double dt) {
Y(12, 9) = -1.; Y(12, 9) = -1.;
} }
// 0 - 2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // 0 - 2 производные
// 3 - 5 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // 3 - 5 переменные состояния
// 6 - 10 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> // 6 - 10 узлы
// 11 - 12 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> // 11 - 12 токи на ЭДС
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // Расчёт вектора невязки
void nevyzka(double dt, double cur_time) { void nevyzka(double dt, double cur_time) {
N(0) = X(0) - (X(3) - UC1_prev) / dt; N(0) = X(0) - (X(3) - UC1_prev) / dt;
N(1) = X(1) - (X(4) - UCb_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(11) = E1(cur_time) - X(6);
N(12) = E2 - X(9); N(12) = E2 - X(9);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> // Перед вектором невязок стоит минус
N = -1 * N; N = -1 * N;
} }
int main() { int main() {
double dt = T_Start; // <EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> double dt = T_Start; // Шаг по времени
double dt_prev = dt; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> double dt_prev = dt; // Предыдущий шаг по времени
double eps_max = ACR; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> double eps_max = ACR; // Максимальное отклонение
double eps_min = 1e-10; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> double eps_min = 1e-10; // Минимальное отклонение
int counter = 0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> int counter = 0; // Счетчик шагов по времени
double cur_time = 0; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> double cur_time = 0; // Текущее время
double eps_cur; double eps_cur;
double eps; double eps;
double step_c = 0; double step_c = 0;
while (dt <= TK) { while (dt <= TK) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // Счётчик итераций
int iteration = 0; int iteration = 0;
bool flag = true; bool flag = true;
while (flag) { while (flag) {
@@ -146,11 +146,11 @@ int main() {
X = X_backup; X = X_backup;
} }
} }
// TODO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, // TODO: реализовать вычисление уточнённое решения, сравнить его с вычисленным,
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // возможно изменить шаг моделирования
} }
// <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // Для примера
/*Jacobian(0.1); /*Jacobian(0.1);
nevyzka(0.1, 0); nevyzka(0.1, 0);
std::cout << Y << std::endl << N;*/ std::cout << Y << std::endl << N;*/