问题标签 [exprtk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
221 浏览

c++ - C++ 和 ExprTk 解析器“使用已删除函数”错误

我正在尝试在一个类中使用 ExprTk 数学表达式解析器库,该类的对象将存储在对象向量中,该向量是另一个类的成员变量;但是,当我尝试 push_back 向量中的新对象时,我遇到了很多“使用已删除函数”错误。这是给我带来问题的代码的简单版本:

我没有包含头库,因为它有近 40,000 行,但可以在这里找到:http: //www.partow.net/programming/exprtk/

这是错误消息

我很确定这个问题与 push_back 函数以及对象的复制方式有关;然而,这有点超出我的头脑和 C++ 的知识(这是相当基本的)。

任何帮助,将不胜感激。谢谢!

0 投票
2 回答
324 浏览

c++ - C 中复数的数学解析器 (ExprTk)

我过去经常使用ExprTk库,以便进一步处理用 C 语言使用 Mathematica(包含数学表达式)生成的大型输出文件。直到现在,我专门使用这个库来处理产生 type 值的表达式,<double>例如该库通过定义类型完美地工作

并将“一切”存储在结构中

读取包含变量以及用户定义函数的a文本b文件

可以通过以下方式实现

然后可以评估读入表达式的任意值,ab使用

最近,我在尝试处理包含复数和返回类型复数值的函数的文本文件时遇到了问题std::complex<double>。更具体地说,我有一个.txt包含表单表达式的文件

其中A0(a)B0(a,b,c)是由高能物理中(张量)环积分的 Passarino-Veltman 约简产生的标量环积分。这些可以在 C 中使用LoopTools进行数值计算,需要注意的是,它们对 、 和 的某些值采用ab数值c。在上面的 typedef 中简单地替换<double>bystd::complex<double> 会在编译时引发大量错误。我不确定 ExprTk 库是否能够处理复数——我知道它不能处理自定义类,但据我了解,它应该能够处理本机数据类型(正如我在这里找到的那​​样, ExprTk 至少能够处理向量,但是考虑到我需要处理的表达式的复杂性,我认为不可能以某种方式以向量的形式重写所有内容,特别是由于代数与复数和向量)。请注意,我也不能将表达式分成实部和虚部,因为我必须针对变量的许多不同值评估表达式。

尽管我之前在文本文件中处理过复数和提到的函数A0(a)B0(a,b,c)但我通过简单地.txt在 C 中包含文件来解决这个问题,使用#include "xyz.txt",在相应的函数中实现,但是,考虑到手头的文本文件的大小,这似乎是不可能的(如果我尝试这样做,编译器会抛出错误)。

有人知道 ExprTk 是否以及如何处理复数?(非常感谢 MWE。)如果不是这样,这里的任何人都可以建议一个不同的数学解析器,它对用户友好并且可以处理 type 的复数std::complex<double>,同时允许定义自己返回的自定义函数如此复杂的价值观?

一个 MWE:

xyz.txt

xyzC.txt

要让 MWE 工作,请将exprtk.hpp文件放在您编译的同一文件夹中。

请注意,evaluateFile(...)函数的返回类型可以是 /is std::complex<double>,即使只返回双值类型。// (%)尝试复值文件时,标记为的行可能会发生变化xyzC.txt

实例化exprtk::parser<std::complex<double> >投掷(等等)

而所有其他需要的类型似乎都没有抱怨 type std::complex<double>

0 投票
1 回答
41 浏览

c++ - 如何使用 exrtk 将方程评估为布尔值?

我正在尝试运行此代码:

但我得到这个错误:

在 VS 2019 上。当我使用其他数据类型时不会发生这种情况。这是一个错误还是我做错了什么?