Change encoding to UTF-8
This commit is contained in:
@@ -1,2 +1,2 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|||||||
64
main.cpp
64
main.cpp
@@ -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 // Ñàìè ïåðåìåííûå è èõ ïðîèâçîäíûå
|
#define STATE_VARS 3*2 // Сами переменные и их проивзодные
|
||||||
#define PHI 5 // Êîëè÷åñòâî óçëîâ â ñõåìå
|
#define PHI 5 // Количество узлов в схеме
|
||||||
#define EDS 2 // Êîëè÷åñòâî èñòî÷èêîâ íàïðÿæåíèÿ
|
#define EDS 2 // Количество источиков напряжения
|
||||||
#define MATRIX_DIM STATE_VARS+PHI+EDS // Ðàçìåðíîñòü ÿêîáèàíà
|
#define MATRIX_DIM STATE_VARS+PHI+EDS // Размерность якобиана
|
||||||
|
|
||||||
const double TK = 1e-3; // âðåìÿ ðàñ÷åòà
|
const double TK = 1e-3; // время расчета
|
||||||
const double T_Start = 1e-10; // íà÷àëüíûé øàã
|
const double T_Start = 1e-10; // начальный шаг
|
||||||
const double SMN = 1e-15; // ìèíèìàëüíûé øàã
|
const double SMN = 1e-15; // минимальный шаг
|
||||||
const double ACR = 1e-2; // òî÷íîñòü
|
const double ACR = 1e-2; // точность
|
||||||
|
|
||||||
// Ïàðàìåòðû ìîäåëè
|
// Параметры модели
|
||||||
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.;
|
||||||
// Ñèíóñîèäàëüíûé èñòî÷íèê òîêà
|
// Синусоидальный источник тока
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ßêîáèàí
|
// Якобиан
|
||||||
MatrixXd Y = MatrixXd::Zero(MATRIX_DIM, MATRIX_DIM);
|
MatrixXd Y = MatrixXd::Zero(MATRIX_DIM, MATRIX_DIM);
|
||||||
// Âåêòîð íåâÿçîê
|
// Вектор невязок
|
||||||
VectorXd N = VectorXd::Zero(MATRIX_DIM);
|
VectorXd N = VectorXd::Zero(MATRIX_DIM);
|
||||||
// Âåêòîð ïîïðàâîê
|
// Вектор поправок
|
||||||
VectorXd dX = VectorXd::Zero(MATRIX_DIM);
|
VectorXd dX = VectorXd::Zero(MATRIX_DIM);
|
||||||
// Âåêòîð ôàçîâûõ ïåðåìåííûõ
|
// Вектор фазовых переменных
|
||||||
VectorXd X = VectorXd::Zero(MATRIX_DIM);
|
VectorXd X = VectorXd::Zero(MATRIX_DIM);
|
||||||
// Êîïèÿ âåêòîðà ôàçîâûõ ïåðåìåííûõ (äëÿ îáðàáîòêè ñëó÷àÿ íåóäà÷íîãî øàãà)
|
// Копия вектора фазовых переменных (для обработки случая неудачного шага)
|
||||||
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 ïðîèçâîäíûå
|
// 0 - 2 производные
|
||||||
// 3 - 5 ïåðåìåííûå ñîñòîÿíèÿ
|
// 3 - 5 переменные состояния
|
||||||
// 6 - 10 óçëû
|
// 6 - 10 узлы
|
||||||
// 11 - 12 òîêè íà ÝÄÑ
|
// 11 - 12 токи на ЭДС
|
||||||
|
|
||||||
// Ðàñ÷¸ò âåêòîðà íåâÿçêè
|
// Расчёт вектора невязки
|
||||||
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);
|
||||||
|
|
||||||
// Ïåðåä âåêòîðîì íåâÿçîê ñòîèò ìèíóñ
|
// Перед вектором невязок стоит минус
|
||||||
N = -1 * N;
|
N = -1 * N;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
double dt = T_Start; // Øàã ïî âðåìåíè
|
double dt = T_Start; // Шаг по времени
|
||||||
double dt_prev = dt; // Ïðåäûäóùèé øàã ïî âðåìåíè
|
double dt_prev = dt; // Предыдущий шаг по времени
|
||||||
double eps_max = ACR; // Ìàêñèìàëüíîå îòêëîíåíèå
|
double eps_max = ACR; // Максимальное отклонение
|
||||||
double eps_min = 1e-10; // Ìèíèìàëüíîå îòêëîíåíèå
|
double eps_min = 1e-10; // Минимальное отклонение
|
||||||
int counter = 0; // Ñ÷åò÷èê øàãîâ ïî âðåìåíè
|
int counter = 0; // Счетчик шагов по времени
|
||||||
double cur_time = 0; // Òåêóùåå âðåìÿ
|
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) {
|
||||||
// Ñ÷¸ò÷èê èòåðàöèé
|
// Счётчик итераций
|
||||||
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: ðåàëèçîâàòü âû÷èñëåíèå óòî÷í¸ííîå ðåøåíèÿ, ñðàâíèòü åãî ñ âû÷èñëåííûì,
|
// TODO: реализовать вычисление уточнённое решения, сравнить его с вычисленным,
|
||||||
// âîçìîæíî èçìåíèòü øàã ìîäåëèðîâàíèÿ
|
// возможно изменить шаг моделирования
|
||||||
|
|
||||||
}
|
}
|
||||||
// Äëÿ ïðèìåðà
|
// Для примера
|
||||||
/*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;*/
|
||||||
|
|||||||
Reference in New Issue
Block a user