Eulers improved method implementation in cpp with equation input


#include<bits/stdc++.h>
using namespace std;
///You can use equations like-----
/*
    dy/dx = 2x+3y+5;
    dy/dx = 6x+10;
    dy/dx = 5y-10;
    dy/dx = 2x+3y;
*/
double solve(string str, double x, double y)

{
    // for finding x
    bool xflag = false;
    int a;
    for(int i=0; i<str.size(); i++){
        // x has a value
        if(str[i]=='x' || str[i]=='X'){
            xflag = true;
            if(i==0){
                // for the equation x + 6y + 3
                a = 1;
                break;
            }
            else if(str[i-1]=='y' || str[i-1]=='Y'){
                // for the equation yx + 6
                if(i-2==0){
                    a = 1;
                    break;
                }
                else{
                    a = 0;
                    for(int j=i-2, k=0; j>=0; j--, k++){
                        if(str[j]>='0' && str[j]<='9'){
                            int t = str[j] - '0';
                            a += (t*pow(10, k));
                        }
                        else{
                            if(str[j]=='-'){
                                a *= -1;
                            }
                            break;
                        }
                    }

                }

            }

            else{
                a = 0;
                for(int j=i-1, k=0; j>=0; j--, k++){
                    if(str[j]>='0' && str[j]<='9'){
                        int t = str[j] - '0';
                        a += (t*pow(10, k));
                    }
                    else{
                        if(str[j]=='-'){
                            a *= -1;
                        }
                        break;
                    }
                }
            }
        }
    }

    bool yflag = false;
    int b;

    for(int i=0; i<str.size(); i++){
        // x has a value
        if(str[i]=='y' || str[i]=='Y'){
            yflag = true;
            if(i==0){
                // for the equation y + 6x + 3
                b = 1;
                break;
            }
            else if(str[i-1]=='X' || str[i-1]=='x'){
                // for the equation xy + 6
                if(i-2==0){
                    b = 1;
                    break;
                }
                else{
                    b = 0;
                    for(int j=i-2, k=0; j>=0; j--, k++){

                        if(str[j]>='0' && str[j]<='9'){

                            int t = str[j] - '0';

                            b += (t*pow(10, k));

                        }

                        else{

                            if(str[j]=='-'){

                                b *= -1;

                            }

                            break;

                        }

                    }

                }

            }

            else{

                b = 0;

                for(int j=i-1, k=0; j>=0; j--, k++){

                    if(str[j]>='0' && str[j]<='9'){

                        int t = str[j] - '0';

                        b += (t*pow(10, k));
                    }
                    else{
                        if(str[j]=='-'){
                            b *= -1;
                        }
                        break;
                    }
                }
            }
        }
    }

    if(!xflag){
        a = 0;
    }

    if(!yflag){

        b = 0;

    }
    int c = 0;

    for(int i=str.size()-1, k=0; i>=0; i--, k++){

        if(str[i]>='0' && str[i]<='9'){

            int t = str[i] - '0';

            c += (t*pow(10, k));
        }
        else{
            if(str[i]=='-'){
                c *= -1;
            }
            break;
        }
    }

    //cout << a << endl;
    //cout << b << endl;
    //cout << c << endl;

    double ans = (a*x)+(b*y)+c;
    return ans;
}

int main()
{
    double x0,y0,h;
    string equation;
    cout<<"Enter the equation : ";
    cin>>equation;
    cout<<"Enter the value of X0 : ";
    cin>>x0;
    cout<<"Enter the value of Y0 : ";
    cin>>y0;

    cout<<"Enter the value of h : ";
    cin>>h;

    int n;

    cout<<"Enter how many y you wants : ";
    cin>>n;

    cout<<"\nSerial----X----------Y-----------------------------------------------------\n";

    cout<<"Y(1)     "<<x0<<"       "<<y0<<"\n";
    cout<<"----------------------------------------------------------------------------\n";
    for(int i=0;i<n-1;i++){
        double x,y,y1,y2;
        x = x0+h;
        y1 = solve(equation,x0,y0);

        y2 = solve(equation,x0+h,y0+(h*solve(equation,x0,y0)));

        y = y0+h*((y1+y2)/2);

        cout<<"Y("<<i+2<<")"<<"   "<<x<<"       "<<y<<"\n";
        cout<<"---------------------------------------------------------------------------\n";

        x0 = x;
        y0 = y;

    }
    return 0;
}

/*

Input Example---

Enter the equation : 2x+3y+5
Enter the value of X0 : 1
Enter the value of Y0 : 1
Enter the value of h : .1
Enter how many y you wants : 10

Serial----X----------Y-----------------------------------------------------
Y(1)     1       1
----------------------------------------------------------------------------
Y(2)   1.1       2.16
---------------------------------------------------------------------------
Y(3)   1.2       3.7432
---------------------------------------------------------------------------
Y(4)   1.3       5.8956
---------------------------------------------------------------------------
Y(5)   1.4       8.81359
---------------------------------------------------------------------------
Y(6)   1.5       12.7613
---------------------------------------------------------------------------
Y(7)   1.6       18.0939
---------------------------------------------------------------------------
Y(8)   1.7       25.2893
---------------------------------------------------------------------------
Y(9)   1.8       34.9901
---------------------------------------------------------------------------
Y(10)   1.9       48.0607
---------------------------------------------------------------------------
*/

No comments:

Post a Comment