exponenta event banner

createSimFunction (модель)

Объект Create SimFunction

Синтаксис

F = createSimFunction(model,params,observables,dosed)
F = createSimFunction(model,params,observables,dosed, variants)
F = createSimFunction(___,Name,Value)

Описание

пример

F = createSimFunction(model,params,observables,dosed) создает F SimFunction object, который можно выполнить как указатель на функцию. Аргументы params и observables задают вводы и выводы функционального F, когда он выполняется, и dosed задает информацию о дозировании разновидностей. Смотрите SimFunction object для получения дополнительной информации о том, как выполнить F.

пример

F = createSimFunction(model,params,observables,dosed, variants) создает SimFunction object, применяя значения, сохраненные в variants, векторе различных объектов, как базовые значения модели.

пример

F = createSimFunction(___,Name,Value) дополнительные опции использования заданы одним или несколькими аргументами пары Name,Value.

Примечание

  • Активные дозы и варианты модели проигнорированы, когда F выполняется.

  • F является неизменяемым после того, как он будет создан.

  • F автоматически ускоряется при первом функциональном выполнении. Однако вручную ускорьте объект, если вы хотите ускоренный в ваших приложениях развертывания.

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

свернуть все

Модель SimBiology, заданная как model object SimBiology.

Входные параметры SimFunction F, заданного как вектор символов, массив ячеек из символьных векторов или массив пустой ячейки {}. Векторы символов представляют имена количеств модели (разновидности, отсеки или параметры), которые задают входные параметры F. Используйте массив пустой ячейки {}, чтобы создать SimFunction object, который не имеет никаких параметров.

Чтобы однозначно назвать количество модели, используйте полностью определенное имя, которое включает имя отсека. Чтобы назвать ограниченный по объему реакцией параметр, используйте имя реакции, чтобы квалифицировать параметр. Если имя не является допустимым именем переменной MATLAB®, окружите его квадратными скобками, такими как [reaction 1].[parameter 1].

Выходные параметры SimFunction F, заданного как вектор символов или массив ячеек из символьных векторов. Векторы символов представляют имена количеств модели (разновидности, отсеки или параметры), которые задают выходные параметры F.

Дозируемые разновидности или объекты дозы, заданные как вектор символов, массив ячеек из символьных векторов, вектор объектов дозы или пустой массив []. Используйте [], чтобы указать, что никакие разновидности не дозируются во время симуляции.

Если это - массив ячеек из символьных векторов, это должно быть 1 N массивом, где N является количеством дозируемых имен разновидностей. Можно использовать дублирующиеся имена разновидностей, если вы планируете использовать несколько доз для тех же разновидностей, когда вы запускаете SimFunction F. Только Используя дозируемые разновидности имена не содержит информации о свойствах дозы. Если у вас есть объект дозы, который содержит параметризованные свойства, такие как Amount, используйте объект дозы, как введено вместо только имен разновидностей, чтобы передать такую информацию о параметре созданному SimFunction F.

Если это - вектор объектов дозы, это должно быть 1 N вектором, где N является количеством объектов дозы. Если объекты дозы имеют свойства с числовыми значениями не по умолчанию, эти значения проигнорированы, и предупреждение выдано. Только TargetName, DurationParameterName, LagParameterName и параметризованные свойства используются, чтобы создать объект SimFunction F, то есть, задать свойство Dosed F. Для получения дополнительной информации о том, как таблица свойства Dosed заполняется, см. Сводные данные Свойства.

Количество дозируемых разновидностей, заданных здесь, то есть, свойство Dosed созданного объекта SimFunction F, должно быть сопоставимо с входным параметром дозы u SimFunction F, когда вы выполняете объект. Другими словами, число элементов (N) в свойстве Dosed F должно быть равно числу элементов (столбцы) в массиве ячеек u. Порядок дозируемых разновидностей в Dosed должен также совпадать с порядком таблиц дозы в u.

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

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'UseParallel',true задает, чтобы выполнить SimFunction F параллельно.

Отметьте, чтобы выполнить SimFunction F параллельно, заданный как пара, разделенная запятой, состоящая из 'UseParallel' и true или false. Если true и Parallel Computing Toolbox™ доступны, SimFunction F выполняется параллельно.

Пример: 'UseParallel', true

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

Используйте ключевое слово 'all', чтобы задать все количества модели, перечисленные в аргументе observables как чувствительность выходные параметры. Однако {'all'} означает количество модели под названием all в модели.

Необходимо задать оба аргумента пары "имя-значение" 'SensitivityOutputs' и 'SensitivityInputs' для вычислений чувствительности.

Пример: 'SensitivityOutputs', 'all'

Факторы входа Sensitivity, заданные как пара, разделенная запятой, состоящая из 'SensitivityInputs' и массива ячеек из символьных векторов. Векторы символов являются именами количеств модели (разновидности, отсеки и параметры), относительно которого вы хотите вычислить чувствительность. Значением по умолчанию является {}, означающий входные факторы. Входными факторами являются знаменатели зависящих от времени производных, объясненных в Вычислении Чувствительности.

Используйте ключевое слово 'all', чтобы задать все количества модели, перечисленные в аргументе params как входные параметры чувствительности. Однако {'all'} означает количество модели под названием all в модели.

Необходимо задать оба аргумента пары "имя-значение" 'SensitivityOutputs' и 'SensitivityInputs' для вычислений чувствительности.

Пример: 'SensitivityInputs', {'Reaction1.c1','Reaction1.c2'}

Нормализация для расчетной чувствительности, заданной как пара, разделенная запятой, состоящая из 'SensitivityNormalization' и 'None', 'Half' или 'Full'.

  • 'none' Никакая нормализация (значение по умолчанию)

  • 'Half' — Нормализация относительно числителя только

  • полный Полный dedimensionalization

Для получения дополнительной информации смотрите Normalization.

Пример: 'SensitivityNormalization', 'Full'

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

свернуть все

SimFunction, возвращенный как SimFunction object или SimFunctionSensitivity object. Можно выполнить F как указатель на функцию.

F является SimFunctionSensitivity object, если вы задаете непустые аргументы пары "имя-значение" 'SensitivityOutputs' и 'SensitivityInputs'.

Примеры

свернуть все

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

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

sbioloadproject radiodecay;

Создайте SimFunction object, задав параметр Reaction1.c, чтобы быть отсканированными, и разновидности x как вывод функции без дозируемых разновидностей.

f = createSimFunction(m1, 'Reaction1.c','x', [])
f = 
SimFunction

Parameters:

        Name         Value       Type          Units   
    _____________    _____    ___________    __________

    'Reaction1.c'     0.5     'parameter'    '1/second'

Observables: 

    Name      Type         Units   
    ____    _________    __________

    'x'     'species'    'molecule'

Dosed: None

Если опция UnitConversion была установлена в false, когда объект SimFunction, f был создан, таблица, не отображает модули количеств модели.

Чтобы проиллюстрировать это, сначала установите опцию UnitConversion на false.

cs = getconfigset(m1);
cs.CompileOptions.UnitConversion = false;

Создайте объект SimFunction как прежде и обратите внимание, что переменная под названием Units исчезает.

f = createSimFunction(m1, {'Reaction1.c'},{'x'}, [])
f = 
SimFunction

Parameters:

        Name         Value       Type    
    _____________    _____    ___________

    'Reaction1.c'     0.5     'parameter'

Observables: 

    Name      Type   
    ____    _________

    'x'     'species'

Dosed: None

Если какая-либо из разновидностей в модели дозируется, задайте имена дозируемых разновидностей в качестве последнего аргумента. Например, если разновидность x дозируется, задайте его в качестве последнего аргумента.

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

Parameters:

        Name         Value       Type    
    _____________    _____    ___________

    'Reaction1.c'     0.5     'parameter'

Observables: 

    Name      Type   
    ____    _________

    'x'     'species'

Dosed: 

    TargetName
    __________

       'x'    

Если объект SimFunction создается, можно выполнить его как указатель на функцию и выполнить сканирования параметра (параллельно, если Parallel Computing Toolbox™ доступен), симуляции Монте-Карло, и сканирует с несколькими или векторизованными дозами. См. SimFunction object для большего количества примеров.

Этот пример создает объект SimFunction с дозированием информации с помощью объекта RepeatDose или ScheduleDose или вектора этих объектов. Однако, если какой-либо объект дозы содержит данные, такие как StartTime, Amount и Rate, такие данные проигнорированы, и предупреждение выдано. Только данными, при наличии, используемый является TargetName, LagParameterName и DurationParameterName объекта дозы.

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

sbioloadproject radiodecay;

Создайте RepeatDose object и задайте его свойства.

rdose = sbiodose('rd');
rdose.TargetName = 'x';
rdose.StartTime = 5;
rdose.TimeUnits = 'second';
rdose.Amount = 300;
rdose.AmountUnits = 'molecule';
rdose.Rate = 1;
rdose.RateUnits = 'molecule/second';
rdose.Interval = 100;
rdose.RepeatCount = 2;

Добавьте параметр задержки и параметр длительности к модели.

lagPara = addparameter(m1,'lp');
lagPara.Value = 1;
lagPara.ValueUnits = 'second';
duraPara = addparameter(m1,'dp');
duraPara.Value = 1;
duraPara.ValueUnits = 'second';

Установите эти параметры на объект дозы.

rdose.LagParameterName = 'lp';
rdose.DurationParameterName = 'dp';

Создайте объект SimFunction f с помощью объекта RepeatDose rdose, который вы только создали.

f = createSimFunction(m1,{'Reaction1.c'},{'x','z'},rdose)
Warning: Some Dose objects in DOSED had data. This data
will be ignored. 
> In SimFunction>SimFunction.SimFunction at 847
  In SimFunction>SimFunction.createSimFunction at 374 

f = 

SimFunction

Parameters:

        Name         Value       Type          Units   
    _____________    _____    ___________    __________

    'Reaction1.c'    0.5      'parameter'    '1/second'

Observables: 

    Name      Type         Units   
    ____    _________    __________

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

Dosed: 

    TargetName            TargetDimension        
    __________    _______________________________

    'x'           'Amount(e.g. mole or molecule)'


    DurationParameterName    DurationParameterValue
    _____________________    ______________________

    'dp'                     1                     


    DurationParameterUnits    LagParameterName
    ______________________    ________________

    'second'                  'lp'            


    LagParameterValue    LagParameterUnits
    _________________    _________________

    1                    'second'         

Предупреждающее сообщение появляется, потому что объект rdose содержит данные (StartTime, Amount, Rate), которые проигнорированы методом createSimFunction.

Этот пример показывает, как выполнить различные подписи SimFunction object, чтобы моделировать и отсканировать параметры Лотки - Вольтерры (добыча хищника) модель, описанная Гиллеспи [1].

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

sbioloadproject lotka;

Создайте объект SimFunction f с c1 и c2 как входные параметры, которые будут отсканированы, и y1 и y2 как вывод функции без дозируемых разновидностей.

f = createSimFunction(m1,{'Reaction1.c1', 'Reaction2.c2'},{'y1', 'y2'}, [])
f = 
SimFunction

Parameters:

         Name         Value       Type    
    ______________    _____    ___________

    'Reaction1.c1'      10     'parameter'
    'Reaction2.c2'    0.01     'parameter'

Observables: 

    Name      Type   
    ____    _________

    'y1'    'species'
    'y2'    'species'

Dosed: None

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

phi = [10 0.01; 10 0.02];

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

sbioplot(f(phi, 5));

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

t_stop = [3;6];
sbioplot(f(phi, t_stop));

Затем, задайте выходные времена как вектор.

t_output = 0:0.1:5;
sbioplot(f(phi,[],[],t_output));

Задайте выходные времена как массив ячеек векторов.

t_output = {0:0.01:3, 0:0.2:6};
sbioplot(f(phi, [], [], t_output));

Этот пример показывает, как вычислить чувствительность некоторых разновидностей в модели Лотки-Вольтерры с помощью объекта SimFunctionSensitivity.

Загрузите демонстрационный проект.

sbioloadproject lotka;

Задайте входные параметры.

params = {'Reaction1.c1', 'Reaction2.c2'};

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

observables  = {'y1', 'y2'};

Создайте объект SimFunctionSensitivity. Установите чувствительность выходные факторы на все разновидности (y1 и y2) заданный в аргументе observables и введите факторы тем в аргументе params (c1 и c2) при помощи ключевого слова 'все'.

f = createSimFunction(m1,params,observables,[],'SensitivityOutputs','all','SensitivityInputs','all','SensitivityNormalization','Full')
f = 
SimFunction

Parameters:

         Name         Value       Type    
    ______________    _____    ___________

    'Reaction1.c1'      10     'parameter'
    'Reaction2.c2'    0.01     'parameter'

Observables: 

    Name      Type   
    ____    _________

    'y1'    'species'
    'y2'    'species'

Dosed: None

Sensitivity Input Factors: 

         Name            Type    
    ______________    ___________

    'Reaction1.c1'    'parameter'
    'Reaction2.c2'    'parameter'

Sensitivity Output Factors: 

    Name      Type   
    ____    _________

    'y1'    'species'
    'y2'    'species'

Sensitivity Normalization: 

Full

Вычислите чувствительность путем выполнения объекта с c1 и набором c2 к 10 и 0.1 соответственно. Установите выходные времена от 1 до 10. t содержит моменты времени, y содержит данные моделирования, и sensMatrix является матрицей чувствительности, содержащей чувствительность y1 и y2 относительно c1 и c2.

[t,y,sensMatrix] = f([10,0.1],[],[],1:10);

Получите информацию о чувствительности во времени симуляции = 5.

temp = sensMatrix{:};
sensMatrix2 = temp(t{:}==5,:,:);
sensMatrix2 = squeeze(sensMatrix2)
sensMatrix2 = 2×2

   37.6987   -6.8447
  -40.2791    5.8225

Строки sensMatrix2 представляют выходные факторы (y1 и y2). Столбцы представляют входные факторы (c1 и c2).

sensMatrix2=[y1c1y2c1y1c2y2c2]

Установите время остановки на 15, не задавая выходные времена. В этом случае выходные времена являются моментами времени решателя по умолчанию.

sd = f([10,0.1],15);

Получите расчетную чувствительность из объекта SimData sd.

[t,y,outputs,inputs] = getsensmatrix(sd);

Постройте чувствительность разновидностей y1 и y2 относительно c1.

figure;
plot(t,y(:,:,1));
legend(outputs);
title('Sensitivities of species y1 and y2 with respect to parameter c1');
xlabel('Time');
ylabel('Sensitivity');

Постройте чувствительность разновидностей y1 и y2 относительно c2.

figure;
plot(t,y(:,:,2));
legend(outputs);
title('Sensitivities of species y1 and y2 with respect to parameter c2');
xlabel('Time');
ylabel('Sensitivity');

Также можно использовать sbioplot. Расширьте Run1, чтобы выбрать который симуляция или данные о чувствительности, чтобы отобразиться.

sbioplot(sd);

Можно также построить матрицу чувствительности использование интеграла времени для расчетной чувствительности y1 и y2. График показывает, что y1 и y2 более чувствительны к параметру c1, чем c2.

[~, in, out] = size(y);
result = zeros(in, out);
for i = 1:in
    for j = 1:out
        result(i,j) = trapz(t(:),abs(y(:,i,j)));
    end
end
figure;
hbar = bar(result);
haxes = hbar(1).Parent;
haxes.XTick = 1:length(outputs);
haxes.XTickLabel = outputs;
legend(inputs,'Location','NorthEastOutside');
ylabel('Sensitivity');

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

Загрузите модель ответа инсулина глюкозы. Для получения дополнительной информации о модели, смотрите раздел 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);

Ссылки

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

Расширенные возможности

Введенный в R2014a