在c#中计算Matlab.m文件

本文关键字:文件 Matlab 计算 | 更新日期: 2023-09-27 18:19:40

我有一个c#系统,它有很多时间序列信息。每个信息都存储在以下数据结构中:

public struct Tag
{
   DateTime Time {get;set;}
   double Value {get;set;}
}

实际上,我们可以将这些标签阵列视为Matlab向量:

标签阵列:

Time  |  Value
...   |  ...
...   |  ...
...   |  ...

好的,所以我想要的是为用户提供一个非常简单的UI,他可以在这些标签上编写操作和表达式。我想出的最好的方法是让用户在这些标签上写Matlab表达式(这样用户几乎可以用这些向量做任何事情,他不需要学习新语言,而且性能会很快-我忘了提,我的标签数组真的很大)

例如:

假设我们在当前运行中存储了一个temperatureTagArray和一个windTagArray。(每个数组的分钟值介于星期日和星期一之间)。

所以我想让用户写一些类似的东西:

x = windTagArray;
y = tempratureTagArray;

然后,一个matlab表达式:

if (x > y)
    result = x.^y + y./7 * 12;
else
    result = exp(x) + y.^6 - 7 + (x.*y).^3 + log(y);
end

我将负责在我的c#程序中定义向量(x和y)的部分,然后我将从中创建一个matlab.m文件。我需要的是一种在matlab上启动这些.m文件的简单方法,并在我的c#运行时从这些.m中获得结果向量。在我看来,这似乎是处理此类问题的最简单方法(我也不知道这种方法是否足够快)

那么,有没有人建议实施这样的行动呢?

我考虑启动一个后台Matlab程序实例,对于每个请求,以某种方式"模拟"用户在Matlab实例上的操作,然后以某种方式读取结果。但我不确定这是最好的方法。我想知道是否有人必须处理这种情况。

非常感谢。

编辑:我也很高兴听到你们对这种操作的运行时间的想法。这个东西将在带有matlab的服务器上运行,它会收到很多这样的请求。我真的考虑过Matlab,因为我知道当你使用它的原生应用程序时,它的工作速度非常快(当然它支持很多数学运算)

在c#中计算Matlab.m文件

我遇到了类似的情况,并提出了以下解决方案。显然,这不是唯一的解决方案,但它对我有效

  1. 将变量写入可以从Matlab读取的二进制/文本文件中
  2. 将Matlab代码生成为c#代码中的字符串。它当然应该是一个有效的Matlab表达式,但字符串中没有换行符。使用,;来分离命令。代码应该包括从二进制/文本文件中读取变量
  3. try-catch包装代码,这样在发生错误时您的调用就不会挂起。附加一个exit命令以关闭Matlab
  4. Matlab命令应将结果的save包含在一个二进制/文本文件中,您可以从c#中读取该文件
  5. 从您的代码中,您应该发出对Matlab的调用(类似于使用Matlab中的system命令),使用-r选项,它使您能够发出字符串作为输入(例如,请参阅此处)
  6. 在c#代码中,使用while等待生成结果文件。使用一些最长的等待时间来避免无限的while。生成结果文件后,从保存的文件中读取结果

请尝试以下示例:

示例1

示例2

示例3

同样重要的是要知道你对计算感兴趣,或者你也想生成m文件。