Unit conversion in Simbiology
5 次查看(过去 30 天)
显示 更早的评论
Hi to all,
Does Simbiology performs unit conversion when, for example, a species in the membrane is transformed into a cytoplasmatic product? It certainly does some conversion but I’m not sure is the right one. For example, 1 molecule/micrometer^2 is transformed by an irreversible reaction from the compartment X that has 6 micrometer^2 capacity into 6 nM of the product in compartment Y that has 1 micrometer^3 capacity. According to my numbers it should have been 10nM instead of 6nM.
Am I missing something here?
Thanks in advance,
Omar
2 个评论
George Kamin
2017-3-3
You comment about accessing the "simulation settings" to disable unit checking, this no longer exists in R2016AB
Arthur Goldsipe
2017-3-3
Hi,
In R2016b, you can disable unit checking directly while viewing the model by going to the toolstrip tab labeled MODEL and clicking on the button named "Convert Units." You will also still find a button labeled "Simulation Settings" when viewing a task, like a simulation. Just go to the toolstrip tab labeled EDITOR and look for the gear icon.
-Arthur
采纳的回答
Rick Paxson
2011-4-5
Hello Omar,
SimBiology can operate in one of two modes when it comes to Units conversions and checking dimensions. By default it performs dimensional analysis using user provided units but does no unit conversions. To turn on unit conversion from the SimBiology Desktop go to the "simulation settings" panel for the simulation task and at the bottom of that panel you will see a checkbox to turn on UnitConversion.
From the MATLAB command line here is the code that I used to confirm that product in compartment Y has 10nM:
m = sbiomodel('unit conversion check');
X = m.addcompartment('X', 'Capacity', 6, 'CapacityUnits', 'micrometer^2');
X.addspecies('membrane_species', 'InitialAmount', 1, 'InitialAmountUnits', 'molecule/micrometer^2');
Y = m.addcompartment('Y', 'Capacity', 1, 'CapacityUnits', 'micrometer^3');
Y.addspecies('cytoplasmic_product', 'InitialAmount', 0, 'InitialAmountUnits', 'nanomolarity');
m.addreaction('X.membrane_species -> Y.cytoplasmic_product', 'reactionrate', 'K*X.membrane_species');
m.addparameter('K', 'Value', 1, 'ValueUnits', '1/second');
% Turn on UnitConversion
cs = m.getconfigset;
cs.CompileOptions.UnitConversion = true;
[t,x] = sbiosimulate(m);
plot(t,x)
Hope this helps.
3 个评论
Arthur Goldsipe
2011-4-13
Hi Omar,
With regard to unitless parameters, we recently added support for a new unit named "dimensionless" for just this case. That capability is available as of R2010b. As of R2011a (just released!), you can also specify arbitrary simulation TimeUnits when using UnitConversion.
With regard to unit conversion and user-defined functions, the units of input arguments or output arguments is not currently documented. Therefore, I recommend writing your user functions in a way that is independent of units. For example, can you make the inputs and outputs dimensionless quantities? This may require you to create additional parameters so that you can scale the arguments.
Finally, one caution against using user-defined functions to create pulse inputs. This approach introduces discontinuities into the equations. For the most accurate and robust numerical solutions to such problems, the solver needs to be informed of the discontinuities. The best way to do this is via events. The documentation actually incudes a demo documenting this approach. The title of the demo is "Deterministic Simulation of a Model Containing a Discontinuity". You can also type "edit discontSimBiologyModel.m" at the MATLAB prompt to see the demo.
Cheers,
Arthur
更多回答(0 个)
社区
更多回答在 SimBiology Community
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Perform Sensitivity Analysis 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!