罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

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

多个输入和输出在建设者类型安全api

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

内容

具有不同类型的多个参数

我有一个MATLAB函数具有多个输入和输出,我想电话c#。尽管这看上去不像是挑战,MATLAB处理函数参数从c#非常不同,特别是可选参数和多个返回值。

我的MATLAB函数的行为,多边形,取决于输入的数量和类型。多边形计算三个不同的数序列。给定一个整数N为每个序列,它返回第N个条目在每一个序列。只有第一个输入(tN)是必需的;其他两个都是可选的。

函数(t, p, h] =多边形(tN、pN hN)

在典型的MATLAB时尚,如果任何输入向量的长度K,多边形返回K元素的序列。对于每一个序列,输入的数值类型决定了输出的数值类型。如果tNint32例如,多边形返回一个int32t

这是很多复杂性包裹在一个函数。我数至少36个不同的调用方法多边形。我们如何应对这种复杂性在c#中?一个词:重载

重载函数和参数顺序c#接口

一般来说,一个函数重载如果你可以称之为不同数量和类型的输入和输出。在c#中,您必须为每组编写一个新函数的输入和输出。我已经实现了五个多边形在c# 36过载演示c# Builder不匹配函数声明MATLAB函数。

最简单的多边形由一个标量的过载双输入和一个标量双输出。在c#中:

双多边形(双t);

建造者不地图第一c#输入,t第一个MATLAB输入(tN,注意参数的名称匹配过程中不考虑),和第一MATLAB输出(t)到c#函数的返回值。

接下来,我将声明一个函数来调用多边形有三个标量输入,产生三个标量输出。由于c#不允许多个返回值,构建器不支持c#金宝app参数在自己的地方。

无效的多边形(双t, p两倍,双h,双tN,双pN,双hN);

在这个函数,输出第一,紧随其后的是输入,返回类型是空白。这种形式可能是最接近结构的MATLAB函数,但构建器不支持许多其他。金宝app你可能第一MATLAB输出映射到c#函数的返回值:

双多边形(双p,双h,双tN,双pN,双hN);

从t已经消失,返回类型改变的无效

你也可以交错(混合)输入和输出。在这里,我之前已经把每个输入输出产生:

无效的多边形(双tN,双t,双pN,双p,双hN,双h);

最后要记住,多边形金宝app支持向量输入和输出;在这里我请求双[]向量输出从双[]向量的输入。在这个函数输出再次出现在输入之前,是我喜欢的风格。

无效的多边形(双t[],双[]p, h双[],[]tN的两倍,双[]pN,双[]hN);

构建和运行的例子

首先,下载源代码本文从MATLAB中央。

像往常一样,调用的过程多边形通过类型安全API包含三个步骤:

  • 构建IFigurate接口DLL。
  • 创建发电机net程序集和GeneratorIFigurate类型安全接口。
  • 编译主程序,PolySeq之后,引用IFigurateGenerateIFiguratePolySeq项目。
  • 该文件ReadmeParameters.txt包含详细说明。

    确保你的运行时环境正确设置,然后运行吗PolySeq \ PolySeq \ bin \ \ PolySeq.exe调试。它调用多边形通过上述几个c#接口和产生以下输出:

    17三角形数:153
    13三角形数:91 11五角号码:176 19六角号码:703
    多边形数N: 3 6 9 - - - - - - - - - - - - - - - - - - - - - - - -三角:6 21 45五角:12 51 117六角:15 66 153

    你可以生成相同的数字与三个调用MATLAB多边形:

    % 17三角形数t =多边形(17);
    % 13三角,11日五角和19六角数字[t, p, h] =多边形(13、11、19);
    % 3日、6日和9日三角,五角和六角号码顺序= (3、6、9);[t, p, h] =多边形(订单,订单,订单);

    Flexibile还是复杂的?

    你认为参数命令和函数重载的规则?其中的一些是由c#和MATLAB的结构,但一些导致可用性测试和我们的设计判断。他们是太复杂,还是足够灵活?请让我知道在这里




    使用MATLAB®7.12发表


    • 打印
    • 发送电子邮件

    评论

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