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)


D:\Anaconda\lib\site-packages\h5py\__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
  from ._conv import register_converters as _register_converters

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()


.    9000 (100%) 363.429 it\s
J after optimisation:  [9.41970089e-07]
Информация:  Is converge: False
Amount of iterations: 9000
Total time: 24.68 s
Reached function value: 9.41970088735019e-07
Reason of break: Maximum iterations reached