对于MATLAB中的数值模拟,我在.m文件中定义了参数。
%; Parameters as simple definitons
amb.T = 273.15+25; ... ambient temperature [K]
amb.P = 101325; ... ambient pressure [Pa]
combustor.T = 273.15+800; ... [K]
combustor.P = 100000; ... [Pa]
combustor.lambda = 1.1;
fuel.x.CH4 = 0.5; ... [0..1]
fuel.n = 1;
air.x.O2 = 0.21;
%; more complex definitions consisting of other params
air.P = reactor.P;
air.T = amb.T;
air.n = fuel.x.CH4 * 2 * fuel.n * combustor.lambda / air.x.O2;
将此设置视为'默认'定义。要运行一个模拟,此定义可以正常工作。
如果我想以编程方式更改其中一个参数以进行参数研究(更改参数对结果的影响),即执行多个模拟,这会变得更加复杂使用for
循环。在执行此操作的脚本中,我想事先更改几个参数的定义,即覆盖默认定义。 有没有办法在不触及代码中的默认定义的情况下执行此操作(注释/覆盖它们)?应该可以更改研究执行脚本中的任何参数,并从上面的列表中查找默认定义(或反过来)。
让我用以下示例说明问题:如果我想改变combustor.lambda
(让我们说从0.9
到1.3
){} {1}}必须再次评估实际模拟中发生的变化。所以,我可以再次评估列表,但这样我就会失去研究定义的air.n
作为默认列表。
我正在考虑这些解决方案,但我不知道如何做到这一点:
combustor.lambda
数据类型,但另一方面,struct
可能有一些有用的功能吗?默认设置的目的是让程序员在选择变量参数时尽可能自由,使用任何其他参数保持其默认定义,它们可以是独立的(=值)也可以是依赖的(= 方程式,如structs
)。
答案 0 :(得分:0)
% one default parameter set
S = struct('T', 25, 'P', 101000, 'lambda', .5, 'fuel', .5);
GetNByLambda = @(fuel, lambda) fuel * 2 * lambda;
T = struct('P', S.P, 'n', GetNByLambda(S.fuel, S.lambda));
% add more sets
S(end+1) = struct('T', 200, 'P', 10000, 'lambda', .8, 'fuel', .7);
T(end+1) = struct('P', S.P, 'n', GetNByLambda(S(end+1).fuel, S(end+1).lambda));
% iterate over parameter sets
for ii = 1:length(S)
disp(S(end+1))
disp(T(end+1))
end