从外部输入文件将字符串数学公式以double形式读入cpp

Read string math-formula into cpp as double from external input-file

本文关键字:cpp double 文件 输入 字符串 数学公式 从外部      更新时间:2023-10-16

我对c++编程比较陌生,并尝试编写一个程序来数值求解微分方程。我使用codeBlocks作为编译器,并在windows下工作。数值解算器已经很好用了。我的程序包含了一些很长的公式,这些公式是由mathematica创建并转换成php语言的。然后将公式存储在.txt文件中。我已经可以将公式作为字符串读取,但不能用它来计算,因为程序必须将公式解释为双类型数学,而不是字符串。这里的问题是,我的公式不仅包含数字,还包含作为变量的字母(它们的值是在程序中设置的)和其他数学符号。这就是为什么我认为我不能只使用"atof"(http://www.cplusplus.com/reference/cstdlib/atof/?kw=atof)或其他转换函数。(如果我在这一点上错了,我很乐意学习如何使用这个函数来解决这个问题!)

下面是我的小程序中的一些示例代码:

//Program to solve ODEs
#include <iostream>
#include <math.h>
#include <cmath>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <time.h> //to measure the time
#include <stdio.h>
#include <conio.h>
using namespace std;
int main(void)
{
    double k1=0;
    ifstream file("Formelvu1.txt");//file with the fromula
    string line;
    stringstream longform;
    while(getline(file, line)){ //read the formula and store them
            longform << line;   //store the string in "longform"
            cout << longform;
        }
            return 0;
for(double t=0; t<10; t++){
        k1 = (longform) * t; //simple operation with the formula
}
return 0;
}

这段代码不工作,因为长格式不是双…长格式是类似于:ab+pow(t,3)-sin(tb)/x的字符串。

我已经找到了几个与这个话题相关的问题,但没有一个问题对我来说足够容易理解,或者我想做的正确的事情:

如何在c++中转换字符串到双精度?

根据我的理解,这家伙正在尝试最接近我想要做的事情:

使用ScriptEngine从字符串中计算数学公式

但是我不完全理解代码。如果它对我的问题有用:这部分是做什么的?

try{
    return (Double)engine.eval(tmp);
}
    catch(Exception fexp)
    {
    }

我也听说过解析器,它可以解释表达式行muparser:http://muparser.beltoforion.de/mup_eval.html但我不知道这是否比我需要的更多……

在这个问题上,我感谢每一个回答/回应和帮助。谢谢你!

你必须仔细研究基本C/c++语言和标准库中包含的内容和不包含的内容。


但是,如果您从mathematica中得到一个c++兼容的表达式,那么您可以让c++编译器像

那样工作
double myfunc(double a, double b, double c, double t, double x) {
    return
    #include "Formelvu1.txt"
    ;
}