In [1]:
# Необходмые команды импорта.
import sys
sys.path.append('../physlearn/')
sys.path.append('../source')
import numpy as np
from numpy import linalg as LA
import tensorflow as tf
import matplotlib
matplotlib.use('Agg')
from matplotlib import pylab as plt
import numpy.random as rand
from physlearn.NeuralNet.NeuralNet import NeuralNet
from physlearn.Optimizer.NelderMead.NelderMead import NelderMead
import d1_osc
import ann_constructor
import math_util
from matplotlib import rc
from lagaris import LagarisSolver
from visualiser import Visualiser
n_sig = 7
a = -5
b = 5
m = 200
train_x = np.linspace(a, b, m, endpoint = True).reshape(1, m)
trapz_x = np.linspace(a, b, m, endpoint = True)
lagar = LagarisSolver()
lagar.define_psi(n_sig)
net_x = lagar.get_net_x()
dim = lagar.get_dim()
sess = lagar.get_sess()
potential = tf.square(net_x)
lagar.define_H_psi(potential)
In [2]:
iterations = int(9e3)
max_eps = 1e-9
#solver
lagar = LagarisSolver()
lagar.define_psi(n_sig)
net_x = lagar.get_net_x()
dim = lagar.get_dim()
sess = lagar.get_sess()
potential = tf.square(net_x)
lagar.define_H_psi(potential)
#J_quad = lagar.get_cost_func_quad(train_x, a, b)
J_trapz = lagar.get_cost_func_trapz(train_x, trapz_x)
opt_nm = NelderMead(-2.5,2.5)
opt_nm.set_epsilon_and_sd(0.3, 100)
def opt(J, dim, n_it, eps):
optimisation_result = opt_nm.optimize(J, dim+1, n_it, eps)
return optimisation_result
optimisation_result = opt(J_trapz, dim, iterations, max_eps)
print("J after optimisation: ", J_trapz(optimisation_result.x))
print("Информация: ", optimisation_result)
m_show = 1000
show_x = np.linspace(a, b, m_show, endpoint = True).reshape(1, m_show)
psi_list = np.abs(lagar.calc_psi(show_x, optimisation_result.x[-1]))
H_psi_list = lagar.calc_H_psi(show_x, optimisation_result.x[-1])
psi_true = d1_osc.wf(0, show_x)
error = psi_list - psi_true
#plt.switch_backend('Agg')
fig = plt.figure(figsize=(20,10))
plt.grid(True)
rc('text', usetex=True)
plt.title('$Psi_0(x)$ and $Psi_t(x)$ with error', fontsize=26)
plt.xlabel('x, dimensionless units', fontsize=20)
plt.ylabel('Value of wave functions', fontsize=20)
plt.plot(show_x[0], psi_list, 'b--', label= '$Psi_t(x)$')
plt.plot(show_x[0], psi_true, 'r', label= '$Psi_0(x)$')
plt.plot(show_x[0], error, 'b-..', label = 'Error')
plt.legend()
fig.savefig('out_graph.png', dpi=fig.dpi)
plt.close()