/////////////////////////////////////////////////////////////////////////////
// Численные методы
// Класс "Оптическая среда" вычисляет показатель преломления для заданной длины волны
// по формуле Герцбергера методом наименьших квадратов
// (см.статью Родионов С.А., Резник В. Г. "Структура и параметры машинного каталога стекла")
// medium.h
//
// Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru
// Университет ИТМО
/////////////////////////////////////////////////////////////////////////////
#if !defined MEDIUM_H
#define MEDIUM_H
/////////////////////////////////////////////////////////////////////////////
#include "boost/numeric/ublas/matrix.hpp"
#include "boost/numeric/ublas/vector.hpp"
/////////////////////////////////////////////////////////////////////////////
class Medium
{
private:
// Матрица L коэффициентов при мю. (Размер 6х6)
boost::numeric::ublas::matrix<double> m_mL;
// Матрица весов Q (Размер 6х6)
boost::numeric::ublas::matrix<double> m_mQ;
// Вектор-столбец показателей преломления (размер 6)
boost::numeric::ublas::vector<double> m_vN;
// вычисленный вектор коэффициентов формулы Герцбергера (размер 6)
// (заполняется первый раз при вычислении показателя преломления)
boost::numeric::ublas::vector<double> m_vMu;
public:
// Конструктор. Инициализация матриц и векторов.
// lambda_list - список длин волн, мкм (размер 6)
// n_list - список известных показателей преломления, соответствующих длинам волн (размер 6)
Medium(std::vector<double>& lambda_list, std::vector<double>& n_list);
// Деструктор
virtual ~Medium();
// Вычисление показателя преломления оптической среды для произвольной длины волны
// medium - среда, показатель преломления которой нужно вычислить
// lambda - длина волны (в мкм)
// Возвращаемое значение: показатель преломления
double GetN(double lambda);
};
/////////////////////////////////////////////////////////////////////////////
#endif // MEDIUM_H