2019年1月3日 星期四

C++ Program for Euler’s Method to solve an ODE(Ordinary Differential Equation)

C++ Program for Euler’s Method to solve an ODE(Ordinary Differential Equation)

源自於
https://www.bragitoff.com/2015/10/c-program-for-eulers-method-to-solve-an-odeordinary-differential-equation/


//Eulers Method to solve a differential equation
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
double df(double x, double y)            //function for defining dy/dx
{
    double a=x+y;                //dy/dx=x+y
    return a;
}
int main()
{
    int n;   
    double x0,y0,x,y,h;            //for initial values, width, etc.
    cout.precision(5);            //for precision
    cout.setf(ios::fixed);               
    cout<<"\nEnter the initial values of x and y respectively:\n";        //Initial values
    cin>>x0>>y0;                           
    cout<<"\nFor what value of x do you want to find the value of y\n";   
    cin>>x;
    cout<<"\nEnter the width of the sub-interval:\n";            //input width
    cin>>h;
    cout<<"x"<<setw(19)<<"y"<<setw(19)<<"dy/dx"<<setw(16)<<"y_new\n";
    cout<<"----------------------------------------------------------\n";
    while(fabs(x-x0)>0.0000001)        //I couldn't just write "while(x0<x)" as they both are floating point nos. It is dangerous to compare two floating point nos. as they are not the same in binary as they are in decimal. For instance, a computer cannot exactly represent 0.1 or 0.7 in binary just like decimal can't represent 1/3 exactly without recurring digits.
    {   
        y=y0+(h*df(x0,y0));            //calculate new y, which is y0+h*dy/dx   
        cout<<x0<<setw(16)<<y0<<setw(16)<<df(x0,y0)<<setw(16)<<y<<endl;
        y0=y;                    //pass this new y as y0 in the next iteration.
        x0=x0+h;                //calculate new x.
    }           
    cout<<x0<<setw(16)<<y<<endl;
    cout<<"The approximate value of y at x=0 is "<<y<<endl;        //print the solution.
    return 0;
}

For dy/dx=-2x-y
euler 2 output
For dy/dx=x+y
euler_output_1

沒有留言:

張貼留言

WOKWI LED + MQTT Node-Red SQLite

WOKWI LED + MQTT Node-Red SQLite const char *mqtt_broker = "broker.mqtt-dashboard.com" ; const char *topic1 = "alex9ufo/e...