151787 (594713), страница 4

Файл №594713 151787 (Численное решение уравнения Шредингера средствами Java) 4 страница151787 (594713) страница 42016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 4)

Все компьютерные программы состоят из двух элементов: кода и данных. Любая программа может быть концептуально организована либо вокруг ее кода, либо вокруг ее данных. Иначе говоря, некоторые программы концентрируют свою запись вокруг того, "что делается с данными"1, а другие — вокруг того, "на что этот процесс влияет"2. Существуют две парадигмы (основополагающих подхода), которые управляют конструированием программ. Первый подход называет программу моделью, которая ориентирована на процесс (process-oriented model). При этом подходе программу определяют последовательности операторов ее кода. Модель, ориентированную на процесс, можно представлять как кодовое воздействие на данные (code acting on data). Процедурные языки, такие как С, успешно эксплуатируют такую модель. Однако, при этом подходе возникают проблемы, когда возрастает размер и сложность программ. Второй подход, названный объектно-ориентированным программированием, был задуман для управления возрастающей сложностью программ. Объектно-ориентированное программирование организует программу вокруг своих данных (т. е. вокруг объектов) и набора хорошо определенных интерфейсов (взаимодействий) с этими данными. Объектно-ориентированную программу можно характеризовать как управляемый данными доступ к коду (data controlling access to code). Как вы увидите далее, переключая управление на данные, можно получить некоторые организационные преимущества. Опыт показывает, что отсутствие стандартных базовых библиотек для языка С++ чрезвычайно затрудняет работу с ним. В силу того, что любое нетривиальное приложение требует наличия некоторого набора базовых классов, разработчикам приходится пользоваться различными несовместимыми между собой библиотеками или писать свой собственный вариант такого набора. Все это затрудняет как разработку, так и дальнейшую поддержку приложений, затрудняет стыковку приложений, написанных разными людьми. Полная система Java включает в себя готовый набор библиотек, который можно разбить на следующие пакеты:

  • java.lang -- базовый набор типов, отраженных в самом языке. Этот пакет обязательно входит в состав любого приложения. Содержит описания классов Object и Class, а также поддержку многопотоковости, исключительных ситуаций, оболочку для базовых типов, а также некоторые фундаментальные классы.

  • java.io -- потоки и файлы произвольного доступа. Аналог библиотеки стандартного ввода-вывода системы UNIX. Поддержка сетевого доступа (sockets, telnet, URL) содержится в пакете java.net.

  • java.util -- классы-контейнеры (Dictionary, HashTable, Stack) и некоторые другие утилиты. Кодирование и декодирование. Классы Date и Time.

  • java.awt -- Abstract Windowing Toolkit, архитектурно-независимый оконный интерфейс, позволяющий запускать интерактивные оконные Java-приложения на любой платформе. Содержит базовые компоненты интерфейса, такие как события, цвета, фонты, а также основные оконные элементы -- кнопки, scrollbars и т.д.. [6]

4.2 Элементы программирования Java 2 используемые в работе

При реализации метода аппроксимации оператора эволюции средствами языка программирования Java 2, использовались основные элементы объектно-ориентированного программирования, позволяющие разбить программу на более мелкие структурные части, для дальнейшего совершенствования и настраивания ее под различные физические задачи. Использование технологии AWT позволило создать графический интерфейс, наиболее удобный и понятный различному кругу пользователей. В данной работе использовался модуль JSci.math предназначенный для проведения вычислений в специализированных физических и математических задачах. В качестве среды разработки данного программно приложения использовался Eclipse 3.2.

Анимированный апплет позволяет получить наглядное решение нестационарного уравнения Шредингера в различные моменты времени с различными потенциалами. Также выполненный апплет может быть размещен на Internet-сервере и являться частью jsp-странички, что позволит использовать результаты его вычислений различным пользователям сети Internet, используя Internet-браузер для просмотра данной странички.

Программный код

public class Shreding {

final double K0 = 1.0;

final double C = 0.893;

double i = Math.sqrt(-1);

double hx = (XMax-XMin)/N;

double hp = 2*PMax/N;

double[] x = new double[N+1];{

Wave ob = new Wave();

x = ob.x();}

double[] p = new double[N+1];{

Wave ob = new Wave();

p = ob.p();}

double[] w = new double[N+1];{

Wave ob = new Wave();

w = ob.w();}

double[] rePsyX0 = new double[N+1];{

Wave ob = new Wave();

rePsyX0 = ob.rePsyX0();}

double[] imPsyX0 = new double[N+1];{

Wave ob = new Wave();

imPsyX0 = ob.imPsyX0();}

double[] psyX02 = new double[N+1];{

Wave ob = new Wave();

psyX02 = ob.psyX02();}

double[] rePsyP0 = new double[N+1];{

Wave ob = new Wave();

rePsyP0 = ob.rePsyP0();}

double[] imPsyP0 = new double[N+1];{

Wave ob = new Wave();

imPsyP0 = ob.imPsyP0();}

double[] rePsyPt2 = new double[N+1];{

Wave ob = new Wave();

rePsyPt2 = ob.rePsyPt2();}

double[] imPsyPt2 = new double[N+1];{

Wave ob = new Wave();

imPsyPt2 = ob.imPsyPt2();}

double[] rePsyX1t2 = new double[N+1];{

Wave ob = new Wave();

rePsyX1t2 = ob.rePsyX1t2();}

double[] imPsyX1t2 = new double[N+1];{

Wave ob = new Wave();

imPsyX1t2 = ob.imPsyX1t2();}

double[] rePsyX1t2V = new double[N+1];{

Wave ob = new Wave();

rePsyX1t2V = ob.rePsyX1t2V();}

double[] imPsyX1t2V = new double[N+1];{

Wave ob = new Wave();

imPsyX1t2V = ob.imPsyX1t2V();}

double[] rePsyP1t = new double[N+1];{

Wave ob = new Wave();

rePsyP1t = ob.rePsyP1t();}

double[] imPsyP1t = new double[N+1];{

Wave ob = new Wave();

imPsyP1t = ob.imPsyP1t();}

double[] rePsyP1te = new double[N+1];{

Wave ob = new Wave();

rePsyP1te = ob.rePsyP1te();}

double[] imPsyP1te = new double[N+1];{

Wave ob = new Wave();

imPsyP1te = ob.imPsyP1te();}

double[] rePsyX2t = new double[N+1];{

Wave ob = new Wave();

rePsyX2t = ob.rePsyX2t();}

double[] imPsyX2t = new double[N+1];{

Wave ob = new Wave();

imPsyX2t = ob.imPsyX2t();}

double[] psyX2t = new double[N+1];{

Wave ob = new Wave();

psyX2t = ob.psyX2t();}

/**

*

* Метод осуществляющий вычисление всех моментов времени

*/

public double[][] time(){

double M[][]= new double[N+1][20+15*(NT+1)];

double L[][]= new double[N+1][NT+1];

for (int m = 0; m < N+1; m++){

M[m][0] = x[m];

M[m][1] = p[m];

M[m][2] = w[m];

M[m][3] = rePsyX0[m];

M[m][4] = imPsyX0[m];

M[m][5] = psyX02[m];

}

for (int k = 1; k < NT+1; k++){

for (int j = 0; j < N+1; j++){

M[j][6+15*(k-1)] = rePsyP0[j];

M[j][7+15*(k-1)] = imPsyP0[j];

M[j][8+15*(k-1)] = rePsyPt2[j];

M[j][9+15*(k-1)] = imPsyPt2[j];

}

for (int m = 0; m < N+1; m++){

M[m][10+15*(k-1)] = rePsyX1t2[m];

M[m][11+15*(k-1)] = imPsyX1t2[m];

M[m][12+15*(k-1)] = rePsyX1t2V[m];

M[m][13+15*(k-1)] = imPsyX1t2V[m];

}

for (int j = 0; j < N+1; j++){

M[j][14+15*(k-1)] = rePsyP1t[j];

M[j][15+15*(k-1)] = imPsyP1t[j];

M[j][16+15*(k-1)] = rePsyP1te[j];

M[j][17+15*(k-1)] = imPsyP1te[j];

}

for (int m = 0; m < N+1; m++){

M[m][18+15*(k-1)] = rePsyX2t[m];

M[m][19+15*(k-1)] = imPsyX2t[m];

M[m][20+15*(k-1)] = psyX2t[m];

rePsyX0 = rePsyX2t;

imPsyX0 = imPsyX2t;

L[m][k] = M[m][20+15*(k-1)];

}

}return L;

}

}

class Wave{

final double K0 = 1.0;

final double C = 0.893;

double i = Math.sqrt(-1);

double hx = (XMax-XMin)/N;

double hp = 2*PMax/N;

/**

*

* Вычисление координат x

*/

double[] x(){

double X[] = new double[N+1];

for (int j = 0; j < N+1; j++){

X[j] = XMin+j*hx;

}return X;

}

double[] x = new double[N+1];{

x = x();}

**

*

* Вычисление импульсов p

*/

double[] p(){

double P[] = new double[N+1];

for (int j = 0; j < N+1; j++){

P[j] = -1*PMax + j*hp;

}return P;

}

double[] p = new double[N+1];{

p = p();}

/**

*

* Построение потенциального барьера

*/

double[] w(double a, double b, double VMax){

double W[]= new double[N+1];

for (int j = 0; j < N+1; j++){

double V = 0;

if (x[j]>a && x[j]

V = VMax;

}W[j] = V;

}return W;

}

double[] w = new double[N+1];{

w = w();}

/**

*

* Действительная часть функци Psy в начальный момент времени

*/

double[] rePsyX0(){

double RePsyX0[]= new double[N+1];

for (int j = 0; j < N+1; j++){

RePsyX0[j] = C*Math.exp(-x[j]*x[j])*Math.cos(K0*x[j]);

}return RePsyX0;

}

double[] rePsyX0 = new double[N+1];{

rePsyX0 = rePsyX0();}

/**

*

* Мнимая часть функци Psy в начальный момент времени

*/

double[] imPsyX0(){

double ImPsyX0[]= new double[N+1];

for (int j = 0; j < N+1; j++){

ImPsyX0[j] = C*Math.exp(-x[j]*x[j])*Math.sin(K0*x[j]);

}return ImPsyX0;

}

double[] imPsyX0 = new double[N+1];{

imPsyX0 = imPsyX0();}

/**

*

* Вероятность в нвчальный момент времени

*/

double[] psyX02(){

double[] L = new double[N+1];

double[] K = new double[N+1];

double[] PsyX02 = new double[N+1];

L = rePsyX0;

K = imPsyX0;

for (int j = 0; j < N+1; j++){

PsyX02[j] = L[j]*L[j] + K[j]*K[j];

}return PsyX02;

}

double[] psyX02 = new double[N+1];{

psyX02 = psyX02();}

/**

*

* Первое преобразование Фурье и вычисление действительной части функции Psy

*/

double[] rePsyP0(){

double RePsyP0[]= new double[N+1];

for (int j=0; j

double S = 0;

for (int s=0; s

S += rePsyX0[s]*Math.cos(p[j]*x[s]) + imPsyX0[s]*Math.sin(p[j]*x[s]);

}

RePsyP0[j] = hx*S/Math.sqrt(2*Math.PI);}

//rePsyX0 = rePsyX2t;

//imPsyX0 = imPsyX2t;

return RePsyP0;

}

double[] rePsyP0 = new double[N+1];{

rePsyP0 = rePsyP0();}

/**

*

* Первое преобразование Фурье и вычисление мнимой части функции Psy

*/

double[] imPsyP0(){

double ImPsyP0[]= new double[N+1];

for (int j=0; j

double S = 0;

for (int s=0; s

S += imPsyX0[s]*Math.cos(p[j]*x[s]) - rePsyX0[s]*Math.sin(p[j]*x[s]);

}

ImPsyP0[j] = hx*S/Math.sqrt(2*Math.PI);}

//rePsyX0 = rePsyX2t;

//imPsyX0 = imPsyX2t;

return ImPsyP0;

}

double[] imPsyP0 = new double[N+1];{

imPsyP0 = imPsyP0();}

/**

*

* Произведение действительной части функции Psy и первой составляющей оператора расщепления

*/

double[] rePsyPt2(){

double RePsyPt2[]= new double[N+1];

for (int j=0; j

RePsyPt2[j] = rePsyP0[j]*Math.cos(p[j]*p[j]*DT/2) + imPsyP0[j]*Math.sin(p[j]*p[j]*DT/2);

}return RePsyPt2;

}

double[] rePsyPt2 = new double[N+1];{

rePsyPt2 = rePsyPt2();}

/**

*

* Произведение мнимой части функции Psy и первой составляющей оператора расщепления

*/

double[] imPsyPt2(){

double ImPsyPt2[]= new double[N+1];

for (int j=0; j

ImPsyPt2[j] = imPsyP0[j]*Math.cos(p[j]*p[j]*DT/2) - rePsyP0[j]*Math.sin(p[j]*p[j]*DT/2)*0;

}return ImPsyPt2;

}

double[] imPsyPt2 = new double[N+1];{

imPsyPt2 = imPsyPt2();}

/**

*

* Второе преобразование Фурье и вычисление действительной части функции Psy

*/

double[] rePsyX1t2(){

double RePsyX1t2[]= new double[N+1];

for (int j=0; j

double S = 0;

for (int s=0; s

S += rePsyPt2[s]*Math.cos(p[s]*x[j]) - imPsyPt2[s]*Math.sin(p[s]*x[j]);

}

RePsyX1t2[j] = hp*S/Math.sqrt(2*Math.PI);

}return RePsyX1t2;

}

double[] rePsyX1t2 = new double[N+1];{

rePsyX1t2 = rePsyX1t2();}

/**

*

* Второе преобразование Фурье и вычисление мнимой части функции Psy

*/

double[] imPsyX1t2(){

double ImPsyX1t2[]= new double[N+1];

for (int j=0; j

double S = 0;

for (int s=0; s

S += imPsyPt2[s]*Math.cos(p[s]*x[j]) + rePsyPt2[s]*Math.sin(p[s]*x[j]);

}

ImPsyX1t2[j] = hp*S/Math.sqrt(2*Math.PI);

}return ImPsyX1t2;

}

double[] imPsyX1t2 = new double[N+1];{

imPsyX1t2 = imPsyX1t2();}

/**

*

* Произведение действительной части функции Psy и второй составляющей оператора расщепления

*/

double[] rePsyX1t2V(){

double RePsyX1t2V[]= new double[N+1];

for (int j=0; j

RePsyX1t2V[j] = rePsyX1t2[j]*Math.cos(w[j]*DT) + imPsyX1t2[j]*Math.sin(w[j]*DT);

}return RePsyX1t2V;

}

double[] rePsyX1t2V = new double[N+1];{

rePsyX1t2V = rePsyX1t2V();}

/**

*

* Произведение мнимой части функции Psy и второй составляющей оператора расщепления

*/

double[] imPsyX1t2V(){

double ImPsyX1t2V[]= new double[N+1];

for (int j=0; j

ImPsyX1t2V[j] = imPsyX1t2[j]*Math.cos(w[j]*DT) - rePsyX1t2[j]*Math.sin(w[j]*DT);

}return ImPsyX1t2V;

}

double[] imPsyX1t2V = new double[N+1];{

imPsyX1t2V = imPsyX1t2V();}

/**

*

* Третье преобразование Фурье и вычисление действительной части функции Psy

*/

double[] rePsyP1t(){

double RePsyP1t[]= new double[N+1];

for (int j=0; j

double S = 0;

for (int s=0; s

S += rePsyX1t2V[s]*Math.cos(p[j]*x[s]) + imPsyX1t2V[s]*Math.sin(p[j]*x[s]);

}

RePsyP1t[j] = hx*S/Math.sqrt(2*Math.PI);

}return RePsyP1t;

}

double[] rePsyP1t = new double[N+1];{

rePsyP1t = rePsyP1t();}

/**

*

* Третье преобразование Фурье и вычисление мнимой части функции Psy

*/

double[] imPsyP1t(){

double ImPsyP1t[]= new double[N+1];

for (int j=0; j

double S = 0;

for (int s=0; s

S += imPsyX1t2V[s]*Math.cos(p[j]*x[s]) - rePsyX1t2V[s]*Math.sin(p[j]*x[s]);

}

ImPsyP1t[j] = hx*S/Math.sqrt(2*Math.PI);

}return ImPsyP1t;

}

double[] imPsyP1t = new double[N+1];{

imPsyP1t = imPsyP1t();}

/**

*

* Произведение действительной части функции Psy и третьей составляющей оператора расщепления

*/

double[] rePsyP1te(){

double RePsyP1te[]= new double[N+1];

for (int j=0; j

RePsyP1te[j] = rePsyP1t[j]*Math.cos(p[j]*p[j]*DT/2) + imPsyP1t[j]*Math.sin(p[j]*p[j]*DT/2);

}return RePsyP1te;

}

double[] rePsyP1te = new double[N+1];{

rePsyP1te = rePsyP1te();}

/**

*

* Произведение мнимой части функции Psy и третьей составляющей оператора расщепления

*/

double[] imPsyP1te(){

double ImPsyP1te[]= new double[N+1];

for (int j=0; j

ImPsyP1te[j] = imPsyP1t[j]*Math.cos(p[j]*p[j]*DT/2) - rePsyP1t[j]*Math.sin(p[j]*p[j]*DT/2);

}return ImPsyP1te;

}

double[] imPsyP1te = new double[N+1];{

imPsyP1te = imPsyP1te();}

/**

*

* Четвертое преобразование Фурье и вычисление действительной части функции Psy

*/

double[] rePsyX2t(){

double RePsyX2t[]= new double[N+1];

for (int j=0; j

double S = 0;

for (int s=0; s

S += rePsyP1te[s]*Math.cos(p[s]*x[j]) - imPsyP1te[s]*Math.sin(p[s]*x[j]);

}

RePsyX2t[j] = hp*S/Math.sqrt(2*Math.PI);

}return RePsyX2t;

}

double[] rePsyX2t = new double[N+1];{

rePsyX2t = rePsyX2t();}

/**

*

* Четвертое преобразование Фурье и вычисление мнимой части функции Psy

*/

double[] imPsyX2t(){

double ImPsyX2t[]= new double[N+1];

for (int j=0; j

double S = 0;

for (int s=0; s

S += imPsyP1te[s]*Math.cos(p[s]*x[j]) + rePsyP1te[s]*Math.sin(p[s]*x[j]);

}

ImPsyX2t[j] = hp*S/Math.sqrt(2*Math.PI);

}return ImPsyX2t;

}

double[] imPsyX2t = new double[N+1];{

imPsyX2t = imPsyX2t();}

/**

*

* Вычисление вероятности в момент DT

*/

double[] psyX2t(){

double[] L = new double[N+1];

double[] K = new double[N+1];

double[] PsyX2t = new double[N+1];

L = rePsyX2t;

K = imPsyX2t;

for (int j = 0; j < N+1; j++){

PsyX2t[j] = L[j]*L[j] + K[j]*K[j];

}return PsyX2t;

}

}

Графики поведения волновых функций

Прямоугольный потенциальный барьер

Барьер гауссова функция

Заключение

Численное решение нестационарного уравнения Шредингера имеет важное значение для компьютерного исследования квантовых систем. В данной работе рассмотрены два метода численного решения одномерного нестационарного уравнения Шредингера: метод конечных разностей и метод аппроксимации оператора эволюции. По результатам вычислений построены графики поведения волновой функции в зависимости от времени для ступенчатого потенциала.

Полученные значения полностью соответствуют теоретическим данным для квантовомеханической задачи со ступенчатым потенциалом и наглядно отражают процессы отражения и прохождения частицы через потенциальный барьер. Также рассмотренные численные методы могут использоваться для расчета других видов волновых функций и потенциалов.

Список использованных источников

1. А.С. Давыдов. Квантовая механика//М.,: "Наука", 1973г., 704 с

2. З. Флюгге. Задачи по квантовой механике//М.: "Мир", Т.1, 1974г., 343 с

3. Е.А. Волкова, А.М. Попов, А.Т. Рахимов, "Квантовая механика на персональном компьютере"//Москва.: "УРСС", 1995.

4. Дж. Мэтьюз, Р. Уокер "Математические методы физики".

4. С.В. Поршнев Моделирование квантовых систем //www.exponenta.ru

6. П.Ноутон, Г.Шилдт Java 2 Наиболее полное руководство//С-Петербург: "БХВ-Петербург" 2007.

Характеристики

Тип файла
Документ
Размер
31,12 Mb
Предмет
Учебное заведение
Неизвестно

Список файлов ВКР

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6361
Авторов
на СтудИзбе
310
Средний доход
с одного платного файла
Обучение Подробнее