将字符串math-formula从外部输入文件读入cpp为double

时间:2015-09-03 10:18:59

标签: c++ string math formula

我对c ++编码比较陌生,并尝试用数字编写程序来解决微分方程。我使用codeBlocks作为编译器,并在Windows下工作。数值解算器已经很好用了。 我的程序包含一些非常长的公式,这些公式由mathematica创建并转换为cpp语言。然后公式存储在.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;
}

此代码不起作用,因为longform没有双重... longform是一个字符串,类似于:a b + pow(t,3)-sin(t b)/ x。

我已经找到了几个与此主题相关的问题,但这些问题对我来说都不容易理解或者我想做的事情:

How can I convert string to double in C++?

根据我的理解,这个人尝试离我想做的最近的事情:

Evaluate math formula from String using ScriptEngine

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

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

    }

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

我感谢每一个答案/回复并帮助解决这个问题。 谢谢!

1 个答案:

答案 0 :(得分:0)

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

但是,如果从mathematica获得C ++兼容表达式,那么可以让C ++编译器按照

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