利用结构来实现赋值

- - Comments Off on 利用结构来实现赋值 -

需要解决的问题是:针对不同的系统,想要为不同的系统参数来进行赋值,而每个系统的参数的名称可能不同,比如对于电路可能有C, L, R等,对于其他的系统可能会变成密度或者人口之类的其他名字。那么怎么能够将这个名称以及名称所对应的数值一次传递呢?

这里面我选择了结构(structure)来实现。也不知道好不好,但是功能上应该是没有问题了。

结构可以按照field name来组织不同类型的数据,那么可以用如下命令来定义一个10uF的电容和33mH的电感:

parameter = struct(‘C’, 10e-6, ‘L’, 33e-3);

C和L就是field name。可以用如下命令来取得field name:

names = fieldnames(parameter);

这里的names的类型是cell,cell类似于一般矩阵,但是每个元素可以是很复杂的其他类型的数据。这里就是要注意的一点,为了提取每个参数的名字的字符串(char),不能用names(1);这样的指令,这样取得的还是一个cell。提取cell中的元素为他本来的格式需要用“{}”而不是“[]”。

因此,我们就可以只传递一个parameter的结构,然后用如下代码:

names = fieldnames(parameter);
for i = 1:length(names),
   eval([names{i}, ‘= parameter.’, names{i}]);
end

就可以得到类似于:C=10e-6; L=33e-3; 一样的赋值效果。但是这样的好处是(1)方便传递参数,(2)方便不同的系统的通用性,(3)不必具体考虑参数的名字与数值之间的对应关系,(4)可以方便地实现大量参数的多次赋值。

对不起,为防垃圾留言,旧帖留言功能自行关闭,请在新帖留言。