C# 用c语言计算Matlab.m文件#
我有一个c#系统,它有很多时间序列信息。 每个信息都存储在以下数据结构中:C# 用c语言计算Matlab.m文件#,c#,.net,matlab,time-series,C#,.net,Matlab,Time Series,我有一个c#系统,它有很多时间序列信息。 每个信息都存储在以下数据结构中: public struct Tag { DateTime Time {get;set;} double Value {get;set;} } 我们可以将这些标签数组视为Matlab向量: 标记数组: Time | Value ... | ... ... | ... ... | ... 好的,我想要的是为用户提供一个非常简单的UI,他可以在这些标签上编写操作和表达式。我想到的最好的方法
public struct Tag
{
DateTime Time {get;set;}
double Value {get;set;}
}
我们可以将这些标签数组视为Matlab向量:
标记数组:
Time | Value
... | ...
... | ...
... | ...
好的,我想要的是为用户提供一个非常简单的UI,他可以在这些标签上编写操作和表达式。我想到的最好的方法是让用户在这些标签上写Matlab表达式(这样用户几乎可以用这些向量做任何事情,他不需要学习新的语言,而且性能会非常快——我忘了提到,我的标签数组非常大)
例如:
假设我们在当前运行中存储了一个tempratureTagArray和一个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#runtime中从这些.m文件中获取结果向量。
在我看来,这似乎是处理此类问题的最简单方法(我还想知道这种方法是否足够快)
那么,有没有人对实施这样的操作有什么建议
我考虑启动一个背景Matlab程序实例,对于每个请求,以某种方式在Matlab实例上“模拟”用户操作,然后以某种方式读取结果。但我不确定这是最好的方法。我想知道是否有人必须处理这种情况
非常感谢
编辑:
我也很高兴听到你们对这些操作的运行时间的想法。这个东西将运行在一个带有matlab的服务器上,它将得到很多这样的请求。实际上,我考虑过Matlab,因为我知道当你使用它的原生应用程序时,它的运行速度非常快(当然它支持很多数学运算)请尝试下面的例子:
同样重要的是要知道您对计算感兴趣,或者您也想生成m文件。我遇到了类似的情况,我提出了以下解决方案。显然这不是唯一的解决办法,但对我来说很有效
、
或代码>以分隔命令。代码应该包括从二进制/文本文件读取变量
try catch
包装您的代码,这样,如果出现错误,您的呼叫将不会挂起。附加exit
命令以关闭Matlab命令,您可以从c#读取该文件
-r
选项调用Matlab(类似于使用Matlab中的系统
命令),该选项允许您将字符串作为输入发出(例如,请参阅)while
等待生成结果文件。使用一些最大的等待时间来避免无限的,而。生成结果文件后,从保存的文件中读取结果
你好非常感谢你的回答。实际上,我只对执行.m文件感兴趣(创建.m文件不是一个复杂的问题),并在我的c#program.Hi中获得结果。谢谢你的回答。你知道这东西的速度有多快吗?我是否会因为没有使用本机的Matlab应用程序而只是从外部调用Matlab函数而浪费时间?我这样问是因为我每天都要用巨大的向量执行很多这样的操作,我不确定我的方法是否能以一种好的方式扩展,因为每次调用
matlab-r
就像执行matlab一样,所以加载需要几秒钟的时间。如果你有很多电话,这个开销可能太大。也许使用套接字是一个更好的解决方案(我对它了解得不够)