3
0
mirror of https://github.com/NehZio/Crystal-MEC synced 2024-09-27 12:01:01 +02:00
Crystal-MET/opti.py
2019-04-15 17:37:27 +02:00

57 lines
1.2 KiB
Python

import numpy as np
import scipy.optimize as optimize
def func(param,charge,const):
result = 0
for i in const:
result += i[0]*i[1]
for i in range(len(param)):
result += param[i]*coef[i]
return result**2
f = open('toto','r')
charge = []
const = []
coef = []
line = f.readline()
while line:
ini = 0
line = float(line.split()[4])
if line == -2.0 or line == 2.0 or line == 4.0:
for i in const:
if i[0] == line:
i[1] += 1
ini = 1
if ini == 0:
const.append([line,1])
line = f.readline()
continue
for i in range(len(charge)):
if charge[i] == line:
coef[i] += 1
ini = 1
if ini == 0:
charge.append(line)
coef.append(1)
line = f.readline()
f.close()
results = optimize.minimize(func,charge,args=(coef,const))
#if results.success:
fitted_param = results.x
for i in range(len(charge)):
print('% 7.5f => % 7.5f \n'%(charge[i],fitted_param[i]))
#else:
# print(charge)
# raise ValueError(results.message)
print('% 7.5f => % 7.5f \n'%(np.sqrt(func(charge,coef,const)),np.sqrt(func(fitted_param,coef,const))))