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 // <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;*/
|
||||||
|
|||||||
Reference in New Issue
Block a user