二分法中的输入方程,C ++

时间:2013-03-20 14:14:46

标签: c++ bisection

我有这段代码:

#include <iostream>
#include <cmath>
#include <stdlib.h>
using namespace std;
double f(double x);
double biseccion(double a, double b, double tolerancia, int maxiter);
int main()
{
    double a, b, raiz;
    double tolerancia=0.00000;
    int maxiter=25;
    cout << "Input begin of interval: ";
    cin >> a;
    cout << "Input end of interval: ";
    cin >> b;
    cout << "\n";
    cout << "  # de"<<"\n"<<"Iteration"<<"\t"<<"   A"<<"\t"<<"   B"<<"\t"<<"   C"<<"\t"<<"   f(c)"<<endl;
    raiz=biseccion(a,b,tolerancia,maxiter);
    cout << "\n";
    cout << "The root is: "<< raiz <<endl;
    return 0;
}

 double f(double x)
 {
        return x*x*x-x-2;
 }
 double biseccion(double a, double b, double tolerancia, int maxiter)
 {
        double c;
        int numiter=1;
        do
        {
            c=(a+b)/2;
            if(f(a)*f(c)<0)
            {
               b=c;
            }
            else
            {
               a=c;
            }
            cout<<"     "<<numiter<<"\t"<<"\t"<<a<<"\t"<<b<<"\t"<<c<<"\t"<<f(c)<<endl;
            numiter++;
         }
         while((abs(f(c))>tolerancia)&&(numiter<maxiter));
         return c;
}

不是在我的代码中写“x * x * x-x-2”,而是希望用户在请求间隔开始之前输入它。我怎么能这样做?

我尝试使用变量存储“x * x * x-x-2”,但都没有效果。

1 个答案:

答案 0 :(得分:6)

你需要解析输入,它可能不像你想的那么容易,但有一些库可以帮助你。

muparser.sourceforge.net/

code.google.com/p/expressionparser /

partow.net/programming/exprtk/index.html

这里也是c#的解决方案,也可能对你有所帮助。

Is there a string math evaluator in .NET?