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>
#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;*/