【发布时间】:2015-07-13 14:14:08
【问题描述】:
我正在尝试从 C# 调用 Matlab 函数,这并不是一个真正的问题,问题是我需要在 Matlab 部分中保持状态,以便在下一次计算中使用先前的结果。这种状态应该只存在于 Matlab 运行时中。
我尝试在 C# 中使用全局变量,但没有任何运气,我想这根本不是一个很好的解决方案,或者是吗?
我也尝试过 getmcruserdata/setmcruserdata 但我只能在 Matlab 中而不是在 C# 中。
我希望有人能提供一些意见,或者提供一些更好的例子。
更新
我尝试了以下方法
类定义 但 MabLab 类似乎在 .Net 中不起作用
全局变量(无效)
function y = stateCalc1(x)
global state
state = state + x;
y = state;
持久(无效)
function y = statePersistent(x)
persistent state
state = state + x;
y = state;
getmcruserdata/setmcruserdata(已工作)
function y = stateCalc2(x)
val = getmcruserdata('data');
if (isempty(val))
val = x;
else
val = val + x;
end
setmcruserdata('data',val);
y = val;
这现在确实有效,但我仍然不知道这是否是最好的方法?
.Net/C#
var testClass = new TestClass();
for (int i = 0; i < 10; i++)
{
MWArray input = i;
result = testClass.stateCalc(input);
var output = (MWArray)result;
Console.WriteLine(output);
}
Console.ReadKey();
【问题讨论】:
-
一些代码可能会有所帮助。只是需要维护状态的 matlab 函数的一个小示例以及您用来调用它的 C# 代码(请参阅here)
-
为什么你的州需要留在Matlab?您能否在返回函数中包含状态值并将输出(带状态)作为输入传递给您对 Matlab 函数的下一次调用?
-
为广告道歉,但您也许可以通过使用ILNumerics 完全消除问题并留在 C# 中,不是吗?
-
@MattBurland 我通常会提供一个例子,但它是一个概念证明,Matlab 中的函数可能是 x = x +1。我在 C# 中使用 MATLAB Compiler SDK som 它再次只是调用一个方法。但我会举一些例子。
-
@thinklarge 在 Matlab 部分有状态的原因是因为有一个团队提供 C# 部分,另一个团队提供 Matlab 代码,并且 Matlab 团队能够以动态类型存储状态并且不被绑定到.Net 类型。所以唯一的合同就是数据传输。我实际上尝试将状态存储在 Matlab 类中,以便在下一次计算中将其发回,但它对我不起作用。
标签: c# matlab matlab-compiler