在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,因为我知道当你使用它的原生应用程序时,它的工作速度非常快(当然它支持很多数学运算)
我遇到了类似的情况,并提出了以下解决方案。显然,这不是唯一的解决方案,但它对我有效
- 将变量写入可以从Matlab读取的二进制/文本文件中
- 将Matlab代码生成为c#代码中的字符串。它当然应该是一个有效的Matlab表达式,但字符串中没有换行符。使用
,
或;
来分离命令。代码应该包括从二进制/文本文件中读取变量 - 用
try-catch
包装代码,这样在发生错误时您的调用就不会挂起。附加一个exit
命令以关闭Matlab - Matlab命令应将结果的
save
包含在一个二进制/文本文件中,您可以从c#中读取该文件 - 从您的代码中,您应该发出对Matlab的调用(类似于使用Matlab中的
system
命令),使用-r
选项,它使您能够发出字符串作为输入(例如,请参阅此处) - 在c#代码中,使用
while
等待生成结果文件。使用一些最长的等待时间来避免无限的while
。生成结果文件后,从保存的文件中读取结果
请尝试以下示例:
示例1
示例2
示例3
同样重要的是要知道你对计算感兴趣,或者你也想生成m文件。