Извлечение параметра солнечной камеры из данных

Этот пример показывает оптимизацию параметров блока Solar Cell, чтобы соответствовать данным, заданным в области значений различных температур. Он использует оптимизационную функцию MATLAB ® fminsearch. Другими продуктами, доступными для выполнения этого типа подгонки параметров с Simscape™ моделями Electrical™, являются Optimization Toolbox™ и Simulink ® Design Optimization™. Эти продукты обеспечивают предопределенные функции для манипулирования и анализа блоков с помощью графические интерфейсы пользователя или подхода командной строки.

Стратегия

Подгонка кривых I-V выходов для 8- Параметров Солнечной Камеры к данным с помощью 2-шаговой процедуры:

  1. Оптимизируйте параметры в диалоговом окне Solar Камеры Main вкладки, чтобы соответствовать выходу кривых данным при комнатной температуре.

  2. Оптимизируйте параметры в диалоговом окне Solar Камеры Temperature вкладки так, чтобы выход кривые совпадали с данными при не комнатной температуре.

Данные и блочный Setup

Файл данных MATLAB, ee_solar_iv_data.mat, хранит данные Solar Cell как массив структур. Каждая структура содержит 3 поля: температура, i (ток) и v (напряжение). Блок Solar Cell ссылается на структуру данных, чтобы задать рабочую температуру устройства, значение Импульса блока VPulse, V2 и сгенерировать выходные токи симуляции при предписанных напряжениях. Заданные напряжения устанавливают путем выдачи результатов симуляции в установленные выходы раза. Чтобы задать время выхода, на вкладке Modeling, нажмите Model Settings; в разделе Параметры конфигурации, в категории Импорт/Экспорт данных, нажмите Дополнительные параметры и укажите время выхода. Возможности сохраняют выходные напряжения и токовые отклики как структурные данные, Io.signal.values и Vo.signal.values.

  % Load Solar Cell data
  load ee_solar_iv_data.mat
  % Display the Solar Cell model
  Model = 'ee_solar';
  open_system(Model)

  close_system(Model, 0);

Спецификация начальных параметров

Начальные значения для fminsearch может быть оценена с помощью комбинации значений по умолчанию блоков Solar Cell, значений таблицы данных и следующих уравнений:

$$I_{ph} = I_{sc}$$

$$I_s = {I_{ph} \over (exp(V_{oc} / (.025*ec)) - 1)}$$

$$R_s = {-dV \over dI} @V_{oc}$$

$$R_p = {-dV \over dI} @I_{sc}$$

Список параметров и начальных значений до оптимизации

  ParsListMain = {'Is', 'Iph', 'ec', 'Rs', 'Rp'};
  InitGuessMain = [ 3e-7 3.8 1.5 .004 10 ];
  ParsListTemp = {'TIPH1', 'EG', 'TXIS1'};
  InitGuessTemp = [ .001 1.11 3 ];

Начиная с fminsearch является нелинейным оптимизатором без ограничений, который находит локальный минимум функции, изменение начальной оценки приведет к другому набору решений.

Постройте график зависимости данных от выходов солнечной камеры с помощью начальных параметров

Загрузите 8 параметр Модель солнечной камеры и установите параметры

  load_system(Model);
  set_param([Model '/Solar Cell'], 'prm', '3')
  Pars = reshape([ParsListMain; cellstr(num2str(InitGuessMain'))'],1,[]);
  set_param([Model '/Solar Cell'], Pars{:})
  Pars = reshape([ParsListTemp; cellstr(num2str(InitGuessTemp'))'],1,[]);
  set_param([Model '/Solar Cell'], Pars{:})

  % Generate preliminary model curves and plot against data
  num_lines = length(iv_data);
  v_model = cell(1, num_lines);
  i_model = cell(1, num_lines);
  legend_info_data  = cell(1, num_lines);
  legend_info_model = cell(1, num_lines);
  for idx_data = 1:num_lines
      sim(Model);
      v_model{idx_data} = Vo.signals.values;
      i_model{idx_data} = Io.signals.values;
      legend_info_data{idx_data}  = [ 'Temp = '                         ...
          num2str(iv_data(idx_data).temperature) '\circC, Data'];
      legend_info_model{idx_data} = [ 'Temp = '                         ...
          num2str(iv_data(idx_data).temperature) '\circC, Model'];
  end
  plot([iv_data.v], [iv_data.i], 'd', [v_model{:}], [i_model{:}])
  xlabel('Solar cell output voltage (V)');
  ylabel('Solar cell output current (A)');
  legend([legend_info_data legend_info_model], 'Location', 'Best');
  title('Model with Initial Parameter Values');

Сумма квадратов вычисления ошибки

ee_solar_lse - функция, которая должна быть минимизирована fminsearch. Эта функция возвращает сумму квадратов ошибки для различия между выходным током солнечной камеры и данными. Если недопустимое значение параметров задано как fminsearch, а catch оператор возвращает большое значение ошибки.

Оптимизация параметров диалогового окна вкладки Main при комнатной температуре (Шаг 1)

  % Find room temperature data index
  idx_data = find([iv_data.temperature]==25);%#ok

  % Optimize parameters in main dialog tab of Solar Cell
  ParsList = ParsListMain;
  OptParsMain = fminsearch(@ee_solar_lse, InitGuessMain,              ...
      optimset('TolX', 1e-3));

  % Update Solar Cell block with optimized parameters
  Pars = reshape([ParsList; cellstr(num2str(OptParsMain'))'],1,[]);
  set_param([Model '/Solar Cell'], Pars{:});
  % Display optimized parameters
  display(sprintf(['Optimized parameters for the solar cell main '      ...
      'dialog tab are:\n']));
  display(sprintf('\t%5s = %s\n', Pars{:}));
Optimized parameters for the solar cell main dialog tab are:

	   Is = 3.14991e-07
	  Iph =     3.80143
	   ec =     1.39989
	   Rs =  0.00415127
	   Rp =     10.1088

Оптимизируйте параметры, управляющие температурной зависимостью (Шаг 2)

  % Find index into data for non-room temperatures
  idx_data = find([iv_data.temperature]~=25);

  % Optimize parameters in temperature dialog tab of Solar Cell
  ParsList = ParsListTemp;
  OptParsTemp = fminsearch(@ee_solar_lse, InitGuessTemp,              ...
      optimset('TolX', 1e-3));

  % Update Solar Cell block with optimized temperature parameters
  Pars = reshape([ParsList; cellstr(num2str(OptParsTemp'))'],1,[]);
  set_param([Model '/Solar Cell'], Pars{:});
  % Display optimized parameters
  display(sprintf(['Optimized parameters for the solar cell '           ...
      'temperature dialog tab are:\n']));
  display(sprintf('\t%5s = %s\n', Pars{:}));
Optimized parameters for the solar cell temperature dialog tab are:

	TIPH1 = 0.00080491
	   EG =     1.1385
	TXIS1 =     3.3812

Отобразите оптимизированные кривые

  for idx_data = 1:num_lines
     sim(Model);
     v_model{idx_data} = Vo.signals.values;
     i_model{idx_data} = Io.signals.values;
  end
  plot([iv_data.v], [iv_data.i], 'd', [v_model{:}], [i_model{:}])
  xlabel('Solar cell output voltage (V)');
  ylabel('Solar cell output current (A)');
  legend([legend_info_data legend_info_model], 'Location', 'Best');
  title('Model with Optimized Parameter Values');

bdclose(Model)