exponenta event banner

Объект SimFunction

Подобный функции интерфейс, чтобы выполнить модели SimBiology

Описание

Объект SimFunction обеспечивает интерфейс, который позволяет вам выполнять модель SimBiology® как функция и рабочий процесс, чтобы выполнить сканирования параметра (параллельно, если Parallel Computing Toolbox™ доступен), симуляции Монте-Карло, и сканирует с несколькими или векторизованными дозами. Поскольку объект SimFunction может быть выполнен как указатель на функцию, можно настроить его, чтобы интегрировать модели SimBiology с другими продуктами MATLAB® и другими пользовательскими исследованиями (такими как визуальные прогнозирующие проверки).

Используйте метод createSimFunction, чтобы создать объект SimFunction. Объекты SimFunction являются неизменяемыми когда-то созданные и автоматически ускоренные при первом функциональном выполнении.

Синтаксис

Если вы указали информацию дозирования, когда вы вызвали createSimFunction, чтобы создать объект SimFunction F, то F имеет следующие синтаксисы.

simdata = F(phi,t_stop,u,t_output) возвращает simdata SimData object после симуляции модели SimBiology с помощью начальных условий, заданных в phi, времени остановки симуляции, t_stop, дозируя информацию, u, и выходное время, t_output.

simdata = F(phi,t_stop,u) симуляции выполнений с помощью входных параметров phi, t_stop и u.

Если вы не указали информации дозирования, когда вы вызвали createSimFunction, то F имеет следующие синтаксисы:

simdata = F(phi,t_stop) возвращает simdata SimData object после симуляции модели с помощью начальных условий, заданных в phi, и времени остановки симуляции, t_stop.

simdata = F(phi,t_stop,[],t_output) использует входные параметры phi, t_stop, пустой дозируемый аргумент [] и t_output. Необходимо задать u, информацию о дозировании, как пустой array[] для этой подписи. Когда t_output пуст, и t_stop задан, симуляции сообщают о моментах времени решателя до t_stop. Когда t_output задан, и t_stop пуст, только о моментах времени в t_output сообщают. Когда и заданы, моменты времени, о которых сообщают, являются объединением моментов времени решателя и моментов времени в t_output. Если последний t_output больше, чем соответствующий t_stop, то доходы симуляции до последнего момента времени в t_output.

simdata = F(phi,tbl) использует входные параметры phi и tbl. Используя эту подпись только позволяет вам задать выходные времена как одну из переменных tbl. Любая строка данных в tbl, где все столбцы зависимой переменной, имеющие значения NaN, проигнорирован.

[T,Y] = F(_) возвращает T, массив ячеек числового вектора, и Y, массив ячеек 2D числовых матриц, с помощью любого из входных параметров в предыдущих синтаксисах.

Входные параметры

phi

Одно из следующего:

  • Пустой массив [] или массив пустой ячейки {}, означая выполнять симуляции с помощью базовых начальных значений, то есть, значения, перечисленные в свойстве Parameter объекта SimFunction, не изменяя их.

  • Матрица размера, S-by-P, где S является количеством симуляций, чтобы выполнить и P, является количеством параметров, заданных в аргументе params, когда вы вызвали createSimFunction, чтобы создать F. Каждая симуляция выполняется с параметрами, заданными в соответствующей строке phi.

  • S-by-V матрица различных объектов или вектор-столбец ячейки длины S, где каждый элемент состоит из вектора - строки из различных объектов. S является количеством симуляций, чтобы выполнить, и V является количеством различных объектов. Этим вариантам только позволяют изменить параметры входа SimFunction, то есть, элементы модели, которые были указаны как входной параметр params, когда вы вызвали createSimFunction. Другими словами, необходимо задать различные параметры как входные параметры, когда вы создаете объект SimFunction. Любые параметры входа SimFunction, которые не заданы в вариантах, используют свои базовые начальные значения.

    Если в строке вариантов многократные въезды обращаются к тому же элементу модели, последнее вхождение используется для симуляции.

Когда phi задан как 1-by-P или 1-by-V матрица, затем все симуляции используют те же параметры, и количество симуляций определяется от t_stop, u или аргумента t_output в том порядке. Например, если phi и t_stop имеют одну строку, и u является матрицей размера N-by-DoseTargets, количество симуляций определяется как N.

t_stop

  • Скаляр, задающий то же время остановки для всех симуляций

  • Вектор размера N определение времени остановки для каждой симуляции для всех симуляций N

u

  • Пустой массив [], чтобы не применить дозы во время симуляции.

  • table дозирования информации с двумя или тремя переменными, содержащими данные ScheduleDose (таблица ScheduleDose), а именно, время дозы, сумма дозы и (дополнительная) мощность дозы. Назовите табличные переменные можно следующим образом.

    u.Properties.VariableNames = {'Time','Amount','Rate'};

    Если UnitConversion включен, задайте модули для каждой переменной. Например, можно задать модули можно следующим образом.

    u.Properties.VariableUnits = {'second','molecule','molecule/second'};

    Эта таблица может иметь несколько строк, где каждая строка представляет дозу, применился к цели дозы в заданное время дозы с заданной суммой и уровнем при наличии.

  • table с одной строкой и пятью переменными, содержащими данные RepeatDose (таблица RepeatDose). Переменная мощности дозы является дополнительной. Назовите переменные можно следующим образом.

    u.Properties.VariableNames = {'StartTime','Amount','Rate','Interval','RepeatCount'};

    Если UnitConversion включен, задайте модули для каждой переменной. Модулями для переменной 'RepeatCount' может быть пустой '' или 'dimensionless'. Модуль переменной 'Amount' должен быть размерностно сопоставим с той из целевых разновидностей. Например, если модуль целевых разновидностей находится в модуле суммы (таком как родинка или молекула), то модуль переменной 'Amount' должен иметь ту же размерность, т.е. ее модуль должен быть модулем суммы и не может быть массовым модулем (таким как грамм или килограмм). Модуль для переменной 'Rate' должен быть размерностно сопоставимым также.

    u.Properties.VariableUnits = {'second','molecule','molecule/second','second','dimensionless'};

    Совет

    Если у вас уже есть объект дозы (ScheduleDose или RepeatDose), можно получить эту таблицу дозы при помощи метода getTable объекта.

  • Массив ячеек таблиц размера 1 на n, где N является количеством целей дозы. Каждая ячейка может представлять любую таблицу, как описано ранее.

  • Массив ячеек таблиц размера S-by-N, где S является количеством симуляций и N, является количеством целей дозы. Каждая ячейка представляет таблицу. S равен количеству строк в phi.

Если u является массивом ячеек таблиц, то:

  • Количество столбцов (N) в массиве ячеек u должно быть равно числу элементов в дозируемом входном параметре createSimFunction. Порядок таблиц дозы должен также совпадать с порядком дозируемых разновидностей в createSimFunction. Таким образом, SimBiology принимает взаимно-однозначное соответствие между столбцами u и целей дозы, заданных в дозируемом входном параметре createSimFunction, означая, что дозы (таблицы дозы) в первом столбце u применяются к первой цели дозы в дозируемом и так далее.

  • i th доза для j th цель дозы проигнорирован если u{i,j} = [].

  • Если i th доза не параметризован, u{i,j} может быть [] или любой тип таблицы (таблица ScheduleDose или RepeatDose).

  • Если i th доза параметризован, u{i,j} должен быть [] или таблица RepeatDose с одной строкой и столбец для каждого свойства (StartTime, Amount, Rate, Interval, RepeatCount), который не параметризован. Это не требуется, чтобы создавать столбец для свойства дозы, которое параметризовано. Если все свойства параметризованы, можно передать в таблице с одной строкой и никаких столбцах, чтобы указать, что параметризованная доза применяется во время симуляций. Чтобы составить такую таблицу, используйте table.empty(1,0).

t_output

  • Вектор монотонно увеличения вывел времена, который применяется ко всем симуляциям

  • Массив ячеек, содержащий один временной вектор, который применяется ко всем симуляциям

  • Массив ячеек представления векторов вывел времена. ith элемент ячеек обеспечивает выходные времена для ith симуляции. Число элементов в массиве ячеек должно совпадать с количеством строк (симуляции) в phi.

tbl

table или dataset, который имеет время и информацию о дозировании, такую как группа, маркируют, независимая переменная, зависимая переменная (переменные), сумма (суммы) и уровень (уровни). Необходимо назвать переменные настольного приемника или набора данных как 'GROUP','TIME','DEPENDENTVAR1','DEPENDENTVAR2',...,'AMOUNT1','RATE1','AMOUNT2','RATE2',.... Переменная уровня является дополнительной для каждой дозы.

Если аргумент dosed был пуст при создании F то означайте - и связанные с уровнем переменные не требуются. Если это не пусто, количество суммы и переменных уровня должно совпадать с количеством дозируемых целей или разновидностей в dosed. Количество зависимых переменных должно совпадать с количеством столбцов в phi.

Если UnitConversion включен, задайте модуль для каждой переменной. Модуль переменной 'Amount' должен быть размерностно сопоставим с той из целевых разновидностей. См. описание входного параметра u для деталей.

Выходные аргументы

simdata

Массив объектов SimData, который содержит результаты выполнения SimFunction F. Число элементов в массиве simdata совпадает с количеством строк в phi. Количество столбцов в каждом элементе массива simdata, то есть, simdata(i).Data, равно числу элементов в массиве ячеек observed, который был задан при создании F.

T

Массив ячеек, содержащий числовой вектор размера S x 1. S является количеством симуляций. ith элемент T содержит момент времени от ith симуляции.

Y

Массив ячеек 2D числовых матриц. ith элемент Y содержит данные из ith симуляции. Количество строк в T{i} равно количеству строк в Y{i}.

Сводные данные конструктора

createSimFunction (модель)Объект Create SimFunction

Сводные данные метода

ускорьтесь (SimFunction)Подготовьте объект SimFunction к ускоренным симуляциям
isaccelerated (SimFunction)Определите, ускоряется ли объект SimFunction

Сводные данные свойства

Parameters

table с названными переменными:

  • 'Name'

  • 'Value'

  • 'Type'

  • 'Units' (только если UnitConversion включен),

Таблица содержит информацию о количествах модели (разновидности, отсеки или параметры), которые задают входные параметры SimFunction object. Например, эта таблица может содержать параметры или разновидности, значения которых сканируются SimFunction object. Это свойство доступно только для чтения.

Observables

table с названными переменными:

  • 'Name'

  • 'Type'

  • 'Units' (только если UnitConversion включен),

Эта таблица содержит информацию о количествах модели (разновидности, отсеки или параметры), которые задают вывод SimFunction object. Это свойство доступно только для чтения.

Dosed

table, содержащий дозирование информации с названными переменными:

  • 'TargetName'

  • 'TargetDimension' (только если UnitConversion включен),

Кроме того, таблица также содержит переменные для каждого свойства, которое параметризовано. Для каждого параметризованного свойства две переменные добавляются к этой таблице. Первая переменная имеет то же имя как имя свойства, и значение является именем заданного параметра. Второй переменной снабдил суффиксом имя свойства Value (PropertyNameValue), и значение является значением по умолчанию параметра. Если UnitConversion включен, модульный столбец также добавляется с именем PropertyNameUnits.

Предположим, что свойство Amount повторной дозы, предназначающейся для разновидностей Drug, параметризовано путем установки его на параметр модели под названием AmountParam со значением миллиграмма 10, и UnitConversion включен. Таблица Dosed содержит следующие переменные:

TargetNameTargetDimensionСуммаAmountValueAmountUnits
'Drug''Mass (e.g., gram)' 'AmountParam'10'milligram'
UseParallel

Логический. Если true и Parallel Computing Toolbox доступны, SimFunction выполняется параллельно. Это свойство доступно только для чтения.

UnitConversion

Логический. Если верный:

  • Во время выполнения объекта SimFunction phi принят, чтобы быть в тех же модулях как модули для соответствующих количеств модели, заданных в аргументе params, когда объект был создан с помощью метода createSimFunction.

  • Время (t_output или t_stop) принято, чтобы быть в том же модуле как свойство TimeUnits активного configset object модели SimBiology, из которой был создан F.

  • Переменным таблиц дозы (u) должна была задать модули установка u.Properties.VariableUnits к массиву ячеек соответствующих модулей. Размерность цели дозы, такой как сумма (молекула, родинка, и т.д.) или масса (грамм, килограмм, и т.д.), хранится на свойстве Dosed F.

  • Результат симуляции находится в тех же модулях как заданные на соответствующих количествах в модели SimBiology, из которой был создан F.

Это свойство доступно только для чтения.
DependentFiles

Массив ячеек из символьных векторов, содержащий имена файлов, от которых зависит модель. Это свойство используется для развертывания. Это свойство доступно только для чтения.

Примеры

свернуть все

Этот пример показывает, как моделировать ответы инсулина глюкозы для нормальных и диабетических предметов.

Загрузите модель ответа инсулина глюкозы. Для получения дополнительной информации о модели, смотрите раздел Background в Симуляции Ответа Инсулина Глюкозы.

sbioloadproject('insulindemo', 'm1')

Модель содержит различные начальные условия, сохраненные в различных вариантах.

variants = getvariant(m1);

Получите начальные условия для пациента диабетика типа 2.

type2 = variants(1)
   SimBiology Variant - Type 2 diabetic (inactive)

   ContentIndex:     Type:        Name:             Property:           Value:
   1                 parameter    Plasma Volume ... Value               1.49
   2                 parameter    k1                Value               0.042
   3                 parameter    k2                Value               0.071
   4                 parameter    Plasma Volume ... Value               0.04
   5                 parameter    m1                Value               0.379
   6                 parameter    m2                Value               0.673
   7                 parameter    m4                Value               0.269
   8                 parameter    m5                Value               0.0526
   9                 parameter    m6                Value               0.8118
   10                parameter    Hepatic Extrac... Value               0.6
   11                parameter    kmax              Value               0.0465
   12                parameter    kmin              Value               0.0076
   13                parameter    kabs              Value               0.023
   14                parameter    kgri              Value               0.0465
   15                parameter    f                 Value               0.9
   16                parameter    a                 Value               6e-05
   17                parameter    b                 Value               0.68
   18                parameter    c                 Value               0.00023
   19                parameter    d                 Value               0.09
   20                parameter    Stomach Glu Af... Value               125
   21                parameter    kp1               Value               3.09
   22                parameter    kp2               Value               0.0007
   23                parameter    kp3               Value               0.005
   24                parameter    kp4               Value               0.0786
   25                parameter    ki                Value               0.0066
   26                parameter    [Ins Ind Glu U... Value               1
   27                parameter    Vm0               Value               4.65
   28                parameter    Vmx               Value               0.034
   29                parameter    Km                Value               466.21
   30                parameter    p2U               Value               0.084
   31                parameter    K                 Value               0.99
   32                parameter    alpha             Value               0.013
   33                parameter    beta              Value               0.05
   34                parameter    gamma             Value               0.5
   35                parameter    ke1               Value               0.0007
   36                parameter    ke2               Value               269
   37                parameter    Basal Plasma G... Value               164.18
   38                parameter    Basal Plasma I... Value               54.81

Подавите информационное предупреждение, которое выдано во время симуляций.

warnSettings = warning('off','SimBiology:DimAnalysisNotDone_MatlabFcn_Dimensionless');

Создайте объекты SimFunction моделировать ответ инсулина глюкозы для нормальных и диабетических предметов.

  • Задайте пустой массив {} для второго входного параметра, чтобы обозначить, что модель будет моделироваться с помощью основных значений параметров (то есть, никакое сканирование параметра не будет выполняться).

  • Задайте плазменные концентрации глюкозы и инсулина как ответы (выходные параметры функции, которая будет построена).

  • Задайте разновидности Dose как дозируемые разновидности. Эта разновидность представляет начальную концентрацию глюкозы в начале симуляции.

normSim = createSimFunction(m1,{},...
             {'[Plasma Glu Conc]','[Plasma Ins Conc]'},'Dose')
normSim = 
SimFunction

Parameters:

Observables: 

           Name              Type               Units        
    ___________________    _________    _____________________

    '[Plasma Glu Conc]'    'species'    'milligram/deciliter'
    '[Plasma Ins Conc]'    'species'    'picomole/liter'     

Dosed: 

    TargetName      TargetDimension  
    __________    ___________________

      'Dose'      'Mass (e.g., gram)'

Для страдающего от диабета пациента задайте начальные условия с помощью различного type2.

diabSim = createSimFunction(m1,{},...
             {'[Plasma Glu Conc]','[Plasma Ins Conc]'},'Dose',type2)
diabSim = 
SimFunction

Parameters:

Observables: 

           Name              Type               Units        
    ___________________    _________    _____________________

    '[Plasma Glu Conc]'    'species'    'milligram/deciliter'
    '[Plasma Ins Conc]'    'species'    'picomole/liter'     

Dosed: 

    TargetName      TargetDimension  
    __________    ___________________

      'Dose'      'Mass (e.g., gram)'

Выберите дозу, которая представляет одну еду 78 граммов глюкозы в начале симуляции.

singleMeal = sbioselect(m1,'Name','Single Meal');

Преобразуйте информацию о дозировании в формат таблицы.

mealTable  = getTable(singleMeal);

Моделируйте ответ инсулина глюкозы для нормального предмета в течение 24 часов.

sbioplot(normSim([],24,mealTable));

Моделируйте ответ инсулина глюкозы для диабетического предмета в течение 24 часов.

sbioplot(diabSim([],24,mealTable));

Выполните сканирование с помощью вариантов

Предположим, что вы хотите выполнить сканирование параметра с помощью массива вариантов, которые содержат различные начальные условия для различных нарушений инсулина. Например, модель m1 имеет варианты, которые соответствуют низкой чувствительности инсулина и высокой чувствительности инсулина. Можно моделировать модель для обоих условий через один вызов объекта SimFunction.

Выберите варианты, чтобы отсканировать.

varToScan = sbioselect(m1,'Name',...
                    {'Low insulin sensitivity','High insulin sensitivity'});

Проверяйте, какие параметры модели хранятся в каждом варианте.

varToScan(1)
   SimBiology Variant - Low insulin sensitivity (inactive)

   ContentIndex:     Type:        Name:             Property:           Value:
   1                 parameter    Vmx               Value               0.0235
   2                 parameter    kp3               Value               0.0045
varToScan(2)
   SimBiology Variant - High insulin sensitivity (inactive)

   ContentIndex:     Type:        Name:             Property:           Value:
   1                 parameter    Vmx               Value               0.094
   2                 parameter    kp3               Value               0.018

Оба варианта хранят альтернативные значения для параметров kp3 и Vmx. Необходимо задать их как входные параметры, когда вы создаете объект SimFunction.

Создайте объект SimFunction отсканировать варианты.

variantScan = createSimFunction(m1,{'Vmx','kp3'},...
          {'[Plasma Glu Conc]','[Plasma Ins Conc]'},'Dose');

Моделируйте модель и постройте результаты. Run 1 включает результаты симуляции для низкой чувствительности инсулина и Run 2 для высокой чувствительности инсулина.

sbioplot(variantScan(varToScan,24,mealTable));

Низкая чувствительность инсулина приводит к увеличенной и продленной плазменной концентрации глюкозы.

Восстановите предупреждение настроек.

warning(warnSettings);

Этот пример показывает, как отсканировать начальные суммы разновидности из радиоактивной модели затухания с реакцией первого порядка dzdt=cx, где x и z являются разновидностями, и c является постоянным форвардным курсом.

Загрузите демонстрационный проект, содержащий radiodecay модель m1.

sbioloadproject radiodecay;

Создайте объект SimFunction f, чтобы отсканировать начальные суммы разновидностей x.

f = createSimFunction(m1,{'x'},{'x','z'},[])
f = 
SimFunction

Parameters:

    Name    Value      Type         Units   
    ____    _____    _________    __________

    'x'     1000     'species'    'molecule'

Observables: 

    Name      Type         Units   
    ____    _________    __________

    'x'     'species'    'molecule'
    'z'     'species'    'molecule'

Dosed: None

Задайте четыре различных начальных суммы разновидностей x для сканирования. Количество строк указывает на общее количество симуляций, и каждая симуляция использует значение параметров, заданное в каждой строке вектора.

phi = [200; 400; 600; 800];

Запустите симуляции, пока время остановки не равняется 20, и постройте результаты симуляции.

sbioplot(f(phi, 20));

Этот пример показывает, как моделировать и отсканировать параметр radiodecay модели, в то время как разновидность дозируется.

Загрузите демонстрационный проект, содержащий radiodecay модель m1.

sbioloadproject radiodecay;

Создайте объект SimFunction f, задающий параметр Reaction1.c, который будет отсканирован и разновидности x как дозируемая цель.

f = createSimFunction(m1,{'Reaction1.c'},{'x','z'},{'x'});

Задайте скалярную дозу суммы 200 молекул, данных в трех моментах времени (5, 10, и 15 секунд).

dosetime = [5 10 15];
dose = [200 200 200];
u = table(dosetime', dose');
u.Properties.VariableNames = {'Time','Amount'};
u.Properties.VariableUnits = {'second','molecule'};

Задайте значения параметров для Reaction1.c, чтобы отсканировать.

phi = [0.1 0.2 0.5]';

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

sbioplot(f(phi,20,u));

Можно также задать различные суммы дозы в разное время.

d1 = table(5,100);
d1.Properties.VariableNames = {'Time','Amount'};
d1.Properties.VariableUnits = {'second','molecule'};
d2 = table(10,300);
d2.Properties.VariableNames = {'Time','Amount'};
d2.Properties.VariableUnits = {'second','molecule'};
d3 = table(15,600);
d3.Properties.VariableNames = {'Time','Amount'};
d3.Properties.VariableUnits = {'second','molecule'};

Моделируйте модель с помощью этих доз и постройте результаты.

sbioplot(f(phi,20,{d1;d2;d3}));

Можно также задать массив ячеек таблиц дозы.

u = cell(3,1);
dosetime = [5 10 15];
dose = [200 200 200];
u{1} = table(dosetime',dose');
u{1}.Properties.VariableNames = {'Time','Amount'};
u{1}.Properties.VariableUnits = {'second','molecule'};
dosetime2 = [2 6 12];
dose2 = [500 500 500];
u{2} = table(dosetime2', dose2');
u{2}.Properties.VariableNames = {'Time','Amount'};
u{2}.Properties.VariableUnits = {'second','molecule'};
dosetime3 = [3 8 18];
dose3 = [100 100 100];
u{3} = table(dosetime3', dose3');
u{3}.Properties.VariableNames = {'Time','Amount'};
u{3}.Properties.VariableUnits = {'second','molecule'};

Моделируйте модель с помощью таблиц дозы и постройте результаты.

sbioplot(f(phi,20,u));

Ссылки

[1] Гиллеспи, D.T. (1977). Точная стохастическая симуляция двойных химических реакций. Журнал физической химии. 81 (25), 2340–2361.

Введенный в R2014a