31 const Eigen::VectorXd& V,
32 const Eigen::VectorXd& delta,
35 const std::vector<int>& pq_bus_id,
36 const Eigen::MatrixXd& G,
37 const Eigen::MatrixXd& B,
38 const Eigen::VectorXd& P,
39 const Eigen::VectorXd& Q
42 Eigen::MatrixXd J11 = Eigen::MatrixXd::Zero(n_bus - 1, n_bus - 1);
44 for (
int i = 1; i < n_bus; ++i) {
45 for (
int k = 1; k < n_bus; ++k) {
47 J11(i - 1, k - 1) = -Q(i) - V(i) * V(i) * B(i, i);
49 double dik = delta(i) - delta(k);
50 J11(i - 1, k - 1) = V(i) * V(k) * (G(i, k) * std::sin(dik)
51 - B(i, k) * std::cos(dik));
57 Eigen::MatrixXd J21 = Eigen::MatrixXd::Zero(n_pq, n_bus - 1);
59 for (
int i = 0; i < n_pq; ++i) {
61 for (
int k = 1; k < n_bus; ++k) {
63 J21(i, k - 1) = P(j) - V(j) * V(j) * G(j, j);
65 double djk = delta(j) - delta(k);
66 J21(i, k - 1) = -V(j) * V(k) * (G(j, k) * std::cos(djk)
67 + B(j, k) * std::sin(djk));
73 Eigen::MatrixXd J12 = Eigen::MatrixXd::Zero(n_bus - 1, n_pq);
75 for (
int i = 1; i < n_bus; ++i) {
76 for (
int k = 0; k < n_pq; ++k) {
79 J12(i - 1, k) = P(j) / V(j) + V(j) * G(j, j);
81 double dij = delta(i) - delta(j);
82 J12(i - 1, k) = V(i) * (G(i, j) * std::cos(dij)
83 + B(i, j) * std::sin(dij));
89 Eigen::MatrixXd J22 = Eigen::MatrixXd::Zero(n_pq, n_pq);
91 for (
int i = 0; i < n_pq; ++i) {
93 for (
int k = 0; k < n_pq; ++k) {
96 J22(i, k) = Q(j) / V(j) - V(j) * B(j, j);
98 double djl = delta(j) - delta(l);
99 J22(i, k) = V(j) * (G(j, l) * std::sin(djl)
100 - B(j, l) * std::cos(djl));
106 int dim = (n_bus - 1) + n_pq;
107 Eigen::MatrixXd J(dim, dim);
108 J.topLeftCorner(n_bus - 1, n_bus - 1) = J11;
109 J.topRightCorner(n_bus - 1, n_pq) = J12;
110 J.bottomLeftCorner(n_pq, n_bus - 1) = J21;
111 J.bottomRightCorner(n_pq, n_pq) = J22;
Eigen::MatrixXd computeJacobian(const Eigen::VectorXd &V, const Eigen::VectorXd &delta, int n_bus, int n_pq, const std::vector< int > &pq_bus_id, const Eigen::MatrixXd &G, const Eigen::MatrixXd &B, const Eigen::VectorXd &P, const Eigen::VectorXd &Q)
Computes the Jacobian matrix for the Newton-Raphson power flow solver.