Вернуться наверх
aco.ifmo.ru photonic
вернуться в оглавление предыдущая глава предыдущий параграф следующий параграф следующая глава


Лабораторная работа №4.
Изучение матричных методов вычислений

4.2. Пример реализации класса "Оптическая среда"

/////////////////////////////////////////////////////////////////////////////
// Численные методы
// Класс "Оптическая среда" вычисляет показатель преломления для заданной длины волны 
// по формуле Герцбергера методом наименьших квадратов 
// (см.статью Родионов С.А., Резник В. Г. "Структура и параметры машинного каталога стекла")
// 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