gpt4 book ai didi

c# - 在 C# 中计算 Matlab .m 文件

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:16 25 4
gpt4 key购买 nike

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

6年前关闭。




Improve this question




我有一个包含大量时间序列信息的 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# 运行时中从这些 .m 文件中获取结果向量的简单方法。
在我看来,这似乎是处理此类问题的最简单方法(我也想知道这种方法是否足够快)

那么,有人对实现这种操作有什么建议吗?

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

非常感谢。

编辑:
我也很高兴听到您对此类操作的运行时间的看法。这个东西将在一个带有 matlab 的服务器上运行,它会收到很多这样的请求。我实际上考虑过 Matlab,因为我知道当你使用它的 native 应用程序时它运行得非常快(当然它支持很多数学运算)

最佳答案

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

  • 将变量写入可以从 Matlab 读取的二进制/文本文件。
  • 在您的 c# 代码中将 Matlab 代码生成为字符串。它当然应该是一个有效的 Matlab 表达式,但字符串中没有换行符。使用 ,;分隔命令。代码应包括从二进制/文本文件中读取变量。
  • try-catch 包装你的代码,因此如果发生错误,您的调用将不会挂起。附加 exit命令关闭 Matlab。
  • Matlab 命令应包含 save将结果转换为二进制/文本文件,您可以从 c# 中读取该文件。
  • 从您的代码中,您应该使用 system 发出对 Matlab 的调用(类似于使用 Matlab 中的 -r 命令)。使您能够将字符串作为输入发出的选项(例如,参见 here )
  • 在您的 C# 代码中,使用 while等待生成结果文件。使用一些最大等待时间来避免无限 while .生成结果文件后,从保存的文件中读取结果。
  • 关于c# - 在 C# 中计算 Matlab .m 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33407805/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com