罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

罗兰在MATLAB的艺术已经存档,不会被更新。

MATLAB数据类型作为参数来独立的应用程序

客人的博客彼得•韦伯返回一个与另一个偶尔系列对应用程序部署的帖子。

内容

当您创建一个独立的可执行文件从MATLAB函数MATLAB编译器,生成的主程序有一个有限的能力来处理命令行参数为字符串。在以前的帖子中,我提出了技术来处理字符串参数并把它们变成数字标量。本周,我将向您展示如何处理更复杂的参数独立可执行文件。

MATLAB-Type参数

MATLAB的数据类型包含远远超过字符串和标量。这个案例展示了如何通过细胞数组和函数处理一个单独的可执行文件。

这个函数cellops有两个输入:单元阵列的数据和函数适用于单元阵列中的每个细胞。cellops调用cellfun两次:一次函数应用于单元阵列和第二次来显示结果。

这个函数是一个独立的可执行文件,因为它调用eval在其输入字符串。因此,在命令行字符串必须是有效的MATLAB表达式。

函数cellops (fcn celldata) %如果如果输入一个字符串,假设它是一个MATLAB %表达式,并调用EVAL。如果ischar (celldata) celldata = eval (celldata);结束
如果ischar (fcn) fcn = eval (fcn);结束
%函数应用到单元阵列。输出= cellfun (fcn、celldata UniformOutput,假);
%显示所有结果。cellfun (@disp、输出);

编制MATLAB函数:

mcc mv cellops

然后,通过cellops单元阵列和一个函数处理,在接下来的两个例子。

示例1

使用cellops计算两个随机数据集的意思。第一个参数是MATLAB表达式创建一个单元阵列包含两个向量的随机数字,和第二个参数创建一个MATLAB函数处理的函数的意思是

cellops”{randn (10, 1), randn(20日1)}”“@mean”

示例2

寻找积极的价值观三个数据集。第一个参数是一个细胞数组包含三个数据集——三个向量的随机数,第二个是一个匿名函数从它的输入,提取正数。

cellops”{randn (10, 1), randn(20日1),randn(30日1)}”“@ (x) x (x > 0)”

注意到的参数cellops必须与非空MATLAB表达式的结果。如果你输入一个语句,喜欢x ={81年23日17日},eval将处理它,但因为MATLAB语句没有结果,你会收到一个错误。

cellops“x ={81年23日17日}”“@mean”
? ? ?错误:表达式的左边等号不是一个有效的目标为一个任务。= = > cellops误差在5

第一次调用eval,celldata = eval (celldata);,生成的这个错误。它不可能分配的non-existant结果eval对该变量celldata

第二个参数cellops是一个函数处理。在创建函数处理eval,你必须确保你的函数处理参考函数包含在已部署的应用程序中。一般来说,这意味着您可以使用内装式功能MATLAB工具箱函数,你匿名函数和函数显式地添加——一个。我将讨论这一点在后面的帖子depfun函数。

你的论点不需要字符串

我希望这些例子演示如何增加你的成熟独立的可执行文件的参数处理。尽管独立可执行文件只接收字符串从命令行,您可以将这些字符串变成许多不同种类的数据与多行MATLAB代码。

与读者的练习我离开你:你将如何通过MATLAB结构一个独立的可执行?我有一些想法,但没有一个是真正的优雅。




使用MATLAB®7.11发表


  • 打印

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。