Matlab:如何构造一系列常数?如何重用它们?

Matlab:如何构造一系列常数?如何重用它们?,matlab,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_grad、a.h_alpha或b.h_grad、b.h_alph那样使用它们 我可能想使用这些数据,比如: v = custom_fun

我有一组常数

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_梯度常数放入另一个对象中?所以他们不会污染世卫组织的计划。
例如,我可以像我的常量容器一样重复使用它们

你在找这样的东西吗:

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;
它们被称为类型变量。 我不清楚案例中的词语,你在使用吗

编辑: 根据您提供的新信息,如果您希望保持结构变量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

你在找这样的东西吗:

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;
它们被称为类型变量。 我不清楚案例中的词语,你在使用吗

编辑: 根据您提供的新信息,如果您希望保持结构变量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
您可以在此处使用“将输入分配到输出”-

输出-

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
您可以在此处使用“将输入分配到输出”-

输出-

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

好真正的问题是我有a/b/c/d四组不同的数据要使用。参见我的更新。@cqcn1991查看编辑部分,根据新要求解决问题?我的错。一开始我没有意识到真正的问题。我的第一个容器是关于污染的。a/b。是重复使用数据的标识符。在我的例子中,我需要根据它选择要使用的数据集。@cqcn1991所以它仍然不工作?你能用你所说的标识符更新这个问题吗。。。真正的问题是我有a/b/c/d四组不同的数据要使用。参见我的更新。@cqcn1991查看编辑部分,根据新要求解决问题?我的错。一开始我没有意识到真正的问题。我的第一个容器是关于污染的。a/b。是重复使用数据的标识符。在我的例子中,我需要根据它选择要使用的数据集。@cqcn1991所以它仍然不工作?你能用你所说的标识符更新这个问题吗?是的,我的常量容器将是一个很好的解决方案。在这种情况下,您可以保持结构字段名称a.h_grad的原始顺序,并可以将类型引用为My_Constant_Containter.surface_type.h_grad,请参阅我编辑的答案。让我问您-您计划如何使用这样一个三级深层结构?也许你把事情弄得太复杂了?如果您可以将其存储为My_Constant_Containter1.h_grad、My_Constant_Containter2.h_grad、My_Constant_Containter3.h_grad和My_Constant_Containter4.h_grad,以及类似的h_alpha呢?“在我看来,只有一个字段来存储标量似乎效率低下。”Divakar说。好吧,这只是一个建议,另一方面,我有相当复杂的代码,其中结构数组和数组结构嵌套到第8级,并以逻辑方式形成层次结构,至少对我来说是这样。我的经验是,这样的参数结构使记忆和使用变得更加容易。我说的是数百个不同含义的变量,如果把它们组合成一个矩阵,那将是一场噩梦。对于这个问题,它可能是不必要的,但对于大型代码,我认为清晰性更重要。@Arpi对于存储标量,使用数组结构是有意义的,不是吗?当然,您可能会丢失那里的字段名,所以我想如果这很重要,那么最好使用不同的字段名。顺便说一句,我之前的评论问题是针对提问者的。@Divakar好的,我一时忘记了提问者提出了三级结构:。关于数组的结构,这取决于环境。是的,我的常量容器将是一个很好的解决方案。在这种情况下,您可以保持结构字段名称a.h_grad的原始顺序,并可以将类型引用为My_Constant_Containter.surface_type.h_grad,请参阅我编辑的answe
r、 让我问你-你打算如何使用这样一个三层的深层结构?也许你把事情弄得太复杂了?如果您可以将其存储为My_Constant_Containter1.h_grad、My_Constant_Containter2.h_grad、My_Constant_Containter3.h_grad和My_Constant_Containter4.h_grad,以及类似的h_alpha呢?“在我看来,只有一个字段来存储标量似乎效率低下。”Divakar说。好吧,这只是一个建议,另一方面,我有相当复杂的代码,其中结构数组和数组结构嵌套到第8级,并以逻辑方式形成层次结构,至少对我来说是这样。我的经验是,这样的参数结构使记忆和使用变得更加容易。我说的是数百个不同含义的变量,如果把它们组合成一个矩阵,那将是一场噩梦。对于这个问题,它可能是不必要的,但对于大型代码,我认为清晰性更重要。@Arpi对于存储标量,使用数组结构是有意义的,不是吗?当然,您可能会丢失那里的字段名,所以我想如果这很重要,那么最好使用不同的字段名。顺便说一句,我之前的评论问题是针对提问者的。@Divakar好的,我一时忘记了提问者提出了三级结构:。关于数组的结构,这取决于环境。这很好。我们能让定义代码更漂亮吗?这里有太多的抄送和a/b/c/d。我想在Matlab中使用面向对象,但不知道如何使用。顺便说一句,我喜欢你的解决方案+1,如果OP在一开始就把那些重要的东西清理掉,可能会更容易。太好了。我们能让定义代码更漂亮吗?这里有太多的抄送和a/b/c/d。我想在Matlab中使用面向对象,但不知道如何使用。顺便说一句,我喜欢你的解决方案+1,如果OP在一开始就清除了那些重要的东西,可能会更容易。