createSimFunction (model)

Объект Create SimFunction

Описание

пример

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

пример

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

пример

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

Примечание

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

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

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

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

свернуть все

Модель SimBiology в виде SimBiology model object.

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

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

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

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

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

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

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

Информация дозирования, которую вы указываете во время создания SimFunction объект должен быть сопоставим с информацией дозирования, которую вы указываете во время выполнения объекта. Другими словами, число элементов в Dosed свойство SimFunction F должен равняться объединенному количеству доз во входе Scenarios объект в phi и дозы во входном параметре u когда вы выполняете объект.

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

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

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

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

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

Пример: 'UseParallel'TRUE

Отметьте, чтобы ускорить модель на первой оценке SimFunction объект в виде разделенной запятой пары, состоящей из 'AutoAccelerate' и true или false.

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

Пример: 'AutoAccelerate'ложь

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

Используйте ключевое слово 'all' или "all" задавать все количества модели как чувствительность выходные параметры. Однако {'all'} означает количество модели под названием all в модели. ["all","x"] устанавливает входные факторы чувствительности или выходные факторы к разновидностям под названием all и x.

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

Пример: 'SensitivityOutputs'все

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

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

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

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

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

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

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

  • 'Full' — Полный dedimensionalization

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

Пример: 'SensitivityNormalization'полный

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

свернуть все

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

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

Примеры

свернуть все

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

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

sbioloadproject radiodecay;

Создайте a 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) путем установки аргумента пары "имя-значение" 'all'.

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.

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)
type2 = 
   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)
ans = 
   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)
ans = 
   SimBiology Variant - High insulin sensitivity (inactive)

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

Оба варианта хранят альтернативные значения для Vmx и kp3 параметры. Необходимо задать их как входные параметры, когда вы создаете объект 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
Для просмотра документации необходимо авторизоваться на сайте