Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Объясните принцип работы данного кода

Экселайт Ученик (152), на голосовании 4 месяца назад
Помогите, объясните принцип действия данного кода(по полочкам))
#include <iostream>
#include <vector>
#include <cmath>
#include <Eigen/Dense>

using namespace Eigen;
using namespace std;


double V(double x) {
if (x > -1 && x < 1) return 0.0;
else return 1e30; // Бесконечно высокие стенки
}

int main() {
const int N = 1000; // Количество точек сетки
const double L = 2; // Размер системы
const double h = L / N; // Шаг сетки
const double mass = 1.0; // Масса частицы
const double hbar = 1.0; // Постоянная Планка


MatrixXd A = MatrixXd::Zero(N, N);
VectorXd potential(N);

for (int i = 0; i < N; ++i) {
double x = -L / 2 + h * i;
potential(i) = V(x);
if (i > 0) {
A(i, i - 1) = 1.0;
}
A(i, i) = -2.0;
if (i < N - 1) {
A(i, i + 1) = 1.0;
}
}

A *= -hbar * hbar / (2 * mass * h * h);
A += potential.asDiagonal();


SelfAdjointEigenSolver<MatrixXd> solver(A);
if (solver.info() != Success) {
cerr << "Eigenvalue decomposition failed!" << endl;
return 1;
}


for (int i = 0; i < 5; ++i) {
cout << "Energy level " << i << ": " << solver.eigenvalues()(i) << endl;
}

return 0;
}
Голосование за лучший ответ
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (264214) 5 месяцев назад
Это решение для стационарного уравнения Шредингера для частицы, находящейся в бесконечно глубокой одномерной потенциальной яме
Похожие вопросы