我有一个很好的.net程序集的核心matlab函数,当然是用matlab编译器创建的。对于接受数字或数组数组的函数,这没问题;我可以在C#中编写代码,而无需恢复到matlab(嗯,RCM必须安装;这很好)。将matlab函数集成到c#项目中
但是,对于那些必须引用其他函数的函数,我至今可以找到一个获取c#程序的唯一方法就是将这两个函数编译到程序集中。为了更好地解释,假设我有一个库,其中存储了ode45例程。如果我想解决一个特定的公式,让我们说一些简单的像DY/DX = -y,然后我要创建可写的MATLAB脚本文件,如下所示:
function dydx = diffeq(x, y)
dydx = -y
[明显的解析解存在,但为了这个例子,让我们说我想要这样解决]
现在为了解决这个等式,我将不得不添加此函数作为我的类中的一个方法来编译到.net部件。这当然会破坏我的图书馆的普遍性;我需要将不同库中的特定于应用程序的方程式与我的核心数学函数库进行比较。也就是说,ODE45方法应该位于比“difffeq”方法所在的库更“核心”的库中。我更喜欢在c#类中创建“diffeq”方法,我可以直接在例如编辑器中编辑这些方法。 VS2012。我想直接编辑公式,而不是每次都输入matlab并重新编译程序集。
为了解决这个问题,我已经到了包含ode45代码和我的微分方程方法的程序集反编译的程度;原来这个程序集只不过是与MCR的接口;在装配diffeq方法返回类似以下的东西:
return mcr.EvaluateFunction(numArgsOut, “diffeq”, new object[0]);
我们注意到,函数/方法“diffeq”不是MCR的一部分; MCR不会改变。但是,我无法在程序集中的任何位置找到方程。
这引出了一个问题:“老兄,这里是我的功能?”
还有就是组件的“资源”部分中,我们发现[类名] .ctf,并在我们会发现一些机器代码。这看起来是加密的,但公式可能隐藏在那里。如果是这样,那将是我尝试阻止的故意尝试,并且对MathWorks的赞扬使我无法避免输入matlab应用程序!
但是,似乎没有任何许可证可以阻止我想要做的事情;我认为,如果数学作品能够让人们接受这样的方法,那将是非常棒的,但是在这个环节中,有没有人知道如何做到这一点?
所以你说,正常的MATLAB代码可以在程序运行时访问临时文件夹内? –
对不起,我的措辞有点模棱两可,提取的文件保持加密形式(AES加密)。我想MCR知道秘密的对称密钥,因此能够解密然后照常执行代码。有趣的是,只有M文件被加密了(还有其他的资源文件和来自你的''prefdir''的包含在CTF档案中的未加密的首选项)。目录结构使用相同的文件名进行复制,但M文件中的内容基本上是乱码。 – Amro