我有一组常量
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_grad
,a.h_alpha
或b.h_grad
,b.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
一样重复使用它们吗?
答案 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