Когда я запустил эти коды, оказалось, что MatLab вычислил 0,4 секунды, Python На вычисление ушло 1 с, а на C++ — более 30 с.
Здесь я публикую код C++:
Код: Выделить всё
#include
#include
#include
#include
#include
#include "matplotlibcpp.h"
#include
namespace plt = matplotlibcpp;
double R = 10.0;
double L = 2.0;
double V0 = 5.0;
double t1 = 1.0;
double t2 = 2.0;
double t_start = 0.0;
double t_end = 3.0;
double exact_voltage(double t) {
if (t < t1) {
return 0;
} else if (t1 0) {
A(i, i - 1) = -L / dt;
}
}
std::vector solve_times(N);
for (int i = 0; i < N; ++i) {
solve_times[i] = t_start + i * dt;
if (t1 = t2) {
B(i) = 0.0;
}
}
Eigen::VectorXd I = A.colPivHouseholderQr().solve(B);
Eigen::MatrixXd A_dI_dt = Eigen::MatrixXd::Zero(N, N);
for (int i = 0; i < N - 1; ++i) {
A_dI_dt(i, i) = -1.0 / dt;
A_dI_dt(i, i + 1) = 1.0 / dt;
}
Eigen::VectorXd dI_dt = A_dI_dt * I;
solved_V_L.resize(N);
solved_s_times.resize(N);
for (int i = 0; i < N; ++i) {
solved_V_L[i] = L * dI_dt[i];
solved_s_times[i] = solve_times[i] + dt;
}
}
int main() {
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79031088/why-my-c-code-is-slower-than-python-code-doing-same-thing[/url]
Мобильная версия