Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用c语言计算Matlab.m文件#_C#_.net_Matlab_Time Series - Fatal编程技术网

C# 用c语言计算Matlab.m文件#

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,他可以在这些标签上编写操作和表达式。我想到的最好的方法

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

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文件。

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

  • 将变量写入可从Matlab读取的二进制/文本文件
  • 将Matlab代码生成为c#代码中的字符串。它当然应该是一个有效的Matlab表达式,但字符串中没有换行符。使用
    以分隔命令。代码应该包括从二进制/文本文件读取变量
  • try catch
    包装您的代码,这样,如果出现错误,您的呼叫将不会挂起。附加
    exit
    命令以关闭Matlab
  • Matlab命令应该包括一个将结果保存到二进制/文本文件中的
    命令,您可以从c#读取该文件
  • 在代码中,您应该使用
    -r
    选项调用Matlab(类似于使用Matlab中的
    系统
    命令),该选项允许您将字符串作为输入发出(例如,请参阅)
  • 在c代码中,使用
    while
    等待生成结果文件。使用一些最大的等待时间来避免无限的
    ,而
    。生成结果文件后,从保存的文件中读取结果

  • 你好非常感谢你的回答。实际上,我只对执行.m文件感兴趣(创建.m文件不是一个复杂的问题),并在我的c#program.Hi中获得结果。谢谢你的回答。你知道这东西的速度有多快吗?我是否会因为没有使用本机的Matlab应用程序而只是从外部调用Matlab函数而浪费时间?我这样问是因为我每天都要用巨大的向量执行很多这样的操作,我不确定我的方法是否能以一种好的方式扩展,因为每次调用
    matlab-r
    就像执行matlab一样,所以加载需要几秒钟的时间。如果你有很多电话,这个开销可能太大。也许使用套接字是一个更好的解决方案(我对它了解得不够)