MATLAB:动态变量定义

时间:2014-07-17 09:40:16

标签: matlab variables struct simulation handle

对于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.91.3){} {1}}必须再次评估实际模拟中发生的变化。所以,我可以再次评估列表,但这样我就会失去研究定义的air.n作为默认列表。

我正在考虑这些解决方案,但我不知道如何做到这一点:

  • 以结构字段仅包含定义的方式使用引用/句柄,而不是实际值。这允许在解析'之前更改默认定义。整个结构来获得实际值。
  • 评估由考虑(非默认)定义的函数设置的默认定义,即在评估期间跳过默认定义集的这些行。
  • 任何OOP方法。当然,它不仅限于combustor.lambda数据类型,但另一方面,struct可能有一些有用的功能吗?

编辑:

默认设置的目的是让程序员在选择变量参数时尽可能自由,使用任何其他参数保持其默认定义,它们可以是独立的(=值)也可以是依赖的(= 方程式,如structs)。

1 个答案:

答案 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