gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:08:21 25 4
gpt4 key购买 nike

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

我的问题如下:我在变量“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/

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