c++ - 收集多项式表达式中不相交的项

标签 c++ matlab wolfram-mathematica

这是我在这里发表的第一篇文章,如果我不遵循格式指南,请多多包涵。

我的问题如下:我在变量“s”中有几个多项式表达式,最多 10 次。每个系数都是最多 10 个其他变量的函数。总体而言,所有系数函数的代码占用大约 800 行代码,单个系数最多有 40 行代码。我正在用 C++ 编写一个优化例程,试图为系数所依赖的 10 个变量中的每一个确定最佳值。

分析我的代码,我发现我在这个函数上花费了 78% 的时间。为了优化,我想搜索整个代码并找到冗余计算,在例程开始时计算它们,并用之前计算的表达式替换它们的所有出现。问题是最常出现的表达式可能是这样的:

a0 = ... + R1*R2*G1*R3 + R1*R2*H1*R3 + ...;

我想找到一种方法来搜索所有行并整理出 R1*R2*R3 术语以将它们替换为类似 X 的内容,其中 X = R1*R2*R3; 在代码的开头声明。这些正则表达式可能会在整个代码中出现数百次,因此我确信这可以大大提高我的运行时间。此外,我只能对乘法分隔的事物进行分组,而不是加法。

基本上,我需要一个替换字符串函数,它可以找到不相交的字符串,这些字符串的成员项由其他项和 * 符号分隔,但不是 + 符号。这可能是一项艰巨的任务,也可能非常简单,我真的不确定。

我有可用的 Mathematica、MATLAB 和 Maple 并运行 Debian,所以我可以下载一些开源的东西,这可能更有帮助。我通常使用 Emacs 进行编程,尽管我并不精通它的所有功能。我乐于接受任何建议,非常感谢您的帮助。

最佳答案

使用标准的 core-utils,您可以执行以下操作:

cat filename.cc | tr " +" "\n\n" | grep "*" | sort | uniq -c

用简单的英语翻译为:读取文件,将所有空格和加号转换为换行符。接下来,只保留包含乘法的行,对它们进行排序,并显示唯一出现的频率。

关于c++ - 收集多项式表达式中不相交的项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9965341/

相关文章:

python - matlab 卷积 "same"到 numpy.convolve

matlab - 模拟互联网视频流中的丢包

java - Mathematica、J/LINK、JNI、.dll

c++ - 带有 SWIG 的 Python C++ 扩展 - 通过导入模块调用函数

c++ - 我可以在类定义的头文件中声明一个字符串吗?

c++ - 由于模板函数,在条件语句之外声明类对象时出现问题

wolfram-mathematica - 抑制 Mathematica 数值输出中的尾随 "."

c++ - 如何为 VS2010 安装 FLTK?

java - 加性高斯白噪声 Java(dB)

wolfram-mathematica - 关于 Manipulate 内部动态同步更新的问题