Matlab:如何构造一系列常量?以及如何重用它们?

时间:2014-11-08 15:59:49

标签: matlab

我有一组常量

case 'a'
  h_grad = 300;h_alpha = 0.11;
case 'b'
  h_grad = 350;h_alpha = 0.15;
case 'c'
  h_grad = 450;h_alpha = 0.22;
case 'd'
  h_grad = 550;h_alpha = 0.3;

我如何构建它们,因此我可以像a.h_grada.h_alphab.h_gradb.h_alph一样使用它们。 ?

我可能想要使用这些数据:

v = custom_function(a)
% surface_type could be a, b, c or d
  function v = custom_function(surface_type)
    h_grad = surface_type.h_grad;
    h_alpha = surface_type.h_alpha;
    v = h_grad^h_alpha
  end

并且,由于a / b / c / d可能在其他情况下用于其他变量,我如何将这些预定义的a.h_grad常量放入另一个对象?所以他们不会污染谁的程序。 例如,我可以像My_Constant_Containter.a.h_grad一样重复使用它们吗?

2 个答案:

答案 0 :(得分:2)

你在寻找这样的东西:

a.h_grad = 300;a.h_alpha = 0.11;
b.h_grad = 350;b.h_alpha = 0.15;
c.h_grad = 450;c.h_alpha = 0.22;
d.h_grad = 550;d.h_alpha = 0.3;

它们被称为structure类型变量。 我不清楚case字,您使用的是switch吗?

修改 根据您提供的新信息,如果您想保留结构变量(CC常量容器),则有一种可能性:

CC.a.h_grad = 300;CC.a.h_alpha = 0.11;
CC.b.h_grad = 350;CC.b.h_alpha = 0.15;
CC.c.h_grad = 450;CC.c.h_alpha = 0.22;
CC.d.h_grad = 550;CC.d.h_alpha = 0.3;

surface_type = 'b';

function v = custom_function(surface_type)
    h_grad_i  = CC.(surface_type).h_grad;
    h_alpha_i = CC.(surface_type).h_alpha;
    v         = h_grad_i^h_alpha_i;
end

答案 1 :(得分:2)

您可以在此处使用 deal Distribute inputs to outputs) -

%// Define arrays to hold the scalars
h_grad_vals = [300 350 450 550];  
h_alpha_vals = [0.11 0.15 0.22 0.3];

h1 = num2cell(h_grad_vals)
[a.h_grad,b.h_grad,c.h_grad,d.h_grad] = deal(h1{:})

h2 = num2cell(h_alpha_vals)
[a.h_alpha,b.h_alpha,c.h_alpha,d.h_alpha] = deal(h2{:})

输出 -

a = 
     h_grad: 300
    h_alpha: 0.1100
b = 
     h_grad: 350
    h_alpha: 0.1500
c = 
     h_grad: 450
    h_alpha: 0.2200
d = 
     h_grad: 550
    h_alpha: 0.3000

建议

为了便于代码和代码维护的可移植性,不是保存到四个不同的结构,而是将这些标量存储为数组结构更有意义。所以,你可以这样做 -

A.h_grad = h_grad_vals %// h_grad_vals from earlier code
A.h_alpha = h_alpha_vals %// h_alpha_vals from earlier code

因此,你会得到 -

A = 
     h_grad: [300 350 450 550]
    h_alpha: [0.1100 0.1500 0.2200 0.3000]

只留下一个变量A,因此工作空间更清晰!


修改

以下是基于编辑部分中提供的新信息解决问题的解决方法 -

A = cat(1,a,b,c,d);
fns = {'a','b','c','d'};
for k = 1:numel(fns)
    My_Constant_Containter.(char(fns(k))) = A(k);
end

这里输出结构中的数据存储看起来像 -

>> My_Constant_Containter.a
ans = 
     h_grad: 300
    h_alpha: 0.1100
>> My_Constant_Containter.b
ans = 
     h_grad: 350
    h_alpha: 0.1500
>> My_Constant_Containter.c
ans = 
     h_grad: 450
    h_alpha: 0.2200
>> My_Constant_Containter.d
ans = 
     h_grad: 550
    h_alpha: 0.3000