29
Jun

利用结构来实现赋值

需要解决的问题是:针对不同的系统,想要为不同的系统参数来进行赋值,而每个系统的参数的名称可能不同,比如对于电路可能有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)可以方便地实现大量参数的多次赋值。

No Comments

Be the first to comment on this entry.

Leave a comment

Name(required)
Mail (will not be published)(required)
Website

Fields in bold are required. Email addresses are never published or distributed.

Some HTML code is allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
URIs must be fully qualified (eg: http://www.dupola.com) and all tags must be properly closed.

Line breaks and paragraphs are automatically converted.

Please keep comments relevant. Off-topic, offensive or inappropriate comments may be edited or removed.