2013-05-01 67 views
2

我需要在matlab中使用非常长的字符串定义一个变量,让我们称它为S. S包含符号计算的结果,并且我想在我的matlab代码中使用该结果。 S太长而无法直接复制到代码中,所以我只是从文件中读取它。我可以使用eval评估S中的表达式,它可以正常工作,但它确实很慢(大约需要15秒)。我需要获取S值的变化范围内的不同值,所以我需要一个更快的方法来做到这一点。任何想法都会很棒。matlab替代eval的大字符串

+0

为了提高性能,你可以实现的eval作为一个MEX功能。 另外,看看这个: http://www.mathworks.se/help/matlab/matlab_prog/string-evaluation.html – PurpleAlien 2013-05-01 21:21:08

+0

是的,当我试图找出这一点,但我没看到那个页面,但我没有认为任何这些情况都适用于我正在尝试做的事情。你能解释一下MEX功能是什么吗?谢谢。 – user1504686 2013-05-02 20:19:56

+0

MEX函数是像C/C++或Fortran中的eval()这样的函数的本地代码实现,因此可以进行高度优化。你的主要问题是eval()真的很慢,所以你必须找到一种方法来为你的特定需求编写一个优化版本,然后在Matlab中使用这个版本。 – PurpleAlien 2013-05-02 22:56:19

回答

1

根据你的主要目标你可以做几件事情。

  • 表达式转换为脚本,并从你的函数调用它(速度的提高将取决于表达)
  • 如果表达式是比较平滑函数没有奇异点,那么你可以预先计算它输入的几个值参数。然后你插入该表的剩余点。无论如何,应该比15秒快。
  • 你可以两种方式使用/最终开关草案在代码中使用的计算草案插值和“最后的”运行确切的代码组合(可能一夜之间O)