我对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 但我不知道这是否比我需要的更多......
我感谢每一个答案/回复并帮助解决这个问题。 谢谢!
答案 0 :(得分:0)
您必须仔细研究基本C / C ++语言和标准库中包含的内容以及不包含的内容。
但是,如果从mathematica获得C ++兼容表达式,那么可以让C ++编译器按照
进行工作double myfunc(double a, double b, double c, double t, double x) {
return
#include "Formelvu1.txt"
;
}