罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

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

试图匹配一个新函数的行为到现有的一个

我们想要编写一个函数,模拟另一个相关函数的行为,特别是对输入形状,等等。理想情况下,我们想把它写所以我们不需要更新我们的函数如果相关函数改变它是如何工作的,再次对输入的形状和大小,为例。

内容

错误检查

在完美的世界里,我们要做足够的错误检查,因此用户在适当的时候得到一个合理的错误消息。如果原始的错误条件变化函数我们模仿,我们通常需要改变我们的函数匹配的新行为。

算术运算符后模型函数

假设我们想要像一个函数算术运算符在MATLAB。这是相关的规则+,它适用于所有elementwise运营商和大部分elementwise MATLAB函数:

  • +添加或加号。A + B增加了一个B一个B必须具有相同的尺寸,除非你是一个标量。一个标量可以添加到一个矩阵的大小。

这个函数

我们想计算

通常,当我创建一个新的m文件,我通常包括文件的顶部的错误检查。在我在这里描述的功能,我已经努力推广了错误检查,以便重用,不是我平常的起点!

这里的代码。

dbtypeexpMuSigChk
1函数y = expMuSigChk (x,μ、σ)2%的指数函数参数μ、σ。3检查大小的4%。5如果chkSz (x,μ、σ)= = 0 6错误(“LSBlog: sizeMismatch”,“非标量参数必须遵循MATLAB维度匹配规则。”);7最后8% chkSz过去了,我们现在可以做计算。9 y = exp (-0.5 * ((x -μ)。/σ)。^ 2)。/ (sqrt(2 *π)。*σ);10 11函数= chkSz特遣部队(变长度输入宗量)12%收集nonscalarsizes并返回错误信息,如果他们不是13%相同。14 nonscalarsizes = {};15%大小转换为字符串,所以我们可以使用独特的在他们16 k = 1:长度(变长度输入宗量)17如果isscalar(变长度输入宗量{k}) 18日继续19日结束20 nonscalarsizes{结束+ 1}= int2str(大小(变长度输入宗量{k}));21日22日如果isempty (nonscalarsizes) 23日tf = true;24其他25如果长度(独特(nonscalarsizes)) > 1 26 tf = false; 27 else 28 tf = true; 29 end 30 end 31

注意,大约有20行(包括注释)的错误检查和如果MATLAB规则不会改变,这个检查函数也必须改变。这将是太容易忘记这然后当的行为感到惊讶expMuSigChk不再是像MATLAB。

备选项目

相反,我们可以编写一个程序,利用MATLAB对我们有效地进行错误检查。我们试一试做计算,如果失败了,我们的问题和错误。

dbtypeexpMuSig
1函数y = expMuSig (x,μ、σ)2%的指数函数参数μ、σ。3尝试4 y = exp (-0.5 * ((x -μ)。/σ)。^ 2)。/ (sqrt(2 *π)。*σ);5赶上6错误(“LSBlog: sizeMismatch”,“非标量参数必须遵循MATLAB维度匹配规则。”);7日结束

评论

我打算写的话题试一试、错误检查和使用lasterror在未来,对于你们中那些想可能污染MATLAB的错误状态。

是什么你的想法利用MATLAB的路上我描述吗?


使用MATLAB®7.2发表


评论

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