Я пытаюсь добавить в код граничное условие, но не знаю, как это сделать, не получая ошибок. Прямо сейчас я сравниваю минеральные спектры с неизвестным, чтобы увидеть этот состав. По существу, выходная часть представляет собой долю того, сколько каждого минерала содержится в неизвестном ОДНАКО, при суммированном выводе вы получаете значение, превышающее «1» (вы не можете иметь более 100% чего-либо, если это имеет смысл.)
Я определяю в своем l oop, чтобы убедиться, что значения складываются (или меньше) к 1, но опять же, выход по-прежнему больше 1.
Например, вывод для кода ниже : Расчетные содержания Acmite, Augite, Diopside, Hornblende, Labradorite, Microcline, Olivine и Orthoclase в SR373 составляют [0,9 -0,23 0,2 0,31 0,02 -0,01 -0,03 0,03] RMSE составляет 0,101 И хотя это хорошее значение RMSE, я не могу работать с этим b c все значения выше складываются в 1
# these are all the minerals and their spectra associated (reflectance value vs wavelength)
libspecs=np.concatenate([AcmiteReflectance, \
AugiteReflectance, \
DiopsideReflectance, \
HornblendeReflectance, \
LabradoriteReflectance, \
MicroclineReflectance, \
OlivineReflectance, \
OrthoclaseReflectance]).reshape(8, 1868)
#Input the target spectra - this is your observed/collected spectra
targetspecs=np.array([Reflectance_373])
#Transpose arrays for input into least squares solver
inA = libspecs.T
inB = targetspecs.T
#Calculate the solution X to XA=B
coeffvals = np.linalg.lstsq(inA, inB)
#Grab the weights (X) from the returned tuple
weights = coeffvals[0]
#Loop through the weight array and print out generated spectra
specnames=['SR373']
for weightsind in range(1):
specweights=weights[:,weightsind]
#Normalize the weights to sum to 1
specweights/=np.linalg.norm(specweights)
#Apply the weights to the library spectra to produce the modeled spectrum
fitspec = np.dot(specweights,inA.T)
print('Calculated abundances of Acmite, Augite, Diopside, Hornblende, Labradorite, Microcline, Olivine and Orthoclase in ' + \
specnames[weightsind] + ' are ' + str(np.around(specweights,2)))
rmse=np.sqrt(np.mean((fitspec-inB.T[weightsind,:])**2))
print('RMSE is ' + str(np.around(rmse,3)))
'''